收藏
回答

小程序地图定位问题?

接口返回的经纬度和百度地图官网对于同一个位置返回的经纬度是一样的,但是展示在页面如果不转换成腾讯的经纬度他就不对。可是在图里这个位置配置的是百度啊为什么转腾讯经纬度才行?还有因为转了腾讯经纬度打开百度地图app位置就不对了(也不是所有人都不对,有的人位置非常准确有的人位置偏差很大)

回答关注问题邀请回答
收藏

2 个回答

  • 柴米油盐,人间烟火
    柴米油盐,人间烟火
    2023-05-09

    可能是因为不同的地图服务商采用的经纬度标准不同,导致在展示位置时需要进行坐标转换。例如,百度地图采用的是BD-09坐标系,而腾讯地图采用的是GCJ-02坐标系。在使用不同的地图服务时,需要根据服务商所采用的坐标系进行相应的转换,以确保位置的准确性。至于打开百度地图app位置不对的问题,可能是由于不同用户所使用的设备或网络环境不同,导致获取位置信息的精确度有所差异。


    常见的坐标系转换方法有以下几种:

    1. WGS84坐标系和GCJ-02坐标系之间的转换。WGS84是全球通用的经纬度坐标系,而GCJ-02是中国国家测绘局制定的坐标系,主要用于保护国家安全。在使用高德地图等服务时,需要将WGS84转换为GCJ-02坐标系。转换方法可以参考开源库proj4js。
    2. GCJ-02坐标系和BD-09坐标系之间的转换。BD-09是百度地图独有的坐标系,主要用于保护商业利益。在使用百度地图服务时,需要将GCJ-02转换为BD-09坐标系。转换方法可以参考百度地图开放平台提供的API。
    3. WGS84坐标系和墨卡托投影坐标系之间的转换。墨卡托投影坐标系是一种常用的平面坐标系,适用于地图的可视化展示。在使用Leaflet等地图库时,需要将WGS84转换为墨卡托投影坐标系。转换方法可以参考Proj4Leaflet。

    需要根据具体的应用场景和服务商要求,选择相应的坐标系转换方法。


    2023-05-09
    有用
    回复 1
    • 春和景明
      春和景明
      2023-05-09
      如果是因为用户设备或网络环境不同导致的,这个就无法修改了吧
      2023-05-09
      回复
  • Code Weaver
    Code Weaver
    2023-05-09

    因为百度的是墨卡托坐标BD-09百度坐标偏移标准,百度地图使用),腾讯的是国测局GCJ-02中国坐标偏移标准,Google Map、高德、腾讯)的。需要做下转换。


    //百度坐标转换成腾讯坐标
    convert2TecentMap(lng, lat){
        if (!lng || !lat) {
            return {
                lng: '',
                lat: ''
            }
        }
        var x_pi = 3.14159265358979324 * 3000.0 / 180.0
        var x = lng - 0.0065
        var y = lat - 0.006
        var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi)
        var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi)
        var qqlng = z * Math.cos(theta)
        var qqlat = z * Math.sin(theta)
        return {		      
            lng: qqlng,		      
            lat: qqlat	    
        }
     },
    //腾讯坐标转换成百度坐标
    convert2BMap(lng, lat) {
        if (!lng || !lat){
            return {
                lng: '',
                lat: ''
            }
        }
        var x_pi = 3.14159265358979324;
        var x = parseFloat(lng);
        var y = parseFloat(lat);
        var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
        var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
        var bmlng = (z * Math.cos(theta) + 0.0065).toFixed(5);
        var bmlat = (z * Math.sin(theta) + 0.006).toFixed(5);
        return {
    	lng: bmlng,
            lat: bmlat
           }
      }
    


    2023-05-09
    有用
    回复 4
    • 春和景明
      春和景明
      2023-05-09
      已经做了转换,页面展示没问题,但是有的人打开地图app导航的时候位置偏差很大
      2023-05-09
      回复
    • Code Weaver
      Code Weaver
      2023-05-09回复春和景明
      偏差1公里以上?
      2023-05-09
      回复
    • 春和景明
      春和景明
      2023-05-09回复Code Weaver
      对,大概2km,距离他近的银行定位不准,距离他远的定位是没什么问题的
      2023-05-09
      回复
    • Code Weaver
      Code Weaver
      2023-05-10回复春和景明
      uniapp的建议你在uniapp的社区问下。可能其他人遇到过。
      2023-05-10
      回复
登录 后发表内容