我一直在使用 ogr2ogr 来完成我对 shapefile 的大部分需求(包括解散它们)。然而,我发现对于大的来说,这需要很长时间。

这是我正在做的一个例子:
ogr2ogr new.shp old.shp -dialect sqlite -sql "SELECT ST_Union(geometry) FROM old"
在某些情况下,人们可能想要溶解常见的相邻形状(我认为在上面的命令中就是这样做的)。 但是,在我的情况下,我只想展平整个文件和其中的每个形状,而不管值如何(我已经隔离了我需要的形状)。

  • 当您不需要关心值并且只想要一个勾勒出文件中形状数组的形状时,是否有更快的方法来执行此操作?
  • 最佳答案

    如果您已隔离这些形状,并且它们没有任何共享边界,则可以使用 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
    

    关于gis - 展平/溶解/合并整个 shapefile,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29701086/

    10-09 18:41