问题:

查询与每条道路相接的目标道路,其中与线要素矢量化起点相接目标道路定义为前一条道路,与终点相接的道路定义为后一条道路。需要将前一条道路和后一条道路的id值记录到当前正在查询道路指定字段中。

在arcmap查询道路的前一条道路和后一条道路

解决方案:

首先使用要素折点至点工具设置点类型参数为START提取每条要素起点

在arcmap查询道路的前一条道路和后一条道路

生成的起点要素类属性表中会包含road要素类中除长度字段外的所有字段,同时会生成一个ORIG_FID字段,该字段记录了点要素所在线要素的OBJECTID值。

 

 

在arcmap查询道路的前一条道路和后一条道路

 

在arcmap查询道路的前一条道路和后一条道路

 

然后打开空间连接工具,该工具能根据指定的空间关系,将连接要素中的字段映射到目标要素中,那么这里就可以通过将road要素类中的属性表通过相交关系映射到起点的属性表中。

这里需要将所有相交要素ID值保存在属性表中的单个记录项中,需要设置新生成的存储相交要素id值字段的合并规则为连接,并设置各ID值之间的分隔符。

在arcmap查询道路的前一条道路和后一条道路

在arcmap查询道路的前一条道路和后一条道路

打开空间连接输出结果属性表,可以看到与起点相交要素的编码值都已经保存到属性表中的ID_1字段中。

在arcmap查询道路的前一条道路和后一条道路

接下来需要将该字段连接到road要素类中,前文中已经说明过,中心点要素类中的ORIG_FID字段对应road要素类中的FID字段,这里可以通过字段连接工具,通过公共字段将空间连接工具输出结果中的ID_1字段连接到road要素类中。

在arcmap查询道路的前一条道路和后一条道路

不过该字段中的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

在arcmap查询道路的前一条道路和后一条道路

另外对于一些复杂的道路,比如三叉路口,会不可避免的额外查询到不是下一条要素的错误id,此时需要手动剔除。

在arcmap查询道路的前一条道路和后一条道路

查询后一条道路与查询前一条道路过程类似,只需要在要素折点转点工具中将点类型设置为END,这里不做过多说明。

相关文章: