压平/解散/合并整个shapefile

时间:2015-04-17 13:47:26

标签: gis geojson shapefile gdal ogr2ogr

我一直在使用ogr2ogr来完成我需要的大部分形状文件(包括解散它们)。但是,我发现对于大型的,它需要很长时间。

以下是我正在做的事情的一个例子:

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

在某些情况下,人们可能想要解散常见的相邻形状(我认为这是在上面的命令中进行的)。 但是,在我的情况下,我只是想整理整个文件及其中的每个形状而不管值(我已经隔离了我需要的形状)。

  • 当您不需要关心这些值并只想要一个概述文件中形状数组的形状时,有更快的方法吗?

2 个答案:

答案 0 :(得分:2)

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

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

如果几何重叠并且边界需要"溶解",则必须使用ST_Union。使用级联联合技术described here for 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

答案 1 :(得分:-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"