使用ogr2​​ogr或gpc溶解/聚集多边形?


16

我有大量的多边形代表美国各县的边界,我需要将它们合并成尽可能少的多边形。

是否可以使用非商业软件或价格合理的软件来做到这一点?

PostGIS不可用,Java也不可用,但是C可用。


OpenSourceSoftware可以做很多事情,您需要什么...工具,库以及具有C编译器的系统,也可以在哪个环境/操作系统下工作?
huckfinn 2014年

从www.qgis.org下载qgis
Antonio Locandro 2014年

@huckfinn:我在CentOS上,命令行工具或Perl-XS或C库将是理想的选择,谢谢。我的源数据在ESRI Shapefile中,尽管我将多边形的副本复制到了MySQL中。我确实有ogr2ogr,但没有MySQL方言。
LeeGee 2014年

我想gpc标题中引用的是GPC –曼彻斯特大学的通用多边形快船图书馆
马特·威尔基

Answers:


31

使用ogr2ogr(GDAL> = 1.10并支持SpatiaLite):

ogr2ogr output.shp input.shp -dialect sqlite -sql "SELECT ST_Union(geometry), dissolve_field FROM input GROUP BY dissolve_field"

1
Windows的Gdal / Ogr版本是否包含Spatialite支持,MS4W,OSGeo4w,gisinternals和geoinformatica?
klewis 2014年

确保由Tamas Szekeres(vbkto.dyndns.org/sdk)维护的AFAIK OSGeo4W和软件包。
Antonio Falciano 2014年

1
您正在使用哪个版本的GDAL(gdalinfo --version)?解决方法是,您可以尝试先创建一个shapefile,然后将其转换为KML,因为KML驱动程序有一些限制。
Antonio Falciano 2014年

3
我有一段时间决定使用什么来“几何”,这是错误的,没有这样的专栏:geometry。在此处Stack和参考文档中的所有类似示例也使用了残破的变体,例如geothe_geom。最终,我发现只有ogrinfo -so摘要开关:ogrinfo -so somedata.gdb my_layer_name和,过滤器为“ Geometry Column =”
matt wilkie

3
另外,如果仅要将shapefile中的所有多边形分解为一个大多边形,则可以执行以下操作: ogr2ogr output_dissolved.shp input.shp -dialect sqlite -sql“从输入中选择ST_Union(geometry)AS几何” 请记住,如果您构建GDAL您自己需要安装sqlite,并在配置中至少包含sqlite和spacespaceite,即标志--with-sqlite --with-spatialite = yes或类似。
cm1

3

如果你想要一个纯粹的轻质C访问,你可以使用的combiantion shapelib弗兰克麦丹和GPC由艾伦·默塔。我发现shapelib中的DBF处理有些棘手,但是阅读一些东西就可以了。对于perl,您可以在CPAN存储库中的Geo :: ShapelibMath :: Geometry :: GPC条目下找到它们。除了使用 Geo :: Proj4进行坐标转换外,您还可以以最小方式访问GIS操作。我喜欢。


谢谢-我确实尝试过,但是它看起来非常非常慢:一个多小时后,在MacBookPro 4gig上聚集了2,000个县。也许是我的编码:)
LeeGee 2014年

您是否使用任何种类的索引,例如重叠的bbox?
huckfinn

否-我在黑暗中绊倒,发现很难找到无法断定我已经从事多年或正在运行PostGIS的裁判。
LeeGee 2014年

但是您也可以将Postgresql / PostGIS与所有高级的东西索引,关系...操作一起使用。使用shp2pg工具可以很容易地导入形状数据。而且SQL语法也不是那么难学……
huckfinn 2014年

PostGIS花费了几秒钟来弄清楚-非常简单,尤其是使用ogr2​​ogr。但是我宁愿使用GPC:我一直在从文件中累积多边形,每次创建一个UNION,花数小时来完成PostGIS在几秒钟内所做的工作,这就是为什么我说这一定是我对文档的误读。
LeeGee 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.