python - 将 GeoDataFrame 几何图形分解为单部分多边形
问题描述
我有以下函数,它生成一个GeoDataFrame
包含随机大小的多边形,每个多边形都属于一个类标签:
from random import randint, randrange, seed
from geopandas import GeoDataFrame
from shapely.geometry import Point
import matplotlib.pyplot as plt
def dummy_data(size, obj_count_range, obj_size_range, label_count):
obj_count = randint(*obj_count_range)
return GeoDataFrame.from_dict({
'geometry': [Point(
randrange(0, size[0]),
randrange(0, size[1]),
).buffer(randint(*obj_size_range)) for _ in range(obj_count)],
'label': [randint(1, label_count) for _ in range(obj_count)]
})
例如,我这样调用函数:
seed(1000)
gdf = dummy_data((100000, 100000), (0, 100), (1000, 10000), 3)
print(gdf.head())
plt.show()
该示例产生以下输出:
geometry label
0 POLYGON ((58850.000 87795.000, 58837.365 87537... 1
1 POLYGON ((53622.000 46264.000, 53612.220 46064... 1
2 POLYGON ((71089.000 21726.000, 71042.003 20769... 3
3 POLYGON ((61974.000 17080.000, 61951.686 16625... 1
4 POLYGON ((94948.000 31549.000, 94914.452 30866... 1
我想用同样的类标签来溶解相交的几何图形。做gdf.dissolve(by='label')
似乎MultiPolygon
为每个班级返回一个:
label geometry
1 MULTIPOLYGON (((44788.241 671.703, 44692.635 5...
2 MULTIPOLYGON (((40604.141 5433.140, 40517.465 ...
3 MULTIPOLYGON (((42023.954 13845.668, 41757.317...
我的期望是它会产生一个新的GeoDataFrame
,其中包含与原始几何相同的单部分几何,但是具有相交的类的那些被合并为一个新的Polygon
(不是MultiPolygon
)对象。我该怎么做呢?
解决方案
您可以通过explode()
.
singlepart = gdf.dissolve(by='label').explode()
推荐阅读
- flutter - Flutter GeoLocator PermissionRequestInProgressException
- security - 如何使用实例给出的相同 access_token 在画布 lms 中保护我的 lti 工具?
- c# - Unity 中的 Resharper 和 linting C#
- c++ - C++ 函数模板:无法匹配最佳函数
- sql - 向 microsoft access 查询添加行号
- java - 如何使用带有 JoinColumn 的 JPA 实体的全参数构造函数?
- typescript - 如何在类型脚本中取消泛型类型
- javascript - 如何创建可以根据用户输入更改的 JSON 访问器?
- math - 关于排序回归
- java - 如何在java中验证输入变量的类型?