鱼C论坛

 找回密码
 立即注册
查看: 1354|回复: 7

求轨迹间距离代码怎么写

[复制链接]
发表于 2021-9-9 19:45:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
lat_list,long_list
39.9408499,116.38358
39.94080063,116.3836432
39.94077965,116.3836613
39.94076545,116.3836884
39.94075841,116.3836974
39.94075125,116.3837155
39.94073693,116.3837516
39.94072964,116.3837786
39.9407226,116.3837877
39.9406868,116.3838779

坐标点如上,求连续多点间的距离代码该怎么写啊(点1-点2,点2-点3,.....)



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-9 19:49:44 From FishC Mobile | 显示全部楼层
平面直角坐标系??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-9 19:55:16 | 显示全部楼层
不明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-9 19:56:07 | 显示全部楼层
wp231957 发表于 2021-9-9 19:49
平面直角坐标系??

GCJ02坐标
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-9 19:57:02 | 显示全部楼层

这是一条轨迹数据,求轨迹中两点间的距离
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-9 19:58:18 | 显示全部楼层
import math
def length(A: tuple, B: tuple):
    a = abs(A[0]-B[0])
    b = abs(A[1]-B[1])
    return math.sqrt(a**2+b**2)

x = (3, 7)
y = (7, 4)
print(length(x, y))
5.0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-9 20:08:40 | 显示全部楼层
from math import radians, cos, sin, asin, sqrt
from geopy.distance import geodesic

def geodistance(lng1,lat1,lng2,lat2):
    lng1, lat1, lng2, lat2 = map(radians, [float(lng1), float(lat1), float(lng2), float(lat2)]) # 经纬度转换成弧度
    dlon=lng2-lng1
    dlat=lat2-lat1
    a=sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
    distance=2*asin(sqrt(a))*6371*1000 # 地球平均半径,6371km
    distance=round(distance/1000,3)
    return distance
print(geodesic((32.088423,118.647258), (32.09006,118.639575)).m)
这个是求起点和终点间距离的代码,我想把它改成连续求多点距离,就是起点-中间点1-中间点2-。。。-终点,连续求两点间的距离
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-10 06:02:34 | 显示全部楼层
本帖最后由 blahblahfc 于 2021-9-10 06:09 编辑

试试
def geodesic_m(*args):
    r = [geodesic(lat_long1, lat_long2).m
         for lat_long1, lat_long2 in zip(args, args[1:])]
    if len(args)==2:
        return r[0]
    else:
        return r
lat_long_list = [(39.9408499,116.38358),
                 (39.94080063,116.3836432),
                 (39.94077965,116.3836613),
                 (39.94076545,116.3836884),
                 (39.94075841,116.3836974),
                 (39.94075125,116.3837155),
                 (39.94073693,116.3837516),
                 (39.94072964,116.3837786),
                 (39.9407226,116.3837877),
                 (39.9406868,116.3838779)]

geodesic_m((39.9408499,116.38358),
           (39.94080063,116.3836432))
geodesic_m((39.9408499,116.38358),
           (39.94080063,116.3836432),
           (39.94077965,116.3836613))
geodesic_m(*lat_long_list)

如果要用 geodistance 函数,把第2行中的 geodesic(lat_long1, lat_long2).m 改为 geodistance(*reversed(lat_long1), *reversed(lat_long2)) 就行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 10:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表