| | |
| | | * gcj02 02年提出,火星坐标,经过加密算法。大多数非百度中国地图厂商基本都是使用的火星坐标:高德,腾讯,谷歌中国cn |
| | | * bd09 09年提出,百度坐标,经过火星坐标再次加密,相当于对大地坐标经过了二次加密。百度自己使用 |
| | | * 一般的算法,没有直接bd09->wgs84或者wgs84->bd09,都需要借助wgs84->gcj02或者gcj02->wgs84算法推导。 |
| | | |
| | | * <p> |
| | | * 备注:坐标系转换 |
| | | */ |
| | | public class MapUtils { |
| | |
| | | * @return |
| | | */ |
| | | public static boolean outOfChina(double lat, double lon) { |
| | | if (lon < 72.004 || lon > 137.8347) |
| | | if (lon < 72.004 || lon > 137.8347) { |
| | | return true; |
| | | if (lat < 0.8293 || lat > 55.8271) |
| | | } |
| | | if (lat < 0.8293 || lat > 55.8271) { |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | |
| | | * @param lon |
| | | * @return |
| | | */ |
| | | public static Gps gcj02_To_Wgs84_exact(double lat,double lon) { |
| | | public static Gps gcj02_To_Wgs84_exact(double lat, double lon) { |
| | | if (outOfChina(lat, lon)) { |
| | | return gcj02_To_Wgs84(lat, lon); |
| | | } |
| | |
| | | if ((Math.abs(dLat) < threshold) && (Math.abs(dLon) < threshold)) { |
| | | break; |
| | | } |
| | | if (dLat > 0) { pLat = wgsLat; } else { mLat = wgsLat;} |
| | | if (dLon > 0) { pLon = wgsLon; } else { mLon = wgsLon;} |
| | | if (dLat > 0) { |
| | | pLat = wgsLat; |
| | | } else { |
| | | mLat = wgsLat; |
| | | } |
| | | if (dLon > 0) { |
| | | pLon = wgsLon; |
| | | } else { |
| | | mLon = wgsLon; |
| | | } |
| | | |
| | | if (++i > 1000) break; |
| | | } |
| | |
| | | |
| | | } |
| | | |
| | | class Gps{ |
| | | double lat,lon; |
| | | class Gps { |
| | | double lat, lon; |
| | | |
| | | public Gps() { |
| | | } |
| | | public Gps(double lat,double lon){ |
| | | |
| | | public Gps(double lat, double lon) { |
| | | this.lat = lat; |
| | | this.lon = lon; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "{"+lat+","+lon+"}"; |
| | | return "{" + lat + "," + lon + "}"; |
| | | } |
| | | |
| | | } |