I dati di OpenStreetMap sono disponibili in formato PBF su planet.openstreetmap.org. Possiamo tenere aggiornato il nostro repository
Download dei dati OpenStreetMap più recenti
Se pensiamo di voler utilizzare il file con i dati relativi all'intero pianeta Terra, potremmo scaricarli in questo modo:
mkdir /usr/local/share/maps/planet
cd /usr/local/share/maps/planet
wget http://planet.openstreetmap.org/pbf/planet-latest.osm.pbf
Vista l'entità del download (18 GB circa), è consigliabile però iniziare con piccole prove su aree più ristrette: degli estratti di dati OpenStreetmap sono disponibili in download.geofabrik.de.
Infasamento dei dati
La procedura di caricamento dei dati sul database (o infasamento) è particolarmente intensa dal punto di vista dell'I/O, e potrebbe richiedere diverse ore, se non giorni, a seconda delle prestazioni del server e della dimensione del file scelto.
La scelta più consigliabile è quella di effettuare diverse prove modificando, nel comando seguente, il numero di chunk (-C
) e di processi (--number-processes
: in genere un buon numero è dato dal numero di core del processore, meno 1):
osm2pgsql --slim -d gis -C 16000 --number-processes 3 ~/planet/planet-latest.osm.pbf
Il processo di infasamento è diviso in due parti. Nella prima parte si può avere un output simile a questo:
Using projection SRS 900913 (Spherical Mercator)
Setting up table: planet_osm_point
NOTICE: table "planet_osm_point" does not exist, skipping
NOTICE: table "planet_osm_point_tmp" does not exist, skipping
Setting up table: planet_osm_line
NOTICE: table "planet_osm_line" does not exist, skipping
NOTICE: table "planet_osm_line_tmp" does not exist, skipping
Setting up table: planet_osm_polygon
NOTICE: table "planet_osm_polygon" does not exist, skipping
NOTICE: table "planet_osm_polygon_tmp" does not exist, skipping
Setting up table: planet_osm_roads
NOTICE: table "planet_osm_roads" does not exist, skipping
NOTICE: table "planet_osm_roads_tmp" does not exist, skipping
Mid: pgsql, scale=100, cache=4096MB, maxblocks=524289*8192
Setting up table: planet_osm_nodes
NOTICE: table "planet_osm_nodes" does not exist, skipping
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "planet_osm_nodes_pkey" for table "planet_osm_nodes"
Setting up table: planet_osm_ways
NOTICE: table "planet_osm_ways" does not exist, skipping
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "planet_osm_ways_pkey" for table "planet_osm_ways"
Setting up table: planet_osm_rels
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "planet_osm_rels_pkey" for table "planet_osm_rels"
Reading in file: /home/user/planet/planet-latest.osm.bz2
Processing: Node(10140k 200.1k/s) Way(0k 0.00k/s) Relation(0k 0.00/s)
Il processo a questo stadio non dovrebbe essere interrotto: non è infatti possibile riprenderlo, se non ricominciando dall'inizio.
Eventuali eccezioni come quelle mostrate di seguito non incidono sul processo.
Processing: Node(593072k) Way(45376k) Relation(87k)
Exception caught processing way id=110802
Exception caught processing way id=110803
Processing: Node(593072k) Way(45376k) Relation(474k)
La seconda e ultima parte ha tempi di esecuzione paragonabili alla prima:
Node stats: total(593072533), max(696096737)
Way stats: total(45376969), max(55410575)
Relation stats: total(484528), max(555276)
Going over pending ways
processing way (752k)
Going over pending relations
node cache: stored: 515463899(86.91%), storage efficiency: 96.01%, hit rate: 85.97%
Committing transaction for planet_osm_roads
Committing transaction for planet_osm_line
Committing transaction for planet_osm_polygon
Sorting data and creating indexes for planet_osm_line
Sorting data and creating indexes for planet_osm_roads
Sorting data and creating indexes for planet_osm_polygon
Committing transaction for planet_osm_point
Sorting data and creating indexes for planet_osm_point
Stopping table: planet_osm_nodes
Stopping table: planet_osm_ways
Stopping table: planet_osm_rels
Building index on table: planet_osm_rels
Stopped table: planet_osm_nodes
Building index on table: planet_osm_ways
Stopped table: planet_osm_rels
Completed planet_osm_point
Completed planet_osm_roads
Completed planet_osm_polygon
Completed planet_osm_line
Stopped table: planet_osm_ways
Osm2pgsql took 86400s overall