Bagian 3: Proses dari mapcontrol ke layercontrol

Ini merupakan artikel ketiga tentang pembuatan layercontrol di MapXtreme.

  1. artikel pertama membahas pembuatan desain layercontrol
  2. artikel kedua membahas tentang proses dari layercontrol ke mapcontrol.

Untuk artikel ketiga ini akan dibahas mengenai proses yang terjadi dari mapcontrol ke layercontrol. Ketika mapcontrol mengalami perubahan, misal akibat zoom in/out, layer-layer tertentu mungkin akan berubah visibilitynya. Ketika terjadi perubahan tersebut maka secara otomatis layercontrol harus merubah informasi layer di dalamnya.

Ada beberapa langkah yang dilakukan.
Langkah 1: buat file class layer control beri nama LyrControlCommand.

Imports MapInfo
Imports MapInfo.WebControls
Imports MapInfo.Mapping
<Serializable()> Public Class LyrControlCommand
Inherits MapInfo.WebControls.MapBaseCommand

Public Sub New()
    Name = "LyrControlCommand"
End Sub

Public Overrides Sub Process()
    Dim model As MapControlModel = MapControlModel.GetModelFromSession()
    Dim peta As Map = model.GetMapObj(MyBase.MapAlias)
    Dim ll As MapInfo.Mapping.LabelLayer = GetLabelLayer(peta)
    Dim nmlyr As String = ""

    For i As Byte = 0 To peta.Layers.Count - 1
      'cek layer
      If peta.Layers.Item(i).Enabled Then
         If (peta.Zoom.Value > peta.Layers.Item(i).VisibleRange.RangeEnd) And (peta.Layers.Item(i).VisibleRangeEnabled = True) Then
            nmlyr = nmlyr & (peta.Layers.Item(i).Name).ToLower & "1,"
         Else
            nmlyr = nmlyr & (peta.Layers.Item(i).Name).ToLower & "0,"
         End If
      End If

      'cek label layer
      If Not (ll Is Nothing) Then
         Try
            If ll.Sources.Item(i).Enabled Then
               If (peta.Zoom.Value > ll.Sources.Item(i).VisibleRange.RangeEnd) And (ll.Sources.Item(i).VisibleRangeEnabled = True) Then
                  nmlyr = nmlyr & (ll.Sources.Item(i).Name).ToUpper & "1,"
               Else
                  nmlyr = nmlyr & (ll.Sources.Item(i).Name).ToUpper & "0,"
               End If
            End If
         Catch ex As Exception
         End Try
      End If
    Next

    ' Send contents back to client.
    HttpContext.Current.Response.Output.Write(Trim(nmlyr))
End Sub
End Class

Langkah 2: Inisialisasi class.
Buka file codebehind page tempat layercontrol di buat. Tambahkan kode berikut di dalam event Page_Load

If Session.IsNewSession Then
    Dim controlmodel As MapInfo.WebControls.MapControlModel = MapControlModel.SetDefaultModelInSession()
    controlmodel.Commands.Add(New MapLayer.LyrControlCommand)
End If

Langkah 3: Buat file javascript dengan nama LyrControl.js
Ada 2 function yang dibuat yaitu getLayerControl yang berfungsi membaca informasi yang dikirim class LyrControlCommand dan function centangin yang berfungsi untuk menandai checkbox di layercontrol.

// JScript File
// (c)Pitney Bowes Mapinfo
// Modified by: Kumkum and Andi

function getLayerControl()
{
    //create url to send to server, server command name is "getMapCenterValue"
    var url = "MapController.ashx?Command=LyrControlCommand&Ran=" + Math.random();
    var mapImage = document.getElementById("MapControl1_Image");
    if (mapImage.mapAlias)
        url +=  "&MapAlias=" + mapImage.mapAlias;

    var xmlHttp = CreateXMLHttp();
    xmlHttp.open("GET", url, false);
    xmlHttp.send(null);
    var result = xmlHttp.responseText;

    // for layer visibility
    centangin("GvLayer_ctl02_cbVis","posisi_strategis",result);
    centangin("GvLayer_ctl03_cbVis","indonesia_city_kabupaten",result);
    centangin("GvLayer_ctl04_cbVis","indonesia_street",result);
    centangin("GvLayer_ctl05_cbVis","indonesia_railway",result);
    centangin("GvLayer_ctl06_cbVis","indonesia_riverlake",result);
    centangin("GvLayer_ctl07_cbVis","indonesia_desa",result);
    centangin("GvLayer_ctl08_cbVis","indonesia_kecamatan",result);
    centangin("GvLayer_ctl09_cbVis","indonesia_kabupaten",result);
    centangin("GvLayer_ctl10_cbVis","indonesia_provinsi",result);

    //for label visibility
    centangin("GvLayer_ctl02_cbLbl","POSISI_STRATEGIS",result);
    centangin("GvLayer_ctl03_cbLbl","INDONESIA_CITY_KABUPATEN",result);
    centangin("GvLayer_ctl04_cbLbl","INDONESIA_STREET",result);
    centangin("GvLayer_ctl05_cbLbl","INDONESIA_RAILWAY",result);
    centangin("GvLayer_ctl06_cbLbl","INDONESIA_RIVERLAKE",result);
    centangin("GvLayer_ctl07_cbLbl","INDONESIA_DESA",result);
    centangin("GvLayer_ctl08_cbLbl","INDONESIA_KECAMATAN",result);
    centangin("GvLayer_ctl09_cbLbl","INDONESIA_KABUPATEN",result);
    centangin("GvLayer_ctl10_cbLbl","INDONESIA_PROVINSI",result);
}
function centangin(namacek,namalayer,textnya)
{
    var div1 = FindElement(namacek);
    myString = new String(textnya);
    div1.checked = false;

    if (myString.indexOf(namalayer + '0',1) >  0) {
        div1.checked= true;
        div1.style.backgroundColor = '#FFFFFF';
    }
    else
    {
        if (myString.indexOf(namalayer + '1',1) >  0) {
            div1.checked= false;
            div1.style.backgroundColor = '#ff66cc'; //pink
        }
    }
}

Langkah 4: Inisialisasi file javascript
Tambahkan kode berikut di page (aspx) dimana layercontrol di buat.

<body>
 <form id="form1" runat="server">
 <script src="../Javascript/LyrControl.js" type="text/javascript"></script>

<!— all your code here-->

<script type="text/javascript">
 getLayerControl();
 //hook up map image onload event with method.
 var mapimage = document.getElementById("MapControl1_Image");
 mapimage.attachEvent("onload",getLayerControl);
</script>
</form>
</body>

Kode javascript setelah tag <form> untuk inisialisasi file javascript yang telah dibuat sebelumnya. Sedangkan kode javascript sebelum tag </form> akan dijalankan setiap kali page melakukan refresh.

Semoga bisa membantu.

Happy coding…

About Yuniar

Penulis sekarang lebih banyak bekerja menggunakan teknologi Microsoft .NET secara umum dan TIDAK lagi menggunakan aplikasi MapXtreme.net dari MapInfo. Karena itu mohon maaf, jika pertanyaan-pertanyaan mengenai MapXtreme sudah tidak bisa saya jawab lagi.

Posted on 8 September 2009, in MapXtreme, Web GIS and tagged , , , , . Bookmark the permalink. 2 Komentar.

  1. Mas, aku baru mau belajar MapXtreme nih, ni juga baru dapet componentnya v 6.8, kira2 untuk awal2 apa aja yang kudu dipelajari ? oiya, kira2 mas punya source code contoh untuk aplikasi MapXtreme yang bisa buat belajar kah? kalo ada bisa di share dong, hehe,
    Thanks b4,

    • kamu install aja mapxtremenya. Pasti ada projek samplenya baik untuk web maupun desktop. Biasanya kalo install di tempat default, sampelnya ada di sini C:\Program Files\MapInfo\MapXtreme\6.8.0\Samples
      Aku juga belajar dari situ.

      Kamu juga bisa belajar dari situs resminya disini.
      Cari produk Mapxtreme 2004/2005/2008 atau yang 2004/2005 (sama aja sih, semua codingnya masih dipake di versi yang baru). Disini banyak contoh-contoh sample yang bisa kamu pelajari

      kalo diatas gak bisa masuk dari web resminya http://www.pbinsight.com/
      trus pilih menu ‘Support > Knowledge Base ‘ trus pilih ‘product’

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: