Membuat Polyline Tool di MapXtreme

Jika anda biasa menggunakan software SIG semacam MapInfo, tentu anda mengenal dengan tool “Polyline”. Tool ini berfungsi untuk menggambar garis secara bebas di peta. Garis akan terbentuk menghubungkan titik-titik lokasi klik. Pada dasarnya, ini merupakan pengembangan dari apa yang telah saya tulis disini. Lalu diterapkan untuk membuat tool seperti yang saya tulis disini. Yang terpenting disini adalah, digunakannya polyline interaction untuk mendapatkan koordinat titik-titik yang di klik pada peta.

Tool Polyline di MapInfo

Pertama buat class.

Imports MapInfo.Engine
Imports MapInfo.Geometry
Imports MapInfo.Mapping
Imports MapInfo.WebControls
Imports MapInfo.Data
Imports MapInfo.Styles

<Serializable()> Public Class MultiLine
    Inherits MapBaseCommand

    Public Sub New()
        MyBase.Name = "MultiLineCommand"
    End Sub

    Private _peta As Map

    Public Overrides Sub Process()
        Dim klikPoint() As System.Drawing.Point = Me.ExtractPoints(MyBase.DataString)
        Dim model As MapControlModel = MapControlModel.GetModelFromSession()
        _peta = model.GetMapObj(MyBase.MapAlias)

        If _peta Is Nothing Then Return

        Dim dPoints() As MapInfo.Geometry.DPoint
        _peta.DisplayTransform.FromDisplay(klikPoint, dPoints)

        CreateTempLayer(_peta)

        Dim MIcon As New MIConnection()
        MIcon.Open()
        Dim MItable As MapInfo.Data.Table = MIcon.Catalog.GetTable("tempTable")

        Dim curve As MultiCurve = New MultiCurve(_peta.GetDisplayCoordSys(), CurveSegmentType.Linear, dPoints)
        Dim sls As SimpleLineStyle = New SimpleLineStyle(New LineWidth(2, LineWidthUnit.Point), 2, Drawing.Color.Blue)
        Dim cs As MapInfo.Styles.CompositeStyle = New MapInfo.Styles.CompositeStyle(Nothing, sls, Nothing, Nothing)
        Dim f As New Feature(curve, cs)

        MItable.InsertFeature(f)

        MIcon.Close()
        Dim ms As System.IO.MemoryStream = model.GetMap(MyBase.MapAlias, _
                       MyBase.MapWidth, _
                       MyBase.MapHeight, _
                       MyBase.ExportFormat)
        Me.StreamImageToClient(ms)
    End Sub

    Private Sub CreateTempLayer(ByVal peta As Map)
        Dim lyr As IMapLayer = peta.Layers.Item("tempLayer")

        If lyr Is Nothing Then
            Dim ti As MapInfo.Data.TableInfo = MapInfo.Data.TableInfoFactory.CreateTemp("tempTable")
            Dim t As MapInfo.Data.Table = MapInfo.Engine.Session.Current.Catalog.CreateTable(ti)

            peta.Layers.Insert(0, New FeatureLayer(t, "templayer", "tempLayer"))
        End If
        lyr = peta.Layers.Item("tempLayer")
    End Sub
End Class

Di class ini, pertama akan diperiksa apakah ada temporary layer, jika tidak, maka temporary layer di buat (Sub CreateTempLayer). Kemudian garis dibentuk sesuai  lokasi titik yang di klik. Langkah terakhir adalah melakukan refresh peta. Kita tidak perlu membuat kode  javascript, cukup digunakan javascript “MapCommand”,  default bawaan mapxtreme.  Untuk merefresh peta, ditambahkan kode untuk melakukan stream gambar ke client (baris 41-45).

Buka codebehind tempat tool dibuat, tambahkan kode berikut di dalam event Page_Load untuk inisialisasi class yang dibuat:

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

Tambahkan tool ke page, dan ubah propertinya, seperti gambar berikut. ClientCommand isi dengan MapCommand, ClientInteraction isi dengan PolylineInteraction, dan Command isi dengan nama class yang dibuat sebelumnya.

Coba jalankan aplikasinya. Kalo semua benar, maka hasilnya seperti berikut.

Jika ada pertanyaan, silahkan tulis di komentar ya…

Terimakasih buat Mas Dodo yang mau repot-repot mengoreksi kode programnya.😀

Download sample

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 4 Desember 2009, in MapXtreme, Web GIS and tagged , , , . Bookmark the permalink. Tinggalkan komentar.

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: