2301_77137203 2024-02-08 00:39 采纳率: 0%
浏览 2

android WGS84 和 BD09LL 互转和最初的值不一致是什么原因?

android WGS84 和 BD09LL 互转和最初的值不一致是什么原因?
以下是我的代码和输出结果:


```java
//测试按钮按下了:
    public void testBtnDn(View view){
        //定义GPS坐标
        double wgs_lat=22.404995;
        double wgs_lng=113.587560;
        setOutText("给定的GPS坐标:"+wgs_lat+", "+wgs_lng+"\n", false); //打印数据
        //把GPS坐标转换成 BD09坐标系
        double[] bd09;
        bd09=tc.mmc.wgs84_bd09ll(wgs_lat, wgs_lng); //转换
        setOutText("转换成百度坐标= "+bd09[1]+", "+bd09[2]+"\n", true); //输出结果
        //再把已转换成的百度坐标转换回GPS坐标
        double[] wgs_2;
        wgs_2=tc.mmc.bd09ll_wgs84(bd09[1], bd09[2]); //转换回GPS
        setOutText("转换回GPS坐标= "+wgs_2[1]+", "+wgs_2[2]+"\n", true); //输出结果
    }
//坐标转换,将BD09LL坐标转换成GPS坐标(WGS84坐标)
    public double[] bd09ll_wgs84(double lat, double lng){
        LatLng sourceLatLng = new LatLng(lat, lng);
        CoordinateConverter converter = new CoordinateConverter()
                .from(CoordinateConverter.CoordType.BD09LL)
                .coord(sourceLatLng);
        LatLng destLatLng = converter.convert();

        double[] result = new double[3];
        result[1] = destLatLng.latitude; // WGS84 纬度
        result[2] = destLatLng.longitude; // WGS84 经度
        return result;
    }
//GPS坐标转换BD09LL
    public double[] wgs84_bd09ll(double lat, double lng){
        double[] result = new double [3]; //装转换坐标的数组

        LatLng sll = new LatLng(lat, lng);
        CoordinateConverter converter = new CoordinateConverter().from(CoordinateConverter.CoordType.GPS).coord(sll);
        LatLng desLatLng = converter.convert(); //desLatLng 转换后的坐标

        result[1]=desLatLng.latitude;
        result[2]=desLatLng.longitude;

        return result;
    }


![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/105f87a31b354490afd22bc1ce5d02ff.jpeg "#left")
  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-08 00:41
    关注

    引自免费微信小程序:皆我百晓生

    在Android开发中,WGS84坐标系(世界大地测量系统1984)与百度地图使用的BD09LL坐标系之间的转换可能会出现互转后不一致的情况。原因在于:

    1. 坐标系差异:WGS84是国际通用的地球坐标系统,而BD09LL是在WGS84基础上增加了偏移量和高斯投影的坐标系统,主要用于国内地理位置服务,以适应中国地理位置及行政区划特点。

    2. 转换算法误差:由于坐标转换涉及一系列数学计算,包括平移、旋转、缩放等操作,在实际转换过程中会引入微小的累积误差。

    3. 四舍五入问题:在进行浮点数运算并转换回字符串显示时,可能因为精度丢失或四舍五入导致最后结果看起来不完全一致。

    针对您提供的代码片段,使用了com.amap.api.maps.model.LatLng类以及com.amap.api.maps.CoordinateConverter来进行坐标转换。尽管Amap SDK的坐标转换工具已经尽可能精确,但仍然无法避免上述因素造成的误差。

    为了更好地理解您的问题,请提供一下测试输出的结果。如果转换后的值有明显偏差,可以检查以下几点:

    • 确认使用的坐标转换API是否正确且最新。
    • 检查是否存在多次转换导致的累积误差。
    • 在转换后输出时,确保保留足够的小数位数来减少视觉上的差异。

    目前从给定的代码来看,逻辑上没有明显错误。但如果转换后的结果与原始输入相差较大,建议查看Amap SDK的相关文档或者官方论坛寻求支持,确认是否有已知的问题或更新说明。同时,也可以尝试使用其他可靠的坐标转换库或公式进行对比验证。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月8日

悬赏问题

  • ¥30 帮我做一个可以批量扫描并打开弱口令密码摄像头的app
  • ¥15 如何用C++在CAD二次开发中,对标注AcDbDimension文字的高度与宽度的获取方法?
  • ¥15 C++检查代码什么问题
  • ¥20 matlab写的上位机UDP速率不到1M
  • ¥100 tomcat应用从Termux上连接不到Linux上的MySQL服务器(相关搜索:服务器)
  • ¥15 flutter 错误RROR:flutter/runtime/dart_vm_initializer.cc(41)
  • ¥15 python和aspen Adsportion交互
  • ¥20 dat文件如何识别真假(语言-python)
  • ¥20 打开谷歌浏览器使用摄像头进行人脸认证登录,系统提示检测到多个摄像头设备疑似攻击,请重新验证。
  • ¥50 服务器被挂外链急需解决