4

我一直在使用ogr2ogrshapefile 来完成我需要的大部分工作(包括溶解它们)。但是,我发现对于大的,这需要很长时间。

这是我正在做的一个例子:

ogr2ogr new.shp old.shp -dialect sqlite -sql "SELECT ST_Union(geometry) FROM old"

在某些情况下,人们可能想要分解常见的相邻形状(这是我认为在上面的命令中发生的事情)。但是,在我的情况下,我只想展平整个文件和其中的每个形状,而不考虑值(我已经隔离了我需要的形状)。

  • 当您不需要关心值并且只想要一个概述文件中形状数组的形状时,是否有更快的方法来执行此操作?
4

2 回答 2

3

如果您已隔离形状,并且它们没有任何共享边界,则可以使用 ST_Collect 轻松将它们收集到单个 MULTIPOLYGON 中。这应该非常快速且简单:

ogr2ogr gcol.shp old.shp -dialect sqlite -sql "SELECT ST_Collect(geometry) FROM old"

如果几何重叠并且边界需要“溶解”,则必须使用 ST_Union。更快的空间联合是通过级联联合技术完成的,此处针对 PostGIS 进行了描述。OGR 支持它,但它似乎并没有优雅地完成。

这是一个两步 SQL 查询。首先使用 ST_Collect 对所有内容进行 MULTIPOLYGON(这很快),然后进行自联合,这应该会触发UnionCascaded()调用。

ogr2ogr new.shp old.shp -dialect sqlite -sql "SELECT ST_Union(gcol, gcol) FROM (SELECT ST_Collect(geometry) AS gcol FROM old) AS f"

或者为了更好地查看实际的 SQL 语句:

SELECT ST_Union(gcol, gcol)
FROM (
  SELECT ST_Collect(geometry) AS gcol
  FROM old
) AS f
于 2015-04-20T00:56:44.857 回答
-1

通过将其转换为栅格然后再转换回矢量,我取得了更好的成功(即更快)。例如:

# convert the vector file old.shp to a raster file new.tif using a pixel size of XRES/YRES
gdal_rasterize -tr XRES YRES -burn 255 -ot Byte -co COMPRESS=DEFLATE old.shp new.tif

# convert the raster file new.tif to a vector file new.shp, using the same raster as a -mask speeds up the processing
gdal_polygonize.py -f 'ESRI Shapefile' -mask new.tif new.tif new.shp

# removes the DN attribute created by gdal_polygonize.py
ogrinfo new.shp -sql "ALTER TABLE new DROP COLUMN DN"
于 2017-01-11T02:59:50.373 回答