Teknik Informatika/Overpass API
Overpass API adalah API yang bersifat read-only untuk mengakses data yang ada dalam OpenStreetMap. Sebelum tahun 2011, layanan ini bernama OSM Server Side Scripting (OSM3S). API ini menyimpan copy dari seisi database OpenStreetMap, yang diupdate setiap menit sekali. Kita dapat menggunakan beberapa public instance dari API ini, atau membuat self-hosting sendiri.
Self-hosting
suntingSystem requirements
sunting- Expat XML Parser
- C++ compiler
- OSM file berformat XML, dikompres dengan format bzip. Jika ingin menggunakan kompresi protobuf, gunakan osmconvert untuk mengubahnya jadi bzip.
- OSM file ini dinamakan "Planet.osm", seluruh database OSM dalam sebuah file XML. File ini diupdate tiap minggu. Pada 1 Desember 2022, file ini berukuran 1671 GB (uncompressed) / 121.5 GB (bzip2 compressed) / 66.4 GB (protobuff compressed).
- Tidak perlu install database engine, karena sudah built-in dalam Overpass API
- Siapkan beberapa folder ini :
- $EXEC_DIR : Tempat file executable utama
- $DB_DIR : Direktori untuk menyimpan file database
- $REPLICATE_DIR : Direktori untuk menyimpan file update OSM per menit
Instalasi (Linux server)
suntingPertama, instal beberapa packages yang dibutuhkan
sudo apt-get update
sudo apt-get install g++ make expat libexpat1-dev zlib1g-dev
Lalu, download Overpass API, ekstrak, compile dan install
wget http://dev.overpass-api.de/releases/osm-3s_v[latest_version].tar.gz
tar -zxvf osm-3s_v*.tar.gz
cd osm-3s_v*
./configure CXXFLAGS="-02" --prefix=$EXEC_DIR
make install
Public Instance
suntingSelain self-hosting sendiri, kita juga bisa menggunakan public instance milik orang lain. Dengan catatan, bahwa ada batasan penggunaan di setiap servernya.
Endpoint | Specs |
---|---|
4 physical cores, 64 GB RAM, SSD. Per user quota 10.000 queries per day + 5 GB data per day. | |
https://maps.mail.ru/osm/tools/overpass/api/interpreter | 2 servers, 56 physical cores, 384 GB RAM, SSD. |
https://overpass.kumi.systems/api/interpreter | 4 servers, 20 cores, 256 GB RAM, SSD. No rate limit |
Panduan Querying
suntingTampilkan seluruh data yang mengandung "key:value" tertentu
sunting// Single line comment /* Multiline comment */ [out:json][timeout:25]; ( node["service"="driveway2"]({{bbox}}); way["service"="driveway2"]({{bbox}}); relation["service"="driveway2"]({{bbox}}); ) out body; >; out skel qt;
Tampilkan seluruh kontribusi dari suatu user tertentu + map styling
sunting[out:json][timeout:30]; // fetch area "Ireland" to search in {{geocodeArea:Ireland}}->.searchArea; ( node(user:"username")["emergency"="defibrillator"] (area.searchArea); ); out body; >; {{ style: node[emergency=defibrillator]{ icon-image:url('https://...'); icon-width:16; } }}
Tampilkan data umur bangunan menggunakan kode warna
sunting[out:json][timeout:2500]; {{geocodeArea:Nottingham}}->.searchArea; ( nwr["building"][start_date]({{bbox}}); ); (._;>;); out body; {{style: node { color:#000000; fill-color: #000000 } area[start_date>=2005]{ color: #313695; fill-color: #313695; } area[start_date<2005]{ color:#4575B4; fill-color: #4575B4; }
(._;>;);
sunting
Jika bagian kode ini dihapus, akan muncul error :
"This query returned no nodes. In OSM, only nodes contain coordinates. For example, a way cannot be displayed without its nodes."
Kode ini ditambahkan secara otomatis (menggunakan fitur "repair query" pada Overpass API) untuk menampilkan titik koordinat pada objek "way".