5

To start, I should mention that I'm hoping to solve this using Network Analyst and (if I have to) Microsoft Access. I am also a poor programmer - my knowledge of python is limited at best.

I have a dataset that contains somewhere around 20 000 individual origins and 130 individual destinations. Each of the origins has a number of products (measured by volume) delivered to any number of destinations (let's say an average of 5 destinations for each origin). Each product is shipped on its own truck to a single destination.

The problem I'm trying to solve is which roads have the most volume travel over them.

The first solution I thought of was route solver; I would have to iterate using some sort of crazy field identifier, but I'm having a hard time figuring out how to do it. I need to add an origin as a stop, then add the corresponding destination as a stop, then run... etc. So my first problem is I'm not sure how to set that up to iterate properly (I can't picture the table to lay it out properly unless I make ~ 100 000 different tables!)

Network Analyst Route Solver with two stops

What I'm looking for is some way of determining the number of times each route is traveled - if I could link volumes to the lines somehow and then sum the volume by line segment, I could map the most used routes.

In a perfect world, each line segment along the route would link to a volume and I could use access to calculate the sums. Then import it back to ArcMap and categorize by values to display a map where the most used roads are thick and the rarely used roads are thin.

Chris W. (https://gis.stackexchange.com/users/28067/chris-w) did answer a very similar question here: Summing multiple routes using ArcGIS Network Analyst?, but I'll be honest - even though the process makes sense, the details are still escaping me.

Update: I've had a coworker suggest that I might be looking at this the wrong way. He suggested I look at it as a flow problem rather than a network problem. I'll update again later if a solution presents itself.

2 Answers 2

3

I've done something similar counting number of students walking around the campus I work on. We had a network of roads and footpaths and iteratively ran network analyst to solve shortest route from location X to location Y. This was all done in model builder.

So this created a dataset of lots of lines (routes taken) that overlapped.

To create the count you are seeking we then took the base network and extracted out the centroids of each edge of the network and did nothing more than a spatial join with a one to many of centroids with routes layer. Ran that dataset through the summary stats tool to give you a count on number of routes passing over the centroid. Then we simply joined this summary table by the ID to the base network and symbolized by count.

1

You might want to look into Betweenness Centrality.

This assigns a value to each node in the network (rather than edge) based on how many times it is traversed when you do a shortest-path between each node and each other node.

I'm not sure if this is available in the ArcGIS suite of tools, although there seems to be a plugin which will do this called Urban Network Analyst Toolbox

It is available in GRASS - v.net.centrality, and I think QGIS 2.14 added support for the v.net suite of algorithms, provided you have GRASS 7 installed. There's a blog post by underdark which covers this algorithm.

If coding is a possibility, this will do the same thing (although it will be painfully slow, so better to use an existing implementation)

count = {}
for each node A
    for each node B (where B!=A)
        get Djisktra shortest path from A to B
        for each node N in shortest path
            add 1 to count[N]

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.