• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Glkcv
V2EX  ›  程序员

请问一般计算收货地址距离怎么实现?

  •  
  •   Glkcv · Dec 1, 2022 · 4029 views
    This topic created in 1259 days ago, the information mentioned may be changed or developed.
    目前用的 redis 的 geo 计算,但是用户收货地址变动性很大,不太适合长期保存,且订单完结后数据就用不上了,每次请求去新增,计算完成后删除的话又感觉有些啰嗦,有什么两全其美的办法吗?
    21 replies    2022-12-02 09:04:21 +08:00
    christin
        1
    christin  
       Dec 1, 2022 via iPhone
    你说的收货地址距离是快递那种全国内的还是外卖那种一个区内的?
    Glkcv
        2
    Glkcv  
    OP
       Dec 1, 2022
    @christin 外卖那种短距离的,计算配送员当前位置距离多个目的地的实时距离
    Cheons
        3
    Cheons  
       Dec 1, 2022 via Android
    外卖好像只是计算商家和用户、骑手和用户的直线距离。派单是另外的算法。
    Glkcv
        4
    Glkcv  
    OP
       Dec 1, 2022
    @Cheons 现在的场景类似于骑手去多个商家取餐,计算到每个商家的距离
    christin
        5
    christin  
       Dec 1, 2022 via iPhone   ❤️ 1
    @Lexgni
    如果是外卖的话我记得显示的都是预估时间吧,因为同一段路不同时间点走拥堵程度是不一样的。
    美团公开过时间预估模型,你可以参考一下
    https://mp.weixin.qq.com/s/LgXP2IRbyidRSSH9U7q5RQ

    https://tech.meituan.com/2019/02/21/meituan-delivery-eta-estimation-in-the-practice-of-deep-learning.html

    如果你要的是距离的话可以考虑接入地图平台。
    opengps
        6
    opengps  
       Dec 1, 2022
    直线距离直接程序里用球面公式计算就行,路线距离调用地图厂商接口
    xintianyou
        7
    xintianyou  
       Dec 1, 2022
    @opengps 嗯 这个靠谱
    Glkcv
        8
    Glkcv  
    OP
       Dec 1, 2022
    @christin 谢谢,目前需求还没有这么复杂
    yxzblue
        9
    yxzblue  
       Dec 1, 2022
    地图厂商 SDK 计算骑行距离
    kingjpa
        10
    kingjpa  
       Dec 1, 2022   ❤️ 2
    外卖都是接入 地图提供的计算平台。 两坐标直接返回 道路距离和时间。
    你自己算就图个乐, 立交桥下掉头,修路什么的,真自己算。
    用户和 骑手 一起骂
    Jooooooooo
        11
    Jooooooooo  
       Dec 1, 2022
    两点距离确实是缓存住的, 一直实时去算肯定不行.
    cwliang
        12
    cwliang  
       Dec 1, 2022
    turf.js
    zoharSoul
        13
    zoharSoul  
       Dec 1, 2022
    为什么要删除?
    XXWHCA
        14
    XXWHCA  
       Dec 1, 2022
    一般都是直线距离,像外卖都是直线距离,如果是导航需要用到路径规划这些,两个需求需要的算力是没办法比的
    Glkcv
        15
    Glkcv  
    OP
       Dec 1, 2022
    @zoharSoul 因为收货地址变动性太大
    Glkcv
        16
    Glkcv  
    OP
       Dec 1, 2022
    @XXWHCA 目前的需求确实是计算直线距离,现在的方案是把进行中的订单放在一个组里,完结后删除
    Glkcv
        17
    Glkcv  
    OP
       Dec 1, 2022
    @cwliang 谢谢,不过后端处理没办法用这个
    sheeta
        18
    sheeta  
       Dec 1, 2022
    xiaohundun
        19
    xiaohundun  
       Dec 1, 2022
    两点间直线距离,是这种么?

    public static Double distance(String lat, String lng, String lat2, String lng2) {
    if (StringUtils.isBlank(lat) || StringUtils.isBlank(lng) || StringUtils.isBlank(lat2) || StringUtils.isBlank(lng2)) {
    return 0d;
    }
    double d = 6378.138 * 2 * Math.asin(Math.sqrt(Math.pow(Math.sin((Double.parseDouble(lat) * Math.PI / 180 - Double.parseDouble(lat2) * Math.PI / 180) / 2), 2) + Math.cos(Double.parseDouble(lat) * Math.PI / 180) * Math.cos(Double.parseDouble(lat2) * Math.PI / 180) * Math.pow(Math.sin((Double.parseDouble(lng) * Math.PI / 180 - Double.parseDouble(lng2) * Math.PI / 180) / 2), 2)));
    BigDecimal bigDecimal = new BigDecimal(d);
    return bigDecimal.setScale(2, RoundingMode.HALF_UP).doubleValue();
    }
    iosyyy
        20
    iosyyy  
       Dec 1, 2022
    地址距离实际上有经度纬度一般直接算或者有地图厂商的 api 就行吧 例如 https://www.imooc.com/article/322807
    Glkcv
        21
    Glkcv  
    OP
       Dec 2, 2022
    @xiaohundun 是的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5751 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 62ms · UTC 01:43 · PVG 09:43 · LAX 18:43 · JFK 21:43
    ♥ Do have faith in what you're doing.