JWDUtil.java
6.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
/**
* JWDUtil.java
* com.bsth.web.service
* JwdChange
*/
package com.bsth.util;
import java.util.HashMap;
import java.util.Map;
import com.bsth.util.CoordinateConverter.Location;
/**
* @author caiwangjue
* @date 2011-10-13 上午09:53:40
* 经纬度和城建坐标互转
*/
public class JWDUtil {
/**
* 经纬度坐标转换成上海城建坐标
* @param fLon 经度
* @param fLat 纬度
* @return 城建坐标Map
*/
@SuppressWarnings("rawtypes")
public static Map ConvertJWToSH(double fLon, double fLat)
{
double jd = fLon;
double wd = fLat;
Map map = ConvertJWDToBeijing(jd, wd);
//Map rmap = ConvertBeijingToShanghai((Double)map.get("x"), (Double)map.get("y"));
return map;
}
/**
* 上海城建坐标转换为经纬度
* @param fXX X坐标
* @param fYY Y坐标
* @return 经纬度坐标Map
*/
@SuppressWarnings("rawtypes")
public static Map ConvertSHToJW(double fXX, double fYY)
{
double x = fXX;
double y = fYY;
Map map = ConvertShanghaiToBeijing(x, y);
Map rmap = ConvertBeijingToJWD((Double)map.get("x"), (Double)map.get("y"));
return rmap;
}
/**
* 经纬度坐标转换成北京城建坐标
* @param jd 经度
* @param wd 纬度
* @return 城建坐标Map
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
private static Map ConvertJWDToBeijing(double jd, double wd)
{
Map map = new HashMap();
double num = 121.4671606;
double num2 = jd - num;
double num3 = num2 / 57.2957795130823;
double a = (wd / 180.0) * Math.PI;
double num5 = Math.tan(a);
double num6 = Math.cos(a);
double num7 = (0.006738525415 * num6) * num6;
double num8 = num5 * num5;
double d = 1.0 + num7;
double num10 = 6399698.9018 / Math.sqrt(d);
double num11 = ((num3 * num3) * num6) * num6;
double num12 = num5 * num6;
double num13 = num12 * num12;
double num14 = 32005.78006 + (num13 * (133.92133 + (num13 * 0.7031)));
double num15 = (((6367558.49686 * wd) / 57.29577951308) - ((num12 * num6) * num14)) + ((((((((((((((num8 - 58.0) * num8) + 61.0) * num11) / 30.0) + (((4.0 * num7) + 5.0) * d)) - num8) * num11) / 12.0) + 1.0) * num10) * num5) * num11) / 2.0);
double num16 = ((((((((((((num8 - 18.0) * num8) - (((58.0 * num8) - 14.0) * num7)) + 5.0) * num11) / 20.0) + d) - num8) * num11) / 6.0) + 1.0) * num10) * (num3 * num6);
map.put("x", (num15 + -3457140.589));
map.put("y", num16);
return map;
}
/**
* 上海城建坐标转换为北京城建坐标
* @param x X坐标
* @param y Y坐标
* @return 城建坐标Map
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
private static Map ConvertShanghaiToBeijing(double x, double y)
{
Map map = new HashMap();
double num = x;
x = y;
y = num;
double num2 = 3458144.04;
double num3 = -146121.96;
double num4 = 1.000140682;
double num5 = 0.013930556;
double num6 = (num2 + (num4 * x)) - (num5 * y);
double num7 = (num3 + (num4 * y)) + (num5 * x);
map.put("x", num6);
map.put("y", (num7 + 21000000.0) + 500000.0);
return map;
}
/**
* 北京城建坐标转换为上海城建坐标
* @param x X坐标
* @param y Y坐标
* @return 城建坐标Map
*/
@SuppressWarnings({ "rawtypes", "unused", "unchecked" })
private static Map ConvertBeijingToShanghai(double x, double y)
{
Map map = new HashMap();
double num = 3458144.04;
double num2 = -146121.96;
double num3 = 1.000140682;
double num4 = 0.013930556;
y -= 21500000.0;
double num5 = ((num3 * (x - num)) + (num4 * (y - num2))) / (Math.pow(num3, 2.0) + Math.pow(num4, 2.0));
double num6 = ((num3 * (y - num2)) - (num4 * (x - num))) / (Math.pow(num3, 2.0) + Math.pow(num4, 2.0));
map.put("x", num6);
map.put("y", num5);
return map;
}
/**
* 北京城建坐标转换为经纬度
* @param x X坐标
* @param y Y坐标
* @return 经纬度坐标Map
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
private static Map ConvertBeijingToJWD(double x, double y)
{
Map map = new HashMap();
double num = 123.0;
y -= 21500000.0;
double num2 = (x / 1000000.0) - 3.0;
double num3 = (((((27.11115372595 + (9.02468257083 * num2)) - (0.00579740442 * Math.pow(num2, 2.0))) - (0.00043532572 * Math.pow(num2, 3.0))) + (4.857285E-05 * Math.pow(num2, 4.0))) + (2.15727E-06 * Math.pow(num2, 5.0))) - (1.9288E-07 * Math.pow(num2, 6.0));
double num4 = Math.tan((num3 * Math.PI) / 180.0);
double num5 = 0.0067385254147 * Math.pow(Math.cos((num3 * Math.PI) / 180.0), 2.0);
double num6 = (y * Math.sqrt(1.0 + num5)) / 6399698.90178271;
double num7 = num3 - ((((1.0 + num5) * num4) * (((90.0 * Math.pow(num6, 2.0)) - ((7.5 * ((5.0 + (3.0 * Math.pow(num4, 2.0))) -
((9.0 * num5) * Math.pow(num5, 2.0)))) * Math.pow(num6, 4.0))) + ((0.25 * ((61.0 + (90.0 * Math.pow(num5, 2.0)))
+ (45.0 * Math.pow(num4, 4.0)))) * Math.pow(num6, 6.0)))) / Math.PI);
double num8 = (((180.0 * num6) - ((30.0 * ((1.0 + (2.0 * Math.pow(num4, 2.0))) + num5)) * Math.pow(num6, 3.0))) +
((1.5 * ((5.0 + (28.0 * Math.pow(num4, 2.0))) + (24.0 * Math.pow(num4, 4.0)))) * Math.pow(num6, 5.0))) / (Math.PI * Math.cos((num3 * Math.PI) / 180.0));
double num9 = num + num8;
map.put("x", num9);
map.put("y", num7);
return map;
}
@SuppressWarnings({ "rawtypes", "unused" })
private static Map ConvertJWDToSH(double x, double y)
{
Map map = new HashMap();
double num = 123.0;
return map;
}
public static void main(String[] args)
{
//2447.667013 351.858477
Map map = JWDUtil.ConvertJWToSH(121.56320853169203, 31.264449981962045);
/*System.out.println(map.get("x")+"####"+map.get("y"));*/
Map map_2 = JWDUtil.ConvertSHToJW(8733.12663,103.65674);
System.out.println(map_2.get("x")+"####"+map_2.get("y"));
Location location = CoordinateConverter.LocationMake(Float.parseFloat(map_2.get("x").toString()), Float.parseFloat(map_2.get("y").toString()));
location = CoordinateConverter.bd_encrypt(CoordinateConverter.transformFromWGSToGCJ(location));
System.out.println(location.getLng()+","+location.getLat());
}
}