高德地图与GPS经纬度转换

xiaoxiao2021-02-28  129

public class aMapToWGS { private final static double a=6378245.0; private final static double pi=3.14159265358979324; private final static double ee=0.00669342162296594626; //gcj-02 to wgs-84 public static LatLonPoint toWGS84Point(double latitude,double longitude){ LatLonPoint dev=calDev(latitude, longitude); double retLat = latitude-dev.getLatitude(); double retLon=longitude-dev.getLongitude(); dev=calDev(retLat, retLon); retLat=latitude-dev.getLatitude(); retLon=longitude-dev.getLongitude(); return new LatLonPoint(retLat, retLon); } //wsg84 to gcj02 public static LatLonPoint toGCJ02Piont(double latitude,double longitude){ LatLonPoint dev=calDev(latitude, longitude); double retLat = latitude-dev.getLatitude(); double retLon=longitude-dev.getLongitude(); return new LatLonPoint(retLat, retLon); } private static LatLonPoint calDev(double wgLat,double wgLon){ if(isOutofChina(wgLat,wgLon)){ return new LatLonPoint(0,0); } double dLat=calLat(wgLon-105.0,wgLat-35.0); double dLon=calLon(wgLon-105.0, wgLat-35.0); double radLat=wgLat/180.0*pi; double magic=Math.sin(radLat); magic=1-ee*magic*magic; double sqrtMagic=Math.sqrt(magic); dLat=(dLat*180.0)/((a*(1-ee))/(magic*sqrtMagic)*pi); dLon=(dLon*180.0)/(a/sqrtMagic*Math.cos(radLat)*pi); return new LatLonPoint(dLat,dLon); } private static double calLat(double x, double y) { double ret=-100.0+2.0*x+3.0*y+0.2*y*y+0.1*x*y+0.2*Math.sqrt(Math.abs(x)); ret +=(20.0*Math.sin(6.0*x*pi)+20.0*Math.sin(2.0*x*pi))*2.0/3.0; ret +=(20.0*Math.sin(y*pi)+40.0*Math.sin(y/3.0*pi))*2.0/3.0; ret +=(160.0*Math.sin(y/12.0*pi)+320*Math.sin(y*pi/30.0))*2.0/3.0; return ret; } private static double calLon(double x,double y){ double ret=300.0+x+2.0*y+0.1*x*x+0.1*x*y+0.1*Math.sqrt(Math.abs(x)); ret +=(20.0*Math.sin(6.0*x*pi)+20.0*Math.sin(2.0*x*pi))*2.0/3.0; ret +=(20.0*Math.sin(x*pi)+40.0*Math.sin(x/3.0*pi))*2.0/3.0; ret +=(150.0*Math.sin(x/12.0*pi)+300.0*Math.sin(x/30.0*pi))*2.0/3.0;; return ret; } private static boolean isOutofChina(double lat, double lon) { if(lon<72.004 || lon>137.8347){ return true; } if(lat<0.8293 || lat>55.8271){ return true; } return false; } }
转载请注明原文地址: https://www.6miu.com/read-47284.html

最新回复(0)