【问题标题】:Create a matrix with distances between geopoints创建一个具有地理点之间距离的矩阵
【发布时间】:2023-03-06 03:53:01
【问题描述】:

我正在努力实现我的想法,即在 NJ Transit Rail 的每对车站之间创建以公里为单位的距离矩阵。我有每个站点的经度和纬度数据,

而我想做的就是这张桌子。

我已经研究了一些可能的方法来实现这个表,但它们更多的是几何坐标而不是地理坐标。我会使用距离矩阵,但我可以看到它用于另一种类型的坐标。

请帮忙!

【问题讨论】:

  • 你能附上可以复制的实际数据而不是图像吗?
  • 看看这个问题,它有你需要的所有细节:distance-matrix
  • 您能更具体地说明您正在努力解决的问题吗?

标签: python pandas scipy geolocation


【解决方案1】:

您正在寻找地理距离,即Haversine 距离。从sklearn 0.22.2开始,你可以使用haversine_distance

x_deg = df[['stop_lat','stop_lon']].values
x_rad = np.deg2rad(x_deg)

# distances in miles
distances = haversine_distances(x_rad,x_rad) * 6371 / 1.6

pd.DataFrame(distances, 
             index=df.stop_name, columns=df.stop_name)

你会得到这样的东西:

stop_name         a         b         c
stop_name                              
a          0.000000  1.274556  1.396741
b          1.274556  0.000000  0.871521
c          1.396741  0.871521  0.000000

【讨论】:

  • 非常感谢!
  • 一个问题。答案的指标是什么?公里还是英里?
  • 根据链接的文档,您需要将其与地球的半径相乘以获得实际距离。所以你可以选择你喜欢的。
  • 另请参阅从度数到弧度的转换的更新答案。
  • 哦,好吧,如果我乘以,它将是哪个指标?
【解决方案2】:

你会这样做:

import pandas as pd
from scipy.spatial import distance_matrix

# You already have the data
data = [[5, 7], [7, 3], [8, 1]]
ctys = ['Boston', 'Phoenix', 'New York']

df = pd.DataFrame(data, columns=['xcord', 'ycord'], index=ctys)
df_mat = pd.DataFrame(distance_matrix(df.values, df.values), index=df.index, columns=df.index)
print(df_mat)

            Boston   Phoenix  New York
Boston    0.000000  4.472136  6.708204
Phoenix   4.472136  0.000000  2.236068
New York  6.708204  2.236068  0.000000

【讨论】:

  • *但它们更多用于几何坐标而不是地理 *
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-02
  • 2020-09-11
  • 1970-01-01
  • 2022-11-21
  • 2015-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多