Pemrograman MapWindowsGIS menggunakan C#

Membuat Aplikasi GIS dengan MapWindowGIS di .Net

https://www.mapwindow.org/graphics/content/index/mapwingis.PNG
Via : https://www.mapwindow.org

Langkah pertama yang harus dilakukan adalah mengunduh versi terbaru komponen MapWindowGIS yang akan kita gunakan. Untuk mengunduhnya kita dapat mengakses ke alamat berikut :

https://www.mapwindow.org/download.php?file_name=https://svn.mapwindow.org/svnroot/InstallationProjects/4.7/Release/MapWinGIS47RC-x86-Setup.exe&show_details=2&dl=1

 

Setelah sukses mengunduhnya maka langkah selanjutnya adalah meng-install ActiveX tersebut ke komputer kita.

 

 

Setelah selesai langkah selanjutnya adalah menambahkan referensi komponen MapWindowGIS pada aplikasi yang akan kita buat. Berikut adalah langkah-langkahnya :

 

  1. Buat project baru di Visual Studio .Net 2005 dengan menggunakan ‘Windows Application’
  2. Setelah itu klik kanan pada ‘Toolbox Area’ lalu pilih ‘Choose Items …’
  3. Pada jendela ‘Choose Toolbox Items’ plih tab ‘COM Components’ kemudian pilih atau cari komponen ‘Map Control’ dari MapWinGIS.
  4. Setelah melakukan ketiga langkah diatas maka di bagian ‘Toolbox’ akan muncul icon Map Control

 

Setelah selesai melakukan semua langkah-langkah diatas kinilah saatnya kita mendesian tampilan jendela aplikasi kita lengkap dengan ‘Map Control’ componen dan tombol-tombol yang dibutuhkan. Sebagai bahan inspirasi gambar dibawah ini dapat dijadikan acuan (gambar berikut sama dengan yang ada di source aplikasi yang ada di attachment dokumen ini).

 

 

Setelah selasai langkah selanjutnya adalah mengisi code bagi komponen-komponen yang ada di jendela yang sudah kita rancang tadi.

 

Pada saat jendela di load tambahkan code dibawah ini :

 

private void frmMain_Load(object sender, EventArgs e)

{

1           loadGISData();

2           mapMain.CursorMode = MapWinGIS.tkCursorMode.cmNone;

}

 

dimana loadGISData adalah sebuah subrutin yang berfungsi untuk me-load data spatial yang akan kita tampilkan

 

1       // load gis data (shape file)

2       private void loadGISData()

3       {

4           int iCtrShape;

 

5           MapWinGIS.Shapefile sfBatas = new MapWinGIS.Shapefile();

6           sfBatas.Open(“C:/temp/OutputDir/BATAS.shp”, sfBatas.GlobalCallback);

7           mapMain.AddLayer(sfBatas, true);

 

8           for (iCtrShape = 0; iCtrShape < sfBatas.NumShapes; iCtrShape++)

9           {

10               showLabel(sfBatas.QuickPoint(iCtrShape, sfBatas.get_numPoints(iCtrShape) / 2).x, sfBatas.QuickPoint(iCtrShape, sfBatas.get_numPoints(0) / 2).y, iCtrShape);

11           }

12       }

 

pada line 12 terlihat subrutin ini memanggil subruting yang lain yaitu showLabel, dimana subrutin ini berfungsi untuk menampilkan label pada peta yang akan kita tampilkan.

Pada event klik tombol Zoom In tambahkan perintah berikut :

 

private void btnZoomIn_Click(object sender, EventArgs e)

{

1           mapMain.CursorMode = MapWinGIS.tkCursorMode.cmZoomIn;

}

 

Perintah pada line 1 digunakan untuk melakukan proses zoom in di peta kita.

 

Pada even klik tombol Zoom Out tambahkan perintah berikut :

 

private void btnZoomOut_Click(object sender, EventArgs e)

{

1           mapMain.CursorMode = MapWinGIS.tkCursorMode.cmZoomOut;

}

 

Perintah pada line 1 digunakan untuk melakukan proses zoom out di peta kita.

 

Pada even klik tombol Pan tambahkan perintah berikut :

 

private void btnPan_Click(object sender, EventArgs e)

{

1           mapMain.CursorMode = MapWinGIS.tkCursorMode.cmPan;

}

 

Perintah pada line 1 digunakan untuk menggeser-geser peta.

 

Pada even klik tombol Full Extent tambahkan perintah berikut :

 

private void btnFullExtent_Click(object sender, EventArgs e)

{

1           mapMain.ZoomToMaxExtents();

}

 

Perintah pada line 1 digunakan untuk menampilkan peta secara utuh.

Pada even klik tombol Fill Color tambahkan perintah berikut :

 

private void btnFillColor_Click(object sender, EventArgs e)

{

1           UInt32 iLineColor;

2           Single fLineWidth;

3           MapWinGIS.tkLineStipple lsLineStipple;

 

4           // display setting for line

5           mapMain.set_ShapeLayerDrawLine(0,true);

6           iLineColor = Convert.ToUInt32(Color.DarkBlue.ToArgb() & 0x00FFFFFF);

7           fLineWidth = Convert.ToSingle(2);

8           lsLineStipple = MapWinGIS.tkLineStipple.lsDashDotDash;

9           mapMain.set_ShapeLayerLineColor(0, iLineColor);

10           mapMain.set_ShapeLayerLineWidth(0, fLineWidth);

11           mapMain.set_ShapeLayerLineStipple(0, lsLineStipple);

}

 

Ketika tombol ‘Fill Color’ di klik maka yang akan terjadi adalah peta batas yang kita tampilkan akan berwarna biru dan putus-putus.

 

Pada even klik tombol Randering tambahkan perintah berikut :

 

private void btnClrSch_Click(object sender, EventArgs e)

{

1           int iCtrShape;

2           int iID;

3          int iNumOfShp;

 

4           iNumOfShp = 3;

 

5           // randering different shape of a layer

6           for (iCtrShape = 0; iCtrShape <= iNumOfShp; iCtrShape++)

7           {

8               iID = iCtrShape + 1;

9               if (iID == 1) mapMain.set_ShapeFillColor(0, iCtrShape, Convert.ToUInt32(Color.Red.ToArgb() & 0x00FFFFFF));

10               if (iID == 2) mapMain.set_ShapeFillColor(0, iCtrShape, Convert.ToUInt32(Color.Blue.ToArgb() & 0x00FFFFFF));

11               if (iID == 3) mapMain.set_ShapeFillColor(0, iCtrShape, Convert.ToUInt32(Color.Black.ToArgb() & 0x00FFFFFF));

12           }

13       }

 

Ketika tombol ini di klik maka peta akan menampilkan batas dalam 3 warna yang berbeda karen pada data atribut yang menyertai data keruangannya terdapat 3 kategori yang berbeda yaitu ‘1’,’2′ dan ‘3’.

 

Pada even klik tombol Clear Label tambahkan perintah berikut :

 

private void btnLabel_Click(object sender, EventArgs e)

{

1           mapMain.ClearLabels(0);

}

 

Perintah pada line 1 digunakan untuk menghilangkan label yang sebelumnya ada ketika aplikasi di panggil.

 

Setelah melakukan langkah-langkah diatas maka aplikasi GIS yang kita buat dengan menggunkakan komponen MapWindowGIS siap untuk kita compile.

 

 

Penutup

Belum semua fungsi dan kemampuan dari komponen MapWinGIS tereksplorasi secara optimal pada tulisan ini, karena tulisan ini bertujuan untuk mengenalkan apa MapWindow dan bagaimana cara menggunakannya di lingkungan .Net.

 

Salah satu keunggulan dari komponen ini adalah komponen ini bisa digunakan untuk aplikasi desktop dan web based. Tidak semua komponen memiliki kemampuan ini. Biasanya untuk aplikasi desktop dan web akan menggunakan engine yang berbeda.

 

Sebagai informasi source code yang disertakan dalam dokumen ini menggunakan Ms Visual Studio 2005. Selamat mencoba.

 

 

Source

  1. ESRI Shapefile Technical Description, https://www.esri.com/library/whitepapers/pdfs/shapefile.pdf
  2. Shapefile, https://en.wikipedia.org/wiki/Shapefile
  3. Getting Started with the MapWinGIS ActiveX Control, https://www.mapwindow.org/doc/UsingMapWinGIS.pdf
  4. MapWindowGIS, https://www.mapwindow.org/
  5. MapWinGIS Developer’s Guide, https://www.mapwindow.org/wiki/index.php/MapWinGIS_Developer%27s_Guide

About ICMP and Glosary

https://d1hx5100zal7gj.cloudfront.net/images/stories/ccent-icnd1/ch-2-2-ccent-icnd1-tcpip/cisco-ccent-icnd1-tcpip-11.jpg
Internet Control Message Protocol (ICMP) adalah salah satu protokol inti dari keluarga protokol internet. ICMP utamanya digunakan oleh sistem operasi komputer jaringan untuk mengirim pesan kesalahan yang menyatakan, sebagai contoh, bahwa komputer tujuan tidak bisa dijangkau.
ICMP berbeda tujuan dengan TCP dan UDP dalam hal ICMP tidak digunakan secara langsung oleh aplikasi jaringan milik pengguna. salah satu pengecualian adalah aplikasi ping yang mengirim pesan ICMP Echo Request (dan menerima Echo Reply) untuk menentukan apakah komputer tujuan dapat dijangkau dan berapa lama paket yang dikirimkan dibalas oleh komputer tujuan.
Gambaran Teknis
Internet Control Message Protocol (ICMP) adalah bagian dari keluarga protokol Internet dan didefinisikan di dalam RFC 792. Pesan-pesan ICMP umumnya dibuat sebagai jawaban atas kesalahan di datagram IP (seperti yang dispesifikasikan di RFC1122) atau untuk kegunaan pelacakan atau routing.
Versi ICMP terkini juga dikenal sebagai ICMPv4, yang merupakan bagian dari Internet Protocol versi 4.
Dalam suatu sistem connectionless setiap gateway akan melakukan pengiriman, perutean datagram yang dating tanpa adanya koordinasi dengan pengirim pertama. Tidak semua sistem berjalan dengan lancar. Kegagalan dapat saja terjadi. misalnya line komunikasi, prosesor atau dikarenakan mesin tujuan tidak sedang aktif, ttl dari counter habis, atau ketika terjadi kemacetan sehingga gateway tidak lagi bisa memproses paket yang datang.
Dalam koneksi dengan internet pengirim tidak dapat memberitahukan & tidak tahu sebab kegagalan suatu koneksi. Untuk mengatasinya diperlukan suatu metode yang mengijinkan gateway melaporkan error atau menyediakan informasi mengenai kejadian yang tidak diinginkan sehingga dipakai mekanisme ICMP.

Pesan ICMP merupakan bagian dari datagram IP. Tujuan akhir dari suatu pesan ICMP bukan merupakan program atau user melainkan software internet-nya. Ketika pesan ICMP hadir software ICMP akan menanganinya.
ICMP mengijinkan gateway untuk mengirim pesan error ke gateway lain atau host. ICMP menyediakan komunikasi antar software protocol Internet.
Pada dasarnya terdapat dua macam pesan ICMP : ICMP Error Message & ICMP Query Message. ICMP error message digunakan pada saat terjadi kesalahan pada jaringan, sedangkan query message adalah jenis pesan yang dihasilkan oleh protokol ICMP jika pengirim paket menginginkan informasi tertentu yang berkaitan dengan kondisi jaringan.

IP software menyediakan layanan pengiriman datagram yang unreliable, connectionless dengan mengandalkan router-router untuk membawa datagram ke final destination. Jika router tidak dapat mengirimkan datagram atau mendeteksi adanya kondisi yang mempengaruhi kemampuannya membawa datagram (mis. kongesti), router harus memberi tahu original source agar mengambil tindakan untuk mengatasi masalah yang timbul.

Control and error messaging
Physical-based networks dapat melaporkan error melalui perangkat keras. Software-based networks (the Internet) tidak dapat melakukan hal di atas sehingga memerlukan mekanisme untuk pengendalian kesalahan. Agar router mampu mengirimkan pesan error atau pesan pengendali (control) ke router atau host yang lain, ditambahkanlah protokol Internet Control Message Protocol (ICMP)

ICMP adalah mekanisme pelaporan error (erro reporting mechanism)
ICMP hanya digunakan untuk melaporkan error ke original source

Jika error terjadi akibat masalah pada suatu router, ICMP tidak bisa digunakan untuk memberi tahu router tersebut tentang error yang timbul. Original source tidak bertanggung jawab atas pengendalian router-router yang bermasalah, bahkan sebenarnya original source tidak mampu menentukan router yang menimbulkan masalah tersebut

Mengapa ICMP hanya digunakan untuk berkomunikasi dengan original source?
Karena pada datagram IP hanya tercantum IP address orignal source dan final destination
Tidak ada informasi tentang router-router yang dilalui oleh datagram (kecuali untuk kasus tertentu ketika record route option diaktifkan) Karena router dapat membuat dan mengganti tabel ruting sendiri-sendiri maka tidak ada informasi global mengenai rute-rute yang ditempuh. Jika suatu datagram sampai ke suatu router, maka tidaklah mungkin untuk mengetahui rute yang sudah ditempuh datagram ter sebut. Jika suatu router mendeteksi adanya masalah, dia tidak dapat mengetahui router-router yang sudah dilalui datagram tersebut sehingga tidak mampu memberitahukan masalah ke router-router tsb
Jadi ICMP hanya memberi tahu original source mengenai error yang muncul
Dengan harapan network administrator akan memperbaiki kesalahan yang ada

Enkapsulasi ICMP message

Click here to enlarge

Datagram yang membawa ICMP message dirutekan seperti datagram yang biasa (tidak diprioritaskan)
Bisa hilang. Pada kondisi kongesti, bisa menambah kondisi kongesti
Bila datagram yang mengandung ICMP mengalami error maka tidak akan dibangkitkan ICMP error message Meskipun dibungkus (encapsulated) dan dikirimkan menggunakan datagram IP, ICMP bukanlah protokol layer yang lebih atas

Posisi ICMP pada network layer

Format umum ICMP message
Setiap error message memiliki format tertentu, tetapi selalu diawali oleh tiga field berikut
Ketika melaporkan error, ICMP message menyertakan keseluruhan header dan 64 bit pertama datagram IP yang menyebabkan masalah
Sehingga, pada TCP/IP, protokol-protokol layer yang lebih atas dirancang untuk menangani informasi kritis yang ada pada 64 bit pertama dari datagram

ICMP Unreachable Destinations Message
Digunakan ketika router tidak dapat mengirimkan sebuah datagram IP (dikembalikan ke original source)

Host Unreachable for Type of Service
ICMP Unreachable Destination Message Format
Network Unreachable errors biasanya berhubungan dengan kegagalan routing Host Unreachable errors biasanya akibat kegagalan pengiriman (delivery failures)
Bila mekanisme subnetting diterapkan, pesan ICMP host unreachable akan dikirimkan jika terjadi kegagalan ruting subnet (subnet routing failure)
Kegagalan bisa disebabkan:
Tujuan sedang mati
Alamat tujuan tidak ada (A nonexistent destination address)
Router tidak memiliki rute ke arah tujuan
Router tidak dapat mendeteksi keseluruhan error yang mungkin muncul

ICMP Source Quench
Source-Quenching digunakan pada saat terjadi kongesti atau untuk keperluan flow control
Congestion adalah issue global (global to the whole network)
Flow-Control adalah issue end-to-end dan/atau issue point-to-point

Beberapa metoda congestion control menggunakan pesan Source-Quench :
Pemantauan kondisi kongesti
Router membangkitkan pesan Source-Quench untuk setiap datagram yang dibuang
Pesan Source-Quench dikirimkan bila antrian mulai terisi (sebelum kongesti terjadi)

ICMP Time Exceeded
Akibat routing cycles (beberapa router terus menerus mengirimkan paket secara loop antar mereka) akan terjadi hal-hal berikut :
Field TTL (hop count) akan menjadi nol sehingga datagram akan dibuang
Bila time-out tercapai ketika menunggu potongan (fragments) datagram maka datagram akan dibuang
Pesan time exceeded dikirimkan pada kedua kasus tersebut di atas
0 = TTL count exceeded.
1 = Fragment reassembly time exceeded

ICMP Parameter Problem
Pesan ICMP Parameter Problem dikirimkan jika informasi header datagram tidak benar atau bila timbul masalah parameter lain (selain masalah yang sudah kita bahas sebelumnya)
Digunakan pada masalah yang berat (severe problems)
POINTER (8-bits):
Mengindetifikasi oktet yang bermasalah di dalam datagram
CODE (8-bits):
1 = Digunakan untuk melaporkan tidak adanya option yang diperlukan; Pada kondisi ini POINTER tidak digunakan

ICMP Redirect Message
Redirect Message dikirimkan router ke host agar mengganti rutenya karena rute yang dipilih tidak optimal
Router diasumsikan mengetahui rute yang benar
Pada awalnya hosts memiliki informasi routing (pada tabel ruting) yang minimal (yang mungkin sudah tidak valid) tetapi kemudian host meng-update tabel ruting mereka dengan informasi rute baru yang diberikan default routers
Secara umum redirect tidak memecahkan masalah propagasi rute

Misalnya router R1 salah memilih rute sehingga memutuskan untuk mengrimkan datagram dari Source (S) ke Destination (D) melalui R1, R2, R3, R5 (seharusnya mengambil jalur dengan jumlah hop terkecil yaitu melalui R4). R5 tidak dapat mengirimkan redirect message ke R1 karena R5 tidak mengetahui alamat R1

ROUTER INTERNET ADDRESS : alamat router yang harus digunakan oleh host untuk mencapai tujuan yang tercantum pada header datagram
Router hanya mengirimkan ICMP-Redirect messages ke hosts

Echo Request/Reply
Digunakan sebagai debugging tool
Echo requests dikirimkan oleh suatu source yang kemudian akan menerima Echo Replies yang dikirimkan oleh destination yang dapat dicapai dan merespons
Sebagai optional, suatu sample data packets (56K) dikirimkan dan diterima oleh program yang menerapkan echo request and reply ICMP messages (PING)
Echo Requests and Replies digunakan untuk meyakinkan bahwa sistem transport bekerja dengan baik. Sistem transport itu meliputi :

Format diawali dengan 3 field :

8 bit : field TYPE yang mengidentfikasikan pesan
8 bit : field CODE yang menyediakan informasi lebih jauh tentang tipe pesan
16 bit : field CHECKSUM untuk pengecekkan pesan ICMP
ICMP yang berisi pesan error terdiri dari header dan 64 bit pertamanya berisi penyebab error yang terjadi. Type field yang ada :

Click here to enlarge

IP software di source host
Intermediate routers yang menyalurkan datagram
The destination host is running, as are it’s IP and ICMP protocol modules.
Return path rfouters bekerja dan tabel ruting mereka valid
Timestamp Message
Timestamp Request and Reply:
Teknik untuk mensinkronkan clock dengan cara meminta tanggal hari ini dari suatu mesin
Timestamp values are given in milliseconds since midnight Universal Time.

IDENTIFIER and SEQ. NUMBER (16-bits each):
Both are used by the source to associate replies with requests sent.
Timestamp fields yang digunakan untuk menghitung perkiraan selang waktu :
ORIGINAL (32-bits):
Diisi oleh pengirim dengan timestamp sebelum timestamp request dikirimkan
RECEIVE (32-bits):
Diisi oleh destination dengan timestamp ketika request diterima
TRANSIT (32-bits):
Diisi oleh destination ketika reply message dikirimkan
Prakiraan delay tidak akan konsisten bila menggunakan Timestamp-ICMP messages
Harus melibatkan analisa statistik untuk mendapatkan pengukuran yang akurat

Address Mask Message
Address Mask Request and Reply digunakan untuk menentukan subnet mask yang digunakan pada jaringan lokal

Router Advertisement
Suatu host yang baru dinyalakan harus mengetahui alamat dari paling tidak satu buah router di dalam jaringan lokal sebelum dapat mengirimkan datagram
ICMP menyediakan message router advertisement atau router discovery
Router mengirimkan message secara periodik setiap 10 menit

Number of Address : jumlah entry alamat
Address Entry Size : ukuran alamat dinyatakan dalam satuan 32-bit
Lifetime : waktu dalam satuan detik dimana suatu host dapat menggunakan suatu alamat
Default : 30 menit
Pasangan Router Address x dan Address Preference x
Router Address : alamat router yang dapat digunakan
Address Preference : 2’s complement; host memakai preference yang paling tinggi

Router Solicitation
Router advertisement dilaksanakan secara periodik tiap 10 menit (default value)
Bila suatu host ingin segera (sebelum 10 menit) meminta informasi alamat router, maka dapat digunakan message router solicitation
Ketika menerima message router solicitation, router akan mengirimkan router advertisement

 

Source : https://www.forummikrotik.com