Anda di halaman 1dari 15

Konversi Shapefile (ArcView) ke Database

MySQL (MapServer)
July 14, 2009 by Kang Admin Leave a reply »

MapServer merupakan tools yang saat ini sedang cukup populer sebagai SIG berbasis web.
MapServer dibuat untuk memudahkan dalam membangun SIG yang handal dan mudah, hal ini
karena fitur-fitur MapServer cukup beragam dan dapat diintegrasikan dengan framework SIG
seperti Chameleon dan GMap. Bahasa pemrograman pokok dari MapServer yaitu PHP yang
cukup populer dan familiar di telinga web programer, ditambah kemampuannya mengolah
database pasangannya PHP yaitu MySQL sehingga tidak mengherankan kalau MapServer
sekarang sedang digandrungi para web-based GIS mania.

Arcview merupakan aplikasi pengolah data spasial yang cukup terkenal. Ketika proyek yang
dibuat di dalam Arcview versi 3.x telah selesai, kita bisa melihat hasil tampilannya secara
langsung. Namun apa jadinya kalau kita ingin menampilkannya pada situs web. Tentu hal ini
akan merepotkan karena file data spasial (Shapefile) milik Arcview tidak bisa di-load pada
browser secara mudah, meskipun secara umum shapefile tersebut dapat ditampilkan pada
browser melalui MapServer namun tampilannya sangat statis dan kita tidak bisa melakukan
operasi insert, update, delete secara mudah pada objek yang ditampilkan.

Oleh karena itu, sebaiknya shapefile dari ArcView tersebut dikonversi ke basis data MySQL.
Namun yang perlu diingat, hasil konversi ke basis data MySQL ini tidak bisa digunakan oleh
SIG model SVG, karena hasil koordinat data spasialnya akan diubah ke tipe data Geometry.
Sehingga hasil konversi ini hanya cocok untuk model SIG seperti MapServer.

Bukankah pada ArcView versi 3.x sudah ada konverternya dari shapefile ke database MySQL ?
Ya, kalau Anda telah menambahkan modul ekstensi file tambahannya, namun hasil dari konversi
tersebut tidak bisa digunakan oleh SIG model MapServer. Karena MapServer membutuhkan data
(field) khusus yang bertipe Geometry, sedangkan hasil dari konversi tersebut berupa pasangan
koordinat X,Y non Geometry.

Sebelum melakukan konversi silakkan download dahulu MS4W versi terbarunya, kalo tidak
salah ada di situs MapTools.org. MS4W (MapServer for Windows) merupakan paket aplikasi
lengkap dari MapServer. Di dalamnya sudah tersedia tools untuk konversi, informasi data, dan
server apache khusus untuk SIG.

File-file utama untuk konversi ada di folder gdal-ogr (ms4w/tools/gdal-ogr), namun karena file
utama tersebut membutuhkan file-file library yang tidak terdapat dalam satu folder, maka file-
file library (*.dll) yang berada pada folder cgi-bin (ms4w/Apache/cgi-bin) perlu di-copy ke
dalam folder gdal-ogr tadi. Cukup copy semua file yang berekstensi .dll saja pada folder cgi-bin
(ms4w/Apache/cgi-bin) ke folder gdal-ogr (ms4w/tools/gdal-ogr).
Setelah file-file library tersebut di-copy, kemudian letakkan seluruh shapefiles meliputi file
dengan ekstensi : .shp; .shx; .sbx; .sbn; .dbf; .prj; dari proyek SIG yang telah Anda buat ke dalam
folder gdal-ogr (ms4w/tools/gdal-ogr).

Karena hasil konversi nantinya akan menjadi database MySQL, buatkan dahulu database baru
yang kosong pada MySQL Server, misalnya dengan nama websig.

Setelah database dibuat, sekarang saatnya melakukan konversi. Buka Command Prompt
Windows, caranya klik Start -> Run -> cmd. Atau Start -> All Programs -> Accessories ->
Command Prompt. Setelah itu pindahkan direktori pada command prompt ke folder gdal-ogr
tadi. Caranya ketik cd c:\ms4w\tools\gdal-ogr

File utama untuk melakukan konversi adalah ogr2ogr.exe

Setelah masuk ke folder gdal-ogr, sekarang lakukan konversi dengan mengetik perintah berikut
pada command prompt:

ogr2ogr -f MySQL MySQL:websig,user=root,password=pass -lco


GEOMETRY_NAME=nama_field nama_file.shp

Perhatian ! : antara kata ‘websig,‘ dengan kata ‘user‘ dan juga antara kata ‘root,‘ dengan kata
‘password‘ TIDAK ada spasi, begitu juga dengan kata di antara tanda sama dengan (=). Jadi
tulislah format penulisannya persis seperti di atas.

Keterangan :
websig, merupakan nama database.
root, merupakan nama pengguna MySQL Server (defaultnya root).
pass, kalau MySQL Server Anda diberi password, tuliskan password tersebut. Defaultnya
kosong.
nama_field, merupakan nama field database yang nantinya bertipe geometry.
nama_file.shp, merupakan nama shapefile dari proyek yang Anda buat pada ArcView.

Nama tabel dari hasil konversi tersebut sama persis dengan nama shapefile yang dikonversi.

Catatan :
Apabila Anda membuat proyek pada ArcView yang memiliki beberapa shapefile yang saling
terkait antara satu shapefile lainnya misalnya shapefile batas_kab.shp dan shapefile
batas_kec.shp, kemudian ingin keduanya dikonversi ke database, maka ulangi perintah konversi
di atas, namun hanya nama filenya saja yang dirubah.
Contoh :

ogr2ogr -f MySQL MySQL:websig,user=root,password= -lco


GEOMETRY_NAME=nama_field batas_kab.shp
ogr2ogr -f MySQL MySQL:websig,user=root,password= -lco
GEOMETRY_NAME=nama_field batas_kec.shp
Berikut contoh tampilan ketika terjadi konversi :

Untuk melihat data hasil konversi yang baru dilakukan dapat dilakukan melalui file ogrinfo.exe.
Berikut perintahnya :

ogrinfo MySQL:websig,user=root,password=pass nama_tabel -so

Contoh tampilan dari perintah tersebut adalah:


Koneksi MapServer dengan Database
MySQL
July 14, 2009 by Kang Admin Leave a reply »

Pada artikel sebelumnya mengenai konversi shapefile ke database MySQL, kali ini saya akan
menjelaskan sedikit bagaimana koneksi ke database MySQL melalui MapServer.

Sebelumnya Anda harus menambahkan statemen untuk koneksi pada file map Anda. Contoh file
map Anda bernama wisata.map, berikut statemen yang dimaksud

CONNECTIONTYPE OGR
CONNECTION “MYSQL:wisatabara,user=root,password=”
DATA “SELECT * FROM t_obyek_wisata”

Statemen di atas diletakkan di dalam blok definisi layer.

Untuk memudahkan, silakkan lihat potongan kode berikut:

1. File wisata.map (bagian Layer wisata)

view sourceprint
01.LAYER
02. NAME "wisata"
03. TYPE POINT
04. STATUS ON
05. #----- Koneksi ke MySQL
06. CONNECTIONTYPE OGR
07. CONNECTION "MYSQL:wisatabara,user=root,password="
08. DATA "SELECT * FROM t_obyek_wisata"
09. #-----
10. CLASS
11. NAME "Oby. Wisata"
12. TEMPLATE "../div_temp/null.html"
13. STYLE
14. SYMBOL "obWisata"
15. SIZE 17
16. END
17. END
18. PROJECTION
19. "init=epsg:4326"
20. END
21.END
Kemudian untuk menge-load MapServer, dibutuhkan kode berikut pada file php Anda:

if(!extension_loaded(”MapScript”))
{

dl(’php_mapscript.’.PHP_SHLIB_SUFFIX);

Kemudian untuk melampirkan file map di dalam file php yang Anda buat, tuliskan kode berikut:

$GLOBALS["oMap"] =ms_NewMapObj(”wisata.map”);

file wisata.map di atas diasumsikan berada pada folder yang sama denga file php Anda.

Kode selengkapnya, berikut tools pendukungnya seperti zoom-in, zoom out, pan, dan lain
sebagainya, silakkan lihat kode berikut ini.

2. File peta.php

view sourceprint
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Peta</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="../css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<?php
include("fungsi/pmanip.php");

// load library MapServer


if(!extension_loaded("MapScript"))
{
dl('php_mapscript.'.PHP_SHLIB_SUFFIX);
}

// lokasi relatif file map


$GLOBALS["oMap"] =ms_NewMapObj("map/wisatabara.map");
$GLOBALS["LokasiKlik"] = ms_newPointObj();
$check_pan = "checked";

// hasilkan komponen checkbox secara otomatis berdasarkan status layer


pada file map-nya
for($i=0; $i<$GLOBALS["oMap"]->numlayers;$i++)
{
$layer = $GLOBALS["oMap"]->getLayer($i);
if($layer->status != MS_DEFAULT)
{
$nm_layer="layer_".$layer->name;
$oLayer=$GLOBALS["oMap"]->GetLayerByName("$layer->name");
if((isset($nm_layer)&&$_POST[$nm_layer]=="on")||($oLayer->status
== 1)&&$default_layer) $oLayer->set("status",1);
else $oLayer->set("status",0);
}
}

$FaktorSkala = 2; // default, bisa dirubah

// terjadi proses navigasi pada peta


if (isset ($_POST["mapa_x"]) && isset ($_POST["mapa_y"])
&& !isset ($_POST["ZoomFull"]))
{
$oExtent = explode (" ",$_POST["extent"]);
$GLOBALS["PosisiKlik"] = ms_newPointObj();
$MinX = $oExtent[0]; $MinY = $oExtent[1];
$MaxX = $oExtent[2]; $MaxY = $oExtent[3];
$GLOBALS["oMap"]->SetExtent ($MinX, $MinY, $MaxX, $MaxY);
$PosisiKlikX = $_POST["mapa_x"];
$PosisiKlikY = $_POST["mapa_y"];
$GLOBALS["PosisiKlik"]->SetXY ($PosisiKlikX, $PosisiKlikY);
$oKotak = ms_newRectObj();
$oKotak->SetExtent ($MinX, $MinY, $MaxX, $MaxY);
$IndeksZoom = $_POST["zoom"];
$NilaiPerbesaran = $_POST["Perbesaran"];
$SkalaZoom = $IndeksZoom * $NilaiPerbesaran;
$StatQuery = $_POST["rQuery"];

// mode aktivasi radiobutton tools map


if ($StatQuery == "on")
{
$StatQuery == "on";
$check_pan = "";
$check_zoomout = "";
$check_zoomin = "";
$check_query = "checked";
$StatusFungsi = "on";
} // akhir query
else
{
$StatusFungsi = "off";
if ($SkalaZoom == 0)
{
$SkalaZoom = 1;// memaksa panning
$check_pan = "checked";
$check_zoomout = "";
$check_zoomin = "";
$check_query = "";
}
else if ($SkalaZoom < 0)
{
$check_pan = "";
$check_zoomout = "checked";
$check_zoomin = "";
$check_query = "";
}
else if ($SkalaZoom > 0)
{
$check_pan = "";
$check_zoomout = "";
$check_zoomin = "checked";
$check_query = "";
}
$FaktorSkala = abs($SkalaZoom);
$GLOBALS["oMap"]->ZoomPoint ($SkalaZoom, $GLOBALS["PosisiKlik"],
$GLOBALS["oMap"]->width, $GLOBALS["oMap"]->height, $oKotak);
}
}
$oRect = $GLOBALS["oMap"]->extent->minx." ".$GLOBALS["oMap"]->extent-
>miny." ".$GLOBALS["oMap"]->extent->maxx." ".$GLOBALS["oMap"]->extent-
>maxy;

// pemilihan apakah sekarang pada mode query (ambil info objek) atau tidak
// di akses melalui radio button
if ($StatQuery == "on") { $oImage = $GLOBALS["oMap"]->DrawQuery(); }
else {$oImage = $GLOBALS["oMap"]->Draw(); }

// berisi alamat file peta utama, nama file dihasilkan secara berubah-
ubah (random)
$oURLPeta=$oImage->SaveWebImage();

$oLegenda=$GLOBALS["oMap"]->DrawLegend();
// berisi alamat file legenda, nama file dihasilkan secara berubah-ubah
(random)
$oURLLegenda=$oLegenda->SaveWebImage();
$oSkala=$GLOBALS["oMap"]->DrawScalebar();
// berisi alamat file skala, nama file dihasilkan secara berubah-ubah
(random)
$oURLSkala=$oSkala->SaveWebImage();
?>

<div class="tabel_cari" style="color:#c12f00">


<form method="post" action="index.php?hal=peta" />
<table width="765" height="164" border="0" class="peta">
<tr>
<td width="137" rowspan="3" valign="top">
<br />
<br />
<p id="legenda-title" style="cursor:pointer; font-size:12px; font-
weight:bold;">Legenda</p>
<div id="legenda" class="switchgroup1">
<img src="<?php echo($oURLLegenda);?>"> </div>

<p id="layer-title" style="cursor:pointer; font-size:12px; font-


weight:bold">Layer</p>
<div id="layer" class="switchgroup1">
<?php
// tampilkan checkbox layer
for($i=0; $i<$GLOBALS["oMap"]->numlayers;$i++)
{
$layer = $GLOBALS["oMap"]->getLayer($i);
if($layer->status != MS_DEFAULT)
{
$class=$layer->getClass(0);
?>
<input type="checkbox" name="layer_<?php
echo($layer->name)?>" value="on" <?php if($layer->status==MS_ON)
echo('checked="checked"'); else echo(''); ?> />&nbsp;<?php echo("$class->name
<br />");?>
<?
}
}
?>
<input type="submit" value="Update" class="bt_var" name="update"
/>
</div>

</td>
<td width="46" height="22"><input type="radio" name="zoom" value="0" <?php
echo($check_pan); ?> title="geser" /><img src="images/ppan.gif" title="geser"
/></td>
<td width="46"><input type="radio" name="zoom" value="1" <?php
echo($check_zoomin); ?> title="perbesar" /><img src="images/pzoomin.gif"
title="perbesar" /></td>
<td width="46"><input type="radio" name="zoom" value="-1" <?php
echo($check_zoomout); ?> title="perkecil" /><img src="images/pzoomout.gif"
title="perkecil" /> </td>
<td width="46"><input type="radio" name="ZoomFull2"
onclick="this.form.submit()" title="tampil 100%" /><img
src="images/preload.gif" title="tampil 100%" /></td>
<td width="49"><select name="Perbesaran" title="index skala">
<?php
// nilai faktor perbesaran pada combobox
for($i=2;$i<=5;$i++)
{
if ($i == $FaktorSkala) $selected="selected=\"selected\"";
else $selected=NULL;
echo("<option value=\"$i\" $selected>$i</option>");
}
?>
</select></td>
<td width="46"><input type="checkbox" name="rQuery" value="on" <?php
echo($check_query); ?> title="info obyek" /><img src="images/pquery.gif"
title="info obyek" /> </td>
<td width="315">&nbsp;</td>
</tr>
<tr>
<td height="74" colspan="7" align="center"><div style="border:#bcbcbc thin
dashed"><input type="image" name="mapa" src="<?php echo $oURLPeta ?>"
/></div></td>
</tr>

<tr>
<td height="30" colspan="7" align="center"><img src="<?php echo
$oURLSkala ?>"></td>
</tr>
</table>
<p>
<?php if ($StatusFungsi == "on") { LakukanQuery();} else echo ""; ?>
</p>
<input type="hidden" name="extent" value="<?php echo($oRect) ?>" />
</form>
</div>
</body>
</html>

Karena file peta ini dapat dilakukan query (ambil info objek), maka diperlukan kode
pengolahannya. Berikut kode yang dimaksud.

3. File pmanip.php

view sourceprint
<?php
// fungsi konversi dari nilai pixel posisi kursor ke data model geometri
function KonvPixToLB ($xPix, $yPix)
{
$xmi = $GLOBALS["oMap"]->extent->minx;
$ymi = $GLOBALS["oMap"]->extent->miny;
$xma = $GLOBALS["oMap"]->extent->maxx;
$yma = $GLOBALS["oMap"]->extent->maxy;
$PanjangPeta = $xma - $xmi;
$LebarPeta = $yma - $ymi;
$PanjangImage = $GLOBALS["oMap"]->width;
$LebarImage = $GLOBALS["oMap"]->height;
$RasioX = $PanjangPeta / $PanjangImage;
$RasioY = $LebarPeta / $LebarImage;
$x1Pix = $xPix;
$y1Pix = $LebarImage - $yPix;
$AbMap = $xmi + $x1Pix * $RasioX;
$OrMap = $ymi + $y1Pix * $RasioY;
$GLOBALS["LokasiKlik"]->SetXY ($AbMap,$OrMap);
}

function LakukanQuery()
{
KonvPixToLB ($GLOBALS["PosisiKlik"]->x, $GLOBALS["PosisiKlik"]->y);
$oLayerWisata = $GLOBALS["oMap"]->GetLayerByName("wisata");
$oLayerCindera = $GLOBALS["oMap"]->GetLayerByName("cinderamata");
$oLayerHotel = $GLOBALS["oMap"]->GetLayerByName("hotel");
$oLayerRM = $GLOBALS["oMap"]->GetLayerByName("rm");
$oLayerBiro = $GLOBALS["oMap"]->GetLayerByName("biro");
$oLayerTerminal = $GLOBALS["oMap"]->GetLayerByName("terminal");
$oLayerDesa = $GLOBALS["oMap"]->GetLayerByName("desa");

// mengambil data obyek ketika obyek tersebut di-klik


if (@$oLayerWisata->QueryByPoint($GLOBALS["LokasiKlik"], MS_SINGLE,
500)==MS_SUCCESS)
{
$tb = "t_obyek_wisata";
$hasil = $oLayerWisata->GetResult (0);
$oLayerWisata->Open();
$oShape = $oLayerWisata->GetShape ($hasil->tileindex, $hasil-
>shapeindex);
$oLayerWisata->Close;
}
else if (@$oLayerCindera->QueryByPoint($GLOBALS["LokasiKlik"],
MS_SINGLE, 500)==MS_SUCCESS)
{
$tb = "t_cindera_mata";
$hasil = $oLayerCindera->GetResult (0);
$oLayerCindera->Open();
$oShape = $oLayerCindera->GetShape ($hasil->tileindex, $hasil-
>shapeindex);
$oLayerCindera->Close;
}
else if (@$oLayerHotel->QueryByPoint($GLOBALS["LokasiKlik"],
MS_SINGLE, 500)==MS_SUCCESS)
{
$tb = "t_hotel";
$hasil = $oLayerHotel->GetResult (0);
$oLayerHotel->Open();
$oShape = $oLayerHotel->GetShape ($hasil->tileindex, $hasil-
>shapeindex);
$oLayerHotel->Close;
}
else if (@$oLayerRM->QueryByPoint($GLOBALS["LokasiKlik"], MS_SINGLE,
500)==MS_SUCCESS)
{
$tb = "t_rumah_makan";
$hasil = $oLayerRM->GetResult (0);
$oLayerRM->Open();
$oShape = $oLayerRM->GetShape ($hasil->tileindex, $hasil-
>shapeindex);
$oLayerRM->Close;
}
else if (@$oLayerBiro->QueryByPoint($GLOBALS["LokasiKlik"], MS_SINGLE,
500)==MS_SUCCESS)
{
$tb = "t_biro_wisata";
$hasil = $oLayerBiro->GetResult (0);
$oLayerBiro->Open();
$oShape = $oLayerBiro->GetShape ($hasil->tileindex, $hasil-
>shapeindex);
$oLayerBiro->Close;
}
else if (@$oLayerTerminal->QueryByPoint($GLOBALS["LokasiKlik"],
MS_SINGLE, 500)==MS_SUCCESS)
{
$tb = "t_terminal";
$hasil = $oLayerTerminal->GetResult (0);
$oLayerTerminal->Open();
$oShape = $oLayerTerminal->GetShape ($hasil->tileindex, $hasil-
>shapeindex);
$oLayerTerminal->Close;
}

// menampung nomor id (primary key) yang di dapat dari klik objek peta.
// variabel $id ini bersama variabel $tb akan menentukan tabel dengan
obyek manakah
// yang di-klik tersebut berdasarkan data dari database.
$id =$oShape->values["OGR_FID"];

// Ambil posisi koordinat objek yang telah dikonversi ke tipe string


dari tipe data geometry
$result = mysql_query("SELECT AsText(SHAPE) FROM $tb WHERE OGR_FID =
$id");
$row = mysql_fetch_row($result);
$pos = $row[0];

// hanya mengambil satu entitas /row data


$sql = "SELECT $tb.OGR_FID, nama, jenis, alamat, desa, kec, telp
FROM $tb, t_desa, t_kec, t_kec_desa
WHERE $tb.kec_desa_id = t_kec_desa.kec_desa_id
AND t_kec.OGR_FID = t_kec_desa.kec_FID
AND t_desa.OGR_FID = t_kec_desa.desa_FID
AND $tb.OGR_FID=$id";

$result = myQuery($sql);
$row = mysql_fetch_array($result);

// tampilan keluaran melalui alert milik javascript


?>
<script type="text/javascript">
var str =
'Posisi obyek = <?php echo pos; ?> \r\n'+
'Nama obyek = <?php echo $row["nama"]; ?> \r\n'+
'Jenis = <?php echo $row["jenis"]; ?> \r\n'+
'Alamat = <?php echo $row["alamat"]; ?> \r\n'+
'Desa = <?php echo $row["desa"]; ?> \r\n'+
'Kecamatan = <?php echo $row["kec"]; ?> \r\n'+
'No. Telp = <?php echo $row["telp"]; ?> \r\n';
alert(str);

</script>
<?

} // akhir fungsi LakukanQuery()


?>

Statement:

$oLayerWisata = $GLOBALS["oMap"]->GetLayerByName(”wisata”);

Akan mendapatkan data layer dari file map berupa nama layer wisata
Statement seperti:

if (@$oLayerWisata->QueryByPoint($GLOBALS["LokasiKlik"], MS_SINGLE,
500)==MS_SUCCESS)
{

$tb = “t_obyek_wisata”;
$hasil = $oLayerWisata->GetResult (0);
$oLayerWisata->Open();
$oShape = $oLayerWisata->GetShape ($hasil->tileindex, $hasil->shapeindex);
$oLayerWisata->Close;

Statemen di atas akan mendapatkan data tabel yang berdasarkan objek yang dipilih (di-klik).
Nilai Variabel 500 merupakan nilai zona radius dari objek tersebut. Artinya, makin besar nilai
tersebut makin besar kemungkinan objek tersebut terpilih, sehingga tidak terlalu harus presisi
untuk memilih objek tersebut. Tetapi perlu diingat jika objek-objek di sekitarnya berdekatan,
maka ada kemungkinan objek lainnya tidak terpilih karena saling overlaping radius antar objek.

Variabel $oShape inilah yang berisi data tabel tersebut.

Statement:

$id =$oShape->values["OGR_FID"];

Merupakan statement untuk mendapatkan nomor id dari objek yang terpilih. OGR_FID
merupakan nama field untuk nomor id (primary key).

Statement :

$result = mysql_query(”SELECT AsText(SHAPE) FROM $tb WHERE OGR_FID = $id”);

Merupakan statement untuk mendapatkan posisi objek dari tipe data geometry ke tipe data
varchar / string.
hasilnya seperti : POINT(nilaiX, nilaiY);

nilaiX dan nilaiY merupakan nilai koordinat bumi.

Berikut tampilan dari program di atas:

Contoh tampilan peta


Hasil Query terhadap objek peta (ambil info objek)

Catatan Tambahan :

Bagaimana untuk proses UPDATE, INSERT, dan DELETE objek yang dipetakan ?

Sebenarnya prinsipnya mudah, silakkan baca penjelasan sederhana berikut:

1. Proses UPDATE
Untuk melakukan update objek terpilih sebenarnya membutuhkan dua buah data, yaitu nama
tabel objek tersebut dan nomor ID-nya. Nomor ID di sini berstatus sebagai primary key.
Bagaimana mendapatkan id dan nama tabel objek yang saya pilih ? Silakkan lihat kode program
file pmanip.php di atas.

Pada bagian :

if (@$oLayerWisata->QueryByPoint($GLOBALS["LokasiKlik"], MS_SINGLE,
500)==MS_SUCCESS)
{

$tb = “t_obyek_wisata”;
$hasil = $oLayerWisata->GetResult (0);
$oLayerWisata->Open();
$oShape = $oLayerWisata->GetShape ($hasil->tileindex, $hasil->shapeindex);
$oLayerWisata->Close;

dan juga bagian :

$id =$oShape->values["ID"];

adalah bagian penting untuk mendapatkan ID dan nama tabel.

Selanjutnya hasil dan nama tabel tersebut dilampirkan dalam query SQL, misalnya seperti
berikut

$result=mysql_query(”UPDATE $tb SET nama_field=PointFromText(’POINT($koordinatX


$koordinatY)’), nama=’$nama_baru’, alamat=’$alamat_baru’, telp=’$telp_baru’, ket=’$isi_baru’
WHERE ID=$id“);

Keterangan :
$tb adalah nama dari tabel dari objek yang dipilih.
$id adalah nomor id dari objek yang dipilih
nama_field adalah nama field tabel yang bertipe geometry.
PointFromText(’POINT($koordinatX $koordinatY)’) adalah fungsi khusus MySQL Spatial
untuk mengkonversi string koordinat X dan koordinat Y yang merupakan koordinat bumi ke
dalam tipe data geometry.

2. Proses INSERT
Proses INSERT pada umumnya sama seperti proses UPDATE, namun tidak memerlukan
pemilihan objek dahulu. Kode SQL-nya seperti proses INSERT biasa, namun ada fungsi MySQL
Spatial-nya. Berikut kodenya:
$result=mysql_query(”INSERT INTO $tabel(field_geometry,nama,alamat,telp,ket)
VALUES(PointFromText(’POINT($koordinatX $koordinatY)’),’$nama’,'$alamat’,'$telp’,
‘$isi’)”);

Keterangan :
$tabel adalah nama dari tabel dari objek yang ingin ditambahkan.
field_geometry adalah nama field tabel yang bertipe geometry.
PointFromText(’POINT($koordinatX $koordinatY)’) adalah fungsi khusus MySQL Spatial
untuk mengkonversi string koordinat X dan koordinat Y yang merupakan koordinat bumi ke
dalam tipe data geometry.

3. Proses DELETE
Proses DELETE dari objek yang terpilih modelnya sama denga proses UPDATE.
Pertama dapatkan tabel objek tersebut :

if (@$oLayerWisata->QueryByPoint($GLOBALS["LokasiKlik"], MS_SINGLE,
500)==MS_SUCCESS)
{

$tb = “t_obyek_wisata”;
$hasil = $oLayerWisata->GetResult (0);
$oLayerWisata->Open();
$oShape = $oLayerWisata->GetShape ($hasil->tileindex, $hasil->shapeindex);
$oLayerWisata->Close;

Kedua dapatkan nomor ID objek tersebut :

$id =$oShape->values["ID"];

Setelah itu tuliskan query SQL-nya :

$result = myQuery(”DELETE FROM $tb WHERE ID = $id”);

OK, sekian penjelasan sederhana ini, semoga bermanfaat.