【发布时间】:2020-01-30 01:43:10
【问题描述】:
这个问题与外面的另一个问题相似,但没有一个解决方案对我有用。注意我已经对这些解决方案和结果进行了几次尝试。如果另一个图书馆能做到这一点,我愿意接受。
我正在尝试使用 GeoPandas 扩展一个包含多个多多边形的 GeoJson 文件。
当前地理数据框(3 行)
fill fill-opacity stroke stroke-opacity stroke-width title geometry
0 #9bf1e2 0.3 #9bf1e2 1 1 Hail Possible (POLYGON ((-80.69500140880155 22.2885709067316...
1 #08c1e6 0.3 #08c1e6 1 1 Severe Hail (POLYGON ((-103.4850007575523 29.2010260633722...
2 #682aba 0.3 #682aba 1 1 Damaging Hail (POLYGON ((-104.2750007349772 32.2629245180204...`
所需的地理数据框(200 多行)
fill fill-opacity stroke stroke-opacity stroke-width title geometry
0 #9bf1e2 0.3 #9bf1e2 1 1 Hail Possible (POLYGON ((-80.69500140880155 22.2885709067316...
1 #9bf1e2 0.3 #9bf1e2 1 1 Hail Possible (POLYGON ((-102.8150007766983 28.2180513479277...
2 #9bf1e2 0.3 #9bf1e2 1 1 Hail Possible (POLYGON ((-103.4850007575523 29.0940821135748...
3 #9bf1e2 0.3 #9bf1e2 1 1 Hail Possible (POLYGON ((-103.5650007552662 30.9947420843694...
4 #9bf1e2 0.3 #9bf1e2 1 1 Hail Possible (POLYGON ((-103.6150007538374 31.0173836504729...
正在使用的geojson文件示例文件:https://drive.google.com/file/d/1m6cMR4jF3QWp07e23sIdb0UF9xLD062s/view?usp=sharing
我尝试过但没有成功:
df3.set_index(['title'])['geometry'].apply(pd.Series).stack().reset_index()
(返回原始未更改的 gdf)
def cartesian(x):
return np.vstack(np.array([np.array(np.meshgrid(*i)).T.reshape(-1,7) for i in x.values]))
ndf = pd.DataFrame(cartesian(df3),columns=df3.columns)
(返回原始未更改的 gdf)
import geopandas as gpd
from shapely.geometry.polygon import Polygon
from shapely.geometry.multipolygon import MultiPolygon
def explode(indata):
indf = gpd.GeoDataFrame.from_file(indata)
outdf = gpd.GeoDataFrame(columns=indf.columns)
for idx, row in indf.iterrows():
if type(row.geometry) == Polygon:
outdf = outdf.append(row,ignore_index=True)
if type(row.geometry) == MultiPolygon:
multdf = gpd.GeoDataFrame(columns=indf.columns)
recs = len(row.geometry)
multdf = multdf.append([row]*recs,ignore_index=True)
for geom in range(recs):
multdf.loc[geom,'geometry'] = row.geometry[geom]
outdf = outdf.append(multdf,ignore_index=True)
return outdf
explode(GEOJSONFILE)
(返回原始未更改的 gdf)
这是我在这里的第一个问题,所以如果需要任何其他信息或详细信息,请告诉我。
更新:发现 explode() 函数的问题是由于文件的格式问题,其中几何本质上是多面的多面,导致只有第一个多面的循环。爆炸功能有效。
【问题讨论】: