我有一组代表行政区的多边形。区域是手工数字化的,在多边形之间应该接触多边形的地方有很小的空间(条子)。
如何使多边形对齐在一起,删除空格?
首选QGIS,但也可以使用ArcGIS和常规编程。
#1 楼
使用消除(将其与面积最大或共享边界最长的相邻多边形合并)来消除多边形(使用ArcInfo许可)。消除(Eliminate)通常用于去除由叠加操作(如“相交”或“并集”)导致的小条形多边形。http://help.arcgis.com/en/arcgisdesktop/10.0/help/index .html#// 00170000005p000000.htm
ArcGIS 10用户请注意,此工具的选项中有一个新功能。
它现在可以使用选项> ex_features保留原始的POLYGON或POLYLINE。(可选)定义多边形边界或其一部分的输入多义线或多边形要素类或图层,不应将其消除。
#2 楼
要在QGIS中手动执行此操作,请转到Settings|Project Properties...
。在底部的General
选项卡上是Snapping options...
。检查要捕捉的图层,将模式设置为to vertex
,并将公差设置为小于两个点之间的最短距离的某个值你有。如果不确定,请将单位设置为pixels
,并将公差设置为5之类的值,这样,如果有一些细节问题,您就可以放大并确保不会捕捉到错误的顶点。然后编辑矢量层,选择节点工具,然后将误差点移至其对应点。
自动执行此过程比较麻烦。 AFAIK QGIS没有插件可以使它自动化,尽管PostGIS是基于具有捕捉功能的GEOS构建的,但它们并未暴露于PostGIS。可能可以编写查询来检查多边形的每个点以查找捕捉距离内的邻居,但是目前这超出了我的智慧。
GRASS具有v.clean.snap,您可以可以通过QGIS进行访问,但是还有一个额外的步骤来创建GRASS数据集。
评论
您始终可以使用QGIS处理工具箱,并将v.clean.snap直接应用于shapefile。
– SAnderka
2014年4月29日在6:56
v.clean.snap不可用。我使用v.clean,然后选择了捕捉工具,它给出了一个空层。文档说,捕捉是将线连接到顶点。我想将顶点连接到阈值内的另一个顶点。
–neogeomat
2014年6月6日下午5:25
#3 楼
如果您熟悉QGIS:在QGIS干线1.9(可以通过OSGEO安装程序作为qgis.dev安装,请参见qgis主页)是矢量菜单中的一项新功能,称为“消除条形多边形”,该功能
您可以选择有问题的多边形,然后根据共同的边界或面积比例将它们合并到相邻的多边形中。试试吧!
评论
要更新此答案,请在稳定的包装中找到QGIS 2.18.1中的“消除条形多边形”,该标签位于“矢量->地理处理工具”下。
– Valerie Anderson
16 Dec 27 '17:39
这适用于主要主体之间的现有散条状多边形,而不适用于多边形之间的间隔。
– Stragu
17年4月21日在4:31
#4 楼
如果您是QGIS用户,那么您将获得GRASS的全部功能,因为它是完全拓扑的GIS。在QGIS内部激活GRASS插件,创建一个位置/地图集,以在其中导入数据。打开地图集,并使用v.in.ogr导入脏层:播放两个高级参数“捕捉阈值”边界”和“要导入的最小区域”。
还可以使用v.clean模块提供的选项。
#5 楼
ArcGIS具有拓扑规则,可以帮助您识别和纠正数据中的空白,例如您要引用的空白。为了创建拓扑规则,您将需要ArcEditor或ArcInfo许可并将要素类存储在个人或文件地理数据库中的要素数据集中。您很可能希望实现“必须有间隙”规则。创建了您认为必要的所有规则的规则库后,您将需要验证拓扑,该拓扑将识别数据中的所有错误。
然后,使用Error Inspector和使用“修复拓扑错误工具”,您可以单独或批量选择要修复的错误以及修复方式(即-创建新的多边形以填充空隙或与附近的较大多边形合并)。
#6 楼
QGIS 2.12(Lyon)工具箱中有一个“消除条形多边形”功能。我确定它也在某些早期版本中。#7 楼
好吧,我一直在使用PostGIS函数(我直接在QGIS上使用),该函数执行递归快照来解决此问题。结果是相当不错的,它只需要一个很好的公差值就可以得到最好的结果。如果您愿意尝试,请检查一下(在我的情况下,所有的几何图形都是多重的,因此在我的执行程序中为st_multi):CREATE OR REPLACE FUNCTION dsgsnap(tabela text, snap float) RETURNS void AS
$BODY$
DECLARE
id int;
BEGIN
FOR id in execute('select id from '||tabela)
LOOP
EXECUTE
'update '||tabela||' as classe set geom = st_multi(res.geom)
from
(
select st_snap(a.geom, st_collect(b.geom), '||snap||') as geom, a.id as id
from '||tabela||' a, '||tabela||' b
where a.id != b.id and a.id = '||id||'
group by a.id, a.geom
) as res
where res.id = classe.id';
END LOOP;
RETURN;
END
$BODY$
LANGUAGE plpgsql;
#8 楼
这不是一个完美的解决方案,但是在大多数情况下,这两种方法中的一种对我有用:在QGIS中,将图层保存为GEOJSON格式。但是在保存之前,在“另存为”对话框中,将坐标精度设置为3(默认值为15)。这将具有团结彼此非常接近的顶点的效果。
转到Mapshaper,上传文件,然后点击“简化”。在左上角,它将告诉您找到了多少个相交线,并提供了修复它们的选项。我发现此修复程序大约有一半的时间有效。
#9 楼
我遇到了同样的问题,尽管我不了解逻辑,但通过探索工具我可以很轻松地解决问题。![在工具中,转到数据管理工具框,转到要素类,然后通过双击运行集成脚本] [1]
在“脚本”窗口中选择有问题的要素类,然后在XY公差中,借助测量工具在多个点上通过测量距离来添加数值,并获得该数值在公差环境中的平均值,然后应用解决的问题,我现在不怎么解决,但可以达到90%的精度。
![在此处输入图像描述] [2]
我尝试了上述答案中描述的所有其他方法,但是要对相邻多边形之间的间隙进行自动校正很难而且麻烦。
评论
如果将链接粘贴到您要引用的图像,则可以添加它们。
– djq
2012年11月21日在21:32
评论
在动物园的情况下行得通吗?数据集中似乎没有碎片,只是多边形之间的间隙。
– Underdark♦
2011年6月14日14:46
我已成功使用此工具消除了多边形之间的间隙。但是,使用此工具存在问题。在地理处理过程中使多边形破裂时,会泛化新创建的多边形。因此,曲线不会那么平滑,而是具有尖锐的“锯齿状”线。嗯
–amasephy
2011年6月14日14:57
@underdark好点。但是,人们总是可以通过将数据与整体的多边形(例如数据集的边界框)结合起来来引入条。一个有趣的问题是“消除”如何选择将条合并到哪个多边形中。这可能会使结果产生偏差(尽管我怀疑这种偏差在大多数应用中是否很重要)。在这种特殊情况下,理想的解决方案是将条子分开或将误差平均化。
– hu
2011年6月14日的15:00
该工具的选项之一是将条与相邻的多边形合并在一起,该边界具有最长的边界(默认选项)或最大的面积。
– kenbuja
2011年6月14日在16:04
如果您没有ArcInfo许可证,则位于arcscripts.esri.com/details.asp?dbid=14672处的脚本可通过Python自动执行此操作。几年前,我成功使用了它。
–斯蒂芬·李
2011年6月15日在2:12