📄 coordinateconversion.java
字号:
return hemisphere;
}
public double[] convertUTMToLatLong(String UTM)
{
double[] latlon = { 0.0, 0.0 };
String[] utm = UTM.split(" ");
zone = Integer.parseInt(utm[0]);
String latZone = utm[1];
easting = Double.parseDouble(utm[2]);
northing = Double.parseDouble(utm[3]);
String hemisphere = getHemisphere(latZone);
double latitude = 0.0;
double longitude = 0.0;
if (hemisphere.equals("S"))
{
northing = 10000000 - northing;
}
setVariables();
latitude = 180 * (phi1 - fact1 * (fact2 + fact3 + fact4)) / Math.PI;
if (zone > 0)
{
zoneCM = 6 * zone - 183.0;
}
else
{
zoneCM = 3.0;
}
longitude = zoneCM - _a3;
if (hemisphere.equals("S"))
{
latitude = -latitude;
}
latlon[0] = latitude;
latlon[1] = longitude;
return latlon;
}
protected void setVariables()
{
arc = northing / k0;
mu = arc
/ (a * (1 - POW(e, 2) / 4.0 - 3 * POW(e, 4) / 64.0 - 5 * POW(e, 6) / 256.0));
ei = (1 - POW((1 - e * e), (1 / 2.0)))
/ (1 + POW((1 - e * e), (1 / 2.0)));
ca = 3 * ei / 2 - 27 * POW(ei, 3) / 32.0;
cb = 21 * POW(ei, 2) / 16 - 55 * POW(ei, 4) / 32;
cc = 151 * POW(ei, 3) / 96;
cd = 1097 * POW(ei, 4) / 512;
phi1 = mu + ca * SIN(2 * mu) + cb * SIN(4 * mu) + cc * SIN(6 * mu) + cd
* SIN(8 * mu);
n0 = a / POW((1 - POW((e * SIN(phi1)), 2)), (1 / 2.0));
r0 = a * (1 - e * e) / POW((1 - POW((e * SIN(phi1)), 2)), (3 / 2.0));
fact1 = n0 * TAN(phi1) / r0;
_a1 = 500000 - easting;
dd0 = _a1 / (n0 * k0);
fact2 = dd0 * dd0 / 2;
t0 = POW(TAN(phi1), 2);
Q0 = e1sq * POW(COS(phi1), 2);
fact3 = (5 + 3 * t0 + 10 * Q0 - 4 * Q0 * Q0 - 9 * e1sq) * POW(dd0, 4)
/ 24;
fact4 = (61 + 90 * t0 + 298 * Q0 + 45 * t0 * t0 - 252 * e1sq - 3 * Q0
* Q0)
* POW(dd0, 6) / 720;
//
lof1 = _a1 / (n0 * k0);
lof2 = (1 + 2 * t0 + Q0) * POW(dd0, 3) / 6.0;
lof3 = (5 - 2 * Q0 + 28 * t0 - 3 * POW(Q0, 2) + 8 * e1sq + 24 * POW(t0, 2))
* POW(dd0, 5) / 120;
_a2 = (lof1 - lof2 + lof3) / COS(phi1);
_a3 = _a2 * 180 / Math.PI;
}
double arc;
double mu;
double ei;
double ca;
double cb;
double cc;
double cd;
double n0;
double r0;
double _a1;
double dd0;
double t0;
double Q0;
double lof1;
double lof2;
double lof3;
double _a2;
double phi1;
double fact1;
double fact2;
double fact3;
double fact4;
double zoneCM;
double _a3;
double b = 6356752.314;
double a = 6378137;
double e = 0.081819191;
double e1sq = 0.006739497;
double k0 = 0.9996;
}
private class Digraphs
{
private Map digraph1 = new Hashtable();
private Map digraph2 = new Hashtable();
private String[] digraph1Array = { "A", "B", "C", "D", "E", "F", "G", "H",
"J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X",
"Y", "Z" };
private String[] digraph2Array = { "V", "A", "B", "C", "D", "E", "F", "G",
"H", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "U", "V" };
public Digraphs()
{
digraph1.put(new Integer(1), "A");
digraph1.put(new Integer(2), "B");
digraph1.put(new Integer(3), "C");
digraph1.put(new Integer(4), "D");
digraph1.put(new Integer(5), "E");
digraph1.put(new Integer(6), "F");
digraph1.put(new Integer(7), "G");
digraph1.put(new Integer(8), "H");
digraph1.put(new Integer(9), "J");
digraph1.put(new Integer(10), "K");
digraph1.put(new Integer(11), "L");
digraph1.put(new Integer(12), "M");
digraph1.put(new Integer(13), "N");
digraph1.put(new Integer(14), "P");
digraph1.put(new Integer(15), "Q");
digraph1.put(new Integer(16), "R");
digraph1.put(new Integer(17), "S");
digraph1.put(new Integer(18), "T");
digraph1.put(new Integer(19), "U");
digraph1.put(new Integer(20), "V");
digraph1.put(new Integer(21), "W");
digraph1.put(new Integer(22), "X");
digraph1.put(new Integer(23), "Y");
digraph1.put(new Integer(24), "Z");
digraph2.put(new Integer(0), "V");
digraph2.put(new Integer(1), "A");
digraph2.put(new Integer(2), "B");
digraph2.put(new Integer(3), "C");
digraph2.put(new Integer(4), "D");
digraph2.put(new Integer(5), "E");
digraph2.put(new Integer(6), "F");
digraph2.put(new Integer(7), "G");
digraph2.put(new Integer(8), "H");
digraph2.put(new Integer(9), "J");
digraph2.put(new Integer(10), "K");
digraph2.put(new Integer(11), "L");
digraph2.put(new Integer(12), "M");
digraph2.put(new Integer(13), "N");
digraph2.put(new Integer(14), "P");
digraph2.put(new Integer(15), "Q");
digraph2.put(new Integer(16), "R");
digraph2.put(new Integer(17), "S");
digraph2.put(new Integer(18), "T");
digraph2.put(new Integer(19), "U");
digraph2.put(new Integer(20), "V");
}
public int getDigraph1Index(String letter)
{
for (int i = 0; i < digraph1Array.length; i++)
{
if (digraph1Array[i].equals(letter))
{
return i + 1;
}
}
return -1;
}
public int getDigraph2Index(String letter)
{
for (int i = 0; i < digraph2Array.length; i++)
{
if (digraph2Array[i].equals(letter))
{
return i;
}
}
return -1;
}
public String getDigraph1(int longZone, double easting)
{
int a1 = longZone;
double a2 = 8 * ((a1 - 1) % 3) + 1;
double a3 = easting;
double a4 = a2 + ((int) (a3 / 100000)) - 1;
return (String) digraph1.get(new Integer((int) Math.floor(a4)));
}
public String getDigraph2(int longZone, double northing)
{
int a1 = longZone;
double a2 = 1 + 5 * ((a1 - 1) % 2);
double a3 = northing;
double a4 = (a2 + ((int) (a3 / 100000)));
a4 = (a2 + ((int) (a3 / 100000.0))) % 20;
a4 = Math.floor(a4);
if (a4 < 0)
{
a4 = a4 + 19;
}
return (String) digraph2.get(new Integer((int) Math.floor(a4)));
}
}
private class LatZones
{
private char[] letters = { 'A', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K',
'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Z' };
private int[] degrees = { -90, -84, -72, -64, -56, -48, -40, -32, -24, -16,
-8, 0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 84 };
private char[] negLetters = { 'A', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K',
'L', 'M' };
private int[] negDegrees = { -90, -84, -72, -64, -56, -48, -40, -32, -24,
-16, -8 };
private char[] posLetters = { 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Z' };
private int[] posDegrees = { 0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 84 };
private int arrayLength = 22;
public LatZones()
{
}
public int getLatZoneDegree(String letter)
{
char ltr = letter.charAt(0);
for (int i = 0; i < arrayLength; i++)
{
if (letters[i] == ltr)
{
return degrees[i];
}
}
return -100;
}
public String getLatZone(double latitude)
{
int latIndex = -2;
int lat = (int) latitude;
if (lat >= 0)
{
int len = posLetters.length;
for (int i = 0; i < len; i++)
{
if (lat == posDegrees[i])
{
latIndex = i;
break;
}
if (lat > posDegrees[i])
{
continue;
}
else
{
latIndex = i - 1;
break;
}
}
}
else
{
int len = negLetters.length;
for (int i = 0; i < len; i++)
{
if (lat == negDegrees[i])
{
latIndex = i;
break;
}
if (lat < negDegrees[i])
{
latIndex = i - 1;
break;
}
else
{
continue;
}
}
}
if (latIndex == -1)
{
latIndex = 0;
}
if (lat >= 0)
{
if (latIndex == -2)
{
latIndex = posLetters.length - 1;
}
return String.valueOf(posLetters[latIndex]);
}
else
{
if (latIndex == -2)
{
latIndex = negLetters.length - 1;
}
return String.valueOf(negLetters[latIndex]);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -