地图之间经纬度转换靠谱吗

x33g5p2x  于2022-04-27 转载在 其他  
字(1.8k)|赞(0)|评价(0)|浏览(265)

一 问题背景

最近来了个需求,需要记录某个地址的百度经纬度和高德经纬度,之前的想法是只获取高德的经纬度,然后通过转换求出百度地图。经过多方查询资料,求得一份代码。

二 地图转换

package maptransfer;

/**
* @className: BMapTransQQMapUtils
* @description: 各地图经纬度转换
* 西安大兴医院
* 高德:108.911883 34.288239   https://lbs.amap.com/tools/picker
* 百度:108.91839 34.294063
* 高德转百度:108.90593189476142 34.281603866249206
* 从测试结果来看,转换不靠谱
* @date: 2022/4/26
* @author: cakin
*/
public class BMapTransQQMapUtils {
    // 将百度地图经纬度转换为腾讯/高德地图经纬度,用于大屏
    public static LatLng bMapTransQQMap(LatLng latLng) {
        double lat = latLng.latitude;
        double lng = latLng.longitude;
        double x_pi = 3.14159265358979324 * 3000.0 / 180.0;
        double x = lng - 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);
        double lngs = z * Math.cos(theta);
        double lats = z * Math.sin(theta);
        LatLng latLng1 = new LatLng(lats, lngs);
        return latLng1;
    }

    // 将腾讯/高德地图经纬度转换为百度地图经纬度
    public static LatLng qqMapTransBMap(LatLng latLng) {
        double lat = latLng.latitude;
        double lng = latLng.longitude;
        double x_pi = 3.14159265358979324 * 3000.0 / 180.0;
        double x = lng;
        double 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);
        double lngs = z * Math.cos(theta) + 0.0065;
        double lats = z * Math.sin(theta) + 0.006;
        LatLng latLng1 = new LatLng(lats, lngs);
        return latLng1;
    }

    public static void main(String[] args) {
        LatLng latLng1 = new LatLng(108.911883, 34.288239); // 高德经纬度
        LatLng latLng = BMapTransQQMapUtils.bMapTransQQMap(latLng1);// 百度的经纬度转化为高德
        System.out.println("经度:" + latLng.latitude);
        System.out.println("纬度:" + latLng.longitude);
    }
}

class LatLng {
    public double latitude;
    public double longitude;

    public LatLng(double latitude, double longitude) {
        this.latitude = latitude;
        this.longitude = longitude;
    }
}

三 测试结果

经度:108.90593189476142

纬度:34.281603866249206

四 分析

用 西安大兴医院 进行查询。

1 高德地图

查询网址:高德地图API 

查询结果:108.911883,34.288239

2 百度地图

查询网址:拾取坐标系统

查询结果:108.91839,34.294063

3 分析

测试结果和实际存在误差,转换后的经纬度不准,如果将不准的经纬度用于百度,查出的各类信息也不准,所以靠谱的做法还是用谁的经纬度,就用谁的接口,不要想着转换图方便。

相关文章