使用ArcGIS Desktop从一个Shapefile中计数重叠的多边形?


10

我有一个具有16,400个多边形的shapefile。每个多边形表示整个世界鸟类的扩展。

在此处输入图片说明

现在,我必须计算重叠的多边形。我用并集进行了尝试并溶解(计算了并集),但是并集不适用于那么多的多边形。

然后,我尝试裁剪大洲,但是由于多边形数量巨大,这也无法正常工作。而且我尝试了这种方法,也没有成功。

因此,我问你,如果一个shapefile中有16400个多边形,有没有一种方法可以计算重叠的多边形?

我正在使用10.0,可以使用10.2。ArcPy解决方案也很棒。

目前,我正在考虑创建一个渔网,并用16400个多边形遍历shp的行,如果多边形位于该单元格中,则将1写入渔网单元的value字段,然后取下一行(多边形),然后如果也是在渔网单元中,则为+1。

但是我不知道这是否是一个好的解决方案以及如何实现它。或者我必须学习R才能使用这种方法。

结果:应该是一个形状,在其中重叠的多边形中有新的多边形,在其中计算重叠的字段。

因此,最后应该有一个shapefile,您可以在其中查看在同一位置发现了多少种鸟类。


由于数据集的大小,您的问题就是问题。答案(以及您建议的链接)是正确的,但是会遇到内存问题。也许您可以先尝试在数百米的数据上进行积分(基于预期的精度),以避免创建数十亿个条形多边形。确保使用副本,因为它将修改您的数据。
radouxju 2014年

1
将我们的shapefile分成区域shapefile,然后对区域shapefile进行分析,然后分解它们以再次获得完整文件。
til_b 2014年

我尝试仅在一个国家/地区修剪此形状,但出现了错误999999。
娜拉2014年

1
您是否看过Dice工具以降低多边形的复杂性?另外,如果遇到999999错误,只是尝试剪切数据,是否尝试过检查几何工具以查看是否有任何见解?
Hornbydd 2014年

2
我对数据进行了部分几何检查,并且有很多自相交。我建议1.确保最大程度地使用RAM和大页面文件2.修复几何3.如有必要,简化多边形3.将子集数据简化为1 / 3s或1 / 4s(或任何必要的内容)4.运行Union-Dissolve-Rasterize工作流程像这个答案一样。5.对栅格求和。
Cotton.Rockwood 2014年

Answers:



5

使用arcpy几何标记,您可以尝试如下操作:

在此处输入图片说明

import os
import arcpy

arcpy.env.workspace = r"" #path to workspace
arcpy.env.overwriteOutput = 1

polygon_fc = r"" #path to polygon fc

base = [row for row in arcpy.da.SearchCursor(polygon_fc,["OID@","SHAPE@"])]
compare = base

overlaps_stats = {}

for b in base:
    for c in compare:
        if b[1].overlaps(c[1]):
            #print "{0} overlaps {1}".format(b[0],c[0])
            if overlap_stats.has_key(b[0]):
                overlap_stats[b[0]].append(c[0])
            else:
                overlap_stats[b[0]] = [c[0]]

for key,value in overlap_stats.iteritems():
    print "Polygon {0}:  Overlaps: {1}.".format(key,len(value))

对于上面的示例数据,代码将返回以下重叠计数: 在此处输入图片说明

照原样的代码将仅返回至少有一个重叠的多边形的计数。


// @ Nxau:好的,我想我在解释结果的外观时犯了一个错误。它应该是一个形状,在其中重叠的多边形中可以有新的多边形。例如,在您的图片中,圆圈4和5重叠。新形状应具有三个多边形。(联盟不适用于这种大形状)。重叠区域的字段中的值应为2,其余圆圈4和5的字段中的值应为1。因此,最后应该有一个shapefile,您可以在其中查看在同一位置发现了多少种鸟类。感谢您的脚本!
娜拉2014年

5

一个非常简单的方法是:

  1. 联盟与自身shape文件;
  2. 将多部分输出转换为单部分 ;
  3. 使用空间连接工具计算重叠(使用ARE_IDENTICAL_TO匹配选项);
  4. 使用该join_count字段进行符号化。

在此处输入图片说明


1

我猜您尝试过这种方法:在ArcGIS Desktop中对多边形重叠进行计数和栅格化吗?

16,400个多边形并不多。但是,一种潜在的解决方案是简单地进行常规的空间连接。在ArcMap toolbox, > Analysis Tools -> Overlap -> Spatial Join

targetjoin功能都设置为相同的数据集并指定输出。保留其余设置。

片刻之后,您应该返回一个包含“连接计数”列的shapefile。从中减去1(很明显,每个要素都应相交),这应该是每个多边形的“重叠”数(实际上是相交)。

我只是在


是的,我已经从链接中尝试了该方法。但是对于此shp,使用union是不可能的。尝试进行空间连接我得到了以下提示:错误000426:内存不足。
诺拉2014年

我在只有4GB RAM的机器上运行它,并且功能大约是它的5倍,所以我很惊讶它不能以更低的数量工作。您的数据中可能有太多的顶点(我的顶点大约为60MB; .shp文件的大小是多少?)。尝试概括一下。
GIS-乔纳森(Jonathan)

如果仅shp位于fgdb中,则fgdb具有1,73 GB。在文件夹中,形状有2,00GB。
诺拉2014年

我也使用了该数据集,并且我认为许多问题是由于很多多边形具有很多部分而出现的。结合分辨率,这将成为一项非常占用内存的任务。
Cotton.Rockwood 2014年

@ Cotton.Rockwood:您在R中找到了解决方案,对吗?我考虑使用工具箱“ Count Overlapping Polygons”,输入500个多边形(33个选择),而不是将多边形栅格化为值“ join count”,最后计算栅格(ModelBuilder)。这需要很长时间...
Nora 2014年

1

我下载并尝试了“计数重叠多边形”工具。它可能可以工作,但是要花很长时间(可能是因为文件大小,但是我的输入FC仅具有<5,000条记录)。

当我等待该工具运行时,我打开了另一个ArcMap窗口,只花了几个简单的步骤就可以得到我想要的。1)空间联接-使用与“目标”和“联接特征”相同的要素类,然后选择“一对多联接”选项。2)溶解-使用最后一步的输出。使用“ TARGET_FID”作为溶解字段,对于统计信息,您可以将“ Join_Count”字段相加,也可以将“ JOIN_FID”字段相加。3)在第2步的输出文件中,使用字段计算器从stats字段中减去1(“ SUM_Join_Count”或“ COUNT_JOIN_FID”),因为每个要素都相交。

我建议在“计数重叠多边形”工具上使用此方法。在开始此Join-> Dissolve方法之前,我开始运行COP工具约5分钟,它给了我足够的时间来编写结果,甚至还没有完成“ Count Overlapping Polygon”工具的编写。

希望这可以帮助!

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.