Osmit2009 Mapnik

20
Luca Delucchi OSMit 2009 INTRODUZIONE A MAPNIK

Transcript of Osmit2009 Mapnik

Page 1: Osmit2009 Mapnik

Luca Delucchi OSMit 2009

INTRODUZIONE A MAPNIK

Page 2: Osmit2009 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

Page 3: Osmit2009 Mapnik

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

Page 4: Osmit2009 Mapnik

Utilizzo

Script per il rendering:

- per le immagini

- per le tile

Regole per gli stili:

- file XML

- python

- c++

Luca Delucchi OSMit 2009

Page 5: Osmit2009 Mapnik

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

Page 6: Osmit2009 Mapnik

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

Page 7: Osmit2009 Mapnik

<?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

Page 8: Osmit2009 Mapnik

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

Page 9: Osmit2009 Mapnik

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

Page 10: Osmit2009 Mapnik

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

Page 11: Osmit2009 Mapnik

<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>

Page 12: Osmit2009 Mapnik

<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

Page 13: Osmit2009 Mapnik

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>

Page 14: Osmit2009 Mapnik

<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>

Page 15: Osmit2009 Mapnik

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>

Page 16: Osmit2009 Mapnik

<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] &gt;= 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

Page 17: Osmit2009 Mapnik

<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

Page 18: Osmit2009 Mapnik

File XML: filter style

Luca Delucchi OSMit 2009

<Filter>[highway] = 'primary'</Filter>

<Filter>[popolazione] &gt;= 30000 and [popolazione] &lt; 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>

Page 19: Osmit2009 Mapnik

<Style name="raster"><Rule>

<RasterSymbolizer></RasterSymbolizer>

</Rule></Style>

File XML: raster style

Luca Delucchi OSMit 2009

Page 20: Osmit2009 Mapnik

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.