Sunday, June 23, 2013

TileServer.PHP + MBTiles sebagai Solusi Murah Custom Basemap dalam Pembuatan WebGIS

Level:
Intermediate

Skill:
Paling tidak sedikit paham tentang WebServer, XML, PHP, JavaScript, HTML. Basic mengenai Coordinate System dan juga sudah paham software-software GIS.


Dalam membuat aplikasi WebGIS secara syariah (opensource, haha..) tentu kita berusaha mencari alternatif sebanyak mungkin untuk meminimalisir biaya pembuatan sebuah project.

Umumnya cara paling mudah membuat map service untuk pembuatan WebGIS adalah menggunakan ArcGIS Server, dimana kita bisa dengan mudahya mengubah project MXD peta menjadi feature layer service yang outputnya "dynamic / feature" REST service endpoint, juga basemap layer service yang outputnya adalah "tiled" REST service endpoint yang mampu dibaca Viewer WebGIS pada umumnya.

Namun, tidak semua client pemberi dana project mau, eh.. mampu, untuk membeli ArcGIS Server, dan toh jika yang dikehendaki hanyalah Viewer sederhana untuk menampilkan peta secara online saja, yang tidak membutuhkan fitur-fitur keren yang dimiliki ArcGIS Server kenapa juga harus beli mahal (harganya mirip harga satu mobil lho).

Pada umumnya cara paling basic yang sering dipakai orang adalah menggunakan Google Map / Bing / OpenStreet Map sebagai dasaran peta / basemap, dan kemudian ditambahkan peta tematik di atasnya.

Namun ada kalanya kita membutuhkan basemap bikinan sendiri, yang memenuhi kriteria dan standar kita sendiri untuk menunjang sebuah kegiatan. Yang tidak bisa diakomodir menggunakan service standar yang disediakan pada umumnya.

Misalnya, kita menginginkan basemap peta jalan dan atau administrasi yang jika memakai basemap ESRI / Google / Bing / OSM tidak detail / jelek pada daerah tertentu. Dengan membuat basemap sendiri tentunya bisa lebih baik jika kita punya data yang lebih lengkap dibandingkan service basemap mereka.

Dan juga contoh lagi, kadang peta tematik tertentu membutuhkan basemap khusus dengan tema yang akan disajikan. Lucu aja sih misalnya petanya temanya bencana, basemap-nya jalan. Petanya kepadatan penduduk basemap-nya citra, gak masuk kalau ditampalin agak transparan malah ngeganggu.
Juga misalnya temanya tentang peta rencana jalan, kalau pakai basemap-nya google / bing, tar malah numpuk-numpuk antara operational layer dengan basemap yang sudah ada jalannya.
ITULAH pentingnya bikin custom basemap sendiri.

Dalam hal tersebut keberadaan basemap dari MBTiles dapat membantu kita dalam membuat tiled service untuk dapat dibaca oleh MapViewer yang kita gunakan nantinya.
Penjelasan mudah dari MBTiles sebenarnya adalah sebuah packaging dari sebuah basemap, yang esensinya merupakan database SQLite yang berisikan folder dengan hirarki / Z  / X / Y.ekstensi

Berikut penjabaran mengenai seluk beluk format ZXY, kalau males skip aja deh.
Format ZXY atau XYZ atau ZYX lazim digunakan oleh berbagai penyedia layanan peta online dalam menyajikan basemap mereka, contohnya OpenStreet Map, format endpoint dari basemap mereka adalah:
http://otile1.mqcdn.com/tiles/1.0.0/osm/[Z]/[X]/[Y].png

Z adalah level kedetailan sebuah peta, atau skala.
Konversi Z menjadi skala normal pada umumnya (meter) adalah sebagai berikut:
19 = 1:1128,497176
18 = 1:2256,994353
17 = 1:4513,988705
16 = 1:9027,977411
15 = 1:18055,954822
14 = 1:36111,909643
13 = 1:72223,819286
12 = 1:144447,638572
11 = 1:288895,277144
10 = 1:577790,554289
09 = 1:1155571,108577
08 = 1:2311162,217155
07 = 1:4622324,434309
06 = 1:9244648,868618
05 = 1:18489297,737236
04 = 1:36978595,474472
03 = 1:73957190,948944
02 = 1:147914381,897889
01 = 1:295828763,795777
00 = 1:591657527,591555

Kemudian tentu saja X adalah bujur atau longitude atau kolom (column)
dan Y adalah lintang atau latitude atau baris (row).

Contoh:
Skala 4.513
Dari [Ujung Barat-Selatan]: 110.40985 , -6.95914 sd [Ujung Timur-Utara]: 110.41259 , -6.956417
http://otile3.mqcdn.com/tiles/1.0.0/osm/16/52867/34037.png --> ZXY
Z = 17
X = 52867
Y = 34037

Skala 2.311.162
Dari [Ujung Barat-Selatan]: 109.6875 , -8.40716 sd [Ujung Timur-Utara]: 111.09375 , -7.01366
http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/8/133/206.jpg --> ZYX
Z = 8
Y = 133
X = 206
(Iya memang kebalik, tile dari REST Service-nya ArcGIS Server ESRI formatnya ZYX bukan ZXY)

Sebenarnya saya ada penjelasan cara matematis untuk mengubah format koordinat dari derajat desimal ke dalam format ZXY, namun.. NOT TODAY! (males, buat apa coba). Untuk mudahnya dalam mengecek posisi ZXY dalam sebuah peta, gunakan tool di link web ini.

Nah udah kan, sekarang kembali ke pembahasan utama.
Kembali ke MBTiles lagi, jadi sebenarnya daleman MBTiles itu tadi adalah format standar folder ZXY.
Dan kali ini kita membahas bagaimana caranya MBTiles supaya dapat dibaca oleh beragam Viewer yang telah beredar.

Sejauh ini, TileServer.PHP menurut saya adalah cara yang terbaik dalam membuat custom basemap dari file MBTiles. Dan kabar menggembirakannya, TileServer.php ini tidak membutuhkan setingan khusus pada server, yaitu tanpa perlu server khusus milik sendiri yang harus online layaknya MapServer dan ArcGIS Server. TileServer ini dapat berjalan normal pada server situs hostingan biasa.

Perlu diketahui, input dari TileServer ini hanya mensupport MBTiles format TMS, dengan urutan Y yang terbalik (selatan ke utara). MBTiles format TMS (Y terbalik) ini dapat dihasilkan oleh: Global Mapper, TileMill, MOBAC, dan.. wait for it.... ArcMap / ArcGIS, software pemetaan kecintaan kita semua...  :D
Dan juga perlu diperhatikan catatan saya ini mengenai tampilan desain dan simbolisasi kartografis pada tiap skala.

Mengenai cara pembuatan MBTiles dari software-software pemetaan di atas, tidak akan saya jabarkan dahulu di sini (kapan-kapan), tapi untuk Global Mapper (ada fiturnya mulai dari 14.0.3), mudah saja Export > Export Web Format > MBTiles, lalu pilih zoomnya skalanya sampai berapa.

Perlu diketahui pula terdapat dua mahzab dalam format ZXY ini:
mahzab-nya OSM+Google VS mahzab-nya TMS yang dipakai oleh Bing dan... um siapa ya lupa..

OSM dan Google, memakai format ZXY dengan Y yang memiliki urutan dari utara ke selatan.
sedangkan TMS, memakai format ZXY dengan Y memiliki urutan dari selatan ke utara.
Untuk mudah memahaminya coba deh buka link ini, zoom bentar ke mana kek nanti terlihat perbedaaan antara OSM / Google dan TMS pada penomoran Y-nya.
Kalau ingin tahu rumus matematis cara konversinya, buka link ini.

Walaupun TileServer ini bersumber pada MBTiles format TMS dengan urutan Y terbalik, TileServer otomatis mengubahnya menjadi format OSM / Google pada outputnya.
Yaitu berupa Web Tile ZXY format OSM dengan Y urutan normal.

Dengan output ZXY OSM tersebut, maka hal tersebut dapat dimanfaatkan sebagai REST endpoint untuk aplikasi WebGIS seperti ArcGIS FlexViewer mau pun ArcGIS Javascript Viewer, dan juga OpenLayers Viewer.

Selain menghasilkan output Web Tile ZXY, TileServer juga menghasilkan output WMTS Service.

WMTS bisa dibaca pada beragam aplikasi seperti ArcGIS Desktop, Global Mapper, beserta beragam aplikasi Viewer peta dalam web guna membuat WebGIS.

Oke, cukup, sudah cukup panjang dan berbusa-busa basa-basi penjelasannya.
Berikut cara memasang TileServer:
     $config = array(
          "baseUrls" => array("http://yourserver.com/tileserver/"),

  • Kemudian copy file basemap MBTiles yang hendak digunakan ke dalam folder tileserver.
  • Jika memakai dalam server lokal untuk coba-coba, pastikan seting dahulu WAMP-nya supaya dapat memakai fitur .httaccess dengan benar:
    Apache > Apache modules > rewrite_module ON.

Sudah, simpel banget kan?

File MBTiles tadi dapat menghasilkan service WMTS dan juga Web-Tile-ZXY, outputnya adalah sebagai berikut
  • WMTS (Web Map Tile Service):
    http://yourserver.com/tileserver/WMTS
Dan format output Web Tile ZXY-nya untuk dikonsumsi Viewer adalah seperti berikut:
  • OpenLayers Viewer
    yourserver.com/tileserver/NAMAFILE.mbtiles/default/${z}/${x}/${y}.jpg
  • ESRI ArcGIS Flex dan JavaScript Viewer
    yourserver.com/tileserver/NAMAFILE.mbtiles/default/{level}/{col}/{row}.jpg

Berikut contoh coding basemap source dari TileServer.PHP ini dalam FlexViewer:
<basemaps>
 <layer type="webtiled"
 label="Semarang 2004"
 icon="assets/images/smg04.png"
 url="marhensa.web.ugm.ac.id/tileserver/semarang04.mbtiles/default/{level}/{col}/{row}.jpg" visible="true"/>
</basemaps>

Oh hampir lupa, output sistem koordinat dari MBTiles ini ialah standar yang dipakai dalam pemetaan web, yaitu Web Mercator (Auxiliary Sphere) / WKID: 102100 / EPSG: 900913

Untuk contoh dan buktinya yang sudah jadi, coba akses Viewer berikut:
http://marhensa.web.ugm.ac.id/maps/semarang-flex/
http://marhensa.web.ugm.ac.id/maps/semarang-javascript/
http://marhensa.web.ugm.ac.id/maps/semarang-openlayers/
Di situ saya menggunakan custom basemap berupa citra qb tahun 2004, zoom 0 sampai zoom 16.

Dan juga ada contoh yang agak geje seperti berikut ini :p
http://marhensa.web.ugm.ac.id/maps/game-of-thrones/


Monday, October 24, 2011

Linkin Park - In Beetwen

Let me apologize to begin with
Let me apologize for what I'm about to say
But trying to be genuine was harder than it seemed
And somehow I got caught up in between

Let me apologize to begin with
Let me apologize for what I'm about to say
But trying to be someone else was harder than it seemed
And somehow I got caught up in between

Let me apologize to begin with
Let me apologize for what I'm about to say
But trying to regain your trust was harder than it seemed
And somehow I got caught up in between

Between my pride and my promise
Between my lies and how the truth gets in the way

The things I want to say to you get lost before they come
The only thing that's worse than one is none

And I cannot explain to you
And anything I say or do or plan

Fear is not afraid of you
But guilt's a language you can understand

I cannot explain to you
And anything I say or do
I hope the actions speak the words they can


Sunday, March 27, 2011

Motorola Defy: BadakDROID dari Motorola

Motorola Defy rilis di Indonesia pada bulan Maret 2011,
namun sepertinya harga di FJB Kaskus yang impor dari Singapura lebih murah,
so.. pilihan jatuh pada FJB Kaskus :)





Soal garansinya yang garansi Singapura gak masalah lah, toh pastinya saya akan merusak garansinya. Pasti kedepannya akan gatal untuk mengoprek-oprek neng Defy ini untuk lebih smooth dan powerful. Dimana oprekan itu pasti salah satunya akan melakukan Rooting + Install custom ROM
So bye-bye aja deh soal garansi. I VOID WARRANTIES :D

Monday, November 8, 2010