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

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

  •  
  •   Glkcv · Dec 1, 2022 · 4531 views
    This topic created in 1432 days ago, the information mentioned may be changed or developed.
    目前用的 redis 的 geo 计算,但是用户收货地址变动性很大,不太适合长期保存,且订单完结后数据就用不上了,每次请求去新增,计算完成后删除的话又感觉有些啰嗦,有什么两全其美的办法吗?
    21 replies  •  2022-12-02 09:04:21 +08:00
    christin
    christin
    Dec 1, 2022 via iPhone
    1
    你说的收货地址距离是快递那种全国内的还是外卖那种一个区内的?
    Glkcv
    Glkcv
    OP
    Dec 1, 2022
    2
    @christin 外卖那种短距离的,计算配送员当前位置距离多个目的地的实时距离
    Cheons
    Cheons
    Dec 1, 2022 via Android
    3
    外卖好像只是计算商家和用户、骑手和用户的直线距离。派单是另外的算法。
    Glkcv
    Glkcv
    OP
    Dec 1, 2022
    4
    @Cheons 现在的场景类似于骑手去多个商家取餐,计算到每个商家的距离
    christin
    christin
    Dec 1, 2022 via iPhone❤️1
    5
    @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
    opengps
    Dec 1, 2022
    6
    直线距离直接程序里用球面公式计算就行,路线距离调用地图厂商接口
    xintianyou
    xintianyou
    Dec 1, 2022
    7
    @opengps 嗯 这个靠谱
    Glkcv
    Glkcv
    OP
    Dec 1, 2022
    8
    @christin 谢谢,目前需求还没有这么复杂
    yxzblue
    yxzblue
    Dec 1, 2022
    9
    地图厂商 SDK 计算骑行距离
    kingjpa
    kingjpa
    Dec 1, 2022❤️2
    10
    外卖都是接入 地图提供的计算平台。 两坐标直接返回 道路距离和时间。
    你自己算就图个乐, 立交桥下掉头,修路什么的,真自己算。
    用户和 骑手 一起骂
    Jooooooooo
    Jooooooooo
    Dec 1, 2022
    11
    两点距离确实是缓存住的, 一直实时去算肯定不行.
    cwliang
    cwliang
    Dec 1, 2022
    12
    turf.js
    zoharSoul
    zoharSoul
    Dec 1, 2022
    13
    为什么要删除?
    XXWHCA
    XXWHCA
    Dec 1, 2022
    14
    一般都是直线距离,像外卖都是直线距离,如果是导航需要用到路径规划这些,两个需求需要的算力是没办法比的
    Glkcv
    Glkcv
    OP
    Dec 1, 2022
    15
    @zoharSoul 因为收货地址变动性太大
    Glkcv
    Glkcv
    OP
    Dec 1, 2022
    16
    @XXWHCA 目前的需求确实是计算直线距离,现在的方案是把进行中的订单放在一个组里,完结后删除
    Glkcv
    Glkcv
    OP
    Dec 1, 2022
    17
    @cwliang 谢谢,不过后端处理没办法用这个
    sheeta
    sheeta
    Dec 1, 2022
    18
    xiaohundun
    xiaohundun
    Dec 1, 2022
    19
    两点间直线距离,是这种么?

    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
    iosyyy
    Dec 1, 2022
    20
    地址距离实际上有经度纬度一般直接算或者有地图厂商的 api 就行吧 例如 https://www.imooc.com/article/322807
    Glkcv
    Glkcv
    OP
    Dec 2, 2022
    21
    @xiaohundun 是的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1356 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 21:25 · PVG 05:25 · LAX 13:25 · JFK 16:25
    ♥ Do have faith in what you're doing.