计算接触(多边形)特征的缓冲区数

Count number of buffers that touch a (polygon) feature

我在 ArcGIS 中面临以下任务 - 我正在使用 ArcMap 10.2 我有一个多边形 shapefile,其中包含(比如说)美国某个州的县。从这个 shapefile 中,我创建了一个图层,它标记了至少有 1 个居民超过 50000 的城市的所有县(我认为这是处理条件)。然后,我在我的县层与那些大城市的多边形周围创建缓冲区,即我在每个县周围绘制一个 100 公里的缓冲区,至少有一个城市的居民超过 50000。 到目前为止一切顺利!

本练习的最后一步应该是为每个多边形创建一个计数,其中包含接触该多边形的缓冲区数。例如,B、C、D 县周围的缓冲区都与 A 县相连。但是 A 县没有超过 50000 居民的城市。因此,我希望城市 A 的计数为 3(它被 B、C 和 D 触及)。我创建了所有缓冲区的联合,但我就是找不到为每个多边形创建此计数的正确方法。 我进行了广泛的 Google 搜索,如果我忽略了明显的解决方案,我深表歉意。

感谢任何帮助!

迈克尔·凯撒 [加州大学圣地亚哥分校研究助理]

如果我正确理解了您的需求,那么创建缓冲区的联合对您没有帮助 - 因为它只剩下一个对象,您需要计算与原始 [ 中的每个对象相交的所有缓冲对象的数量=36=].

在 SQL 中,我将使用 STIntersects() 方法将原始(所有县)图层加入到新的(过滤、缓冲)图层中。类似于以下内容:

DECLARE @original TABLE
(
    [Original_Id] INT NOT NULL,
    [Original_Geom] GEOGRAPHY NOT NULL
);

DECLARE @filtered TABLE
(
    [Buffered_Id] INT NOT NULL,
    [Buffered_Geom] GEOGRAPHY NOT NULL
);

-- We'll pretend the above tables are filled with data

SELECT
    ORIGINAL.[Original_Id],
    COUNT(FILTERED.[Filtered_Id]) AS [NumberOfIntersections]
FROM
    @original AS ORIGINAL
    JOIN
    @filtered AS FILTERED ON (ORIGINAL.[Original_Geom].STIntersects(FILTERED.[Filtered_Geom] = 1)
GROUP BY
    ORIGINAL.[Original_Id]

解释:

在此示例中,@original table 将包含您给定州的所有县 - 就像您缓冲它们之前一样。 [Original_Id] 将包含您可以关联或用于关联回您的数据的内容,[Original_Geometry] 将包含县的边界。

@filtered table 将包含 @original 的子集 - 在您的情况下,仅包含至少 1 个拥有 50,000 居民的城市。 [Buffered_Id] 将匹配 [Original_Id] 中的记录(例如奥兰治县的 ID 可能为 32),而 [Buffered_Geometry] 将包含该县的边界,由(如您的例子) 100km.

完全使用我的例子,你需要从你的 tables 中获取所需的数据并输入我的,但你应该能够使用你的 tables 并根据需要进行调整参考他们。

注意:如果您不希望 "Orange County" 在上述查询中计算 "Orange County (Buffered)",则需要添加一个 WHERE 子句来过滤掉它们。

我没有手头的数据来测试这个,但它应该大部分都在那里。希望对你有帮助。