简单的经纬度点聚类

复制代码
import logging

logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s-%(filename)s[line:%(lineno)d]-%(levelname)s:%(message)s',
                    datefmt='%Y-%m-%d %H:%M:%S')

from geopy.distance import geodesic

def stop2label(pnts, near=300):
    # 基于300m的半径对位置进行合并
    # pnts [(lng,lat), (), *]
    res = []
    pfun = lambda p1, p2: round(geodesic(p1[::-1], p2[::-1]).m, 1)
    count = 1
    while pnts.__len__():
        ipnt = pnts[0]
        flags = [pfun(ipnt, _) < near for _ in pnts]
        for idx, flag in enumerate(flags):
            if flag:
                res.append((pnts[idx], count))
        logging.info((flags, len(pnts)))
        pnts = [pnts[_] for _, flag in enumerate(flags) if not flag]
        count += 1
    return res
复制代码

 

posted @   ddzhen  阅读(143)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示