我是python的新手,所以我真的不知道如何操作数组。 我有一个大的JSON文件,而不是包含地理位置,例如:
{"项目":[{"语言":"恩""创建":" 2013-12- 17T09:31:31.000 + 01:00""几何" {"类型":"点""的坐标&# 34;:[9.2056232,45.4825264] }
我还有另一个包含坐标的文件,即
4c29e1c197d00f47a60442ea,Area51Lab SRL,4bf58dd8d48988d124941735,的 45.44826958,9.144208431
我想计算文件1中坐标与文件2中坐标之间的最短距离,以生成距离最短的最终文件。
答案 0 :(得分:2)
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 / Great-Circle更准确的地球表示,因此通常更准确。
如果你没有Pandas,你应该考虑安装Anaconda。它是用于科学计算的Python发行版,并且非常棒 - 特别是在Windows上。
答案 1 :(得分:0)
首先,您必须提取文件中的纬度和经度。例如,请参阅json模块以获取json文件。 https://docs.python.org/2/library/json.html
要计算给定角度(纬度和经度......)的球体上两点之间的距离,您可以使用半正公式。 https://en.wikipedia.org/wiki/Haversine_formula
这里有一个javascript实现http://www.movable-type.co.uk/scripts/latlong.html,你可以适应python。