PostGIS Sample

Filed Under PostGIS

PostGIS Dynamic Input Dengan Mapserver CGI Mode

Pada script .map Anda, mungkin menggunakan koneksi PostGIS untuk mengakses data dan geometry. Pertanyaan yang muncul, bagaimana pada data yang ingin kita tampilkan bersifat dinamis. Misalnya saja untuk klasifikasi peta dalam NQuery Mode ataupun layer khusus yang menampilkan data dengan masukan (input) dari website.
Salah satu koneksi statis menampilkan data pada salah satu layer misalnya seperti ini:

CONNECTIONTYPE postgis
CONNECTION "host=localhost dbname=bandung user=eric password=password"
DATA "the_geom from bandung"


Sekarang kita ingin menambah satu layer lagi dengan klasifikasi kepadatan penduduk satu daerah kecamatan yang lebih dari 50rb orang. Kita tentu membuat kondisi khusus seperti ini:

CONNECTIONTYPE postgis
CONNECTION "host=localhost dbname=bandung user=eric password=password"
DATA "the_geom from bandung WHERE 'POPULASI' >= 50"

Atau menggunakan beberapa klasifikasi dengan pewarnaan yang berbeda:

CONNECTIONTYPE postgis
CONNECTION "host=localhost dbname=bandung user=eric password=password"
DATA "the_geom from bandung"
CLASSITEM 'POPULASI'
     CLASS
       NAME 'Populasi Rendah'
       EXPRESSION ([POPULASI] >= 0 AND [POPULASI] < 50)
       COLOR 255 0 0
       OUTLINECOLOR 0 0 0
     END
     CLASS
       NAME 'Populasi Sedang'
       EXPRESSION ([POPULASI] >= 50 AND [POPULASI] < 200)
       COLOR 255 255 0
       OUTLINECOLOR 0 0 0
     END
     CLASS
       NAME 'Populasi Tinggi'
       EXPRESSION ([POPULASI] >= 200)
       COLOR 0 255 0
       OUTLINECOLOR 0 0 0
     END
 END

Lebih ke depan, setelah mempelajari dan menerapkan fungsi routing dijkstra, kita ingin menampilkan source_id dan target_id yang dinamis:

CONNECTIONTYPE postgis
CONNECTION "host=localhost dbname=roads user=routing password=password"
DATA "the_geom from (SELECT gid, the_geom from
         shortest_path_as_geometry('route', 1, 4567))
         as route using unique gid using srid=-1"

Ganti angka 1 dan 4567 berdasarkan masukan. Katakan saja variabel srcID dan trgID.
Ganti saja parameter kondisi dengan suatu variabel. Contoh untuk kasus routing misalnya titik awal routing diberi variabel srcID dan titik tujuan diberi variabel trgID. Ubah sintaks di mapfile menjadi:

CONNECTIONTYPE postgis
CONNECTION "host=localhost dbname=roads user=routing password=password"
DATA "the_geom from (
         SELECT gid, the_geom from
                      shortest_path_as_geometry('route', %srcID%,%trgID%)
         ) as route using unique gid using srid=-1"

Dan jangan lupa pada template html dimasukkan variabel srcID dan trgID:

 <input type="hidden" value="[srcID]" name="srcID" />
 <input type="hidden" value="[trgID]" name="trgID" />

Metoda ini sangat simpel dan dapat dikembangkan misalnya dengan menggunakan javascript.

Selamat Mencoba

Comments

4 Responses to “PostGIS Sample”

  1. donny on February 19th, 2008 10:12:17 |

    salam kenal

    ric, gw doni. sekarang gw lagi belajar bikin aplikasi web gis pake mapserver. dan gw pake database MySQL. nanya ya, menurut lu, mending pake mana Postgre atau MySQL? apa kelebihan dan kekurangan masing2? alasan gw pake MySQL karena lebih umum dan banyak buku tentang itu. gimana menurut lu?

    thanks
    -don-

  2. Eric on March 1st, 2008 12:30:07 |

    klo saranku sih mendingan pake 2 database, postgresql dan mysql. Untuk database spasialnya mendingan pake pgsql karena lebih fleksibel aja. Ya alasan untuk mysql karena umum itu. Kalau mau yang gak sedikit umum dan lebih powerful jelas pake postgresql karena supportnya banyak dan agak2 restrict (sepertinya). Ato kalo mau modal dikit pake Oracle yang commercial version aja minta support dari mereka :p huehuehue

  3. khairul on June 11th, 2008 01:59:01 |

    mas eric yg baik hati.

    saya mo nanya maksud dr NQuery Mode tuh apa yah?
    bagaimana cara membuatnya? n kegunaannya dimana?

  4. Eric on June 14th, 2008 01:05:03 |

    wah, makasih dibilang baek hati wuehehehe…
    NQuery Mode itu artinya banyak query yang dieksekusi secara bersamaan.
    misalnya nandai (highlight) daerah sumatera utara dan jawa barat sebagai daerah terpilih secara bersamaan.
    Atau highlight daerah dengan tingkat kepadatan penduduk antara 12 s/d 20 misalnya.
    ya begitu2 lah :D
    banyak kondisi yang diinginkan dalam satu waktu