4

I'm facing a problem and would like to ask your help finding the best online mapping solution!

Project details:

  • The User can pick 1 from several hundred territory based functions to map its values. A good example: Population.
  • Every function represents data on a group of territorial units. These units can be very large (i.e countries or continents) and can be very small (settlements). Every unit is represented as a (multi)polygon.
  • The user can filter on what territorial units he wants to display. In other words he can filter the areas to be displayed. Based on the values of the selected function and the selected areas, the map to be created will be a 30% transparent Choropleth map overlay. This adds a dynamic behaviour, so static maps are not an option.
  • The User is allowed to select huge numbers of territories. I.e: all settlements of a country. This introduces several thousands of polygons to display.
  • I have high resolution ESRI shapefile data on each unit. I can convert them to any GIS format.

The current implementation: uses Google Maps with Fusion Tables layer added. The Fusion Table is generated dynamically with regard to the following procedure:

  • A pre uploaded base fusion table is used, which holds all geometry data for all possible areas. An areaId primary key is part of the table
  • A dynamically generated fusion table is uploaded runtime which holds the values and area ids for the selected function.
  • When this dynamic table is created, we can get the fusion table to display by joining the dynamic table with the base table .
  • Colors are calculated runtime and applied as conditional formatting in the view layer

The problem: When you generate a new fusion table google needs some time to cache the generated map tiles on server side. So far i didn't find a solution to get feedback on these map tiles are already generated or not when displaying the map to the User. When displaying the map for the first time(and most probably the last time..since they are generated runtime) the user won't see the Choropleth map("Data may still be loading" message on map tiles), he has to refresh the page several times to get the map displayed correctly. And altogether this solution is very slow. Takes 10-25sec to upload data to Fusion Tables service and another 2-20sec to get the tiles cached on google's servers.

What i have tried:

  • KML Layers on Google Maps: wouldn't take KMLs larger than 10M. The caching issue is still present
  • Creating polygons on client side: is an overkill for the browser for large shapes like continents and for the cases when 3000-4000 smaller shapes like settlements are displayed.

Looking for: a mapping server solution that i can install and use on the project's server to dynamically generate these map tiles. The solution would qualify if the whole process wouldn't take more than 10sec. The raster layer behind the Choropleth map should be preferably Google Maps but not necessarily.

Any suggestions are most appreciated and thanks for your help in advance!

2 Answers 2

1

I'm answering my own question. Finally - after loking at the possible solutions - i took the GeoServer/OpenLayers approach.

I'm using Google Maps as a base layer in OpenLayers. GeoServer is configured to generate the Choropleth map layer from a spatially enabled database. The project was using MySQL as db layer which has limited spatial support but since i didn't need complex geometry functions it was enough to reach my goals. I was able to store geometries of each area using OGR2OGR in MySQL.

Basically i'm storing the generated values along with the related areaId and color class in a separate table which has indexed mapId attribute. GeoServer is able to use a parametrized SQL view as a layer so the only thing required was to join the generated values table with the area table.

I hope it helps someone. Thank you for the responses.

0

I would go take a look at www.mangomap.com or www.cartodb.com. MangoMap will allow you to put something together that meets most of those requirements quickly and easily, but if you need more control and don't mind diving into the code then CartoDB will definitely work.

1
  • I didn't emphasize that the generated online map should be hosted on the projects private web server. This eliminates mangomap. CartoDB could've worked but their free package only contains 5MB disk space and the project has more than 18 millions of datapoints to generate the maps from. This means a couple of hundred dollars per month which is not suitable for project budget
    – SandorRacz
    Commented Feb 13, 2013 at 6:06

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.