2015-04-17 67 views
1

我一直在使用ogr2ogr來完成我所需要的大部分shapefile(包括溶解它們)。但是,我發現對於大公司來說,這需要很長時間。拼合/溶解/合併整個shapefile

下面是我在做什麼的例子:

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

在某些情況下,一個可能要解散共用附近的形狀(這是我認爲這裏發生了上面的命令) 。 但是,在我的情況下,我只想簡化整個文件和其中的每個形狀,而不考慮值(我已經隔離了我需要的形狀)。

  • 有一個更快的方法來做到這一點,當你不需要關心的價值觀,只是想,概述形狀的文件中的陣列的形狀?

回答

0

如果您已經分離了這些形狀,並且它們沒有任何共享邊界,則可以使用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(這是很快)做出所有事情的多重聚合,然後做一個應該觸發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 
+0

謝謝,邁克。這是一個很好的領先,但似乎仍然是永遠。也許我會看看PostGIS。將此開放一段時間,然後接受。可能處於死衚衕。 – stewart715

+0

@ stewart715是否ST_Collect(僅)採取永久或組合查詢? PostGIS比SpatiaLite更成熟,您的初始查詢(僅使用ST_Union)應該可以工作。 –

0

我有更好的成功(即更快)通過將其轉換爲光柵然後回到矢量。例如:

# 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"