[RouterGeocoder] OpenRouter: Getting things started

Stephen Woodbridge woodbri at swoodbridge.com
Fri Apr 17 00:50:00 EDT 2009


Hi all,

Here are some thoughts to help get things going. I hope other will build 
on this and that the programmers among us will start defining classes 
that we might need for this. Everything below is open to discussion.

I'm under the assumption that most of you are C++ programmers and that 
that is the language that we will develop in. I am fluent in a lot of 
programming languages, but not C++, so it will be a learning experience 
and I've committed to myself that I will learn C++.

I plan to collect and update comments and additions on the following and 
it will get moved to the wiki or website as soon as we have that in place.

Best regards,
   -Steve

------------------------------------------------------------------------

OpenRouter Use Case

* Mission Statement

Build a OpenSource routing library and tools that can be used to build a
commercial grade routing engine. This would be a router able to generate
routes based on a road network covering all of US and Canada or all of
Europe in sub-second response times. A secondary goal might be to reuse
the network analysis engine for non-transportation related analysis.


* Licensing

I know we have some varying positions on this, but I'll put a stake in 
the ground that we should have a permissive license like MIT-X, or 
public domain and that we should avoid the copyleft GPL style licenses. 
The goal of this licensing is to attract funding from commercial users. 
Also with our goal of building a vital and sustainable community and 
eventually position ourselves for OSGeo incubation, that we should 
request all contributers to provide signed contributor agreements 
similar to what OpenLayers does so we can verify the provenance of our 
code base in the future.

* What are we making?

** Who will use this system?
** What can these actors do with the system?
** How does this actor do that with this system?
** How else might this work if someone else were doing this, or someone
    had a different objective?
** What problems might happen while doing this with the system?


o user wants to load Navteq Arcview data for North America or European 
coverage for use with the router.
o user wants to load TeleAtlas shapefile data coverage for use with the 
router.
o user wants to load other data coverage for use with the router.

o loading data needs to be able to handle loading of the street network, 
turn restrictions, one way roads, signage and other appropriate 
information that might be included with the data set.

o user would like to load bus, train, airplane, bicycle, walking routes
o user would like to get route constrained to certain modes of 
transportation

o user wants to request a route between a start point and an end point
o user wants to request a route based on shortest time
o user wants to request a route based on shortest distance
o user wants to request a route based on selecting or avoiding some 
class or classes of road
o user wants to generate route based on a departure or arrival time and 
the route computed will be reasonable considering things like time based 
turn restrictions

o user wants to run the routing engine as part of an OpenLS webservice
o user wants to get the geometry of the route and driving directions
o user wants to request the language that the driving directions will be in

o user wants to be able to compute driving times from or to a given 
location for some given distance or time
o user wants drive time results in isochronal polylines or polygons

o user wants to compute all routes between multiple points to generate a 
drive time matrix or for input into a TSP solver

o developer wants a C language API to the router library
o developer wants the ability to add new network solvers modules
o developer wants the ability to use optional backing stores for data, 
like a database, or a custom binary file store
o developer wants the ability to embed the routing engine in a database, 
like postgresql, ingres, mysql


* How will we build it?

** What classes do we need?
** What are the responsibilities of the class?
** What other classes does it interact with?
** Write tests for each class first!



More information about the Routergeocoder mailing list