[GIS] Summing multiple routes using ArcGIS Network Analyst

arcgis-desktoparcmapnetwork-analyst

I have been working with Network Analyst to try and solve the following problem, but the only solution I have found is tedious for more than about 4-5 origins and destinations.

I have a set of about 20 origins and 100 destinations connected via a network. Goods should move from specified origins to specified destinations via a least cost (shortest distance) route along the network. So, there are 2000 total routes. Each routes has a quantity of goods associated with it, for instance, Origin A sends 1000 kg of goods to Destination 1, 500 kg of goods to Destination 2, etc.

First, is there a way to process all 2000 routes at the same time?

Second, is there a way to sum the total amount of goods and total number of shipments that move along each part of the network?

For example, if 20 shipments carrying 15000 (total) kg of goods move through a high traffic area, can I weight that part of the resulting routes file to be thicker/heavier than a part of the network that receives 1 shipment carrying 100 kg of goods. Therefore, congestion areas could be identified. Ideally, I would like to be able to sum both the number of shipments and total goods transported along each part of the network.

I suspect I need to use ModelBuilder, but maybe there is a solution I am overlooking.

Best Answer

If the origins and destinations are specifically paired, and each delivery a single trip, then you're looking at 2k individual route solves. As you suspect, this can only be done with a model or script, iterating through each destination to find the route to its matching origin. If a delivery can hit multiple destinations in a single trip, the VRP (Vehicle Routing Problem) solver can generate the routes, though it gets more complicated factoring in maximum loads/return to origin for resupply.

Closest Facility could generate all the routes at once but only if it is known that the destinations are all paired with their closest origin. If they aren't, or it is unknown, it wouldn't work on the global dataset. However you could split the origin and destination pairs into their own files (ie 20 of each) in which case each CF analysis would only be looking at one possible origin, so all the matching destinations would be paired. That gets you down to 20 solves instead of 2000, but still might warrant an script/model/iterator. In a model you could also use selections instead of actually splitting the file (select > make feature layer > input to CF solver).

Once you've generated your routes and got them exported and all in a single file, they'd need to be given the goods quantity attribute via a Join or some other method.

With that done, you can look at your second part. This part basically becomes the same solution I gave at this question. You can Intersect the route layer with the road network layer (or rather the source of it, not the edges layer in the NDS). You end up with each network segment being duplicated once for each route that passes over it. Then you run Summary Statistics on that result, with network segment ID as a Case field and goods quantity as a Statistic field with Sum method. The result is a table with segment ID, total goods passing over that segment, and a frequency count of the number of routes that pass over that segment. The table can be joined back to the roads (or a select export of them) to symbolize the segments by number of routes using it or the quantity of goods (or both).

Related Question