Skip to main content

Importing OSM (PBF file) to PostGIS (PGSNAPSHOT schema)

OSM Data can be used for variety of usecases like rendering, searching, data analytics etc. Each usecase yield quickest result in a particular data format. Due to the large volume of data, this can cause significant difference in the response times. 

Some of these formats are,
  1. PBF -- A highly compressed format used almost exclusively for storage and downloads owing to the small sizes. These format are not human readable and gzip compressed.
  2. PostgreSQL with PostGIS extension -- A data format backed up by PostgreSQL database. There are various schemas supported for multiple use cases which can greatly impact the response time as indexes and normalization are used to speed up queries. Some popular schemas along with their usecase and certain features are as below. The table is taken directly from openstreetmap wiki.

Schema nameCreated withUsed byPrimary use caseUpdatableGeometries (PostGIS)Losslesshstore columnsDatabase
osm2pgsqlosm2pgsqlMapnikKothic JSRenderingyesyesnooptionalPostgreSQL
apidbosmosisAPIMirroringyesnoyesnoPostgreSQL, MySQL
pgsnapshotosmosisjXAPIAnalysisyesoptionalyesyesPostgreSQL
imposmImposmRenderingnoyesnoImposm2: no, Imposm3: yesPostgreSQL
nominatimosm2pgsqlNominatimSearch, Geocodingyesyesyes?PostgreSQL
ogr2ogrogr2ogrAnalysisnoyesnooptionalvarious
osmsharpOsmSharpRoutingyesno??Oracle
overpassOverpass APIAnalysisyes?yes?custom
mongosmMongOSMAnalysismaybe???MongoDB
node-mongosmMongoosejsAnalysisyesyesyesNAMongoDB
goosmgoosmAnalysisnoyesyesNAMongoDB
pbf2mongopbf2mongoAnalysisnoyesyesNAMongoDB
waychangeSQLstreetkeysmvData cache and Analysisonly a schemaoptional?noPostgreSQL
In this blog, we'll download a PBF file containing our region of interest and insert the data into a PostgreSQL database as PGSNAPSHOT schema.

Get PBF Data

Visit https://download.geofabrik.de/, there you'll find OSM data for continent and countries (and cities in some cases). 

Install osmosis

Visit https://github.com/openstreetmap/osmosis/releases/latest, and download the gzipped tarball containing osmosis binaries.

# mkdir osmosis
# mv osmosis-latest.tgz osmosis
# cd osmosis
# tar xvfz osmosis-latest.tgz
# rm osmosis-latest.tgz

Create Dataqbase and import PGSNAPSHOT schema

# createdb gis
# psql -d gis -c "CREATE extension IF NOT EXISTS postgis; CREATE extension IF NOT EXISTS hstore"
# psql -d gis -f osmosis/script/pgsnapshot_schema_0.6.sql

At a later stage, these scripts can be run for specific queries,

# psql -d pgsnapshot -f osmosis_dir/script/pgsnapshot_schema_0.6_action.sql 

# psql -d pgsnapshot -f osmosis_dir/script/pgsnapshot_schema_0.6_bbox.sql 

# psql -d pgsnapshot -f osmosis_dir/script/pgsnapshot_schema_0.6_linestring.sql

Import PBF data

osmosis/bin/osmosis \
--read-pbf file="asia.osm.pbf" \
--write-pgsql host="localhost" database="gis" user="" password=""

Try out GeoQuery

select st_distance(geom, 'SRID=4326;POINT(-74.1235 35.3521)'::geometry) as dist, \
tags->'name' as name from nodes where tags?'place' and tags->'place' \
in ('city','muncipality','town') order by dist;

Comments

Popular posts from this blog

PC Power supply and hacks

For posterity and myself, I'm leaving some tips and tricks of PC Power Supply Unit (PSU) whcih is an SMPS (Switched Mode Power Supply). There are a variety of uses of a +12V, +5V and +3V DC power supply like lighting up an LED strip or powering a raspberry pi. There are various colored cables in a typical ATX 12V SMPS. I'll list out the various color lines and what they mean, Sr. No Cable color Number of cables in a PSU Use 1 Green exactly one (1) Wake up signal from motherboard. Pressing PC power button makes this signal carry wake up signal to PSU to start. Green needs to be touched with the any ground to make the SMPS start. For self-starting PSUs, green needs to be connected with one black all the time. 2 Blue exactly one (1) -12V 3 Purple exactly one (1) +5V standby. When power supply is on standby mode (not on by signalling green), this line can give 1-2 A current. 4 Gray exactly one (1) Power good signal. When PSU levels has reached specificati...

Multimaster replication with Symmetric DS

Symmetric DS is an awesome tool for trigger based replication whcih works for all major database vendors, including but not limited to PostgreSQL, MySQL, MSSQL, Oracle and many others. Symmetric-DS is a java application and can execute on any platform on whcih JRE is available including Windows and Linux. Trigger based replication, in constrast to disk based (eg. DRBD ) or transaction log file shipping based or statement based , works by registering triggers on DMLs and sending the data thus generated to remote machines. Another very popular trigger based DB replication tool is Slony . Symmetric-DS in addition to being database agnostic also supports multi-master replication (MMR). MMR usecase involves multiple database nodes, connected in a pool with DML updates coming from any of them. This is different from the normal master-slave replication, where slaves are not expected to generate any data events, and the sole authority of database is the master. MMR requirement causes d...

SSL cIpher suits and what they mean?

I'm sure you have wondered at all those cipher suits SSL supports and watched in wonder as to what the hell does all those weird abbreviation mean. To find out what all cipher suits your openssl installation supports try, $ openssl ciphers -v ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256) Mac=AEAD ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(256)  Mac=SHA384 ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AES(256)  Mac=SHA384 ECDHE-RSA-AES256-SHA    SSLv3 Kx=ECDH     Au=RSA  Enc=AES(256)  Mac=SHA1 ECDHE-ECDSA-AES256-SHA  SSLv3 Kx=ECDH     Au=ECDSA Enc=AES(256)  Mac=SHA1 SRP-DSS-AES-256-CBC-SHA SSLv3 Kx=SRP      Au=DSS  Enc=AES(256)  Mac=SHA1 S...