Ferry Kurniawan

Every Accomplishment Start With The Decision to Try
See also: Other Geeks@INDC

Presenting Spatial Data Using ASPMap Part II

Pada kesempatan kedua ini, kami akan mencoba menampilkan data spatial di SQL Server 2008 dengan menggunakan ASPMap Control seperti di cotoh sebelumnya. Pada contoh di kasus ini ialah menampilkan lokasi Airport yang berada di Amerika. Berikut ini langkah-langkahnya :

1.  Download database DbUSA dan attach ke database SQL Server 2008 anda linknya disini.

2. Buat Website baru beri nama dengan USAirports.  Kemudian tambahkan control DropDownlist ke dalam Default.aspx. Beri nama control tersebut dengan nama ddlState.

ASP_1

3. Tambahkan New Folder di website anda kemudian rename menjadi MAP. Tambahkan semua  file yang berada di folder “C:\Program Files\VDS Technologies\AspMap 4.5\DATA\MAPS\USA” seperti di gambar .

ASP_3

4. Tambahkan New Folder lagi di website anda kemudian rename menjadi Icon. Tambahkan 5 file .gif  yang berada di folder “C:\Program Files\VDS Technologies\AspMap 4.5\DATA\TOOLS” seperti di gambar .

ASP_2

7. Drag n Drop 1 buah control Map kedalam web form Default.aspx

6. Drag n Drop  3 buah  control MapToolButton kedalam Default.aspx

Name ImageURL Map MapTool
zoomin ~/Icon/Zoomin.gif Map1 ZoomIn
zoomout ~/Icon/Zooout.gif Map1 Zoomout
pan ~/Icon/pan.gif Map1 Pan

ASP_4

7. Ketikkan code berikut ini (VB .Net)  kedalam Default.aspx.vb

Imports AspMap
Imports AspMap.Web
Imports System
Imports System.Data
Imports System.Data.SqlClient
Partial Class _Default
    Inherits System.Web.UI.Page
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            LoadStates()
        End If
        LoadLayer()
    End Sub
    Protected Sub ddlState_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlState.SelectedIndexChanged
        getAirport(ddlState.SelectedValue)
    End Sub
    Sub LoadLayer()
        Dim layer As AspMap.Layer
        Dim MapDir As String = MapPath("MAP/")
 
        ' add states layer
        layer = Map1.AddLayer(MapDir & "states.shp")
        layer.LabelField = "STATE_NAME"
        layer.ShowLabels = True
        layer.LabelFont.Name = "Verdana"
        layer.LabelFont.Size = 12
        layer.LabelFont.Bold = True
        layer.LabelStyle = LabelStyle.PolygonCenter
 
        ' add roads layer
        layer = Map1.AddLayer(MapDir & "roads.shp")
 
        
    End Sub
    Sub LoadStates()
        Dim cn As New SqlConnection("Data Source=pdi-app-laptop\mobile;Initial Catalog=DbUSA;Trusted_Connection=yes;")
        cn.Open()
 
        Dim cmd As New SqlCommand("select distinct [STATE_NAME],STATE_ABBR from [STATES] order by STATE_NAME", cn)
        Dim rdr As SqlDataReader
        rdr = cmd.ExecuteReader
 
        ddlState.Items.Clear()
 
 
        While rdr.Read
            Dim li As New ListItem
            li.Text = Trim("" & rdr(0))
            li.Value = Trim("" & rdr(1))
            ddlState.Items.Add(li)
        End While
        rdr.Close()
        rdr = Nothing
        cmd = Nothing
        cn.Close()
        cn = Nothing
    End Sub
    Sub getAirport(ByVal strState As String)
        Dim cn As New SqlConnection("Data Source=pdi-app-laptop\mobile;Initial Catalog=DbUSA;Trusted_Connection=yes;")
        cn.Open()
 
        Dim cmd As New SqlCommand("select [NAME], [Location].STAsText() from [Airports] where STATE ='" & strState & "'", cn)
        Dim rdr As SqlDataReader
        rdr = cmd.ExecuteReader
 
 
        Map1.Markers.Clear()
        lblFound.Text = ""
        Dim count As Integer
        count = 0
        While rdr.Read
            Dim symbol As New MarkerSymbol("icon/marker.gif", 19, 31)
            Dim x As Double
            Dim y As Double
            Dim tmp As String
            Dim pos As Byte
 
            tmp = Left(Trim("" & rdr(1)), Len(Trim("" & rdr(1))) - 1)
            pos = InStr(tmp, "(", CompareMethod.Text)
            tmp = Right(tmp, Len(tmp) - pos)
 
            Dim arrXY() As String
            arrXY = Split(Trim(tmp), " ", , CompareMethod.Text)
 
            x = arrXY(0)
            y = arrXY(1)
 
            Dim marker As New Marker(New AspMap.Point(x, y), symbol, rdr(0))
            Map1.Markers.Add(marker)
 
            arrXY = Nothing
            count = count + 1
        End While
 
        lblFound.Text = count.ToString & " Airports Found "
 
        rdr.Close()
        rdr = Nothing
        cmd = Nothing
        cn.Close()
        cn = Nothing
    End Sub
 
    
    
End Class

Penjelasan :

- Sub LoadLayer() : untuk menampilkan layer States.shp dan Road.shp ke dalam Map.

- Sub LoadStates() : untuk menampilkan nama-nama states ke di USA ke dalam ddlState (dropdownlist)

- Sub getAirport(ByVal strState As String) : untuk menampilkan data airport sesuai dengan nama state yang dipilih. Data yang dipilih dicari ke database DbUSA tabel Airports kemudian dicari posisi koordinatnya (dengan kueri STAsText() ) lalu membuat Marker / Penanda untuk lokasi dari Airport tersebut (ditampilkan dengan icon marker.gif)

8. Jalankan Default.aspx kemudian pilih salah satu nama state nya maka akan tampil lokasi Airport di wilayah state tersebut.

ASP_5

yang berwarna merah adalah marker untuk lokasi Airport di State tsb.

ASP_6

9. Semoga Bermanfaat & Terima Kasih :)

10. Source Code dapat didownload disini.

Share this post: | | | |

Comments

Ferry Kurniawan said:

Web Map Service (WMS) adalah protokol standar untuk melayani rujukan geografis gambar peta melalui internet

# June 3, 2010 12:08 PM