将 GeoDataFrame 几何图形分解为单部分多边形
Dissolve GeoDataFrame geometries into single-part Polygons
我有以下函数生成一个 GeoDataFrame
包含随机大小的多边形,每个都属于一个 class 标签:
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
我想用同样的 class 标签溶解相交的几何图形。做 gdf.dissolve(by='label')
似乎 return 每个 class:
一个 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
,其中包含与原始几何相同的单部分几何,但是同样 class 相交的几何被合并为一个新的 Polygon
(不是 MultiPolygon
)对象。我该怎么做?
您可以通过 explode()
.
获得生成的多边形的各个部分
singlepart = gdf.dissolve(by='label').explode()
我有以下函数生成一个 GeoDataFrame
包含随机大小的多边形,每个都属于一个 class 标签:
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
我想用同样的 class 标签溶解相交的几何图形。做 gdf.dissolve(by='label')
似乎 return 每个 class:
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
,其中包含与原始几何相同的单部分几何,但是同样 class 相交的几何被合并为一个新的 Polygon
(不是 MultiPolygon
)对象。我该怎么做?
您可以通过 explode()
.
singlepart = gdf.dissolve(by='label').explode()