måndag 7 augusti 2017

How far can my electric car take me?

Routing- and module pearls in Bing Maps

Bing maps v8 has been released quite some time now. At a first glance, the API offering what to expect. There are a few things that I would like to have seen as part of the core API.  For example, GeoJSON as it is more or less the industry standard transferring GIS data over network.  However, the sweet juicy bits are in modules and are available whenever needed. Be aware it is not JavaScript modules. The modules spans from visualization, parsing, digitizing to analyze. Some modules, such as GeoJSON, might over time be part of the core API. Adding GeoJSON parsing would indeed make sense. For a complete list of modules see https://msdn.microsoft.com/en-us/library/mt712663.aspx.

Microsoft.Maps.SpatialMath is a truly competent module. That module adds complex spatial calculations and analysis. And yet there is more, combining this module with projects like Nanjing opens up for interesting applications.  For example, how far can I get with my electric car? Or, consider truck drivers, at least in Sweden, they are allowed to drive for a limit of time without having a break. Let’s say 2 hours, then they need to have a break for 15 minutes or so, then they can continue. I don’t know the exact limits. The industry definitely has a need to plan the route with stops accordingly to regulations. For example they might need to find a stop along the route between 90-120 minutes.

To resolve the use case above one way could be:

  1. Calculate the route from A to B.
  2. Calculate Isochrones from start to 120 minutes.
  3. Calculate Isochrones from start to 90 minutes.
  4. Use Microsoft.Maps.SpatialMath.difference operation to resolve the area between 90-120 minutes.
  5. Buffer the area, Microsoft.Maps.SpatialMath.buffer
  6. Use the buffered area and Microsoft.Maps.SpatialMath.intersection operation to calculate the route that is between 90-120 minutes (intersection)
  7. Visualize the calculated (intersected) area.

In these steps, a pretty complex problem has been addressed. From the routing-service I got the isochrones, then it is easy to combine the isochrones with geometry math operations. The operations I used is:
  • Intersection (to see where the buffer overlaps the difference area.
  • Buffer (for better visualization of the located area)
  • Difference (between the isochrones)

Now it is easy to find a spot where the driver must find a place to stop. Remember, from the beginning this is not a trivial problem, by combining powerful geodataservices, client-side operations and knowing how to solve the pieces in the puzzle makes it is easy to finish.

I made a demo application to this post. https://github.com/perfahlen/BingMaps-Routing-And-Module-Pearls