I have a bunch of raster maps from a general plan of a city.


I need to vectorize them such that I can store all elements (lines, polygons, points) of the map listed in the legend in a database like PostGIS such that I can

  • find all elements of a master plan, which affect a certain region on the map (e. g. if I have a house at location X and the government wants to build a road in the same place, I want to notice it) and
  • compare two versions of a master plan by running database queries.

The ultimate purpose is to bring the data contained in these maps into a format that can be understood by non-technical people - inhabitants of the city so that they can express agreement or disagreement with the general plan.

One obvious approach is to simply lay raster map over a vector map of the region (there is a vector map of that city in OSM) and manually transfer the lines from raster to vector form.

  1. What tools (preferably open source) can I use to vectorize the maps manually and save the data in PostGIS?
  2. Are there any alternatives, which are faster? Can this process be automated (fully or partially) using open source or inexpensive commercial software?

Update 18.01.2013: FYI: I asked the copyright holder (city administration) of the maps to provide them in vector format. I'll wait for their answer and then decide on further actions.

Update 27.01.2013:

Today I made a first experiment in georeferencing for these maps.


  1. OpenStreetMap map
  2. Raster map

Process: You can see how I do georeferencing in this video.


  1. GCP points for both maps
  2. Modified raster map

I have following questions:

  1. How many points do I need to enter in order to have good enough quality of the mapping? Are there any rules of thumb for that?
  2. What can I do to improve the quality of the mapping (remove mapping defects shown below) ?

Sample mapping defect #1

Mapping defect #1

Sample mapping defect #2

Mapping defect #2

  • gis.stackexchange.com/questions/22704/… might help
    – BradHards
    Jan 13 '13 at 21:34
  • 1
    QGIS + plugins (grass plugin is correct one i think) , PostGIS , GDAL ... I woudl start project by calling people who made those maps and ask vectors maps from them After i have vectors i would store all data into postGIS , throw GeoServer and openLayers stack for internet interface Jan 14 '13 at 8:39
  • @All: I added Update 27.01.2013 above. There are some mapping defects which are caused either by too few points or wrong settings. It would be great, if you looked at the video and suggested how to improve the process. Thanks! Jan 26 '13 at 21:26

I advise you could use Wintopo, sir :)

  • Wintopo only converts TIF, JPG, PNG, GIF, BMP files. It's likely that the OP wishes to convert other file formats which are more common in GIS applications.
    – Fezter
    Jan 13 '13 at 22:32

After my own related question received here a vague suggestion to use GRASS, I wrote an ArcInfo Grid ASCII to ESRI Shapefile conversion utility in python; see Converting Esri ASCII raster to Shapefile for CartoDB?. I was motivated by the need to upload raster data in a format that CartoDB could support (they do not "officially" support raster files). The utility may be useful, possibly with some modifications. The code is on GitHub. I may be motivated to extend the code in various ways, such as simultaneous vectorization of multiple grid ASCII raster files.


Similar to Italiano I use Scan2Cad for most of my simple stuff.

When the raster gets as complicated as what your examples are there is a whole other level of work needed.
This is a job for FME
Here is an email from dmbaugh @Safe who helped me with this concept some time ago.
But as you will see the work invloved would cause you to go to Simplexio's comment and return to the entity that originally created the rasters (they were created from vector data [that is clear]), and request the original vector data (even if they will require payment the cost of converting the raster will be greater).


it seems to me, you need a workspace that combines these two example that we mention here. First, you have to separate areas that you need from the rest of the data. For that purpose, you can use RasterExpressionEvaluator.

Here is another example how it can be done:


And then, once grassland is separated on the raster level, the rest can be set to nodata, and RasterExtentsCoercer will extract only grassland polygons.

In fact, it will not be that smooth. Because of the nature of such maps the translation will probably produce a lot of "noise" from contours, labels, roads etc. Post-processing is always required and may include Generalizers, AreaCalculators, Dissolvers etc., and of course, some experimental work that should find the best sequence of the transformers and parameter values.

Dmitri from safe

To get the data in your example images into managable feature classes with well defined values you will need to remove noise (other information) like the roads, contours, streams, building footprints, and more from each image after making sure they are all georeferenced.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.