Thursday, December 1, 2016

Islenmis OSM Verisi Yerel Diskte, osm2pgsql, PostGIS

Daha once OSRM projesi ile OSM verisi uzerinden nasil servis sunabilir, bunu gorduk. Peki ya ham veriyi almak istiyorsak ne yapariz?

osm2pgsql adli arac apt-get ile kurulabiliyor, yerel diskteki osm.bz2 tipindeki dosyalari isleyip direk Postgresql tabanina veriyi yazabiliyor. PG kurmak altta. Ek olarak bir de lokasyon modulu nasil kurulur onu da gorecegiz, bu eklere PostGIS adi veriliyor, PG'nin lokasyon verisinin islenmesini saglayan ozel fonksiyonlari var.

sudo apt-get install postgresql make cmake g++ libboost-dev libboost-system-dev   libboost-filesystem-dev libexpat1-dev zlib1g-dev   libbz2-dev libpq-dev libgeos-dev libgeos++-dev libproj-dev lua5.2   liblua5.2-dev osm2pgsql postgresql-9.5-postgis-2.2 pgadmin3 postgresql-contrib-9.5

Not: Uzerine oldugumuz Ubuntu versiyonuna gore hangi PG kuruldugu degisik olabilir, bu durumda 9.5 yerine o versiyon koyulabilir.

Baslamak, durdurmak icin sudo service postgresql stop ya da start. Kurulus sirasinda mevcut kullanicinizin direk erisebilecegi postgres adli bir kullanici yaratilmis olmali.

sudo -u postgres createdb gis

ile taban yaratilir.

sudo -i -u postgres

ile oteki kullaniciya girilir,

psql -d gis -c 'CREATE EXTENSION postgis; CREATE EXTENSION hstore;'

Simdi

osm2pgsql berlin-latest.osm.bz2 --slim

Tabana bakariz, psql -d gis, komut satirinda \dt

planet_osm_line
planet_osm_nodes
planet_osm_point
planet_osm_polygon
planet_osm_rels
planet_osm_roads
planet_osm_ways

tablolarini gormemiz lazim. Artik gereken ham veri bu tablolar icinde. Eger veriyi disari cikartmak istiyorsak, mesela tabandaki tum caddeler,

psql -d gis -t -A -F";" -c \
     "SELECT  osm_id,name,highway,\
     st_asText(st_startpoint(st_transform(way, 4326))), \
     st_asText(st_endpoint(st_transform(way, 4326))) \
     FROM planet_osm_line " > output.csv

Not: Ayni cadde ismi ustteki sorgu sonucu birden fazla satirda ve baslangic / bitis noktasi ile gozukebilir. Bu durumda buyuk cogunlukla ayni caddeyi parcalar haline goruyoruz demektir.

PostGIS icin iyi bir kitap PostGIS in Action.

osm2po

Alttaki Java bazli bir proje (kapali kod ne yazik ki), Geofabrik sitesinden gerekli veriyi alip bir Postgresql tabani uzerinde isletilebilecek SQL dosyasi uretiyor.

http://osm2po.de

java -Xmx1g -jar osm2po-core-5.1.0-signed.jar prefix=tr tileSize=x http://download.geofabrik.de/europe/turkey-latest.osm.pbf postp.0.class=de.cm.osm2po.plugins.postp.PgRoutingWriter

cagrisi yeterli. Gerekli dosya tr altdizini icinde olacak. Fakat bu kutuphanenin bazi verileri disarida biraktigini gorduk.

osm2pgrouting

Ham OSM verisinin Postgresql tabana yazabilen bir proje

https://github.com/pgRouting/osm2pgrouting.

Derlemek gerekli.. Ayrica tabani pgrouting icin hazirlamak lazim, bazi create extension komutlari gerekiyor. Ustteki README icinde bunlar var.

Bu kodun bir problemi eger yeterince hafiza yoksa (2 GB bile yetmeyebilir) tek bir bolge verisi uzerinde bile program cokebiliyor.

Postgresql GUI

Uzun zamandir taban semasini gosteren, sorgu isleten GUI araci olarak Squirrel kullaniyorduk (ondan once Toad). Fakat Squirrel projesinde fazla hareket yok; alternatif bir arac SQL Workbench/J.

http://www.sql-workbench.net/

Masaustu ikonu

[Desktop Entry]
Comment=
Terminal=false
Name=SWJ
Exec=/bin/sh /home/burak/Downloads/Workbench-Build121/sqlworkbench.sh
Type=Application
Icon=/usr/share/icons/Win7-icons/apps/gnome-networktool.png

Farkli tabanlara baglanti destegi var. Postgresql icin JDBC jar suradan

https://jdbc.postgresql.org/download.html

SWJ icinden File | Manage Drivers secilir, oradan Postgresql icin indirilen jar secilir.

SQLLite icin jar

https://repo1.maven.org/maven2/org/xerial/sqlite-jdbc/3.8.9.1/

Yine manage drivers'dan sqllite icin yeni profil yaratilir. Sonra yeni baglanti yaratilir, File | Connect Window'dan sol ust kosedeki dugme ile.


No comments: