Technical Information:
The application is written in C++, and uses the OpenGL and QT libraries.
Our application approximates the Earth's surface locally as a plane. Since this program provides a service for a specific community, the locality of the map mitigates distortion caused by the curvature of the Earth's surface effectively offsetting the points laid on the planar map. Had the application needed to find all services between Toronto and Chicago the distortion may be noticeable, but for our purposes this geometric approximation works fine.
Our approach toward geocoding (that is, finding the latitude and longitudes) the addresses entered by the user is fairly robust: for each address, we first check for a matching string in a local cache. If not found there, we use the Yahoo geocoder (5000 requests per IP per day), and if this fails, the Google geocoder (limitations on requests per day not as clear). When resorting to using Yahoo/Google for geocoding, we of course add the newly geocoded string to the cache. The HTTP requests made by the application have a simple structure and the returned output is either a single string with a comma delimiter, or in a basic XML format, so both are easy to parse. The two HTTP requests look like:
GET local.yahooapis.com/MapsService/V1/geocode?appid=KEY_GOES_HERE&location="toronto" (YAHOO) GET www.google.ca/maps/geo?output=csv&q="toronto" (GOOGLE)
The application contains code to do 2D Delaunay Triangulations and their dual Voronoi Diagrams. Our intention was to use these as data structures for fast indexing of nearest neighbours as well for exploring visualizations. The two images below show DT/VD for the Toronto subway stations.