我正试着在地图上画出河流流域。为了减小生成的矢量图形的大小,我应用了GeoSeries.simplify()。
import cartopy
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import geopandas as gpd
# %%% Earth
fig = plt.figure()
latlon_proj = ccrs.PlateCarree()
axis_proj = ccrs.Orthographic()
ax = plt.axes(
projection=axis_proj
)
# %%% Major River Basins
mrb_basins = gpd.read_file('mrb_basins.json') # 520 entries
mrb_basins['geometry'] = mrb_basins['geometry'].simplify(0.1)
for shape in mrb_basins['geometry']:
feat = cartopy.feature.ShapelyFeature(
[shape],
latlon_proj,
facecolor='red',
)
ax.add_feature(feat)
mrb_basins.plot()问题是,由此得到的地球地图完全被一个红色形状所覆盖。

如果我删除行mrb_basins['geometry'] = mrb_basins['geometry'].simplify(0.1),情况就不是这样了。

如何在保持几何图形完整性的同时简化几何图形?
主要河流流域的数据集可以在here上获得。
发布于 2021-09-09 12:22:52
由于GEOS使用的底层简化算法,GeoSeries.simplify()并不总是返回有效的几何图形。cartopy很难绘制无效的几何图形。
在将几何图形传递给cartopy之前,您需要修复它们。简单的技巧是调用buffer(0)。
mrb_basins['geometry'] = mrb_basins['geometry'].simplify(0.1).buffer(0)那么你的代码就可以正常工作了。

https://stackoverflow.com/questions/69103074
复制相似问题