2016-06-29 4 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 в/так, как правило, более точным.

Если у вас нет Pandas, вы должны рассмотреть возможность установки Anaconda. Это дистрибутив Python для научных вычислений, и все это довольно круто - особенно в Windows.

+0

У меня возникла ошибка, когда я читаю .csv с кодировкой – l4nd0

+0

И да, я собираюсь использовать Vincenty. – l4nd0

+0

@ l4nd0 Да, неясно, какая структура вашего csv выше. У вас есть строка заголовка? Какая ошибка? –

0

Сначала вы должны извлечь широту и долготу в свои файлы. Например, см. 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.

Смежные вопросы