?? vhtransform.java
字號:
// **********************************************************************// // <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 + -