Wednesday 8 October 2014

Memapar Attribut Menggunakan Teknik Labeling Expression

Rasanya otai-otai GIS semua tahu labeling adalah satu kaedah untuk memaparkan attribut di atas peta GIS kita. Kebiasaannya kita paparkan attribut ni bila nak design map untuk print, contoh nak letak nama tempat, nama jalan, nama sungai dan lain-lain. Cara paling basic nak buat labeling dalam ArcMap adalah macam step di bawah ni :-



Penerangan gambar :-
  1. Dalam Table of Contents, right click layer yang nak dipaparkan label.
  2. Pilih Properties...
  3. Klik tab Labels, kemudian check Label features in this layer
  4. Pada ruangan Label Field:, pilih field yang menyimpan attribut untuk dilabelkan.
  5. Klik OK.


Di dalam contoh ni, saya memaparkan label attribut nama jalan. Hasilnya adalah seperti di bawah ni..



OK, itu adalah kaedah paling basic untuk label attribut dalam ArcMap. Tapi sebenarnya dalam ArcMap ni, ada beberapa kaedah yang lebih advance yang boleh kita gunakan untuk paparkan attribut. Mungkin ada beberapa kes dimana kita nak paparkan attribut yang tak boleh dihandle menggunakan kaedah basic. Contohnya katakan saya nak labelkan nama jalan hanya untuk jalan yang panjangnya kurang dari 500m sahaja. Di sini saya boleh gunakan kaedah yang dinamakan Labeling Expression.

Untuk gunakan Labeling Expression ni, kita kena ada basic serba sikit tentang programming script, sebabnya...kita kena tulis script dalam ruangan Labeling Expression tu. Terdapat tiga programming script yang Labeling Expression ni support iaitu Java Script, Python Script dan VB Script. So kita pilih lah mana-mana coding script yang kita familiar dan selesa.

Contoh dialog Label Expression


OK..berbalik pada problem tadi. Macamana saya nak tulis coding script untuk paparkan nama jalan yang panjangnya kurang dari 500m tadi. Di dalam table layer jalan saya, nama jalan disimpan di dalam field NAM manakala info panjang setiap line jalan terdapat di dalam field SHAPE_Length. Mula-mula buat step ni dulu :-



Penerangan gambar :-
  1. Pada tab Labels dalam dialog Layer Properties, klik butang Expression...
  2. Pada dialog Label Expression, check kotak Advanced.
  3. Anda akan lihat default script dipapar di ruangan programming script.


OK, sekarang gantikan script di dalam ruangan programming script tu dengan VB script di bawah ni (copy paste jer...)

Function FindLabel ( [NAM],[SHAPE_Length] )
    if [SHAPE_Length] < 500 then
  FindLabel = [NAM]
    end if
End Function

Ruangan programming script dalam dialog Label Expression anda sepatutnya akan kelihatan seperti di bawah ni :-


Klik OK dan lihat hasilnya. Anda akan lihat nama jalan yang dipaparkan akan berkurangan kerana hanya nama jalan yang panjang jalannya kurang dari 500m sahaja dilabelkan (mcm biasa, klik kat gambar kalau kurang clear).

Perbandingan jumlah label sebelum dan selepas menggunakan
script Labeling Expression

Kalau anda sifu dalam programming, sebenarnya banyak lagi yang anda boleh buat dengan menggunakan kaedah Labeling Expression ni. Contohnya saya boleh paparkan label teks "JALAN BANDONG" dalam map tu sebagai "Jln Bandong" tanpa saya perlu edit attribut di dalam table layer jalan saya. Di sini saya share contoh script macamana nak buat tu. Script ni pun saya download dari ESRI forum je dan modify sikit-sikit ...

Function FindLabel ( [NAM],[SHAPE_Length] )
    FindLabel = PCase([NAM])
End Function

Function PCase(strInput)
 
Dim iPosition
Dim iSpace
Dim strOutput
iPosition = 1
Do While InStr(iPosition, strInput, " ", 1) <> 0
    iSpace = InStr(iPosition, strInput, " ", 1)
    strOutput = strOutput & UCase(Mid(strInput, iPosition, 1))
    strOutput = strOutput & LCase(Mid(strInput, iPosition + 1, iSpace - iPosition))
    iPosition = iSpace + 1
 Loop
 strOutput = strOutput & UCase(Mid(strInput, iPosition, 1))
 strOutput = strOutput & LCase(Mid(strInput, iPosition + 1))

 totalLen = Len(strOutput)

 if Left(strOutput,5) = "Jalan" then
         str = "Jln"
         nam = str & Right (strOutput, totalLen - 5)
         PCase = nam
 elseif Left(strOutput,6) = "Lorong" then
         str = "Lrg"
         nam = str & Right (strOutput, totalLen - 6)
         PCase = nam
 end if

End Function

Seperti biasa copy script tu dan paste masuk dalam ruangan programming script seperti step sebelum ni. Anda akan dapat hasilnya seperti di bawah pula. Jika sebelum ni label nama-nama jalan semuanya dipaparkan sebagai Uppercase, sekarang ia dipaparkan dengan kombinasi Uppercase dan Lowercase.



Kalau anda tak expert dalam programming tapi tau serba sikit macamana nak ubah coding, google je..kadang-kadang ada sample script yang otai di luar sana dah develop yang kita boleh adjust sikit untuk fit dengan keperluan kita.

Selamat mencuba.

2 comments:

  1. Great! I manage to replicate your outcomes. May I ask your permission to link this blog content (as a reference source) to one of my blog articles? I may have to do some translations but further information, I will direct users to go this post

    ReplyDelete
    Replies
    1. no problem bro.. lets share the knowledge. MaCGDI pun link this blog in their portal...

      Delete