So, in QGIS I'm trying to apply the script "Point layer to route".
(See this website for a general idea about the script: http://anitagraser.com/2013/10/19/a-routing-script-for-the-processing-toolbox/#comments)
The script takes as input: a network layer and point. The goal is to map-match the point to the network and subsequently create a route, from the points, on the network. Below your can see the network in grey, the points in red, and the route in red.
The process, from right to left, goes as it should, until the 2 point in the left lower corner. When the distance between the network and the points becomes less than 10 meters, the process isn;t exectued anymore. Do you guys have any idea on how to solve this?
The scipt is added below:
#Definition of inputs and outputs #================================== ##Routing tools=group ##points=vector point ##network=vector line ##route=output vector line #Algorithm body #================================== from PyQt4.QtCore import * from PyQt4.QtGui import * from qgis.core import * from qgis.gui import * from qgis.networkanalysis import * from processing.tools.vector import VectorWriter point_layer = processing.getObject(points) network_layer = processing.getObject(network) writer = VectorWriter(route, None, [QgsField("order", QVariant.Int)], network_layer.dataProvider().geometryType(), network_layer.crs() ) # prepare graph vl = network_layer director = QgsLineVectorLayerDirector( vl, -1, '', '', '', 3 ) properter = QgsDistanceArcProperter() director.addProperter( properter ) crs = vl.crs() builder = QgsGraphBuilder( crs ) # prepare points features = processing.features(point_layer) point_count = point_layer.featureCount() points =  for f in features: points.append(f.geometry().asPoint()) tiedPoints = director.makeGraph( builder, points ) graph = builder.graph() route_vertices =  for i in range(0,point_count-1): progress.setPercentage(int(100 * i/ point_count)) from_point = tiedPoints[i] to_point = tiedPoints[i+1] from_id = graph.findVertex(from_point) to_id = graph.findVertex(to_point) (tree,cost) = QgsGraphAnalyzer.dijkstra(graph,from_id,0) if tree[to_id] == -1: continue # ignore this point pair else: # collect all the vertices between the points route_points =  curPos = to_id while (curPos != from_id): route_points.append( graph.vertex( graph.arc( tree[ curPos ] ).inVertex() ).point() ) curPos = graph.arc( tree[ curPos ] ).outVertex() route_points.append(from_point) # add a feature fet = QgsFeature() fet.setGeometry(QgsGeometry.fromPolyline(route_points)) fet.setAttributes([i]) writer.addFeature(fet) del writer