Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

OGR

tmcw edited this page · 5 revisions
Clone this wiki locally

Mapnik's PluginArchitecture supports the use of different input formats.

This plugin supports the OGR library in order to read multiple spatial vector formats.

Installation

Make sure that running python scons/scons.py DEBUG=y shows the following line

Checking for C library gdal... yes
Checking for name of ogr library... gdal

To check if the ogr plugin built and was installed correctly, try the usual Python from mapnik import * on a DEBUG=y build, and look for the following debug line

registered datasource : ogr

Parameters

|| parameter || value || description || default || || file || string || file to display || || || base || string || base path where to search for file parameter || || || layer || string || name of the layer to display (a single ogr datasource can contain multiple layers) || || || layer_by_index || integer || index of the layer to display, this becomes mandatory if no "layer" parameter is specified || || || multiple_geometries || boolean || wheter to use multiple different objects or a single one when dealing with multi-objects (this is mainly related to how the label are used in the map, one label for a multi-polygon or one label for each polygon of a multi-polygon)|| false || || encoding || string || internal file encoding || utf-8 || || string || string || optional (replaces file parameter) string of literal OGR-datasource data, like GeoJSON ||

Usage

Note: The layer names of OGR datasources are returned by Mapnik in the error message when you do not provide the layer parameter.

    >>> import mapnik
    >>> mapnik.Ogr(file='test_point_line.gpx')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/Library/Python/2.5/site-packages/mapnik/__init__.py", line 295, in Ogr
        return CreateDatasource(keywords)
    RuntimeError: missing <layer> parameter, available layers are:  'waypoints'  'routes'  'tracks'  'route_points'  'track_points'
    >>> mapnik.Ogr(file='test_point_line.gpx',layer='waypoints')
    <mapnik.Datasource object at 0x23f6b0> # works!

However the best way to discover the layer names is to use the OGR provided utility called ogrinfo. For example running ogrinfo on a test GPX files provided with the OGR source code reveals the layer names and geometry types:

    $ ogrinfo test_point_line.gpx
    Had to open data source read-only.
    INFO: Open of `test_point_line.gpx'
          using driver `GPX' successful.
    1: waypoints (Point)
    2: routes (Line String)
    3: tracks (Multi Line String)
    4: route_points (Point)
    5: track_points (Point)

XML

        <Layer name="gps_waypoints">
            <StyleName>waypoint_styles</StyleName>
            <Datasource>
                <Parameter name="type">ogr</Parameter>
                <Parameter name="file">test_point_line.gpx</Parameter>
               <Parameter name="layer">waypoints</Parameter>
            </Datasource>
        </Layer>
        <Layer name="states">
            <StyleName>states_shp_styles</StyleName>
            <Datasource>
                <Parameter name="type">ogr</Parameter>
                <Parameter name="base">tests/data</Parameter>
                <Parameter name="file">us_states.shp</Parameter>
                <!-- OGR supports formats with multiple layers and while shapefiles
                only have one, we still need to specify it by name -->
               <Parameter name="layer">us_states</Parameter>
            </Datasource>
        </Layer>

C++

Plugin datasource initialization example code can be found on PluginArchitecture.

A OGR datasource may be created as follows:

    {
        parameters p;
        p["type"]="ogr";
        p["file"]="path/to/my/vector/bridges.tab";
        p["layer"]="bridges";

        set_datasource(datasource_cache::instance()->create(p));

        // Bridges
        Layer lyr("Bridges");
        lyr.add_style("bridges");
        m.addLayer(lyr);
    }

Further References

Something went wrong with that request. Please try again.