我有两个multi-index
DataFrames
如下。
DataFrame
DataFrame
我想使用上面的DataFrames
以下列格式为每个对象构建GeoJSON
FeatureCollections
,然后将它们插入MongoDB
。
# GeoJSON
# Loop over all Object IDs
object[i] = {
"type": "FeatureCollection",
"features": [
{
# 1st DataFrame
"type": "Feature",
"properties": {},
"geometry": {"type": "Polygon", "coordinates": [[[·,·],[·,·],[·,·],...]]}
},
{
# 2nd DataFrame
"type": "Feature",
"properties": {},
"geometry": {"type": "LineString", "coordinates": [[·,·],[·,·],[·,·],...]}
}
]
}
# MongoDB
# Loop over all Object IDs
from pymongo import MongoClient
client = MongoClient()
db = client.object
result = db.object.insert_one(object[i])
由于特定对象的点数为随机,且功能Polygon
和{{1}的点数在相同的LingString
不必然相等彼此之间,很难使用FeatureCollection
循环来实现该目标。有人能想出这个问题吗?
答案 0 :(得分:0)
如果"点数"表示"每个功能中的点数",然后这应该有效:
# transform to hierarchical series of [lat, lon]
s1 = df1.apply(lambda row: pd.concat([row['lat'], row['lon']]).tolist())
# now group that series by object id into a series of lists
coords1 = s1.groupby(level=0).apply(lambda s : s.tolist())
df2相同 - > S2。这会产生[[lat_0, lon_0], [lat_1, lon_1], ...]
,这是一个LineString。
制作df1 - >将s1放入geojson Polygon的坐标列表/数组中,您需要将每个成员的坐标列表包装在另一个列表中。有关多边形坐标的规则,请参阅RFC 7946 section 3.1.6。最后,您必须将所有内容包装在FeatureCollection中的Feature中的Polygon / Geometry中。如果这看起来好像很多,请考虑导入geojson
库的json
扩展名。
我已经构建了一个更通用的函数来将pandas聚合到此gist中的几何中。