Menggeser Point Secara Massal menggunakan ArcMAP

Oleh : Bayu Yanuargi, SSi

Dalam postingan kali ini saya akan membagikan ilmu tentang bagaimana menggunakan ArcGIS untuk menggeser Point secara massal. Penggeseran yang dimaksud adalah bagaimana menggeser point secara tegak lurus dengan feature garis. Biasanya penulis melakukan ini agar data titik tidak terlalu dekat dengan feature garis. Contohnya misalnya semua tiang listrik yang dalam peta ingin kita tampilkan dengan jarak yang sama 10 meter dari garis jalan seperti pada gambar di atas.
loading...
Untuk melakukan penggeseran point saat ini ArcGIS yang digunakan harus memiliki ArcInfo License



Baiklah kita akan memulai untuk melakukan analisis spasial penggeseran point. Dalam penggeseran data tentunya kita harus memiliki benchmarking (Patokan) yang berfungsi sebagai titik awal penggeseran. Dalam latihan kali ini kita akan menggeser 10 meter dari garis jalan sehingga benchmark penggeseran adalah jalan itu sendiri.



Untuk mendapatkan titik Benchmark dari feature jalan maka kita akan menggunakan fungsi "GENERATE NEAR TABLE" yang hanya bisa digunakan pada ArcInfo License. Dari proses ini kita akan memperoleh feature point baru dengan struktur Table :




Dari gambar di atas kita bisa melihat bahwa kita sudah memperoleh Benchmark Point (BM) yang akan kita gunakan sebagai referensi penggeseran. Dari struktur table di atas, yang kita butuhkan adalah 

  1. NEAR_X = Longitude dari BM
  2. NEAR_Y = Latitude dari BM
  3. NEAR_ANGLE = sudut yang terbentuk antara Azimuth - Tiang PLN - BM
Langkah selanjutnya kita akan melakukan join antara BM Table hasil Generate Near Table dan data Tiang PLN. Buka table data PLN lalu lakukan join seperti gambar di bawah ini





Dalam melakukan join yang perlu diperhatikan adalah kolom mana yang akan digunakan sebagai dasar penggabungan. Kolom dari kedua data harus memiliki korelasi sehingga data dapat digabungkan dengan benar, misalnya pada kasus ini join berdasarkan Kolom FID pada data PLN dan Kolom IN_FID pada data Near point (BM). Hasil join akan seperti gambar di bawah ini.




Biasanya hasil join akan bersifat sementara, jika ArcMap Kita tutup maka hasil join akan hilang. Untuk membuat permanen, maka kita harus convert hasil join menjadi feature baru dengan menggunakan export data (Saya rasa sudah bisa semua... hehe).

Setelah hasil convert kita dapatkan, maka kita akan mulai melakukan perhitungan koordinat baru. Untuk itu kita akan menambahkan beberapa kolom baru dalam data kita yang berfungsi untuk melakukan kalkulasi. Tambahkan kolom berikut (Semua dalam format "DOUBLE" )



  1. Add Field "Distance" = Jarak yang kita inginkan untuk titik PLN yang baru dari garis jalan
  2. Add Field "BEARING" = Sudut yang terbentuk dari garis tegak lurus BM - Azimuth dan PLN dalam bentuk decimal degrees (Derajat)
  3. add field "BEAR_RADS" = nilai decimal dari Bearing, karena dalam ArcMap decimal degrees tidak bisa digunakan dalam perhitungan
  4. add field "BEAR_LAT" = jarak titik PLN Baru dari garis X (kartesius)
  5. add field "BEAR_LONG" = jarak mendatar didalam garis X dari BM ke titik PLN yang baru
  6. add field "NEW_LONG" = Koordinat longitude untuk titik baru
  7. add field "NEW_LAT" = Koordinat latitude untuk titik baru



Untuk kolom distance kita akan isi angka 10 karena kita ingin menggeser PLN dengan jarak 10 meter dari BM (Jalan).

Untuk bearing kita silahkan lakukan calculation menggunakan formula di bawah ini. Untuk mengetahui bagaimana mengisikan formula silahkan lihat pada postingan sebelumnya "Analsis Spasial menggunakan VBScript"




dim n
 if [NEAR_ANGLE] >-180 and [NEAR_ANGLE] <= -90 then
    n= Abs ( [NEAR_ANGLE] +90)
elseif [NEAR_ANGLE] <0 and [NEAR_ANGLE] >-90 then
    n = Abs( 360+ [NEAR_ANGLE] )
elseif [NEAR_ANGLE] >0 and [NEAR_ANGLE] <180 then
    n=Abs((180- [NEAR_ANGLE] )+90)
elseif [NEAR_ANGLE] =180 then
    n=Abs( [NEAR_ANGLE] -90)
elseif [NEAR_ANGLE] =-180 then
    n=Abs( [NEAR_ANGLE] +90)
elseif [NEAR_ANGLE] =0 then
    n=Abs( [NEAR_ANGLE] +270)

End if

Jika dilihat pada formula di atas terdapat pembagian berdasarkan NEAR_ANGLE, yaitu -180, -90, 180 dan 90. Tujugan pembagian kelompok ini adalah untuk membedakan posisi titik PLN kita ini ada di sebelah barat, timur, utara atau selatan jalan (Tidak saya jelaskan detilnya karena ribet hehehe).


Untuk melakukan kalkulasi BEAR_RADS silahkan masukkan formula berikut ini, biar tidak bosan saya menggunakan parser Python, jadi tinggal dirubah saja parser dari VB script ke Python saat field calculation



def GetBearRads (BEARING) :
 if (BEARING < 90 and BEARING > 0) :
    return (BEARING*0.0174533)
 elif (BEARING>90 and BEARING<180) :
    return ((180 - BEARING)*0.0174533)
 elif (BEARING>180 and BEARING<270) :
    return ((BEARING-180)*0.0174533)
 elif (BEARING<360 and BEARING>270) :
    return ((360 - BEARING)*0.0174533)
 elif (BEARING==90 or BEARING==270) :
    return 0
 elif (BEARING==180 or BEARING==0 or BEARING==360) :
    return 1

Jika menggunakan parser Python maka pada fied calculation "BEAR_RADS" =  GetBearRads (!BEAR_RADS!)

Untuk Kolom BEAR_LAT kita akan akan menggunakan formula sebagai berikut :


dim n
if [BEARING]>0 and [BEARING]<90 then
    n=Abs ( [Distance] *Cos ( [BEAR_RADS] ) )
elseif [BEARING]>90 and [BEARING]<180 then
    n=Abs ( [Distance] *Cos ( [BEAR_RADS] ) )
elseif [BEARING]>180 and [BEARING]<270 then
     n=Abs ( [Distance] *Cos ( [BEAR_RADS] ) )
elseif [BEARING]<360 and [BEARING]>270 then
     n=Abs ( [Distance] *SIN ( [BEAR_RADS] ) )
elseif [BEARING]=90 or [BEARING]=270 then
    n=0
elseif [BEARING]=180 or [BEARING]=0 or [BEARING]=360 then
    n= [Distance]
end if

Sedangkan kolom BEAR_LONG menggunakan formula di bawah ini :


dim n
if [BEARING]=90 or [BEARING]=270 then
    n= [Distance]
elseif [BEARING]=180 or [BEARING]=0 or [BEARING]=360 then
    n=0
elseif [BEARING]>0 and [BEARING]<90 then
   n=Sqr (( [Distance] * [Distance] )- ([BEAR_LAT] * [BEAR_LAT]))
elseif [BEARING]>90 and [BEARING]<180 then
    n=Sqr (( [Distance] * [Distance] )- ([BEAR_LAT] * [BEAR_LAT]))
elseif [BEARING]>180 and [BEARING]<270 then
    n=Sqr (( [Distance] * [Distance] )- ([BEAR_LAT] * [BEAR_LAT]))
elseif [BEARING]<360 and [BEARING]>270 then
    n=Sqr (( [Distance] * [Distance] )- ([BEAR_LAT] * [BEAR_LAT]))

end if

Langkah terakhir adalah kita akan melakukan perhitungan terhadap Latitude dan longitude terbaru. Untuk itu gunakan formula di bawah ini untuk kolom NEW_LAT :



dim n
if [NEAR_ANGLE]>-90 and [NEAR_ANGLE]<0 then
   n= (([NEAR_X]*100000)- [BEAR_LONG])/100000
elseif [NEAR_ANGLE]>0 and [NEAR_ANGLE]<90 then
  n=(([NEAR_X]*100000)- [BEAR_LONG])/100000
elseif [NEAR_ANGLE]>90 and [NEAR_ANGLE]<180 then
  n=(([NEAR_X]*100000)+ [BEAR_LONG])/100000
elseif [NEAR_ANGLE]<-90 and [NEAR_ANGLE]>-180 then
 n=(([NEAR_X]*100000)+ [BEAR_LONG])/100000
elseif [NEAR_ANGLE]=90 or [NEAR_ANGLE]=-90 then
 n=[NEAR_X]
elseif [NEAR_ANGLE]=180 then
 n=(( [NEAR_X]*100000)+ [BEAR_LONG])/100000
elseif [NEAR_ANGLE]=-180 then
 n=(( [NEAR_X]*100000)+ [BEAR_LONG])/100000
elseif [NEAR_ANGLE] = 0 then
 n=(( [NEAR_X]*100000)- [BEAR_LONG])/100000
elseif [NEAR_ANGLE] = 360 then
 n=(( [NEAR_X]*100000)- [BEAR_LONG])/100000

end if

untuk kolom NEW_LONG :


dim n
if [NEAR_ANGLE]>-90 and [NEAR_ANGLE]<0 then
   n= (([NEAR_Y]*100000)+[BEAR_LAT])/100000
elseif [NEAR_ANGLE]>0 and [NEAR_ANGLE]<90 then
  n=(([NEAR_Y]*100000)- [BEAR_LAT])/100000
elseif [NEAR_ANGLE]>90 and [NEAR_ANGLE]<180 then
  n=(([NEAR_Y]*100000)- [BEAR_LAT])/100000
elseif [NEAR_ANGLE]<-90 and [NEAR_ANGLE]>-180 then
 n=(([NEAR_Y]*100000)+ [BEAR_LAT])/100000
elseif [NEAR_ANGLE]=0 or [NEAR_ANGLE]=180 then
 n=[NEAR_Y]
elseif [NEAR_ANGLE]=360 or [NEAR_ANGLE]=-180 then
 n=[NEAR_Y]
elseif [NEAR_ANGLE]=-90 then
 n=(( [NEAR_Y]*100000)+ [BEAR_LAT])/100000
elseif [NEAR_ANGLE] = 90 then
 n=(( [NEAR_Y]*100000)- [BEAR_LAT])/100000

end if


Berdasarkan hitungan di atas kita akan memperoleh koordinat terbaru dari data titik kita seperti pada table di bawah ini :



Setelah itu kita akan membuat point feature berdasarkan NEW_LONG dan NEW_LAT


Export kedalam file dbf baru sehingga akan muncul table baru dalam ArcMap kita. Lalu "Display X Y" untuk menampilkan data nya.







Hasilnya akan sebagai berikut, dimana titik biru ada data lama dan titik ungu adalah data baru :




Sebagai bahan latihan silahkan download shapefile dari Dropbox saya


  1. DOWNLOAD JALAN
  2. DOWNLOAD PLN



Saya juga sudah membuat tool khusus untuk menjalankan proses ini, jadi anda tidak perlu mengikuti langkah di atas, hanya dengan 1 kali klik semua proses di atas dapat dilakukan dengan cepat, silahkan tinggalkan comment di bawah ini lengkap dengan alamat email untuk mendapatkannya.

Salam Belajar

4 comments:

  1. Selamat siang Mas, terimakasih step by stepnya boleh menciba toolsnya mas ..
    Geotiyo@gmail.com

    ReplyDelete
  2. Mas Bay, di tunggu emailnya hehe

    ReplyDelete
  3. terima kasih infonya, boleh mencoba toolsnya mas apramayogi@gmail.com

    ReplyDelete
  4. nice info, coba toolsnya bro apramayogi@gmail.com

    ReplyDelete