目的:
规划项目中,需获取目标地块的用地类型属性
详细需求:
一个目标地块可能跨不同类型地块,将所有类型都写入目标图层的“用地属性”字段,多个类型之间用逗号隔开。如有重复,需去重。
数据:
目标地块面图层,用地属性面图层(底图)
具体步骤:
1、spatial join(空间关联)
toolbox - analyst tools - spatial join
官方帮助:http://resources.arcgis.com/zh-cn/help/main/10.2/#/na/00080000000q000000/
target feature:目标图层
join feature:本身具有用地类型的图层
field map:默认会把两个图层所有字段都带到新图层,此处可以删掉不需要的图层
注意:选择一对一关联时,此处默认只保留join feature中第一个匹配上的属性,而此处需要保留所有匹配的属性
在field map中,选中目的字段“用地属性”,右键,在菜单中选择properties
merge rule:选择如何保留匹配上的属性,此处都保留,选择join
delimiter:分隔符,自己设置空格或逗号等,否则多个属性都连在一起了
match options:匹配规则,此处根据实际需求选择,目标地块和用地属性地块只要有相交,就算匹配,所以选择intersect。
search radius:如果连接要素与目标要素的距离在此范围内,则有可能进行空间连接。空间关系为 INTERSECT 时使用 100 米作为搜索半径表示:如果连接要素位于目标要素周围 100 米范围内,则认为该连接要素匹配。
默认search option为0。结果发现会把相邻共边的地块属性也匹配进来,就设置为-1m,可以解决这个问题。如果地块和地图有少许偏移的时候应该也可以用这个方法避免多余匹配。但是这数值设置不应太大,当我设置为-5m时,有些本身细小的目标地块就无法正确匹配了。
其他match options意义,把比较常用的用红框圈起来了(来自官网):
运行工具,得到用地类型属性。
发现有些会有重复,可能叠加了多个地块,其中有些地块的用地类型是一样的。spatial join工具只会能把所有匹配的保留,没有去重功能,用字段计算功能解决。
2、去重
在属性表中选择该字段,右键,选择字段计算器。
去重需要写个小Python函数,进行以下红框设置。
代码如下:
def delRepeate(string1):
lst1 = string1.split(',')
set1 = set(lst1)
s = ','.join(set1)
return s
运行,得到所需结果,bingo~