[java] 
​​ view plain​​
​​ cop

1. public class
2.
3. private double
4. private double
5.
6. public Gps(double wgLat, double
7. setWgLat(wgLat);
8. setWgLon(wgLon);
9. }
10.
11. public double
12. return
13. }
14.
15. public void setWgLat(double
16. this.wgLat = wgLat;
17. }
18.
19. public double
20. return
21. }
22.
23. public void setWgLon(double
24. this.wgLon = wgLon;
25. }
26.
27. @Override
28. public
29. return wgLat + ","
30. }
31. }




[java] 
​​ view plain​​
​​ copy​


1. /**
2. * 各地图API坐标系统比较与转换;
3. * WGS84坐标系:即地球坐标系,国际上通用的坐标系。设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系,
4. * 谷歌地图采用的是WGS84地理坐标系(中国范围除外);
5. * GCJ02坐标系:即火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。
6. * 谷歌中国地图和搜搜中国地图采用的是GCJ02地理坐标系; BD09坐标系:即百度坐标系,GCJ02坐标系经加密后的坐标系;
7. * 搜狗坐标系、图吧坐标系等,估计也是在GCJ02基础上加密而成的。 chenhua
8. */
9. public class
10.
11. public static final String BAIDU_LBS_TYPE = "bd09ll";
12.
13. public static double pi = 3.1415926535897932384626;
14. public static double a = 6378245.0;
15. public static double ee = 0.00669342162296594323;
16.
17. /**
18. * 84 to 火星坐标系 (GCJ-02) World Geodetic System ==> Mars Geodetic System
19. *
20. * @param lat
21. * @param lon
22. * @return
23. */
24. public static Gps gps84_To_Gcj02(double lat, double
25. if
26. return null;
27. }
28. double dLat = transformLat(lon - 105.0, lat - 35.0);
29. double dLon = transformLon(lon - 105.0, lat - 35.0);
30. double radLat = lat / 180.0
31. double
32. 1
33. double
34. 180.0) / ((a * (1
35. 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);
36. double
37. double
38. return new
39. }
40.
41. /**
42. * * 火星坐标系 (GCJ-02) to 84 * * @param lon * @param lat * @return
43. * */
44. public static Gps gcj_To_Gps84(double lat, double
45. Gps gps = transform(lat, lon);
46. double lontitude = lon * 2
47. double latitude = lat * 2
48. return new
49. }
50.
51. /**
52. * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法 将 GCJ-02 坐标转换成 BD-09 坐标
53. *
54. * @param gg_lat
55. * @param gg_lon
56. */
57. public static Gps gcj02_To_Bd09(double gg_lat, double
58. double
59. double z = Math.sqrt(x * x + y * y) + 0.00002
60. double theta = Math.atan2(y, x) + 0.000003
61. double bd_lon = z * Math.cos(theta) + 0.0065;
62. double bd_lat = z * Math.sin(theta) + 0.006;
63. return new
64. }
65.
66. /**
67. * * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法 * * 将 BD-09 坐标转换成GCJ-02 坐标 * * @param
68. * bd_lat * @param bd_lon * @return
69. */
70. public static Gps bd09_To_Gcj02(double bd_lat, double
71. double x = bd_lon - 0.0065, y = bd_lat - 0.006;
72. double z = Math.sqrt(x * x + y * y) - 0.00002
73. double theta = Math.atan2(y, x) - 0.000003
74. double
75. double
76. return new
77. }
78.
79. /**
80. * (BD-09)-->84
81. * @param bd_lat
82. * @param bd_lon
83. * @return
84. */
85. public static Gps bd09_To_Gps84(double bd_lat, double
86.
87. Gps gcj02 = PositionUtil.bd09_To_Gcj02(bd_lat, bd_lon);
88. Gps map84 = PositionUtil.gcj_To_Gps84(gcj02.getWgLat(),
89. gcj02.getWgLon());
90. return
91.
92. }
93.
94. public static boolean outOfChina(double lat, double
95. if (lon < 72.004 || lon > 137.8347)
96. return true;
97. if (lat < 0.8293 || lat > 55.8271)
98. return true;
99. return false;
100. }
101.
102. public static Gps transform(double lat, double
103. if
104. return new
105. }
106. double dLat = transformLat(lon - 105.0, lat - 35.0);
107. double dLon = transformLon(lon - 105.0, lat - 35.0);
108. double radLat = lat / 180.0
109. double
110. 1
111. double
112. 180.0) / ((a * (1
113. 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);
114. double
115. double
116. return new
117. }
118.
119. public static double transformLat(double x, double
120. double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1
121. 0.2
122. 20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
123. 20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0;
124. 160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0;
125. return
126. }
127.
128. public static double transformLon(double x, double
129. double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1
130. * Math.sqrt(Math.abs(x));
131. 20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
132. 20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0;
133. 150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0
134. 2.0 / 3.0;
135. return
136. }
137.
138. public static void
139.
140. // 北斗芯片获取的经纬度为WGS84地理坐标 31.426896,119.496145
141. new Gps(31.426896, 119.496145);
142. "gps :"
143. Gps gcj = gps84_To_Gcj02(gps.getWgLat(), gps.getWgLon());
144. "gcj :"
145. Gps star = gcj_To_Gps84(gcj.getWgLat(), gcj.getWgLon());
146. "star:"
147. Gps bd = gcj02_To_Bd09(gcj.getWgLat(), gcj.getWgLon());
148. "bd :"
149. Gps gcj2 = bd09_To_Gcj02(bd.getWgLat(), bd.getWgLon());
150. "gcj :"
151. }
152. }





[java] 
​​ view plain​​
​​ copy​


1. public class
2.
3. private double
4. private double
5.
6. public Gps(double wgLat, double
7. setWgLat(wgLat);
8. setWgLon(wgLon);
9. }
10.
11. public double
12. return
13. }
14.
15. public void setWgLat(double
16. this.wgLat = wgLat;
17. }
18.
19. public double
20. return
21. }
22.
23. public void setWgLon(double
24. this.wgLon = wgLon;
25. }
26.
27. @Override
28. public
29. return wgLat + ","
30. }
31. }



[java] 
​​ view plain​​
​​ cop​


1. /**
2. * 各地图API坐标系统比较与转换;
3. * WGS84坐标系:即地球坐标系,国际上通用的坐标系。设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系,
4. * 谷歌地图采用的是WGS84地理坐标系(中国范围除外);
5. * GCJ02坐标系:即火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。
6. * 谷歌中国地图和搜搜中国地图采用的是GCJ02地理坐标系; BD09坐标系:即百度坐标系,GCJ02坐标系经加密后的坐标系;
7. * 搜狗坐标系、图吧坐标系等,估计也是在GCJ02基础上加密而成的。 chenhua
8. */
9. public class
10.
11. public static final String BAIDU_LBS_TYPE = "bd09ll";
12.
13. public static double pi = 3.1415926535897932384626;
14. public static double a = 6378245.0;
15. public static double ee = 0.00669342162296594323;
16.
17. /**
18. * 84 to 火星坐标系 (GCJ-02) World Geodetic System ==> Mars Geodetic System
19. *
20. * @param lat
21. * @param lon
22. * @return
23. */
24. public static Gps gps84_To_Gcj02(double lat, double
25. if
26. return null;
27. }
28. double dLat = transformLat(lon - 105.0, lat - 35.0);
29. double dLon = transformLon(lon - 105.0, lat - 35.0);
30. double radLat = lat / 180.0
31. double
32. 1
33. double
34. 180.0) / ((a * (1
35. 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);
36. double
37. double
38. return new
39. }
40.
41. /**
42. * * 火星坐标系 (GCJ-02) to 84 * * @param lon * @param lat * @return
43. * */
44. public static Gps gcj_To_Gps84(double lat, double
45. Gps gps = transform(lat, lon);
46. double lontitude = lon * 2
47. double latitude = lat * 2
48. return new
49. }
50.
51. /**
52. * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法 将 GCJ-02 坐标转换成 BD-09 坐标
53. *
54. * @param gg_lat
55. * @param gg_lon
56. */
57. public static Gps gcj02_To_Bd09(double gg_lat, double
58. double
59. double z = Math.sqrt(x * x + y * y) + 0.00002
60. double theta = Math.atan2(y, x) + 0.000003
61. double bd_lon = z * Math.cos(theta) + 0.0065;
62. double bd_lat = z * Math.sin(theta) + 0.006;
63. return new
64. }
65.
66. /**
67. * * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法 * * 将 BD-09 坐标转换成GCJ-02 坐标 * * @param
68. * bd_lat * @param bd_lon * @return
69. */
70. public static Gps bd09_To_Gcj02(double bd_lat, double
71. double x = bd_lon - 0.0065, y = bd_lat - 0.006;
72. double z = Math.sqrt(x * x + y * y) - 0.00002
73. double theta = Math.atan2(y, x) - 0.000003
74. double
75. double
76. return new
77. }
78.
79. /**
80. * (BD-09)-->84
81. * @param bd_lat
82. * @param bd_lon
83. * @return
84. */
85. public static Gps bd09_To_Gps84(double bd_lat, double
86.
87. Gps gcj02 = PositionUtil.bd09_To_Gcj02(bd_lat, bd_lon);
88. Gps map84 = PositionUtil.gcj_To_Gps84(gcj02.getWgLat(),
89. gcj02.getWgLon());
90. return
91.
92. }
93.
94. public static boolean outOfChina(double lat, double
95. if (lon < 72.004 || lon > 137.8347)
96. return true;
97. if (lat < 0.8293 || lat > 55.8271)
98. return true;
99. return false;
100. }
101.
102. public static Gps transform(double lat, double
103. if
104. return new
105. }
106. double dLat = transformLat(lon - 105.0, lat - 35.0);
107. double dLon = transformLon(lon - 105.0, lat - 35.0);
108. double radLat = lat / 180.0
109. double
110. 1
111. double
112. 180.0) / ((a * (1
113. 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);
114. double
115. double
116. return new
117. }
118.
119. public static double transformLat(double x, double
120. double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1
121. 0.2
122. 20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
123. 20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0;
124. 160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0;
125. return
126. }
127.
128. public static double transformLon(double x, double
129. double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1
130. * Math.sqrt(Math.abs(x));
131. 20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
132. 20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0;
133. 150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0
134. 2.0 / 3.0;
135. return
136. }
137.
138. public static void
139.
140. // 北斗芯片获取的经纬度为WGS84地理坐标 31.426896,119.496145
141. new Gps(31.426896, 119.496145);
142. "gps :"
143. Gps gcj = gps84_To_Gcj02(gps.getWgLat(), gps.getWgLon());
144. "gcj :"
145. Gps star = gcj_To_Gps84(gcj.getWgLat(), gcj.getWgLon());
146. "star:"
147. Gps bd = gcj02_To_Bd09(gcj.getWgLat(), gcj.getWgLon());
148. "bd :"
149. Gps gcj2 = bd09_To_Gcj02(bd.getWgLat(), bd.getWgLon());
150. "gcj :"
151. }
152. }