Gis 展平/溶解/合并整个形状文件
我一直在使用Gis 展平/溶解/合并整个形状文件,gis,geojson,shapefile,gdal,ogr2ogr,Gis,Geojson,Shapefile,Gdal,Ogr2ogr,我一直在使用ogr2ogr来处理shapefile所需的大部分工作(包括分解它们)。然而,我发现对于大的,它需要很长的时间 下面是我正在做的一个例子: ogr2ogr new.shp old.shp-方言sqlite-sql“从旧版本中选择ST_联管(几何图形)” 在某些情况下,可能需要分解常见的相邻形状(我认为在上面的命令中就是这样)然而,在我的例子中,我只想将整个文件和其中的每个形状展平,而不考虑值(我已经隔离了我需要的形状)。 当您不需要关心值,只需要一个在文件中勾勒形状数组的形状时,有
ogr2ogr
来处理shapefile所需的大部分工作(包括分解它们)。然而,我发现对于大的,它需要很长的时间
下面是我正在做的一个例子:
ogr2ogr new.shp old.shp-方言sqlite-sql“从旧版本中选择ST_联管(几何图形)”
在某些情况下,可能需要分解常见的相邻形状(我认为在上面的命令中就是这样)然而,在我的例子中,我只想将整个文件和其中的每个形状展平,而不考虑值(我已经隔离了我需要的形状)。
- 当您不需要关心值,只需要一个在文件中勾勒形状数组的形状时,有没有更快的方法来实现这一点
ogr2ogr gcol.shp old.shp -dialect sqlite -sql "SELECT ST_Collect(geometry) FROM old"
如果几何体重叠且边界需要“溶解”,则必须使用ST_Union。更快的空间合并是通过级联合并技术完成的。它受到OGR的支持,但似乎做得并不优雅 下面是一个两步SQL查询。首先使用ST_Collect对所有内容进行多重多边形(这很快),然后进行自联合,这将触发呼叫 或者为了更好地查看实际的SQL语句:
SELECT ST_Union(gcol, gcol)
FROM (
SELECT ST_Collect(geometry) AS gcol
FROM old
) AS f
通过将其转换为光栅,然后再转换回矢量,我获得了更好的成功(即更快)。例如:
# 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"
谢谢,迈克。这是一个很好的线索,但似乎仍然需要永远。也许我会看看波斯特吉斯。我会让它再打开一点,然后接受。可能是死路一条。@stewart715 ST_Collect(仅)需要永远,还是组合查询?PostGIS比SpatiaLite更成熟,在SpatiaLite中,您的初始查询(仅使用ST_Union)应该可以工作。
# 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"