我有一个由 0 和 1 组成的 (2000x2000) python 数组,表示单元格是否空闲。我想将这种密集表示变成一个
shapely
对象。
例如,以下类型的数组:
0 0 0 0
0 1 1 0
0 1 1 0
0 0 0 0
会变成一个正方形。 我尝试一次构建一个单元并将其连接到更大的形状,或者构建一系列单独的正方形并将它们连接在一起,但事实证明它太慢了。如何以更有效的方式获得形状?
您可以使用 rasterio.features.shapes 为此。
这是一个(未经测试的)代码片段,展示了如何通过多边形化 numpy 数组中的信息来创建 geopandas 数据框:
import geopandas as gpd
import rasterio.features as rio_features
import shapely.geometry as sh_geom
polygonized_records = list(rio_features.shapes(numpy_array))
# Convert shapes to geopandas geodataframe
data = [
(sh_geom.shape(geom), int(value)) for geom, value in polygonized_records
]
result_gdf = gpd.GeoDataFrame(data, columns=["geometry", "value"])