计算触摸(多边形)要素的缓冲区数

时间:2015-02-11 00:22:00

标签: buffer polygon geospatial spatial arcgis

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

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

感谢任何帮助!

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

1 个答案:

答案 0 :(得分:0)

如果我理解你想要的东西,那么创建缓冲区联合不会帮助你 - 因为它留下了一个对象,你需要计算与原始表中每个对象相交的所有缓冲对象

在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表将包含你所在州的所有县 - 就像你在缓冲它们之前一样。 [Original_Id]将包含您可以关联或用于与您的数据相关联的内容,[Original_Geometry]将包含该县的边界。

@filtered表将包含@original的子集 - 在您的情况下只包含至少有1个城市的50,000居民。 [Buffered_Id]将匹配[Original_Id]中的记录(例如橙县可能有Id 32),[Buffered_Geometry]将包含县的边界,由(如示例所示)100km缓冲。

准确地使用我的示例,您需要从表格中获取所需的数据,但是您应该能够使用表格并根据需要进行调整以引用它们。

注意:如果你不希望"橙县"计算"橙县(缓冲)"在上面的查询中,您需要添加一个WHERE子句来过滤它们。

我没有数据可以用来测试这个,但它应该主要存在。希望它有所帮助。