Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

DZone's Guide to

# Calculate Latitude And Longitude From Rate Center V&H In Java

·
Free Resource

Comment (0)

Save
{{ articles[0].views | formatCount}} Views
```ZIPCodeWorld.com provides this function to calculate the latitude and longitude coordinates from Vertical and Horizontal (V&H) coordinates in Java. V&H's are used to identify locations and hence relative distances between network elements and between rate centers listed in AreaCodeWorld(TM) North American Area Code Database Subscription which includes NPA (area code), NXX (exchange), country, state, county, latitude, longitude, etc.

```
package util.database;
import java.lang.Math;

public class ZIPCodeWorld {
/* constants contributed by vh2ll.c */
public static void main(String args[]){
/* VH2LatLong(500,500); */
}

static void VH2LatLong(double v,double  h)
{

double M_PI=3.14159265358979323846;
double TRANSV = 6363.235;
double TRANSH = 2250.7;

double ROTC = 0.23179040;
double ROTS = 0.97276575;

double EX = 0.40426992;
double EY =0.68210848;
double EZ =0.60933887;

double WX = 0.65517646;
double WY = 0.37733790;
double WZ = 0.65449210;

double PX =-0.555977821730048699;
double PY =-0.345728488161089920;
double PZ = 0.755883902605524030;

double GX = 0.216507961908834992;
double GY = -0.134633014879368199;

double A = 0.151646645621077297;

double Q = -0.294355056616412800;
double Q2 = 0.0866448993556515751;

int i=0, latdeg=0, latmin=0, londeg=0, lonmin=0, latsec=0, lonsec=0;
double t1=0.0, t2=0.0, vhat=0.0, hhat=0.0, fx=0.0, fy=0.0;
double e=0.0, w=0.0;
double b=0.0, c=0.0, disc=0.0, z=0.0, x=0.0, y=0.0, delta=0.0, lat=0.0, lat2=0.0, lon=0.0;
double earthlat=0.0, earthlon=0.0;
final double bi[] = {
1.00567724920722457,
-0.00344230425560210245,
0.000713971534527667990,
-0.0000777240053499279217,
0.00000673180367053244284,
-0.000000742595338885741395,
0.0000000905058919926194134
};

t1 = (v - TRANSV) / RADIUS;
t2 = (h - TRANSH) / RADIUS;
vhat = ROTC*t2 - ROTS*t1;
hhat = ROTS*t2 + ROTC*t1;
e = Math.cos(Math.sqrt(vhat*vhat + hhat*hhat));
w = Math.cos(Math.sqrt(vhat*vhat + (hhat-0.4)*(hhat-0.4)));
fx = EY*w - WY*e;
fy = EX*w - WX*e;
b = fx*GX + fy*GY;
c = fx*fx + fy*fy - Q2;
disc = b*b - A*c;
if (disc==0.0) {
z = b/A;
x = (GX*z - fx)/Q;
y = (fy - GY*z)/Q;
} else {
delta = Math.sqrt(disc);
z = (b + delta)/A;
x = (GX*z - fx)/Q;
y = (fy - GY*z)/Q;
if (vhat * (PX*x + PY*y + PZ*z) < 0) {
z = (b - delta)/A;
x = (GX*z - fx)/Q;
y = (fy - GY*z)/Q;
}
}
lat = Math.asin(z);

lat2 = lat*lat;
earthlat = 0.0;
for (i=6; i>=0; i--) {
earthlat = (earthlat + bi[i]) * ((i>0)? lat2: lat);
}
earthlat *= 180/M_PI;
lon = Math.atan2(x, y) * 180/M_PI;
earthlon = lon + 52;
System.out.println( earthlat + "," + earthlon);
}
}
``````
Topics:

Comment (0)

Save
{{ articles[0].views | formatCount}} Views

Opinions expressed by DZone contributors are their own.

SEE AN EXAMPLE