Luca Delucchi OSMit 2009
INTRODUZIONE A MAPNIK
Mapnik è un software libero per la rappresentazione di dati geografici
Permette la realizzazione di immagini singole oppure di tile
per la pubblicazione sul web
Luca Delucchi OSMit 2009
MultipiattaformaLinux - Mac OS X - Windows
Scritto in C++ con python bindings che facilitano
l'utilizzo
Utilizza standard OGC, librerie GDAL/OGR,
proj, agg e cairo
Luca Delucchi OSMit 2009
Utilizza l'algoritmo di Painter per determinare l'ordine
degli elementi
Utilizzo
Script per il rendering:
- per le immagini
- per le tile
Regole per gli stili:
- file XML
- python
- c++
Luca Delucchi OSMit 2009
Stampa: png
#!/usr/bin/python
from mapnik import *import cairo
mapfile = "progetto.xml"map_output= 'prova_dim.png'm = Map(1192, 840)projection = '+proj=latlong +datum=WGS84'load_map(m, mapfile)bbox = Envelope(Coord(9.04311180114746, 45.7490234375), Coord(12.0447950363159, 47.1829261779785))m.zoom_to_box(bbox) render_to_file(m, map_output, 'png')
Luca Delucchi OSMit 2009
Stampa: png#!/usr/bin/python
from mapnik import *import cairo
mapfile = 'progetto.xml'map_output = 'mapfile.pdf'projection = '+proj=latlong +datum=WGS84'm = Map(1192, 840)load_map(m, mapfile)bbox = Envelope(9.470383644104, 43.2393798828125, 12.4720678329468, 44.673282623291)mapnik_map.zoom_to_box(bbox)file = open(map_output, 'wb')surface = cairo.PDFSurface(file.name, m.width, m.height)render(m, surface)surface.finish()
Luca Delucchi OSMit 2009
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE Map><Map bgcolor="#b5d0d0" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs +over">
.................................................................................................
.................................................................................................
.................................................................................................
</Map>
File XML: map
Luca Delucchi OSMit 2009
File XML: raster layer
<Layer name="dem" status="on"><StyleName>raster</StyleName><Datasource>
<Parameter name="type">gdal</Parameter><Parameter name="file">/path/al/file/</Parameter><Parameter name="format">tiff</Parameter>
</Datasource></Layer>
<Datasource><Parameter name="type">raster</Parameter><Parameter name="file">/path/file.tiff</Parameter><Parameter name="format">tiff</Parameter><Parameter name="lox">5.0</Parameter><Parameter name="loy">35.0</Parameter><Parameter name="hix">20.0</Parameter><Parameter name="hiy">50.0</Parameter>
</Datasource>
Luca Delucchi OSMit 2009
File XML: postgis layer
<Layer name="misc_boundaries" status="on" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs +over"> <StyleName>boundary</StyleName> <Datasource> <Parameter name="type">postgis</Parameter> <Parameter name="user">utente</Parameter> <Parameter name="dbname">italy</Parameter> <Parameter name="password">****</Parameter> <Parameter name="table">(select * from italy_line) as
road </Parameter> <Parameter name="estimate_extent">...</Parameter> <Parameter name="extent">833337,5432307,
1119564,5572109</Parameter> </Datasource></Layer>
Luca Delucchi OSMit 2009
File XML: shape layer
<Layer name="coast-poly" status="on" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs +over"> <StyleName>coast-poly</StyleName> <Datasource> <Parameter name="type">shape</Parameter> <Parameter name="file">/path/al/file/</Parameter> </Datasource></Layer>
Luca Delucchi OSMit 2009
<Style name="amenity"> <Rule>
<Filter>[tourism]='viewpoint'</Filter> <PointSymbolizer file="/path/file" type="png"
width="16" height="16" allow_overlap="true"/> </Rule></Style>
File XML: point style
Luca Delucchi OSMit 2009
<Style name="amenity"> <Rule>
<Filter>[tourism]='viewpoint'</Filter> <PointSymbolizer width="16" height="16"
opacity=”0.5” allow_overlap="true"/> </Rule></Style>
<Style> <Rule>
<Filter>[highway] = 'motorway'</Filter><LineSymbolizer>
<CssParameter name="stroke"> #666666</CssParameter><CssParameter name="stroke-width"> 5</CssParameter><CssParameter name="stroke-dasharray"> 8 - 3</CssParameter><CssParameter name="stroke-linejoin"> round</CssParameter><CssParameter name="stroke-opacity"> 0.7</CssParameter>
</LineSymbolizer> </Rule></Style>
File XML: line style
Luca Delucchi OSMit 2009
File XML: line style
Luca Delucchi OSMit 2009
<Style name="aerialways"><Rule>
<Filter>[aerialway] = 'cable_car'</Filter><LinePatternSymbolizer width="16" height="16" type="png" file="/path/to/icon.png"/>
</Rule></Style>
<Style name="world"><Rule>
<Filter>[na2] = 'IT'</Filter><PolygonSymbolizer>
<CssParameter name="fill">white</CssParameter><CssParameter name="fill-opacity"> 0.8</CssParameter>
</PolygonSymbolizer></Rule>
</Style>
File XML: polygon style
Luca Delucchi OSMit 2009
<Style name="world"><Rule>
<Filter>[na2] = 'IT'</Filter><PolygonPatternSymbolizer width="16" height="16" type="png" file="/path/to/icon.png"/>
</Rule></Style>
File XML: building style
Luca Delucchi OSMit 2009
<Style name=”building”> <BuildingSymbolizer> <CssParameter name="fill">#000000</CssParameter> <CssParameter name="fill-opacity">1</CssParameter> <CssParameter name="height">8</CssParameter> </BuildingSymbolizer></Style>
<Style name="autostrade_name"><Rule>
<Filter>[highway] = 'motorway'</Filter><ShieldSymbolizer name="ref" face_name="DejaVu Sans Bold" size="7" fill="#000000" placement="line" file="/path/file" type="png" width="17" height="17" spacing="100" min_distance="150"/>
</Rule></Style>
<Style> <Rule>
<Filter>[popolazione] >= 100000</Filter> <TextSymbolizer name="toponimo" face_name= "DejaVu Sans Book" size="15" fill="#000000" halo_radius="2" allow_overlap="true"/>
</Rule></Style>
File XML: text & shield style
Luca Delucchi OSMit 2009
<Style name="autostrade_name"><Rule>
<Filter>[highway] = 'motorway'</Filter> <MaxScaleDenominator>10000000
</MaxScaleDenominator> <MinScaleDenominator>2000000
</MinScaleDenominator><ShieldSymbolizer name="ref" face_name="DejaVu Sans Bold" size="7" fill="#000000" placement="line" file="/path/file" type="png" width="17" height="17" spacing="100" min_distance="150"/>
</Rule></Style>
File XML: scaledenom style
Luca Delucchi OSMit 2009
File XML: filter style
Luca Delucchi OSMit 2009
<Filter>[highway] = 'primary'</Filter>
<Filter>[popolazione] >= 30000 and [popolazione] < 100000</Filter>
<Filter>([highway] = 'primary' or [highway] = 'primary_link' or [highway] = 'trunk' or [highway] = 'trunk_link') and not ([tunnel] = 'yes' or [tunnel] = 'true' or [tunnel] = '1')</Filter>
<Style name="raster"><Rule>
<RasterSymbolizer></RasterSymbolizer>
</Rule></Style>
File XML: raster style
Luca Delucchi OSMit 2009
Luca Delucchi OSMit 2009
This work is licensed under the Creative Commons Attribution-Noncommercial-Share Alike 2.5 Italy License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.5/it/ or send a letter to
Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
Top Related