【问题标题】:GDF.simplify messes up geometriesGDF.simplify 弄乱了几何图形
【发布时间】:2021-11-05 05:28:05
【问题描述】:

我正在尝试在地图上绘制河流流域。为了减小生成的矢量图的大小,我申请了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获取。

【问题讨论】:

    标签: geopandas cartopy


    【解决方案1】:

    GeoSeries.simplify() 并不总是返回有效的几何图形,因为 GEOS 使用了底层简化算法。而且 cartopy 无法绘制无效的几何图形。

    您需要先修复几何图形,然后再将它们传递给 cartopy。简单的技巧是调用buffer(0)

    mrb_basins['geometry'] = mrb_basins['geometry'].simplify(0.1).buffer(0)
    

    那么你的代码就可以正常工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-16
      • 1970-01-01
      • 2015-04-12
      • 2013-09-07
      • 2017-03-01
      • 1970-01-01
      相关资源
      最近更新 更多