将网格地图数组变成形状良好的对象

问题描述 投票:0回答:1

我有一个由 0 和 1 组成的 (2000x2000) python 数组,表示单元格是否空闲。我想将这种密集表示变成一个

shapely
对象。 例如,以下类型的数组:

0 0 0 0
0 1 1 0
0 1 1 0
0 0 0 0

会变成一个正方形。 我尝试一次构建一个单元并将其连接到更大的形状,或者构建一系列单独的正方形并将它们连接在一起,但事实证明它太慢了。如何以更有效的方式获得形状?

python performance shapely
1个回答
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"])
© www.soinside.com 2019 - 2024. All rights reserved.