用python计算地理距离

2024-09-30 01:24:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,所以不知道如何操作数组。 我有一个包含地理位置的大JSON文件,例如:

{"items":[{"language":"en","created":"2013-12-17T09:31:31.000+01:00","geometry":{"type":"Point","coordinates":[9.2056232,45.4825264]}

我还有另一个包含坐标的文件

4c29e1c197d00f47a60442ea,Area51Lab Srl,4bf58dd8d48988d124941735,45.44826958,9.144208431

我要计算文件1中的坐标和文件2中的坐标之间的最短距离,以生成具有最短距离的最终文件。在


Tags: 文件jsontypeitems地理位置数组languageen
2条回答

首先,必须提取文件中的经纬度。例如,请参见json模块以获取json文件。https://docs.python.org/2/library/json.html

要计算给定角度(纬度和经度…)的球体上两点之间的距离,可以使用haversine公式。https://en.wikipedia.org/wiki/Haversine_formula

这里有一个javascript实现http://www.movable-type.co.uk/scripts/latlong.html,可以适应python。在

import pandas as pd
from vincenty import vincenty

df1 = pd.read_json(data.json)
df2 = pd.read_csv(data.csv)

results = []
for i1, d1 in df1.iterrows():
    for i2, d2 in df2.iterrows():
         distances.append({
             "index1": i1,
             "index2": i2,
             "results": vincenty((d1.coordinates[0], d1.coordinates[1])                                     
                                 (d2.latitude, d2.longitude)) # you will need to adapt this part
         })

results = df.DataFrame(results)
results = results.groupby(["index1", "index2"]).results.min()

results.to_csv("results.csv")
# or
results.to_json("results.json")

Vincenty's formula使用了比Halversine/大圆更精确的地球表示,因此通常更准确。在

如果你没有熊猫,你应该考虑安装Anaconda。这是一个面向科学计算的Python发行版,非常棒,尤其是在Windows上。在

相关问题 更多 >

    热门问题