首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GDF.simplify弄乱了几何图形

GDF.simplify弄乱了几何图形
EN

Stack Overflow用户
提问于 2021-09-08 12:24:29
回答 1查看 36关注 0票数 0

我正试着在地图上画出河流流域。为了减小生成的矢量图形的大小,我应用了GeoSeries.simplify()

代码语言:javascript
复制
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上获得。

EN

回答 1

Stack Overflow用户

发布于 2021-09-09 12:22:52

由于GEOS使用的底层简化算法,GeoSeries.simplify()并不总是返回有效的几何图形。cartopy很难绘制无效的几何图形。

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

代码语言:javascript
复制
mrb_basins['geometry'] = mrb_basins['geometry'].simplify(0.1).buffer(0)

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69103074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档