如何写一个Python循环将大量坐标转换成GeoJSON LineString格式?
How to write a Python loop to convert a large amount of coordinates into the GeoJSON LineString format?
我在 pandas
DataFrame
中使用 multi-index
重构了我的数据集,现在它的格式如下。
In [1]: df.head(12)
Out [1]:
为了将其转换为 GeoJSON
LineString
格式并在地图上可视化,我需要在每个点和每个点上写一个 Python
loop
通过数百万个卫星观测点。作为参考,以下示例指定 GeoJSON
LineString
.
{ type: "LineString", coordinates: [ [ 40, 5 ], [ 41, 6 ] ] }
然而,并非总是如图所示,一条线由前三行的4个点组成,此数据集中特定线的点数是完全随机的,从4到数百不等。
我很困惑如何编写 Python
loop
来帮助我使用 multi-index
将我的坐标输入 GeoJSON
LineString
类型,例如
In [2]: df.Longitude[1][4]
Out [2]: 128
感谢您的宝贵时间!
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'}
我在 pandas
DataFrame
中使用 multi-index
重构了我的数据集,现在它的格式如下。
In [1]: df.head(12)
Out [1]:
为了将其转换为 GeoJSON
LineString
格式并在地图上可视化,我需要在每个点和每个点上写一个 Python
loop
通过数百万个卫星观测点。作为参考,以下示例指定 GeoJSON
LineString
.
{ type: "LineString", coordinates: [ [ 40, 5 ], [ 41, 6 ] ] }
然而,并非总是如图所示,一条线由前三行的4个点组成,此数据集中特定线的点数是完全随机的,从4到数百不等。
我很困惑如何编写 Python
loop
来帮助我使用 multi-index
将我的坐标输入 GeoJSON
LineString
类型,例如
In [2]: df.Longitude[1][4]
Out [2]: 128
感谢您的宝贵时间!
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'}