需求来源
在小程序,或者在软件开发中会有这样的需求,需要请求某个地图的接口,或者两个的接口都需要调用,但是两个地图所展示的同一个地方的经纬度会有所差异,这个时候就需要进行经纬度的转换了。
经纬度的提取
腾讯地图:百度找到腾讯地图-->左上角的地图API-->开发文档-->工具-->坐标拾取器
百度地图:百度找到百度地图-->最下面有一个地图开放平台-->开发文档-->开发者工具-->坐标拾取器
代码(直接写的静态方法,可以直接调用)
详细参考里面的参数说明:
public class LongitudeAndLatitude {
/**
* 坐标转换,腾讯地图转换成百度地图坐标
* @param lat1 腾讯纬度
* @param lon1 腾讯经度
* @return 返回结果:经度,纬度
*/
public static String map_tx2bd(String lat1, String lon1) {
double lat=Double.parseDouble(lat1) ;
double lon=Double.parseDouble(lon1) ;
double bd_lat;
double bd_lon;
double x_pi = 3.14159265358979324;
double x = lon, y = lat;
double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
bd_lon = z * Math.cos(theta) + 0.0065;
bd_lat = z * Math.sin(theta) + 0.006;
System.out.println("bd_lat:" + bd_lat);
System.out.println("bd_lon:" + bd_lon);
return bd_lat + "," + bd_lon;
}
/**
*坐标转换:百度地图转为腾讯地图坐标
* @param lat1:百度纬度
* @param lon1:百度经度
* @return
*/
public static String BdMapToTxMap(String lat1, String lon1) {
double lat=Double.parseDouble(lat1) ;
double lon=Double.parseDouble(lon1) ;
double tx_lat;
double tx_lon;
double x_pi = (3.14159265358979324 * 3000.0) / 180.0;
double x = lon - 0.0065;
double y = lat - 0.006;
double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
tx_lon = z * Math.cos(theta);
tx_lat = z * Math.sin(theta);
System.out.println("tx_lat:" + tx_lat);
System.out.println("tx_lon:" + tx_lon);
return tx_lat + "," + tx_lon;
}
}
拓展
WGS-84:是国际标准,GPS坐标(Google Earth使用、或者GPS模块)
GCJ-02:中国坐标偏移标准,Google Map、高德、腾讯使用
BD-09:百度坐标偏移标准,Baidu Map使用,在GCJ-02的基础上又进行了一层加密,叫做墨卡托坐标
感谢观看,希望有帮助到各位观众大大~~~~~~~~