The stplanr provides Functionality and data access tools for solving the routing problems in R, mainly using the shortest path algorithm. It is based on the sp and igraph packages. So the shortest path algorithms are from the igraph package?

Basically, it provides a SpatialLinesNetwork class. Some very useful functions are in the follows:

Note that both sum_network_links and sum_network_route are quite slow and eats up a lot of memory for a large number of O-D pairs. Both function use the shortest route, and summarise of the link use or route length of all pairs, rather than that of an individual O-D. In order to obtain the link use or route length between an O-D, the mapply or map function or their parallel versions can be used. According to experiments, using an apply function on many O-D pairs is almost as efficient as that of calling sum_network_links or sum_network_route in one go.

I have done a project using stplanr, to solve the following problem: given a road network and a set of O-D coordinates not on the network, summarise the road use from the shortest paths between the O-D.

This is done through the following steps:

The unsolved problem: although the network is identified as connected by the nt.connect function, meaning that all nodes in the network are connected, the sum_network_* function returns NA for some O-D pairs.

LS0tDQp0aXRsZTogIlNvbHZpbmcgdGhlIHJvdXRpbmcgcHJvYmxlbXMgaW4gUjogc3RwbGFuciINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNClRoZSAqc3RwbGFuciogcHJvdmlkZXMgRnVuY3Rpb25hbGl0eSBhbmQgZGF0YSBhY2Nlc3MgdG9vbHMgZm9yIHNvbHZpbmcgdGhlIHJvdXRpbmcgcHJvYmxlbXMgaW4gUiwgbWFpbmx5IHVzaW5nIHRoZSBzaG9ydGVzdCBwYXRoIGFsZ29yaXRobS4gSXQgaXMgYmFzZWQgb24gdGhlIHNwIGFuZCBpZ3JhcGggcGFja2FnZXMuIFNvIHRoZSBzaG9ydGVzdCBwYXRoIGFsZ29yaXRobXMgYXJlIGZyb20gdGhlIGlncmFwaCBwYWNrYWdlPw0KDQpCYXNpY2FsbHksIGl0IHByb3ZpZGVzIGEgKipTcGF0aWFsTGluZXNOZXR3b3JrKiogY2xhc3MuIFNvbWUgdmVyeSB1c2VmdWwgZnVuY3Rpb25zIGFyZSBpbiB0aGUgZm9sbG93czoNCg0KKiAqKm92ZXJsaW5lKio6IHR1cm4gYSBTcGF0aWFsTGluZXMgaW50byBhIHJvdXRlIG5ldHdvcmsuIFJldHVybiBhIFNwYXRpYWxMaW5lcyBvYmplY3QuDQoNCiogKipTcGF0aWFsTGluZXNOZXR3b3JrKio6IHR1cm4gdGhlIFNwYXRpYWxMaW5lcyBvYmplY3QgaW50byBhIFNwYXRpYWxMaW5lc05ldHdvcmsNCg0KKiAqKnNsbjJwb2ludHMqKjogZmluZCB0aGUgbm9kZXMgaW4gdGhlIG5ldHdvcmsNCg0KKiAqKnN1bV9uZXR3b3JrX2xpbmtzKio6IHN1bW1hcmlzZSB0aGUgdXNlIG9mIGxpbmtlcyBiZXR3ZWVuIHRoZSBvcmlnaW4tZGVzdGluYXRpbiAoTy1EKSBwYWlycy4NCg0KKiAqKnN1bV9uZXR3b3JrX3JvdXRlKio6IHN1bW1hcmlzZSB0aGUgbGVuZ3RoIG9mIHRoZSBzaG9ydGVzdCBwYXRocyBiZXR3ZWVuIHRoZSBPLUQgcGFpcnMuDQoNCk5vdGUgdGhhdCBib3RoIHN1bV9uZXR3b3JrX2xpbmtzIGFuZCBzdW1fbmV0d29ya19yb3V0ZSBhcmUgcXVpdGUgc2xvdyBhbmQgZWF0cyB1cCBhIGxvdCBvZiBtZW1vcnkgZm9yIGEgbGFyZ2UgbnVtYmVyIG9mIE8tRCBwYWlycy4gQm90aCBmdW5jdGlvbiB1c2UgdGhlIHNob3J0ZXN0IHJvdXRlLCBhbmQgc3VtbWFyaXNlIG9mIHRoZSBsaW5rIHVzZSBvciByb3V0ZSBsZW5ndGggb2YgYWxsIHBhaXJzLCByYXRoZXIgdGhhbiB0aGF0IG9mIGFuIGluZGl2aWR1YWwgTy1ELiBJbiBvcmRlciB0byBvYnRhaW4gdGhlIGxpbmsgdXNlIG9yIHJvdXRlIGxlbmd0aCBiZXR3ZWVuIGFuIE8tRCwgdGhlIG1hcHBseSBvciBtYXAgZnVuY3Rpb24gb3IgdGhlaXIgcGFyYWxsZWwgdmVyc2lvbnMgY2FuIGJlIHVzZWQuIEFjY29yZGluZyB0byBleHBlcmltZW50cywgdXNpbmcgYW4gYXBwbHkgZnVuY3Rpb24gb24gbWFueSBPLUQgcGFpcnMgaXMgYWxtb3N0IGFzIGVmZmljaWVudCBhcyB0aGF0IG9mIGNhbGxpbmcgc3VtX25ldHdvcmtfbGlua3Mgb3Igc3VtX25ldHdvcmtfcm91dGUgaW4gb25lIGdvLg0KDQpJIGhhdmUgZG9uZSBhIHByb2plY3QgdXNpbmcgc3RwbGFuciwgdG8gc29sdmUgdGhlIGZvbGxvd2luZyBwcm9ibGVtOiBnaXZlbiBhIHJvYWQgbmV0d29yayBhbmQgYSBzZXQgb2YgTy1EIGNvb3JkaW5hdGVzIG5vdCBvbiB0aGUgbmV0d29yaywgc3VtbWFyaXNlIHRoZSByb2FkIHVzZSBmcm9tIHRoZSBzaG9ydGVzdCBwYXRocyBiZXR3ZWVuIHRoZSBPLUQuDQoNClRoaXMgaXMgZG9uZSB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgc3RlcHM6DQoNCiogQ3JlYXRlIHRoZSBTcGF0aWFsTGluZXNOZXR3b3JrIG9iamVjdCBhbmQgdGhlIG5vZGVzLg0KDQoqIENoZWNrIGlmIHRoZSBTcGF0aWFsTGluZXNOZXR3b3JrIG9iamVjdCBpcyBjb25uZWN0ZWQsIGkuZS4gY29udGFpbmluZyBvbmx5IG9uZSBjb25uZWN0ZWQgY29tcG9uZW50LCB1c2luZyB0aGUgKipudC5jb25uZWN0KiogZnVuY3Rpb24gZnJvbSB0aGUgKnNocDJncmFwaCogcGFja2FnZS4gUmV2aXNlIHRoZSBuZXR3b3JrIGlmIG5lY2Vzc2FyeS4NCg0KKiBPYnRhaW5pbmcgdGhlIG5vZGVzIGluIHRoZSBuZXR3b3JrIHVzaW5nIHNsbjJwb2ludHMNCg0KKiBGb3IgZWFjaCBwYWlyIG9mIE8tRCwgZGV0ZXJtaW5pbmcgdGhlIG5lYXJlc3Qgbm9kZXMgb24gdGhlIG5ldHdvcmsgdG8gdGhlIG9yaWdpbiBhbmQgZGVzdGluYXRpb24sIHVzaW5nIHRoZSBuYWJvcjo6a25uIGZ1bmN0aW9uLiBJcyB0aGlzIHN0ZXAgY2FsbGVkIHNuYXBwaW5nPw0KDQoqIENhbGxpbmcgc3VtX25ldHdvcmtfbGlua3MgYW5kIHN1bV9uZXR3b3JrX3JvdXRlIHRvIG9idGFpbiB0aGUgbGluayB1c2Ugb3IgdGhlIHJvdXRlIGxlbmd0aHMgb24gYWxsIHNob3J0ZXN0IHBhdGhzLg0KDQoqIENvdXBsaW5nIHN1bV9uZXR3b3JrXyogZnVuY3Rpb25zIHdpdGggcGFyYWxsZWw6OmNsdXN0ZXJNYXAgdG8gZ2V0IHRoZSBpbmRpdmlkdWFsIGluZm9ybWF0aW9uIG9mIGVhY2ggc2hvcnRlc3QgcGF0aC4NCg0KVGhlIHVuc29sdmVkIHByb2JsZW06IGFsdGhvdWdoIHRoZSBuZXR3b3JrIGlzIGlkZW50aWZpZWQgYXMgY29ubmVjdGVkIGJ5IHRoZSBudC5jb25uZWN0IGZ1bmN0aW9uLCBtZWFuaW5nIHRoYXQgYWxsIG5vZGVzIGluIHRoZSBuZXR3b3JrIGFyZSBjb25uZWN0ZWQsIHRoZSBzdW1fbmV0d29ya18qIGZ1bmN0aW9uIHJldHVybnMgTkEgZm9yIHNvbWUgTy1EIHBhaXJzLg0KDQoNCg0K