span8
span4
我有许多线路中的地图网络,我想从不同线中的一条线定义起始点然后我想在每个方向上流动,直到结束为上图中
开始点开始,然后在第一方向去,但它会发现3 directon第一交点所以去逐个如实施例然后将其在第一行找到第二交点与3方向然后FO直到到达端线1与给我最后一点的坐标(最后顶点1)
然后来BK到第二交叉点,并继续在第二行,但它找到的第三交叉点,以便去,直到端线2和提取物的顶点,然后来到BK至第三交点并转到结束线3和提取顶点然后来BK到第二交叉点,去最后一个直接离子直到年底4号线给我coordintaes最后一点,并完成后,返回到第一个交点,直到抵达终点线5等。
最后我要检查每一个最后一行的终点坐标并提取ID从起点至终点线1的整个路径,并从起点至终点2号线等为每个路径成为可能。
我想了很多,但我仍然不知道如何申请,我希望如果有人提出想法和变压器我应该用它来做到这一点。
我的FME 2018版
非常感谢
你好@ gogopotter90,这是我尝试在它ShortestPathFinder:
不知道你的输入线看起来怎么样,但这里的想法是从顶点的出现次数确定结束节点 - 如果他们是交叉点,发生将超过一次。如果每行只有开始和结束节点,中间没有任何顶点这只会工作。为了确保第一菜刀是用来打破的线段。从ShortestPathFinder所得路径包含所有与开始和结束节点的坐标的段。
我还附上了工作区和样本数据shape文件。希望这可以帮助。
回复较晚,抱歉。请看附件的工作区在2018年的版本重新创建。PathFinder_2018.fmwI noticed the LineBuilder in this version (Build 18283) didn't have GroupBy function, so I added a FeatureHolder and a Sorter so that the From/To Lines were created with correct pairs of start/end nodes (i.e. start and end nodes have the same _count number).
如果是我,我会运行通过TopologyBuilder网络,然后使用PythonCaller运行深度优先搜索。
严格使用常规变压器,我会尝试的ShortestPathFinder,克隆你的统计点,并从制作到永远的终点线。
说实话,我试图通过循环做到这一点,但我没有成功,但我会尽量乌尔建议,但有关shortestpathfinder,我在想这件事,但我想通过未知的线用不同的ID做这个问题不是我定义每个行这点将开始和结束。谢谢您的回复
我没有剧本,正是你想做的事。甲DFS要求数据是在一个曲线图。下面的代码设置一个加权图,并有DFS的方法,但你必须去适应你想要的FeatureProcessor输出的close方法。
请注意,topologyBuider的边缘端口应该连接到Python的调用者。
另外请注意,你可能不关心边权,可以简化代码将其删除。
第三个音符,这随意分配第一个节点作为起始节点,想必你的数据具有指示这是启动节点的一些方式。
进口FME进口fmeobjects#Graph类结构,其适于从http://www.bogotobogo.com/python/python_graph_data_structures.php类顶点的:def __init __(个体,节点):self.id =节点self.adjacent = {} DEF __str __(自):返回STR(self.id)+ ':' + STR([x.id对于x在self.adjacent])DEF add_neighbor(个体,邻居,重量= 0,EdgeID的= 0):self.adjacent [邻居.ID] =(EdgeID的,重量)DEF get_connections(个体):返回self.adjacent.keys()DEF get_id(个体):返回self.id DEF get_weight(个体,邻居):返回self.adjacent [邻居] [1] DEF get_edgeID(个体,邻居):返回self.adjacent [邻居] [0]类图形:DEF __init __(个体):self.vert_dict = {} self.num_vertices = 0闪避__iter __(个体):返回ITER(个体。vert_dict.values())DEF add_vertex(个体,节点):self.num_vertices = self.num_vertices + 1 new_vertex =顶点(节点)self.vert_dict [节点] = new_vertex返回new_vertex DEF get_vertex(个体,N):如果n在self.vert_dict:返回self.vert_dict [N]其他:无回报高清的add_edge(自我,FRM,于,成本= 0,EdgeID的= 0):如果不FRM在self.vert_dict:self.add_vertex(FRM)如果不在self.vert_dict:self.add_vertex(至)self.vert_dict [FRM] .add_neighbor(个体。vert_dict [到],成本,EdgeID的)self.vert_dict [到] .add_neighbor(self.vert_dict [FRM],成本,EdgeID的)DEF get_vertices(个体):返回self.vert_dict.keys()DEF DFS(G,v,看出=无,路径=无,成本=无):如果看到的是无:看到= [],如果路径是无:路径= []如果成本是无:成本= 0 seen.append(v)的路径= []瓦特= G.get_vertex(v)中在w.get_connections S():如果不可见小号C = w.get_weight(一个或多个)的eID = w.get_edgeID(S):S_PATH =路径+ [的eID] s_cost =成本+ Cpaths.append(((S_PATH),s_cost,S))paths.extend(DFS(G,S,可见,S_PATH,s_cost))返回路径类FeatureProcessor(对象)的:def __init __(个体):self.graph =格拉夫()self.featureList = [] DEF输入(个体,特征):#获取边缘arcID = feature.getAttribute( '_ edge_id')FN = feature.getAttribute的节点和id( '_ from_node')TN = feature.getAttribute( '_to_node')#calculate的楞的边长的第= feature.getGeometry()。的getLength(假)#将它们图形self.graph.add_edge(FN,TN,长度,arcID)#将功能featureList self.featureList.append(特征)DEF close(self): sV = self.graph.get_vertices()[0] paths = DFS(self.graph, sV)
同样,对于最近的一个项目的解决方案是ShortestPathFinder对于一个相同的问题。
此执行网络/图形跟踪相当有效:
可我要问,
创建所有的开始和结束节点之间的无约束加盟返回StartNodeID和EndNodeID组
请,你能不能解释一下多了,我没有得到这一步
还什么ü意味着在此步骤中创建到与这些点对线。
该变压器是做论文的步骤
我需要在最后每行ID,如果顶点卸妆所以线交叉将是一个线,并且可以得到新的ID,但我需要的原始ID或每一行做了,有没有可能
非常感谢帮助
©2020安全亚搏在线软件公司|法律