Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati
  • Differenze per "Programmazione/Mapnik"
Differenze tra le versioni 42 e 44 (in 2 versioni)
Versione 42 del 20/10/2008 08.01.24
Dimensione: 9433
Commento:
Versione 44 del 20/10/2008 09.14.06
Dimensione: 9808
Commento:
Le cancellazioni sono segnalate in questo modo. Le aggiunte sono segnalate in questo modo.
Linea 65: Linea 65:
Vedremo ora come ottenere una mappa molto basilare con Mapnik. Innanzitutto bisogna scaricare un semplice dataset vettoriale in formato [http://it.wikipedia.org/wiki/Shapefile ESRI Shapefile] e salvarlo in un punto qualsiasi nel filesystem. Vedremo ora come ottenere una mappa con Mapnik. Innanzitutto bisogna scaricare un semplice dataset vettoriale in formato [http://it.wikipedia.org/wiki/Shapefile ESRI Shapefile] e salvarlo in un punto qualsiasi nel filesystem.
Linea 67: Linea 67:
Il secondo passe è scrivere un semplice script in python che punti a questo file, se definisca lo stile e l'estensione geografica.
Per fare questo salvare il seguente script in un file chiamato `italia.py`
Adesso scriviamo un semplice script in python che punti a questo file ne definisca lo stile e l'estensione geografica.
Per fare questo salvare il seguente script nella propria home in un file chiamato `mappa.py`.
L'estensione geografica dello script rende l'area realtiva al mediterraneo. Modificare le coordinate se si desidera rendere un'altra zona geografica
Linea 76: Linea 77:
m = Map(600,300,"+proj=latlong +datum=WGS84") m = Map(500,300,"+proj=latlong +datum=WGS84")
Linea 84: Linea 85:
# Adesso deve venir definito lo stile. Questo può avere una o più rule (regole). Una rule può comprendere un filtro, la definizione di scale minima e
# massima, uno o più Symbolizers (PolygonSymbolizer) e (LineSymbolizer)
# Adesso deve venir definito lo stile. Questo puo' avere una o piu' rule (regole). Una rule puo' comprendere un filtro, la definizione di scale minima e
# massima, uno o piu' Symbolizers (PolygonSymbolizer e LineSymbolizer)
Linea 98: Linea 99:
# Adesso vengono definiti uno o più layer (livelli). Innanzitutto definiamo il nome il nome dello stesso # Adesso vengono definiti uno o piu' layer (livelli). Innanzitutto definiamo il nome dello stesso
Linea 113: Linea 114:
# Definiamo l'estensione geografica. Le coordinate due coppie di coordinate corrispondono ai due angoli basso-sinistro e alto-destro della # Definiamo l'estensione geografica. Le due coppie di coordinate corrispondono ai due angoli basso-sinistro e alto-destro della
Linea 115: Linea 116:
bbox = Envelope(Coord(6.61, 34.80), Coord(29.64, 47.09)) bbox = Envelope(Coord(6, 34), Coord(22, 48))

# zoomiamo all'estensione geografica definita prima
m.zoom_to_box(bbox)

# rendiamo la mappa m nel file mediterraneo.png con formato png
render_to_file(m,'mediterraneo.png', 'png')
}}}
Linea 118: Linea 126:
# aggiungiamo l'estensione geografica alla mappa
m.zoom_to_box(bbox)
Una volta salvato il file bisogna dargli permessi si esecuzione
{{{
chmod +x ~/mappa.py
}}}
Adesso lo script può essere lanciano
{{{
./mappa.py
}}}
Linea 121: Linea 135:
# rendiamo la mappa m nel file world.png con formato png
render_to_file(m,'world.png', 'png')
}}}
Il risultato dovrebbe essere il file mediterraneo.png che rappresenta la nostra mappa.

BR Indice()

Introduzione

Mapnik è un toolkit per la realizzazione di mappe a partire da dati vettoriali e raster ed è un'ottima alternativa ai più famosi [http://mapserver.gis.umn.edu/ Mapserver] e [http://geoserver.org/display/GEOS/Welcome Geoserver]. E' scritto in C++, permette un render molto veloce e utilizza Python bindings che supportano uno sviluppo semplice e veloce delle mappe. Grazie all'ottima [http://mapnik.org/documentation/ documentazione] e ai numerosi [http://trac.mapnik.org/wiki/ExampleCode esempi di codice] l'uso di Mapnik non è precluso a chi non ha conoscenze di programmazione. Mapnik viene usato normalmente per lo sviluppo di applicazioni web ma è adatto anche per la creazione di mappe a livello desktop.

Mapnik inoltre è il renderer "ufficiale" del progetto di cartografia libera [http://openstreetmap.org openstreetmap].

Installazione da Repository

Per installare Mapnik è necessario [:AmministrazioneSistema/InstallareProgrammi:installare] il pacchetto python-mapnik, reperibile dal [:Repository/Componenti:componente] universe dei [:Repository:repository ufficiali].

Per installare una versione più aggiornata non presente nei repository ufficiali si deve procedere tramite la [:AmministrazioneSistema/InstallareProgrammi/DaSorgenti:compilare dei sorgenti].

Installazione tramite sorgenti

Installazione dipendenze

  • Installazione delle dipendenze boost richieste tramite:

    sudo aptitude install binutils cpp-3.3 g++-3.3 gcc-3.3 gcc-3.3-base libboost-dev libboost-filesystem-dev libboost-filesystem1.34.1 libboost-iostreams-dev libboost-iostreams1.34.1 libboost-program-options-dev libboost-program-options1.34.1 libboost-python-dev libboost-python1.34.1 libboost-regex-dev libboost-regex1.34.1 libboost-serialization-dev libboost-serialization1.34.1 libboost-thread-dev libboost-thread1.34.1 libicu-dev libicu38 libstdc++5 libstdc++5-3.3-dev python2.5-dev libfreetype6 libfreetype6-dev libjpeg62 libjpeg62-dev libltdl3 libltdl3-dev libpng12-0 libpng12-dev libtiff4 libtiff4-dev libtiffxx0c2 python-imaging python-imaging-dbg proj 
  • Opzionale: Cairo Renderer:

    sudo aptitude install libcairo2 libcairo2-dev python-cairo python-cairo-dev libcairomm-1.0-1 libcairomm-1.0-dev libglib2.0-0 libpixman-1-0 libpixman-1-dev libpthread-stubs0 libpthread-stubs0-dev ttf-dejavu ttf-dejavu-core ttf-dejavu-extra
  • Opzionale: Installazione di altri strumenti [:UbuntuGis:GIS]:

    sudo aptitude install libgdal-dev python2.5-gdal postgresql-8.3-postgis postgresql-8.3 postgresql-server-dev-8.3 postgresql-contrib-8.3

Compilazione e installazione

Installazione senza supporto WMS

Se non si sono installati i programmi Postgis, Gdal e non si ha intenzione di usare Mapnik come server WMS è suffiente dare i seguenti comandi all'interno di una finestra di terminale:

mkdir ~/src
cd ~/src
svn co svn://svn.mapnik.org/trunk mapnik
cd mapnik
python scons/scons.py
sudo python scons/scons.py install

Installazione con supporto WMS

Se invece si sono istallati Postgis, Gdal e si ha intenzione di usare il supporto WMS è necessario specificare il percorso alle librerie necessarie, digitando i seguenti comandi all'interno di una finestra di terminale:

python scons/scons.py DEBUG=y PGSQL_INCLUDES=/usr/include/postgresql/ PGSQL_LIBS=/usr/lib/postgresql/8.3/lib GDAL_INCLUDES=/usr/local/include GDAL_LIBS=/usr/local/lib XMLPARSER=libxml2
sudo python scons/scons.py install DEBUG=y PGSQL_INCLUDES=/usr/include/postgresql/ PGSQL_LIBS=/usr/lib/postgresql/8.3/lib GDAL_INCLUDES=/usr/local/include GDAL_LIBS=/usr/local/lib XMLPARSER=libxml2

Digitare il seguente comando all'interno di una finestra di terminale:

sudo ldconfig

Test dell'installazione

  1. Aprire una console di python digitando all'interno di una finestra di terminale il seguente comando:

    python
  2. Iniziare le operazioni di verifica tramite il seguente comando:

    import mapnik

Se non dovesse essere restituito nessun output l'installazione è andata bene e si può passare al [http://trac.mapnik.org/wiki/GettingStarted tutorial]

Primi passi con Mapnik

Vedremo ora come ottenere una mappa con Mapnik. Innanzitutto bisogna scaricare un semplice dataset vettoriale in formato [http://it.wikipedia.org/wiki/Shapefile ESRI Shapefile] e salvarlo in un punto qualsiasi nel filesystem.

Adesso scriviamo un semplice script in python che punti a questo file ne definisca lo stile e l'estensione geografica. Per fare questo salvare il seguente script nella propria home in un file chiamato mappa.py. L'estensione geografica dello script rende l'area realtiva al mediterraneo. Modificare le coordinate se si desidera rendere un'altra zona geografica

  • Non dimenticare di modificare il percorso allo shapefile!

from mapnik import *

#qui definiamo la mappa da rendere con le sue dimensioni e il sistema di riferimento geografico (latlon WGS84)
m = Map(500,300,"+proj=latlong +datum=WGS84")

#colore dello sfondo
m.background = Color('steelblue')

# Qui viene creato un stile
s = Style()

# Adesso deve venir definito lo stile. Questo puo' avere una o piu' rule (regole). Una rule puo' comprendere un filtro, la definizione di scale minima e 
# massima, uno o piu' Symbolizers (PolygonSymbolizer e LineSymbolizer)
r=Rule()

# colore di riempimento dei poligoni
r.symbols.append(PolygonSymbolizer(Color('#f2eff9')))

# colore e spessore delle linee di contorno
r.symbols.append(LineSymbolizer(Color('rgb(50%,50%,50%)'),0.1))
s.rules.append(r)

# Aggiungiamo lo stile alla mappa e gli diamo un nome da usare nella definizione del layer (livello)
m.append_style('My Style',s)

# Adesso vengono definiti uno o piu' layer (livelli). Innanzitutto definiamo il nome dello stesso
lyr = Layer('world')

# # # # # # # # # # # # # # # # # # 
#Percorso allo shapefile. --> DA CAMBIARE!
# Lo shapefile deve essere indicato SENZA ESTENSIONE (senza .shp)
# # # # # # # # # # # # # # # # #
lyr.datasource = Shapefile(file='/percorso/ai/dati/world_borders')

# aggiungiamo lo stile al layer
lyr.styles.append('My Style')

# aggiungiamo il layer alla mappa da rendere
m.layers.append(lyr)

# Definiamo l'estensione geografica. Le due coppie di coordinate corrispondono ai due angoli basso-sinistro e alto-destro della 
# mappa
bbox = Envelope(Coord(6, 34), Coord(22, 48)) 

# zoomiamo all'estensione geografica definita prima
m.zoom_to_box(bbox)

# rendiamo la mappa m nel file mediterraneo.png con formato png
render_to_file(m,'mediterraneo.png', 'png')

Una volta salvato il file bisogna dargli permessi si esecuzione

chmod +x ~/mappa.py

Adesso lo script può essere lanciano

./mappa.py

Il risultato dovrebbe essere il file mediterraneo.png che rappresenta la nostra mappa.

Compilazione del Viewer

Mapnik comprende un visualizzatore per la vedere i mapfile di tipo .xml. Il Viewer permette le seguenti funzioni:

  • Visualizzare on-the-fly dei tiles
  • Leggere nel terminale i livelli di zoom e envelope
  • Fare lo zoom tramite query
  • Leggere eventuali errori di configurazione della mappa
  • Esportare in diversi formati tra cui .tif

Immagine(Icone/Piccole/note.png,,center)

Il Viewer è non è presente nel pacchetto installabile da repository. Se si ha intenzione di usarlo è necessario installare Mapnik da sorgenti

Compilazione e installazione

Il codice sorgente del Viewer è contenuto in una sotto cartella del sorgente di Mapnik e deve essere compilato a parte. Per la compilazione sono necessari Qt4 (compreso il pacchtto dev) e qmake.

  1. Entrare della cartella che contiene il Viewer:

    cd ~/src/mapnik/dem/viewer
  2. E' necessario adattare alcuni file al proprio sistema, quindi aprire il file viewer.pro con un [:Ufficio/EditorDiTesto:editor di testo] e modificarlo il percorso di INCLUDEPATH la riga unix.LIBS come segue:

    INCLUDEPATH += /usr/local/include/mapnik
    INCLUDEPATH += /usr/include/boost-1_34_1
    INCLUDEPATH += /usr/include/freetype2
    INCLUDEPATH +=
    unix:LIBS += -L/usr/local/lib -lmapnik
  3. Aprire il file main.cpp con un [:Ufficio/EditorDiTesto:editor di testo] e modificarlo specificando il percorso ai font a ai plugin di Mapnik:

    datasource_cache::instance()->register_datasources("/usr/local/lib/mapnik/input"); 
    freetype_engine::register_font("/usr/local/lib/mapnik/fonts/DejaVuSans.ttf");
    freetype_engine::register_font("/usr/local/lib/mapnik/fonts/DejaVuSans-Bold.ttf");
    freetype_engine::register_font("/usr/local/lib/mapnik/fonts/DejaVuSansMono.ttf");
  4. Compilare e installare il Viewer digitando all'interno di una finestra di terminale i seguenti comandi:

    /usr/bin/qmake-qt4 -makefile
    make

Lanciare il Viewer

Restando nella stessa cartella digitare il seguente comando sempre da una finestra di termiale:

./viewer

Per visualizzare un mapfile lanciare il viewer aggiungendo il percorso dello stesso

./viewer /percorso/mapfile.xml

Ulteriori risorse


CategoryHomepage