2016-02-19 12 views
0

Я реконструировал свой набор данных в pandasDataFrame с помощью multi-index, и он теперь в следующем формате.Как написать цикл Python для преобразования большого количества координат в формат GeoJSON LineString?

In [1]: df.head(12) 
Out [1]: 

enter image description here

Для того, чтобы поместить его в формате GeoJSONLineString и визуализировать его на карте, мне нужно написать Pythonloop над каждой точкой и каждую линию через миллионы спутниковых наблюдений точек. Для справки, следующий пример указывает GeoJSONLineString.

{ type: "LineString", coordinates: [ [ 40, 5 ], [ 41, 6 ] ] } 

Однако, не всегда, как показано на рисунке, что линия состоит из 4-х точек для первых трех линий, число точек на определенной строке в этом наборе данных совершенно случайным образом, в пределах от 4 до сотни.

Я так растерялся, как написать Pythonloop, которые могли бы помочь мне поставить мои координаты в GeoJSONLineString типа с использованием multi-index, например,

In [2]: df.Longitude[1][4] 
Out [2]: 128 

Спасибо за ваше время!

ответ

0

Комбинация groupby и to_json, похоже, хорошо работает.

import pandas as pd 
import numpy as np 
import pprint 

arrays = [np.array([1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 4, 4]), 
      np.array([1, 2, 3, 1, 2, 1, 2, 3, 4, 5, 1, 2])] 

df = pd.DataFrame(np.arange(24).reshape(12,2), 
        index=arrays, columns=['Longitude', 'Lattitude']) 

dd = {"type":"Feature", 
     "geometry":{"type":"Linestring", 
        "coordinates":None 
       }, 
     "properties":{"prop0":'red', 
        "prop1":'dashed' 
        } 
    } 

for _, group in df.groupby(level=0): 
    dd["geometry"]["coordinates"] = group.to_json(orient='values') 
    pprint.pprint(dd) 

выход:

{'geometry': {'coordinates': '[[0,1],[2,3],[4,5]]', 
       'type': 'Linestring'}, 
'properties': {'prop0': 'red', 
       'prop1': 'dashed'}, 
'type': 'Feature'} 
{'geometry': {'coordinates': '[[6,7],[8,9]]', 
       'type': 'Linestring'}, 
'properties': {'prop0': 'red', 
       'prop1': 'dashed'}, 
'type': 'Feature'} 
{'geometry': {'coordinates': '[[10,11],[12,13],[14,15],[16,17],[18,19]]', 
       'type': 'Linestring'}, 
'properties': {'prop0': 'red', 
       'prop1': 'dashed'}, 
'type': 'Feature'} 
{'geometry': {'coordinates': '[[20,21],[22,23]]', 
       'type': 'Linestring'}, 
'properties': {'prop0': 'red', 
       'prop1': 'dashed'}, 
'type': 'Feature'} 
+0

Спасибо большое! Ваши коды работают хорошо! – eapsclimate