在python

时间:2016-06-29 02:07:10

标签: python arrays coordinates

我是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中坐标之间的最短距离,以生成距离最短的最终文件。

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。