|
Dalam sebuah aplikasi GIS, adakalanya kita menambahkan fasilitas untuk Searching. Use mencari suatu lokasi berdasar namanya, dan kemudian tampilan peta menunjuk (pan dan zooming) ke daerah yang dicari tadi. Misal jika pada suatu peta Indonesia, user mencari dimana letak surabaya, maka dia akan memasukkan kata 'surabaya' di textbox searching dan kemudian mengklik tombol search. dan tampilan peta berubah menjadi kota surabaya tampil ditengah-tengah peta dan biasanya peta lebih di besarkan (zoom in).
Cara kerja searching ini adalah sebagai berikut: Terdapat data diluar dbf, dapat memakai database apa saja, sebagai tempat penyimpanan berbagai macam informasi mengenai object di peta. Sedangkan dalam database internal peta (dbf) sendiri hanya menyimpan kode object., misal kode_jalan Misalkan didatabase postgres terdapat tabel master_jalan. disitu terdapat field-field nama_jalan, nama_ujung, nama_pangkal, lebar, row, kondisi, dsb.. dan harus ada satu field untuk penghubung dengan database internal peta, misal namanya kode_jalan juga. Proses searching dilakukan pada tabel master_jalan di postgres ini. Misal dikhususkan untuk searching nama jalan. Dan hasilnya ditampilkan dalam sebuah tabel dengan link untuk melihat lokasinya pada peta. Nah, saat klik link inilah proses pemfokusan dan zooming pada object jalan terpilih di dalam peta dilakukan. Untuk proses pemfokussan object dilakukan dengan cara looping ke setiap row di tabel dbf, jika bertemu dengan row yang isi fieldnya kode_jalannya sama dengan yang dicari maka cari titik tengah object untuk proses zoomin dan buat object tadi terselect. Untuk membuat object terzoomin, kita harus melakukan konversi dari posisi Geo (milik object) ke posisi Pixel (milik tampilan). Untuk itu dilakukan kalkulasi dalam fungsi Geo2pix. berikut :
function Geo2Pix ($nGeoPos, $dfPixMin, $dfPixMax, $dfGeoMin, $dfGeoMax, $nInverseGeo = "") { // calculate the geocoded & pixel width $dfWidthGeo = abs($dfGeoMax - $dfGeoMin); $dfWidthPix = abs($dfPixMax - $dfPixMin); // get ratio if ( $dfWidthGeo <= 0 ) { return 0; } $dfGeoToPix = $dfWidthPix / $dfWidthGeo;
// get difference if (!$nInverseGeo) $dfDeltaGeo = $nGeoPos - $dfGeoMin; else $dfDeltaGeo = $dfGeoMax - $nGeoPos;
// calculate $dfDeltaPix = $dfDeltaGeo * $dfGeoToPix; $dfPosPix = $dfPixMin + $dfDeltaPix;
// return value return round ($dfPosPix); } Sedangkan cuplikan kode untuk proses penfokusan objectnya adalah sebagai berikut: //ambil layer nomor $layer_no $layer=$GLOBALS[Map]->getlayer($layer_no); //ambil data tabel dari layer tadi $dbname="".str_replace("../","",$GLOBALS[Map]->shapepath)."/".str_replace("shp","dbf",$layer->data); $oDbf=new dbf($dbname); //looping ke semua record pada tabel ini for($j=1;$j<=$oDbf->get_num_records();$j++) { $arr=$oDbf->get_record($j); //jika isi pada field tertentu saman dengan yang dicari if(substr($arr['KODE'],3,4)==substr($_GET[cari],3,4)) { if(!$sudah) { //ambil bentuk shape-nya $layer->open(); $dShape = $layer->getShape(-1,$j); //ambil titik tengah dari shape ini $dPoint=$dShape->getCentroid(); $oPoint=ms_newpointobj(); //ukur kembali ukuran peta saat full $oExt->setextent($GLOBALS[Map]->extent->minx,$GLOBALS[Map]->extent->miny,$GLOBALS[Map]->extent->maxx,$GLOBALS[Map]->extent->maxy); //ubah posisi asli di dunia (geo) ke posisi pixel dimana object berada saat peta sedang full $nPixX = Geo2Pix($dPoint->x, 0, $GLOBALS[Map]->width, $GLOBALS[Map_minx], $GLOBALS[Map_maxx], 0); $nPixY = Geo2Pix($dPoint->y, 0, $GLOBALS[Map]->height, $GLOBALS[Map_miny], $GLOBALS[Map_maxy], 1); $oPoint->setxy($nPixX,$nPixY); //select object yang terpilih $GLOBALS["gShowQueryResults"]=true; $GLOBALS[Map]->queryByIndex($layer_no,0,$j-1,MS_FALSE); //zoom ke arah object terpilih $GLOBALS[Map]->zoompoint(10,$oPoint,$GLOBALS[Map]->width,$GLOBALS[Map]->height,$oExt); $sudah=1; } } }
|
Kuliah TKI - Blog da...
mm Apparently, 21,000 boots imported by
Clas-class php yang ...
mm Apparently, 21,000 boots imported by
Kuliah TK Internet :...
mm Apparently, 21,000 boots imported by
The Power of GIS - U...
mm Apparently, 21,000 boots imported by
Kuliah TK Internet :...
mm Apparently, 21,000 boots imported by
JPGraph - membuat gr...
timberland - mm Apparently, 21,000 bo...
Kuliah TKI : Ajax - ...
mm Apparently, 21,000 boots imported by
Banner spesial untuk...
mm Apparently, 21,000 boots imported by