2016-06-29 79 views
1

我是新的python,所以我真的不知道如何操作数组。 我有一个大的JSON文件比包含地理位置的这样的一个例子是:在python中计算地理距离

{"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中的坐标生成最短距离的最终文件。

回答

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更精确的地球表示,所以通常更精确。

如果你没有熊猫,你应该考虑安装Anaconda。这是一个用于科学计算的Python发行版,并且非常棒 - 特别是在Windows上。

+0

我在阅读编码为.csv时出现错误 – l4nd0

+0

而且我打算使用Vincenty。 – l4nd0

+0

@ l4nd0是啊,目前还不清楚你的csv的结构是从哪里来的。你有一个标题行吗?什么是错误? –