鱼C论坛

 找回密码
 立即注册
查看: 1578|回复: 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,.....)



小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-9-9 19:49:44 From FishC Mobile | 显示全部楼层
平面直角坐标系??
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-9 19:55:16 | 显示全部楼层
不明白
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

GCJ02坐标
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

这是一条轨迹数据,求轨迹中两点间的距离
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  6. x = (3, 7)
  7. y = (7, 4)
  8. print(length(x, y))
复制代码
  1. 5.0
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  3. def geodistance(lng1,lat1,lng2,lat2):
  4.     lng1, lat1, lng2, lat2 = map(radians, [float(lng1), float(lat1), float(lng2), float(lat2)]) # 经纬度转换成弧度
  5.     dlon=lng2-lng1
  6.     dlat=lat2-lat1
  7.     a=sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
  8.     distance=2*asin(sqrt(a))*6371*1000 # 地球平均半径,6371km
  9.     distance=round(distance/1000,3)
  10.     return distance
  11. print(geodesic((32.088423,118.647258), (32.09006,118.639575)).m)
复制代码

这个是求起点和终点间距离的代码,我想把它改成连续求多点距离,就是起点-中间点1-中间点2-。。。-终点,连续求两点间的距离
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

试试

  1. def geodesic_m(*args):
  2.     r = [geodesic(lat_long1, lat_long2).m
  3.          for lat_long1, lat_long2 in zip(args, args[1:])]
  4.     if len(args)==2:
  5.         return r[0]
  6.     else:
  7.         return r
复制代码

  1. lat_long_list = [(39.9408499,116.38358),
  2.                  (39.94080063,116.3836432),
  3.                  (39.94077965,116.3836613),
  4.                  (39.94076545,116.3836884),
  5.                  (39.94075841,116.3836974),
  6.                  (39.94075125,116.3837155),
  7.                  (39.94073693,116.3837516),
  8.                  (39.94072964,116.3837786),
  9.                  (39.9407226,116.3837877),
  10.                  (39.9406868,116.3838779)]

  11. geodesic_m((39.9408499,116.38358),
  12.            (39.94080063,116.3836432))
  13. geodesic_m((39.9408499,116.38358),
  14.            (39.94080063,116.3836432),
  15.            (39.94077965,116.3836613))
  16. geodesic_m(*lat_long_list)
复制代码


如果要用 geodistance 函数,把第2行中的 geodesic(lat_long1, lat_long2).m 改为 geodistance(*reversed(lat_long1), *reversed(lat_long2)) 就行。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-18 22:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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