我在ArcGIS中面临以下任务 - 我正在使用ArcMap 10.2 我有一个多边形shapefile,其中包括(比如说)美国的州。从这个shapefile中,我创建了一个图层,标记了至少有一个城市超过50000居民的所有县(我认为这是治疗条件)。然后我在那些大城市的县里面的多边形周围创建缓冲区,即我在每个至少有一个人口超过50000的城市周围画一个100公里的缓冲区。 到目前为止一切都很好!
本练习的最后一步应该是为每个多边形创建一个计数,其中包含触及此多边形的缓冲区数。例如,县B,C和D周围的缓冲区都触及A县。但是A县并没有超过50000居民的城市。因此,我希望城市A的计数为3(它被B,C和D触及)。我创建了所有缓冲区的并集,但我无法找到为每个多边形创建此计数的正确方法。 我已经进行了广泛的Google搜索,如果我忽略了明显的解决方案,我会道歉。
感谢任何帮助!
迈克尔凯撒 [职员研究助理加州大学圣地亚哥分校]答案 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子句来过滤它们。
我没有数据可以用来测试这个,但它应该主要存在。希望它有所帮助。