SpringBoot 代码示例
引入pom
<dependency>
<groupId>org.locationtech.proj4j</groupId>
<artifactId>proj4j</artifactId>
<version>1.1.5</version>
</dependency>
相关代码
/**
* 2000国家大地坐标系(CGCS2000)->WGS84
* @param longitudeX CGCS2000经度值
* @param latitudeY CGCS2000纬度值
* @return x,y WGS84经度值,WGS84纬度值
*/
public static String CGCS2000ToWGS84(double longitudeX, double latitudeY) {
String degree3No = String.valueOf(BigDecimal.valueOf(longitudeX)).substring(0, 2);
CRSFactory crsFactory = new CRSFactory();
CoordinateReferenceSystem WGS84 = crsFactory.createFromName("epsg:4326");
// 根据精度范围换算使用坐标标准
String degree3EPSG = "epsg:4528";
switch (degree3No) {
case "25":
degree3EPSG = "epsg:4513";
break;
case "26":
degree3EPSG = "epsg:4514";
break;
case "27":
degree3EPSG = "epsg:4515";
break;
case "28":
degree3EPSG = "epsg:4516";
break;
case "29":
degree3EPSG = "epsg:4517";
break;
case "30":
degree3EPSG = "epsg:4518";
break;
case "31":
degree3EPSG = "epsg:4519";
break;
case "32":
degree3EPSG = "epsg:4520";
break;
case "33":
degree3EPSG = "epsg:4521";
break;
case "34":
degree3EPSG = "epsg:4522";
break;
case "35":
degree3EPSG = "epsg:4523";
break;
case "36":
degree3EPSG = "epsg:4524";
break;
case "37":
degree3EPSG = "epsg:4525";
break;
case "38":
degree3EPSG = "epsg:4526";
break;
case "39":
degree3EPSG = "epsg:4527";
break;
case "40":
degree3EPSG = "epsg:4528";
break;
case "41":
degree3EPSG = "epsg:4529";
break;
case "42":
degree3EPSG = "epsg:4530";
break;
case "43":
degree3EPSG = "epsg:4531";
break;
case "44":
degree3EPSG = "epsg:4532";
break;
case "45":
degree3EPSG = "epsg:4533";
break;
}
CoordinateReferenceSystem CGCS2000 = crsFactory.createFromName(degree3EPSG);
CoordinateTransformFactory ctFactory = new CoordinateTransformFactory();
// 转换区别实际就这一行创建转换器的代码,前后顺序变了
CoordinateTransform cgcs2000ToWGS84 = ctFactory.createTransform(CGCS2000, WGS84);
ProjCoordinate result = new ProjCoordinate();
cgcs2000ToWGS84.transform(new ProjCoordinate(longitudeX, latitudeY), result);
return BigDecimal.valueOf(result.x) + "," + BigDecimal.valueOf(result.y);
}
/**
* 传入 CGCS2000 经纬度返回高德坐标的经纬度
* @param lat
* @param lng
* @return
*/
public static HashMap<Object, Object> getDGlatLnt(String lat,String lng){
String s1 = CGCS2000ToWGS84(Double.valueOf(lat), Double.valueOf(lng));
String[] split1 = s1.split(",");
HashMap<Object, Object> map = new HashMap<>();
//高德的应用key
String key="";
//调用高德 坐标转换
String s = HttpUtils.sendGet("https://restapi.amap.com/v3/assistant/coordinate/convert",
"locations="+split1[0]+","+split1[1]+"&key="+key+"&coordsys=gps");
JSONObject object = JSONObject.parseObject(s);
if(object.get("status").equals("1")){
String[] split = object.get("locations").toString().split(",");
map.put("lat",split[0]);
map.put("lng",split[1]);
}else {
System.out.println("出错了"+s);
}
return map;
}