我有一只拥有超过600个地理坐标点的数据框Pandas。下面是他的摘录:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from math import sin, cos, sqrt, atan2, radians
lat_long = pd.DataFrame({'LATITUDE':[-22.98, -22.97, -22.92, -22.87, -22.89], 'LONGITUDE': [-43.19, -43.39, -43.24, -43.28, -43.67]})
lat_long
要手动计算两点之间的距离,我使用以下代码:
lat1 = radians(lat_long['LATITUDE'][0])
lon1 = radians(lat_long['LONGITUDE'][0])
lat2 = radians(lat_long['LATITUDE'][1])
lon2 = radians(lat_long['LONGITUDE'][1])
R = 6373.0
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat / 2)**2 + cos(lat1) * cos(lat2) * sin(dlon / 2)**2
c = 2 * atan2(sqrt(a), sqrt(1 - a))
distance = R * c
print("Result:", round(distance,4))
我需要做的是创建一个函数,使用上面的公式来计算所有点到所有点的距离,就像在数组中一样。但是我很难考虑用什么函数来存储点之间的距离。欢迎提供任何帮助。输出示例(如果我还不清楚,仅用于说明目的):
| |point 0 | point1 | point2 |
|point0 | 0 | 2 | 3 |
|point1 | 2 | 0 | 4 |
|point2 | 3 | 4 | 0 |
|distance|distance|distance|
3条答案
按热度按时间ac1kyiln1#
可以使用pdist来计算两两之间的距离:
注意,
squareform
将稀疏矩阵转换为密集矩阵,因此结果存储在numpy数组中。v8wbuo2f2#
另一个可能的解决方案是
距离矩阵的下三角是空的,因为该矩阵是对称的(
dist[i1,i2]==dist[i2,i1]
)4urapxun3#
使用GeoPandas:
输出:
| | 无|1个|第二章|三个|四个|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 无|0.00万|二○ ○二四九八四|七、八十一万零二百五十|十四二十二万六百七十|四十八,八三六四六二|
| 1个|二○ ○二四九八四|0.00万|十五|十四,八十六万零六九|二九十二万零四四十|
| 第二章|七、八十一万零二百五十|十五|0.00万|六、四零三一二四|小行星43.104524|
| 三个|十四二十二万六百七十|十四,八十六万零六九|六、四零三一二四|0.00万|小行星39|
| 四个|四十八,八三六四六二|二九十二万零四四十|小行星43.104524|小行星39|0.00万|
请注意,由于坐标参考系(CRS)的原因,此输出可能与其他答案不同。查找适合您的CRS here。