V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
honglei92
V2EX  ›  Android

高德可以根据一组连续的 gps 位置信息计算距离吗

  •  
  •   honglei92 · 2020-04-13 08:52:56 +08:00 · 10870 次点击
    这是一个创建于 1680 天前的主题,其中的信息可能已经有所发展或是发生改变。

    高德可以根据一组连续的 gps 位置信息计算距离吗?我本地连续记录当前 gps 位置信息 可以换算距离吗?

    17 条回复    2020-05-18 10:14:01 +08:00
    sunjiayao
        2
    sunjiayao  
       2020-04-13 09:05:38 +08:00
    曾经弄过,但记不太清了。当时好像是通过路径导航+必经点 api 返回里是有距离的。如果只计算直线距离的话,用楼上发的「两点间的直线距离计算」就能实现了。
    LaughingCat
        3
    LaughingCat  
       2020-04-13 09:10:19 +08:00
    opengps
        4
    opengps  
       2020-04-13 09:13:17 +08:00
    我这里有工具,参考我的 json 模板替换下你的参数 https://www.opengps.cn/Map/Path/Index.aspx?from=v2ex
    hws8033856
        5
    hws8033856  
       2020-04-13 10:30:43 +08:00
    两坐标直线距离计算的算法网上大把,不需要高德提供 api 吧?
    hugee
        6
    hugee  
       2020-04-13 10:34:27 +08:00
    @opengps opengps 大佬,有没有什么可靠的 app 可以记录每天轨迹,可以导出 kml 的?
    xuanbg
        7
    xuanbg  
       2020-04-13 10:42:08 +08:00
    路径规划接口,传入途经点。
    princelai
        8
    princelai  
       2020-04-13 10:46:56 +08:00 via Android
    为什么非要用高德呢,Python 自己写,搜 haversine 距离或球面距离,或者直接用 geopy 包,自己写的话配合 numba 也很快,我就这么干的
    ixx
        9
    ixx  
       2020-04-13 11:42:15 +08:00
    看你怎么计算了 直接算两点距离有误差 还要看取点的频率 想要准确的话要保证取点频率不能太低
    realpg
        10
    realpg  
       2020-04-13 11:44:51 +08:00
    @hugee #6
    随便一款自行车骑行软件
    jorneyr
        13
    jorneyr  
       2020-04-13 12:12:36 +08:00
    使用经纬度计算 2 点之间的距离

    ```java
    /**
    * 根据经纬度计算两点之间的距离 (m)
    */
    public class LBSUtils {
    public static final double EARTH_RADIUS = 6378137; // 地球的半径 (m)

    /**
    * 根据经纬度计算两点之间的距离 (m)
    *
    * @param lng1 位置 1 的经度
    * @param lat1 位置 1 的纬度
    * @param lng2 位置 2 的经度
    * @param lat2 位置 2 的纬度
    * @return 返回距离
    */
    public static double getDistance(double lng1, double lat1, double lng2, double lat2) {
    double radLat1 = radian(lat1);
    double radLat2 = radian(lat2);

    double a = radLat1 - radLat2;
    double b = radian(lng1) - radian(lng2);
    double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)
    + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
    s = s * EARTH_RADIUS;
    s = Math.round(s * 100) / 100.0;

    return s;
    }

    private static double radian(double d) {
    return d * Math.PI / 180.0;
    }

    public static void main(String[] args) {
    double lat1 = 39.964145, lng1 = 116.384996, lat2 = 39.964533, lng2 = 116.385243;
    double distance = LBSUtils.getDistance(lat1, lng1, lat2, lng2);
    System.out.println("Distance: " + distance + " 米");
    }
    }
    ```
    opengps
        14
    opengps  
       2020-04-13 12:20:43 +08:00
    @hugee 考虑下佳明之类的专用设备。尽量避免使用 app 来定位,如果唤起 GPS 模块工作,耗电很厉害的
    duwan
        15
    duwan  
       2020-04-13 12:25:27 +08:00
    jts 就可以计算,用不到高德
    honglei92
        16
    honglei92  
    OP
       2020-05-17 10:31:05 +08:00
    @duwan 什么 jts
    duwan
        17
    duwan  
       2020-05-18 10:14:01 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5395 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 05:44 · PVG 13:44 · LAX 21:44 · JFK 00:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.