GeoPandas:剪切形状文件后打印时出错



我对绘制哥德堡市(英语:Gothenburg,Sweden(的数据感兴趣。我从瑞典的shapefile开始,然后把它们剪下来,集中精力在哥德堡学习。

# Extracting Göteborg boundary
boundary = adm_2.loc[(adm_2["NAME_2"] == "Göteborg")].copy()
boundary
>>
ID_0    ISO NAME_0  ID_1    NAME_1  ID_2    NAME_2  TYPE_2  ENGTYPE_2   NL_NAME_2   VARNAME_2   geometry
246 222 SWE Sweden  21  Västra Götaland 247 Göteborg    Kommuner    Municipality    None    None    MULTIPOLYGON (((12.09368 57.67838, 12.09466 57...

# Clipping the shapefiles
roads = geopandas.clip(roads_sweden, boundary)
buildings = geopandas.clip(buildings_sweden, boundary)
#roads.shape #(9747, 7)
#roads_sweden.shape #(148403, 7)
#buildings.shape #(1163, 4)
#buildings_sweden.shape #(15253, 4)

如果我绘制所有道路,即roads_sweden。我有整个瑞典的一排排的地图。然而,当我试图绘制哥德堡的道路时,我得到了错误:

IndexError:数组的索引太多:数组是一维的,但有2个索引

我不明白为什么他们看起来一样。我甚至试图重置索引,但这似乎无关。

对于我使用的绘图:

fig, ax = plt.subplots(figsize=(12, 10), facecolor='white', edgecolor='k')
boundary.plot(ax=ax, facecolor= "white", edgecolor="black", linewidth=.5)
roads.plot(ax=ax)
buildings.plot(ax=ax)

即使是单独完成,即roads.plot((,我也会得到错误。roads_sweden.plot((始终运行良好。

以下是数据的预览

roads_sweden.head()
>>
osm_id  name    ref type    oneway  maxspeed    geometry
0   1240    Klensmedsvägen None    unclassified    0   0   LINESTRING (17.99027 59.29686, 17.99182 59.296...
1   1241    Hyvelvägen None    residential 0   0   LINESTRING (17.99273 59.29666, 17.99212 59.295...
2   1242    Spikvägen  None    residential 0   0   LINESTRING (17.99353 59.29640, 17.99299 59.295...
3   1243    Bultvägen  None    residential 0   0   LINESTRING (17.99439 59.29617, 17.99385 59.295...
4   1245    Tångvägen None    residential 0   0   LINESTRING (17.99691 59.29512, 17.99637 59.294...
roads.head()
>>
osm_id  name    ref type    oneway  maxspeed    geometry
0   3846609 None    None    motorway_link   1   0   LINESTRING (12.09100 57.67369, 12.09090 57.673...
1   4040303 E6  None    motorway    0   0   LINESTRING (12.00496 57.84283, 12.00525 57.841...
2   4040436 None    None    motorway_link   1   0   LINESTRING (12.00643 57.79800, 12.00560 57.796...
3   4040439 None    E 20    motorway    1   0   LINESTRING (11.99463 57.71530, 11.99492 57.715...
4   4040441 None    E 20    motorway    1   0   LINESTRING (11.99520 57.71580, 11.99434 57.71536)

数据源

行政区域(见区域2(:https://www.diva-gis.org/datadown

道路和建筑物:https://mapcruzin.com/free-sweden-arcgis-maps-shapefiles.htm

我将问题追溯到索引为125779的道路,该道路的坐标为:[(11.8892841, 57.6579022), (11.8892841, 57.6579022)],因此它基本上是一个点。当剪切时,该几何体被转换为"0";LINESTRING EMPTY";。也许它应该将这条空线转换为相应的点,但无论如何,我想应该在地质标准的绘图中进行修复,忽略这些空线,而不是引发这样一个不清楚的错误(请随时提交问题https://github.com/geopandas/geopandas/issues)。

同时,您可以通过只选择非emtpy几何图形来绘制数据:

roads.loc[~roads.geometry.is_empty].plot(ax=ax)

最新更新