问题:
查询与每条道路相接的目标道路,其中与线要素矢量化起点相接目标道路定义为前一条道路,与终点相接的道路定义为后一条道路。需要将前一条道路和后一条道路的id值记录到当前正在查询道路指定字段中。
解决方案:
首先使用要素折点至点工具设置点类型参数为START提取每条要素起点
生成的起点要素类属性表中会包含road要素类中除长度字段外的所有字段,同时会生成一个ORIG_FID字段,该字段记录了点要素所在线要素的OBJECTID值。
|
|
|
然后打开空间连接工具,该工具能根据指定的空间关系,将连接要素中的字段映射到目标要素中,那么这里就可以通过将road要素类中的属性表通过相交关系映射到起点的属性表中。
这里需要将所有相交要素ID值保存在属性表中的单个记录项中,需要设置新生成的存储相交要素id值字段的合并规则为连接,并设置各ID值之间的分隔符。
打开空间连接输出结果属性表,可以看到与起点相交要素的编码值都已经保存到属性表中的ID_1字段中。
接下来需要将该字段连接到road要素类中,前文中已经说明过,中心点要素类中的ORIG_FID字段对应road要素类中的FID字段,这里可以通过字段连接工具,通过公共字段将空间连接工具输出结果中的ID_1字段连接到road要素类中。
不过该字段中的ID值并不是最终结果,其中包括起点与源要素自己相交的情况,此时可以通过新建一个nestroad的文本类型字段,打开字段字段计算器,构建如下Python表达式将ID_1字段中源要素的ID值删除掉。
def deleteString(A, B):
if ";" + B in A:
result=A.replace(";" + B, '')
return result
else:
result =A.replace(B + ";", '')
return result
另外对于一些复杂的道路,比如三叉路口,会不可避免的额外查询到不是下一条要素的错误id,此时需要手动剔除。
查询后一条道路与查询前一条道路过程类似,只需要在要素折点转点工具中将点类型设置为END,这里不做过多说明。