SlideShare a Scribd company logo
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] &gt;= 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] &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>




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

More Related Content

PDF
Pycon2011
ODP
Graphics & Animation with HTML5
PDF
The Ring programming language version 1.4.1 book - Part 12 of 31
PDF
PPSX
Introduction to Html5
PDF
HTML5 Essentials
PDF
CAR Email 6.5.02 (d)
PDF
OpenERP e l'arte della gestione aziendale con Python
Pycon2011
Graphics & Animation with HTML5
The Ring programming language version 1.4.1 book - Part 12 of 31
Introduction to Html5
HTML5 Essentials
CAR Email 6.5.02 (d)
OpenERP e l'arte della gestione aziendale con Python

Similar to Osmit2009 Mapnik (20)

PPTX
02 create first-map
PDF
State of the Art Web Mapping with Open Source
PPTX
Microsoft Accademic Cloud Tour Genova
PPTX
Automating Your Workflow with Gulp.js - php[world] 2016
PPTX
Svcc 2013-d3
PPTX
SVCC 2013 D3.js Presentation (10/05/2013)
PDF
Cloud Computing in Mobile
KEY
The Devil and HTML5
PDF
Repaso rápido a los nuevos estándares web
PPTX
Simulation of urban mobility (sumo) prest
PDF
Deck: A Go Package for Presentations
PDF
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
PDF
WFS Tutorial OGC Interoperability Day - Toluca mexico - May 30 2013
PDF
QConSP 2015 - Dicas de Performance para Aplicações Web
PDF
ACM Bay Area Data Mining Workshop: Pattern, PMML, Hadoop
PPT
Getting Started with PostGIS geographic database - Lasma Sietinsone, EDINA
PPT
Getting started with PostGIS geographic database
PDF
[convergese] Adaptive Images in Responsive Web Design
PDF
Large Scale Log Analytics with Solr: Presented by Rafał Kuć & Radu Gheorghe, ...
PPTX
Basic html5 and javascript
02 create first-map
State of the Art Web Mapping with Open Source
Microsoft Accademic Cloud Tour Genova
Automating Your Workflow with Gulp.js - php[world] 2016
Svcc 2013-d3
SVCC 2013 D3.js Presentation (10/05/2013)
Cloud Computing in Mobile
The Devil and HTML5
Repaso rápido a los nuevos estándares web
Simulation of urban mobility (sumo) prest
Deck: A Go Package for Presentations
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
WFS Tutorial OGC Interoperability Day - Toluca mexico - May 30 2013
QConSP 2015 - Dicas de Performance para Aplicações Web
ACM Bay Area Data Mining Workshop: Pattern, PMML, Hadoop
Getting Started with PostGIS geographic database - Lasma Sietinsone, EDINA
Getting started with PostGIS geographic database
[convergese] Adaptive Images in Responsive Web Design
Large Scale Log Analytics with Solr: Presented by Rafał Kuć & Radu Gheorghe, ...
Basic html5 and javascript
Ad

More from luca delucchi (19)

PDF
OpenStreetMap @ ITIS Pininfarina
PDF
Sviluppo dei software GIS verso le tecnologie cloud e l’integrazione con disp...
PDF
Strumenti e azioni utili a raccogliere dati
PDF
OpenStreetMap database e api
PDF
OpenStreetMap android
PDF
Mappare genova
PDF
Humanitaria OpenStreetMap Team (HOT)
PDF
Osm research
PDF
Grass workshop2011
PDF
Grass cloud
PDF
ZOO WPS the integration with GRASS GIS
PDF
Introduzione a OpenStreetMap
PDF
Introduzione a OpenStreetMap (book version)
PDF
PDF
Linuxday2008 Osm
PDF
Linuxday2008 Gis
PDF
Linuxday2009 OSM
PDF
Bicitalia 2008
PDF
OSMit2009 GFOSS.it
OpenStreetMap @ ITIS Pininfarina
Sviluppo dei software GIS verso le tecnologie cloud e l’integrazione con disp...
Strumenti e azioni utili a raccogliere dati
OpenStreetMap database e api
OpenStreetMap android
Mappare genova
Humanitaria OpenStreetMap Team (HOT)
Osm research
Grass workshop2011
Grass cloud
ZOO WPS the integration with GRASS GIS
Introduzione a OpenStreetMap
Introduzione a OpenStreetMap (book version)
Linuxday2008 Osm
Linuxday2008 Gis
Linuxday2009 OSM
Bicitalia 2008
OSMit2009 GFOSS.it
Ad

Recently uploaded (20)

PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Zenith AI: Advanced Artificial Intelligence
PDF
STKI Israel Market Study 2025 version august
PDF
Getting started with AI Agents and Multi-Agent Systems
PPT
Module 1.ppt Iot fundamentals and Architecture
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
Univ-Connecticut-ChatGPT-Presentaion.pdf
PPTX
MicrosoftCybserSecurityReferenceArchitecture-April-2025.pptx
PDF
From MVP to Full-Scale Product A Startup’s Software Journey.pdf
PDF
NewMind AI Weekly Chronicles – August ’25 Week III
PDF
ENT215_Completing-a-large-scale-migration-and-modernization-with-AWS.pdf
PPTX
Modernising the Digital Integration Hub
PDF
August Patch Tuesday
PPTX
TLE Review Electricity (Electricity).pptx
PPTX
1. Introduction to Computer Programming.pptx
PDF
DASA ADMISSION 2024_FirstRound_FirstRank_LastRank.pdf
PDF
Architecture types and enterprise applications.pdf
PDF
DP Operators-handbook-extract for the Mautical Institute
PDF
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
PPTX
cloud_computing_Infrastucture_as_cloud_p
Programs and apps: productivity, graphics, security and other tools
Zenith AI: Advanced Artificial Intelligence
STKI Israel Market Study 2025 version august
Getting started with AI Agents and Multi-Agent Systems
Module 1.ppt Iot fundamentals and Architecture
Assigned Numbers - 2025 - Bluetooth® Document
Univ-Connecticut-ChatGPT-Presentaion.pdf
MicrosoftCybserSecurityReferenceArchitecture-April-2025.pptx
From MVP to Full-Scale Product A Startup’s Software Journey.pdf
NewMind AI Weekly Chronicles – August ’25 Week III
ENT215_Completing-a-large-scale-migration-and-modernization-with-AWS.pdf
Modernising the Digital Integration Hub
August Patch Tuesday
TLE Review Electricity (Electricity).pptx
1. Introduction to Computer Programming.pptx
DASA ADMISSION 2024_FirstRound_FirstRank_LastRank.pdf
Architecture types and enterprise applications.pdf
DP Operators-handbook-extract for the Mautical Institute
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
cloud_computing_Infrastucture_as_cloud_p

Osmit2009 Mapnik

  • 1. INTRODUZIONE A MAPNIK Luca Delucchi OSMit 2009
  • 2. 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
  • 3. 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
  • 4. Utilizzo Script per il rendering: Regole per gli stili: - per le immagini - file XML - per le tile - python - c++ Luca Delucchi OSMit 2009
  • 5. 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
  • 6. 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
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. 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
  • 12. 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
  • 13. 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
  • 14. 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
  • 15. 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
  • 16. 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] &gt;= 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
  • 17. 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
  • 18. File XML: filter style <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> Luca Delucchi OSMit 2009
  • 19. File XML: raster style <Style name="raster"> <Rule> <RasterSymbolizer> </RasterSymbolizer> </Rule> </Style> Luca Delucchi OSMit 2009
  • 20. 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