INTRODUZIONE A MAPNIK Luca Delucchi OSMit 2009
Mapnik è un software libero per la rappresentazione di dati geografici Permette la realizzazione di immagini singole oppure di tile per la pubblicazione sul web Multipiattaforma Linux - Mac OS X - Windows Luca Delucchi OSMit 2009
Scritto in C++ con python bindings che facilitano l'utilizzo Utilizza standard OGC, librerie GDAL/OGR, proj, agg e cairo Utilizza l'algoritmo di Painter per determinare l'ordine degli elementi Luca Delucchi OSMit 2009
Utilizzo Script per il rendering: Regole per gli stili: - per le immagini - file XML - per le tile - 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
File XML: map <?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> 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
File XML: point style < Style name ="amenity"> < Rule > < Filter >[tourism]='viewpoint'</Filter> < PointSymbolizer file ="/path/file" type ="png" width ="16" height ="16" allow_overlap ="true"/> </Rule> </Style> < Style name ="amenity"> < Rule > < Filter >[tourism]='viewpoint'</Filter> < PointSymbolizer width ="16" height ="16" opacity =”0.5” allow_overlap ="true"/> </Rule> </Style> Luca Delucchi OSMit 2009
File XML: line 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> Luca Delucchi OSMit 2009
File XML: line style < Style name ="aerialways"> < Rule > < Filter >[aerialway] = 'cable_car'</Filter> < LinePatternSymbolizer width ="16" height ="16" type ="png" file ="/path/to/icon.png"/> </Rule> </Style> Luca Delucchi OSMit 2009
File XML: polygon 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> < Style name ="world"> < Rule > < Filter >[na2] = 'IT'</Filter> < PolygonPatternSymbolizer width ="16" height ="16" type ="png" file ="/path/to/icon.png"/> </Rule> </Style> Luca Delucchi OSMit 2009
File XML: building style < Style name =”building”> < BuildingSymbolizer > < CssParameter name =" fill ">#000000</CssParameter> < CssParameter name =" fill-opacity ">1</CssParameter> < CssParameter name =" height ">8</CssParameter> </BuildingSymbolizer> </Style> Luca Delucchi OSMit 2009
File XML: text & shield 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> Luca Delucchi OSMit 2009
File XML: scaledenom style < 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> Luca Delucchi OSMit 2009
File XML: filter style < 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> Luca Delucchi OSMit 2009
File XML: raster style < Style name ="raster"> < Rule > < RasterSymbolizer > </RasterSymbolizer> </Rule> </Style> 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. Luca Delucchi OSMit 2009
Recommend
More recommend