相关疑难解决方法(0)

Scipy:如何将 KD-Tree 距离从查询转换为公里(Python/Pandas)

这篇文章建立在这篇文章的基础上。

我得到了一个 Pandas 数据框,其中包含城市的地理坐标(大地坐标)作为经度和纬度。

import pandas as pd

df = pd.DataFrame([{'city':"Berlin", 'lat':52.5243700, 'lng':13.4105300},
                   {'city':"Potsdam", 'lat':52.3988600, 'lng':13.0656600},
                   {'city':"Hamburg", 'lat':53.5753200, 'lng':10.0153400}]);
Run Code Online (Sandbox Code Playgroud)

对于每个城市,我都试图找到最近的另外两个城市。因此我尝试了 scipy.spatial.KDTree。为此,我必须将大地坐标转换为 3D 笛卡尔坐标(ECEF = 以地球为中心、以地球固定):

from math import *

def to_Cartesian(lat, lng):
    R = 6367 # radius of the Earth in kilometers

    x = R * cos(lat) * cos(lng)
    y = R * cos(lat) * sin(lng)
    z = R * sin(lat)
    return x, y, z

df['x'], df['y'], df['z'] = zip(*map(to_Cartesian, df['lat'], df['lng']))
df
Run Code Online (Sandbox Code Playgroud)

这给我这个:

蟒蛇输出

这样我就可以创建 KDTree:

coordinates = …
Run Code Online (Sandbox Code Playgroud)

python spatial geospatial kdtree scipy

5
推荐指数
1
解决办法
4176
查看次数

标签 统计

geospatial ×1

kdtree ×1

python ×1

scipy ×1

spatial ×1