【发布时间】:2021-05-24 16:54:09
【问题描述】:
我有以下函数,它生成一个包含随机大小的多边形的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)对象。我该怎么做呢?
【问题讨论】:
-
gdf.dissolve(by='label').explode() -
@martinfleis - 就是这样,谢谢!想回答问题,我会标记它?