Dalam membangun sebuah aplikasi GIS tentu saja dibutuhkan komponen/control guna menampilkan Map maupun legendanya. Awalnya saya sangat tertarik dengan MapObject buatan ESRI, tapi ternyata komponen tersebut bersifat komersial dan harganya mencapai puluhan juta. Namun akhirnya saya bisa mendapatkannya dari seseorang (bajakan) dan versinya masih 2.0. Meskipun banyak contoh yang disertakan namun tetap saja dirasa ada kekurangannya dalam membuat aplikasi yang powerful apalagi versi yang saya miliki saat itu hanya mendukung sistem operasi Windows XP dan tidak bisa digunakan di Windows 7. Setelah pencarian yang cukup lama ternyata ada sebuah komponen open source yang tidak kalah hebatnya dari MapObject, namanya MapWinGIS.ocx. Komponen ini bisa digunakan pula diberbagai bahasa pemrograman seperti Delphi, VB 6, VB.net hingga C++.net. Selain itu dokumentasi dan sample codenya bisa didownload gratis di MapWindow.org juga didukung oleh komunitas yang besar. Sebagai programmer newbie yang hanya belajar otodidak tentunya banyak mengalami kesulitan dalam mempelajari pemrograman aplikasi GIS ini, karena itulah saya hanya fokus mempelajari Visual Basic yang konon paling mudah dipelajari meskipun ada yang bilang kalau VB itu bahasanya amburadul. Sebenarnya saya bukanlah seorang programmer, mungkin lebih cocok disebut Cuztomizer yang artinya memakai program orang lain untuk dirombak menjadi bentuk yang baru, tapi itulah proses belajar. Sekian lama mempelajari MapWinGIS membuat saya memutuskan bermigrasi dari VB 6 ke VB.Net yang lebih mendukung MapWinGIS.ocx. Namun kebuntuan akhirnya ditemui tatkala program aplikasi GIS yang saya buat selalu saja error dan tidak bisa menampilkan item legenda.
Seiring waktu akhirnya saya coba melirik DotSpatial.dll yang dulunya bernama MapWindow6.dll. Sebenarnya DotSpatial juga pengembangan dari MapWinGIS namun dibutuhkan .Net Framework 4 untuk menggunakannya. Setelah pencarian source code di situs http://dotspatial.codeplex.com, ternyata jauh lebih mudah membuat code di DotSpatial ketimbang MapWinGIS, apalagi cukup menggunakan satu file library (dll) yang didalamnya sudah ter-include control Map, legenda, toolbar hingga ribbon. Ternyata pihak pengembang DotSpatial sudah melengkapi code yang siap pakai dan tinggal di eksekusi. Misalnya saja di MapWinGIS untuk meload file shp/raster dibutuhkan code seperti berikut:
'Create instances of the possible data objects,
'to retrieve the dialog filters of supported formats.
Dim sf As New MapWinGIS.Shapefile
Dim grd As New MapWinGIS.Grid
Dim img As New MapWinGIS.Image
'We want users to be able to open any file type.
'Merge the dialog filters by placing a pipe character
'in between each:
Dim dlg As New OpenFileDialog
dlg.Filter = "All Files (*.*)|*.*|" & sf.CdlgFilter & _
"|" & grd.CdlgFilter & "|" & img.CdlgFilter
If dlg.ShowDialog() = Windows.Forms.DialogResult.OK Then
'If the user didn't cancel the dialog, try to open the file.
'First, determine what kind it was:
Dim extension As String = _
IO.Path.GetExtension(dlg.FileName).ToLower()
If sf.CdlgFilter.ToLower().Contains(extension) Then
'It's a shapefile
sf.Open(dlg.FileName)
Map.AddLayer(sf, True)
'Zoom to all visible layers
Map.ZoomToMaxExtents()
Return 'Done
ElseIf grd.CdlgFilter.ToLower().Contains(extension) Then
'NOTE: a .tif can be a GeoTIFF (a grid)
'or an image. Check this, if the file
'is a tif:
If dlg.FileName.ToLower().EndsWith("tif") Then
If Not Map.IsTIFFGrid(dlg.FileName) Then
'It's an image, not a grid.
'Open it as an image.
img.Open(dlg.FileName)
Map.AddLayer(img, True)
'Zoom to all visible layers
Map.ZoomToMaxExtents()
Return 'Done
End If
End If
'Open the grid:
grd.Open(dlg.FileName)
'Define a coloring scheme to color this grid:
Dim sch As New MapWinGIS.GridColorScheme
'Use a predefined coloring scheme "Fall Leaves"
sch.UsePredefined(grd.Minimum, grd.Maximum, _
MapWinGIS.PredefinedColorScheme.FallLeaves)
'Convert it to an image that can be displayed:
Dim u As New MapWinGIS.Utils
Dim gridimage As MapWinGIS.Image
gridimage = u.GridToImage(grd, sch)
'Add the generated image to the map:
Map.AddLayer(gridimage, True)
'Zoom to all visible layers
Map.ZoomToMaxExtents()
Return 'Done
ElseIf img.CdlgFilter.ToLower().Contains(extension) Then
'It's a plain image
img.Open(dlg.FileName)
Map.AddLayer(img, True)
'Zoom to all visible layers
Map.ZoomToMaxExtents()
Return 'Done
End If
End If
(Lumayan panjang kan?), namun di DotSpatial cukup mengetik code satu baris seperti berikut:
Map1.AddLayer()
maka file shp dengan mudah ditampilkan. Konfigurasi legendanya juga sangat mudah dan tidak perlu mengetik code untuk menampilkan legenda cukup mengatur propertiesnya . Bahkan yang sangat menarik adalah jika di klik kanan di legenda maka akan muncul menu untuk menampilkan fungsi yang hampir sama di ArcGIS seperi "View Attribute Table", "Remove Layer", "Zoom To layer", "Properties" dan masih banyak lagi. Selain itu untuk menampilkan informasi peta (Identifier), Measure hingga membuat Layout masing-masing hanya cukup mengetik satu baris perintah jadi sangat memudahkan. Tutorialnya juga sudah disiapkan oleh pihak pengembang jadi silahkan download di http://dotspatial.codeplex.com/wikipage?title=DotSpatial%20Tutorials&referringTitle=Documentation dijamin puas deh! Namun sebagai catatan windows anda (mininimal XP) harus diupgrade ke NET.Framework 4, juga bagusnya pakai Microsoft Visual Studio 2010 yang mendukung .Net Framework 4.
Berikut ini adalah aplikasi yang sempat saya buat dan sampai sekarang saya masih mengembangkannya, menurut saya ini sudah lumayan untuk seorang programmer kemarin sore.
Gambar: Aplikasi Sistem Informasi Lahan
17 Comments
Thanks
Mas Syutia : Iya, Dotspatial gratis bahkan Open Source. Bisa didownload juga di dotspatial.codeplex.com
ini bentuknya ActiveX gitu kan bang?
boleh tau dapet templatenya dmna?
punya tutorialnya mas biar menunya kaya punya mas
soalnya saya nyari2 blm ketemu coding bikin menu kaya gt mas
maaf ya mas saya masih newbe masalah buat aplikasi gis
Makasih
Silahkan kunjungi Website Saya :
http://gantama.mahasiswa.atmaluhur.ac.id/
Website Kampus :
www.atmaluhur.ac.id
Kunjungi website saya ya : http://dufiflame.mahasiswa.atmaluhur.ac.id/
dan website kampus saya : http://atmaluhur.ac.id/