I wondered if there's an easy way to 'clean up' a pgRouting network by removing those edges that do not connect with the global network. Otherwise you risk to end up with cost values of -1
, meaning there exists no path between the given source and target (pgr_kdijkstra).
I handled the osm.pbf file with osm2po (v4.8.8) and imported the network into a spatial database with the generated SQL script.
Getting back to my question, I found it lacked a bit of context :-) So...
I had generated a set of points as the centroids of a polygon layer. Eventually I want to use these centroids as start/end nodes to calculate shortest paths. As these points do not belong to a network, I cannot use them directly for routing. Therefore I searched for the nodes that are closest to the set of centroids by means of Vector > Analysis Tools > Distance matrix
in QGIS. The problem, however, is that it is possible these 'corresponding' nodes are unreachable from the global network. When calculating shortest paths, they are indicated with a cost of -1
.
As @Carsten noted, commenting out the following line in the config file of osm2po
postp.1.class = de.cm.osm2po.plugins.PgVertexWriter
will detect all dead ends or 'dangles'. As such you are able to filter them out from the whole set of nodes. But then, the problem indeed is that if an isolated mini-network consists of more than 1 segment, the vertices in the middle are not filtered out as these vertices are no dead ends. The figure from above represents the 'ideal' situation of an isolated mini-network of 1 segment and thus 2 dead ends. Eliminating those nodes results in eliminating the whole mini-network, which is nice.
So in fact, my question should have been 'How to eliminate (or detect) nodes and segments that are not connected to the global network'? That requires a little more (post)processing, as it is not incorporated as a preprocessing step which @Carsten also mentions in a related question.