⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vhtransform.java

📁 openmap java写的开源数字地图程序. 用applet实现,可以像google map 那样放大缩小地图.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
// **********************************************************************// // <copyright>// //  BBN Technologies//  10 Moulton Street//  Cambridge, MA 02138//  (617) 873-8000// //  Copyright (C) BBNT Solutions LLC. All rights reserved.// // </copyright>// **********************************************************************// // $Source: /cvs/distapps/openmap/src/openmap/com/bbn/openmap/util/VHTransform.java,v $// $RCSfile: VHTransform.java,v $// $Revision: 1.3.2.1 $// $Date: 2004/10/14 18:27:46 $// $Author: dietrick $// // **********************************************************************package com.bbn.openmap.util;/* Cathleen Lancaster - 6 Hutcheson *//** * The VH coordinate system is used by ATT to compute distance used in * determining phone call costs. * <P> *  * VH coordinates can be used to compute distance simply, see * distance(). * <P> *  * This code is based on C code provided by the authors mentioned * below, as well as Lisp code by Larry Denenberg of BBN. * <P> *  * I have ported this code to Java, unified the forward and inverse * transformations and added some comments. I've left basic code and * comments mostly intact. * <P> *  * The url's to the original emails are: * <P> *  * http://x11.dejanews.com/getdoc.xp?AN=177302113&CONTEXT=895858362.931528704&hitnum=1 * <BR> * http://x11.dejanews.com/getdoc.xp?AN=223540739&CONTEXT=895858362.931528704&hitnum=5 */public class VHTransform {    /* Polynomial constants */    public static final double K1 = .99435487;    public static final double K2 = .00336523;    public static final double K3 = -.00065596;    public static final double K4 = .00005606;    public static final double K5 = -.00000188;    /* PI in various forms */    public static final double M_PI_2 = Math.PI / 2.0;    /*     * spherical coordinates of eastern reference point EX^2 + EY^2 +     * EZ^2 = 1     */    public static final double EX = .40426992;    public static final double EY = .68210848;    public static final double EZ = .60933887;    /*     * spherical coordinates of western reference point WX^2 + WY^2 +     * WZ^2 = 1     */    public static final double WX = .65517646;    public static final double WY = .37733790;    public static final double WZ = .65449210;    /* spherical coordinates of V-H coordinate system */    /* PX^2 + PY^2 + PZ^2 = 1 */    public static final double PX = -0.555977821730048699;    public static final double PY = -0.345728488161089920;    public static final double PZ = 0.755883902605524030;    /* Rotation by 76 degrees */    public final static double rot = radians(76.597497064);    public final static double ROTC = Math.cos(rot);    public final static double ROTS = Math.sin(rot);    public static double radians(double degrees) {        return degrees * Math.PI / 180.0;    }    public static double degrees(double radians) {        return radians * 180.0 / Math.PI;    }    /* orthogonal translation values */    public static final double TRANSV = 6363.235;    public static final double TRANSH = 2250.700;    /** radius of earth in sqrt(0.1)-mile units, minus 0.3 percent */    public static final double RADIUS = 12481.103;    public static final double K9 = RADIUS * ROTC;    public static final double K10 = RADIUS * ROTS;    public VHTransform() {}    /** Return the V corresponding to the most recent toVH(). * */    public double getV() {        return this.resultV;    }    /** Return the H corresponding to the most recent toVH(). * */    public double getH() {        return this.resultH;    }    /**     * Return the latitude corresponding to the most recent     * toLatLon(). *     */    public double getLat() {        return this.resultLat;    }    /**     * Return the longitude corresponding to the most recent     * toLatLon(). *     */    public double getLon() {        return this.resultLon;    }    /** Return the distance in miles between 2 VH pairs. * */    public static double distance(double v1, double h1, double v2, double h2) {        double dv = v2 - v1;        double dh = h2 - h1;        // Was        //      return Math.sqrt(dv*dv + dh*dh)/10.0;        // Now, thanks to Andrew Canfield        return Math.sqrt((dv * dv + dh * dh) / 10.0);    }    private double resultV = 0.0;    private double resultH = 0.0;    private double resultLat = 0.0;    private double resultLon = 0.0;    /*     *      * Subject: Re: AT&T V-H Coordinates From: shoppa@alph02.triumf.ca     * (Tim Shoppa) Date: 1996/08/28 Message-ID:     * <telecom16.450.6@massis.lcs.mit.edu> Newsgroups:     * comp.dcom.telecom [More Headers] [Subscribe to     * comp.dcom.telecom]     *      * In article <telecom16.437.8@massis.lcs.mit.edu>, Drew Larsen     * <dlarsen@objectwave.com> wrote:     *  > Ok folks, scratch your heads and see if you can remember how     * to > translate a point on the earth measured in     * latitude/longitude to the > commonly used V&H system used in     * the telecom industry.     *      * Below is a past post by Stu Jeffery containing a program which     * does the conversion the other way. If anybody is willing to buy     * me a nice lunch (my standard fee for two dimensional function     * inversion), I'll modify it to go both ways :-)     *      * Tim Shoppa, TRIUMF theory group | Internet: shoppa@triumf.ca     * TRIUMF, Canada's National Meson Facility | Voice: 604-222-1047     * loc 6446 4004 WESBROOK MALL, UBC CAMPUS | FAX: 604-222-1074     * University of British Columbia, Vancouver, B.C., CANADA V6T 2A3     *      * Article: 54928 of comp.dcom.telecom Date: Tue, 29 Aug 1995     * 00:16:38 -0800 From: stu@shell.portal.com (Stu Jeffery)     * Subject: Re: V&H Questions Message-ID:     * <telecom15.362.11@eecs.nwu.edu> X-Telecom-Digest: Volume 15,     * Issue 362, Message 11 of 11     *      * Attached is a C program that will do what you want. I don't     * know anything more than what is here. I think it was posted in     * a news group, so use at your own legal risk. I have compiled it     * and it works fine.     *      * Going the other way is a bit more complicated. Probably the     * simplest way is by successive approximation.     *      * Good Luck.     *      * -----------------------------------------     */    /**     * Computes Bellcore/AT&T V & H (vertical and horizontal)     * coordinates from latitude and longitude. Used primarily by     * local exchange carriers (LEC's) to compute the V & H     * coordinates for wire centers.     * <P>     *      * This is an implementation of the Donald Elliptical Projection,     * a Two-Point Equidistant projection developed by Jay K. Donald     * of AT&T in 1956 to establish long-distance telephone rates.     * (ref: "V-H Coordinate Rediscovered", Eric K. Grimmelmann, Bell     * Labs Tech. Memo, 9/80. (References Jay Donald notes of Jan 17,     * 1957.)) Ashok Ingle of Bellcore also wrote an internal memo on     * the subject.     * <P>     *      * The projection is specially modified for the ellipsoid and is     * confined to the United States and southern Canada.     * <P>     *      * Derived from a program obtained from an anonymous author within     * Bellcore by way of the National Exchange Carrier Association.     * Cleaned up and improved a bit by Tom Libert (tom@comsol.com,     * libert@citi.umich.edu).     * <P>     *      * CASH REWARD for copies of the reference papers, or for an

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -