如何使用开源工具从shapefile溶解多边形?


10

在我当前的项目中,我正在可视化地图上的数据,该数据代表一个国家每个行政区域的某些值。我得到了这个国家的shapefile,我将其转换为GeoJSON以与PolyMaps一起使用。现在,我已经要求将多个区域聚集成更大的区域,因为一些较小的部分没有数据,但是可以获取较大区域的汇总数据。这些群集是预定义的(例如A + B + C = D),因此我认为生成群集的shapefile并将其随后转换为GeoJSON会更容易。

但是,如何创建这样的集群(最好是自动化的并且使用开源工具)?当然也欢迎任何其他明智的方式。

Answers:


5

您始终可以使用QGIS之类的开源工具来打开shapefile并使用内置的“合并所选要素”工具合并要素(只需选择要素,单击合并,选择要继承到新合并要素的属性即可)。

如果我们要谈论成百上千的合并,那么这当然没有多大意义。我本人在想,是否有可能在QGIS中“按属性”合并要素?

编辑:好的,我很愚蠢,如果您对要“聚类”的所有功能都具有通用属性(如省或县名),那么这将是溶解工具的一种情况。打开shapefile,选择“溶解”(在QGIS中位于“向量”>“地理处理工具”>“溶解”),选择具有上述通用名称的列,然后开始该过程。希望这会(如果我没有误会你的话)会导致您想要的结果。


总的来说,好的建议,如果全部归结为手动工作,我会找到一个可以像您描述的那样使用QGIS为我创建这些shapefile的人。但是,我希望能够定义这些群集(例如,通过NUTS代码:将FR413和FR411合并为一个名为_FRX1的东西),然后运行一个脚本,该脚本将生成这些群集的shapefile。我希望能够在没有GUI工具开销的情况下纠正错误或适应快速变化。这些集群很可能有一天会由最终用户定义,因此我需要一点灵活性。
尼古拉·普罗科申科2011年

我从不使用它,但是我认为您可以使用控制台在QGIS中完成所有操作,因此不需要GUI。即使完全依赖脚本解决方案,您也将始终必须在某种表中定义这些集群。因此,您可以通过加入此表并进行溶解来避免弄乱您的shapefile。我想这也可以编写脚本吗?
2011年

完全有可能,我在G​​IS方面都是个新手。谢谢,我将研究QGIS脚本。
尼古拉·普罗科申科

2

对于较少的手工工作,您可以看看SpatiaLite。您可以使用例如轻松导入shapefile

spatialite> .loadshp ~/maps/areas areas iso-8859-15
spatialite> UPDATE areas SET Geometry = SetSrid(Geometry,4326);
spatialite> SELECT RecoverGeometryColumn('areas','Geometry',4326,'POLYGON',2);

然后对于溶解部分:

我希望能够定义这些群集(例如,通过NUTS代码:将FR413和FR411合并为一个名为_FRX1的对象)

您需要的功能是GUnion()。您可能想在第二个表中定义“集群”。然后,您可以连接集群表和区域表,并使用GUnion()和GROUP BY创建最终的union_table。

然后可以使用.dumpshp导出到shapefile

spatialite> .dumpshp union_table Geometry new_shapefile iso-8859-15 POLYGON

如果需要GeoJSON,可以立即转换文件。

您可以在Python中编写一个简短的脚本来处理所有这些加载,联接和转储。


看起来很有前途,我将尝试一下!谢谢!您能解释一下UPDATESELECT行吗?
尼古拉·普罗科申科2011年
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.