代码之家  ›  专栏  ›  技术社区  ›  Michael Kaiser

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

  •  0
  • Michael Kaiser  · 技术社区  · 10 年前

    我在ArcGIS中面临以下任务-我正在使用ArcMap 10.2 我有一个多边形形状文件,其中包含美国某个州的县。从这个形状文件中,我创建了一个图层,标记了至少有一个城市超过50000居民的所有县(我认为这是治疗条件)。然后,我在我所在的县与那些大城市之间的多边形周围创建缓冲区,也就是说,我在至少有一个城市超过50000居民的每个县周围绘制一个100公里的缓冲区。 到现在为止,一直都还不错!

    本练习的最后一步应该是为每个多边形创建一个计数,其中包含接触该多边形的缓冲区数。例如,B县、C县和D县周围的缓冲区都与A县接触。然而,A县没有超过50000居民的城市。因此,我希望A市的计数为3(由B、C和D触摸)。我创建了所有缓冲区的并集,但我无法找到正确的方法为每个多边形创建此计数。 我在谷歌上做了大量搜索,如果我忽略了显而易见的解决方案,我很抱歉。

    感谢任何帮助!

    迈克尔·凯撒 [UCSD员工研究助理]

    1 回复  |  直到 10 年前
        1
  •  0
  •   Jon Bellamy    10 年前

    如果我正确理解了您的需求,那么创建缓冲区的并集将不会对您有所帮助,因为它只会给您留下一个对象,您需要所有缓冲对象的计数,这些对象与原始表中的每个对象相交。

    在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个城市50000居民的人。[Buffered_Id]将匹配[Original_Id]中的记录(例如,Orange County可能具有Id 32),[Buffered Geometry]将包含县的边界,缓冲距离为100km(如您的示例中所示)。

    确切地说,使用我的示例,您需要从表中获取所需的数据并将其输入到我的表中,但您应该能够使用表并根据需要进行调整以引用它们。

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

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