Configuration Files Mapnik

From OSGeo
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Mapnik Python Script for Start-up and Processing

#!/usr/bin/env python

from mapnik import *
mapfile = "population.xml"
m = Map(1400, 600)
load_map(m, mapfile)
bbox = Envelope(Coord(-180.0, -75.0), Coord(180.0, 90.0))
m.zoom_to_box(bbox) 
render_to_file(m, 'world_population.png', 'png')

Mapnik XML Configuration File

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Map>
<!-- Sample Mapnik XML template by Dane Springmeyer -->
<Map bgcolor="white" srs="+proj=latlong +datum=WGS84">
  
  <Style name="population">

     <Rule>
      <!-- Built from Seven Class sequential YIGnBu from www.colorbrewer.org -->
      <!-- Quantile breaks originally from QGIS layer classification -->
      <Filter>[POP2005] = 0 </Filter>
      <PolygonSymbolizer>
        <CssParameter name="fill">#ffffcc</CssParameter>
      </PolygonSymbolizer>
      <!-- Outlines for Antarctica look good -->
      <LineSymbolizer>
        <CssParameter name="stroke">black</CssParameter>
        <CssParameter name="stroke-width">.1</CssParameter>
      </LineSymbolizer>
     </Rule>
     
     <Rule>
      <Filter>[POP2005] > 0 and [POP2005] < 15000</Filter>
      <PolygonSymbolizer>
        <CssParameter name="fill">#c7e9b4</CssParameter>
      </PolygonSymbolizer>
      <!-- Outlines for Antarctica look good -->
      <LineSymbolizer>
        <CssParameter name="stroke">black</CssParameter>
        <CssParameter name="stroke-width">.1</CssParameter>
      </LineSymbolizer>
     </Rule>
     
     <Rule>
      <Filter>[POP2005] >= 15000 and [POP2005] < 255000</Filter>
      <PolygonSymbolizer>
        <CssParameter name="fill">#7fcdbb</CssParameter>
      </PolygonSymbolizer>
     </Rule>
     
     <Rule>
      <Filter>[POP2005] >= 255000 and [POP2005] < 1300000</Filter>
      <PolygonSymbolizer>
        <CssParameter name="fill">#1d91c0</CssParameter>
      </PolygonSymbolizer>
     </Rule>
     
     <Rule>
      <Filter>[POP2005] >= 1300000 and [POP2005] < 4320000</Filter>
      <PolygonSymbolizer>
        <CssParameter name="fill">#41b6c3</CssParameter>
      </PolygonSymbolizer>
     </Rule>
          
     <Rule>
      <Filter>[POP2005] >= 4320000 and [POP2005] < 9450000</Filter>
      <PolygonSymbolizer>
        <CssParameter name="fill">#225ea8</CssParameter>
      </PolygonSymbolizer>
     </Rule>
          
     <Rule>
      <Filter>[POP2005] >= 9450000 and [POP2005] < 25650000</Filter>
      <PolygonSymbolizer>
        <CssParameter name="fill">#225ea8</CssParameter>
      </PolygonSymbolizer>
     </Rule>
          
     <Rule>
      <Filter>[POP2005] >= 25650000 and [POP2005] < 1134000000</Filter>
      <PolygonSymbolizer>
        <CssParameter name="fill">#122F7F</CssParameter>
      </PolygonSymbolizer>
     </Rule>
          
     <Rule>
      <ElseFilter/> <!-- This will catch all other values - in this case just India and China -->
      <!-- A dark red polygon fill and black outline is used here to highlight these two countries -->
      <PolygonSymbolizer>
        <CssParameter name="fill">darkred</CssParameter>
      </PolygonSymbolizer>
      <LineSymbolizer>
        <CssParameter name="stroke">black</CssParameter>
        <CssParameter name="stroke-width">.7</CssParameter>
      </LineSymbolizer>
     </Rule>
    
   </Style>
    
   <Style name="countries_label">
     <Rule>
      <!--  Only label those countries with over 9 Million People -->
      <!--  Note: Halo and Fill are reversed to try to make them subtle -->
      <Filter>[POP2005] >= 4320000 and [POP2005] < 9450000</Filter>
      <TextSymbolizer name="NAME" face_name="DejaVu Sans Bold" size="7" fill="black" halo_fill= "#DFDBE3" halo_radius="1" wrap_width="20" spacing="5" allow_overlap="false" avoid_edges="false" min_distance="10"/>
     </Rule>
          
     <Rule>
      <!--  Only label those countries with over 9 Million People -->
      <!--  Note: Halo and Fill are reversed to try to make them subtle -->
      <Filter>[POP2005] >= 9450000 and [POP2005] < 25650000</Filter>
      <TextSymbolizer name="NAME" face_name="DejaVu Sans Book" size="9" fill="black" halo_fill= "#DFDBE3" halo_radius="1" wrap_width="20" spacing="5" allow_overlap="false" avoid_edges="false" min_distance="10"/>
     </Rule>
     
     <Rule>
      <!--  Those with over 25 Million get larger labels -->
      <Filter>[POP2005] >= 25650000 and [POP2005] < 1134000000</Filter>
      <TextSymbolizer name="NAME" face_name="DejaVu Sans Book" size="12" fill="white" halo_fill= "#2E2F39" halo_radius="1" wrap_width="20" spacing="5" allow_overlap="false" avoid_edges="true" min_distance="10"/>
     </Rule>
          
     <Rule>
      <!--  Those with over 25 Million get larger labels -->
      <!--  Note: allow_overlap is true here to allow India to sneak through -->
      <Filter>[POP2005] >= 1134000000</Filter>
      <TextSymbolizer name="NAME" face_name="DejaVu Sans Book" size="15" fill="white" halo_fill= "black" halo_radius="1" wrap_width="20" spacing="5" allow_overlap="true" avoid_edges="true" min_distance="10"/>
     </Rule>
  </Style>
  
  <Layer name="countries" status="on">
    <!-- Style order determines layering hierarchy -->
    <!-- Labels go on top so they are listed second -->
    <StyleName>population</StyleName>
    <StyleName>countries_label</StyleName>
    <Datasource>
      <Parameter name="type">shape</Parameter>
      <Parameter name="file">path/to/your/unzipped/TM_WORLD_BORDERS_SIMPL-0.2/TM_WORLD_BORDERS_SIMPL-0.2</Parameter>
    </Datasource>
  </Layer>

</Map>