arcmap desktop iterator,能否让两个GDB,自动寻找对应的名字进行SPATIAL_JOIN


1.png




3.png


4.png

1.公交站点存在一个GDB里,用两个站点做实验(实际会很多),已用Iterator feature class,将GDB里的公交站点,分别和路网SPLIT LINE AT POINT(站点手动点的,直接点在路网上)。得到LineT331.shp等等(这里有个小问题,不知道为什么在道路交叉口也断开了)。
 
2.然后想通过SPATIAL JOIN,将分好段的LineT331.shp,自动和GDB里的T331进行关联,因为我在点T331时候,使用AUTOincretment字段计算器(感谢慕姐)将站点编号好了,如331-1,331-2。
 
3.最后想得到的结果,就是每趟公交线,每个站点间是一个POLYLINE,而且编号为站点的331-1.331-2等等。
 
目前就是卡在:如
5.png

下面不知道如何自动让站点GDB和LineT331,LineT332等等进行批量Spatial join
 
 
 
 
已邀请:

江宝骅

赞同来自: Brandon4u

1、SPLIT LINE AT POINT工具功能是:Splits line features based on intersection or proximity to point features,所以在在交叉点也会被打断;(既然你的点是在线上取的,可以把点生成线--point to line(貌似你之前问过这个问题),然后再打断)
2、由于是“两个GDB,自动寻找对应的名字进行SPATIAL_JOIN”,ModelBuilder中只能有一个迭代,可以用python
---------------------------------------------------------------------------------------
@Brandon4u python 批量实现spatial join
原数据如下:
360截图20161028215130408.jpg

代码如下:
#coding:utf-8
'''
使用循环嵌套判断然后进行spatial join,
PS:接触Arcpy没多长时间,用有限的水平写的,可能有更好的实现方式,以下仅供参考
'''
import arcpy
import os
arcpy.env.workspace = r"D:\test\trans\station.gdb"#存储站点gdb的路径
station = arcpy.ListFeatureClasses()
line=r"D:\test\trans\line.gdb"
outspace=r"D:\test\New File Geodatabase.gdb"#输出到该gdb的路径
linewalk=arcpy.da.Walk(line, datatype="FeatureClass")#
'''由于arcpy.ListFeatureClasses()只能是一个工作空间,为了嵌套比较,
所以用了arcpy.da.Walk,实际arcpy.da.Walk可以用两次,
可以不用arcpy.ListFeatureClasses()'''
for dirpath, dirnames, filenames in linewalk:#获取线的名称和路径
for linename1 in filenames:#获取线的名字
linename=linename1[4:]#将线名之前“line”去掉,以便下边的线路和站点判定
for stationpath in station:#同样获取站点路径
stationname=os.path.splitext(stationpath)[0]#获取站点名
if linename==stationname:#判断线路和站点名字是否一致
linepath=os.path.join(line, linename1)#线路路径
outfc=os.path.join(outspace, linename)#站点路径
arcpy.SpatialJoin_analysis(linepath, stationpath, outfc)#spatial join!
print u"处理完成"


 

Brandon4u - 交通规划小白

赞同来自:

turtle

赞同来自:

谢邀
有两个建议:
1. 保证线数据的质量,不要出现下面的情况

line.png

 
2. 可以考虑将路口拐点一并放入站点点数据里面,这样可以选择出完整的线路,路口拐点命名可以采取如331-1-2-1(331路第一站与第二站之间的第一个路口);
 
其他方面的解答参考江宝骅的答案,另外谁能告诉我怎么在回答中@某人

要回复问题请先登录注册