WCF Data Services (disebut juga dengan Astoria / ADO .Net Data Services di Framework 3.5) memungkinkan kita untuk memodifikasi data melaluli Interface HTTP RESTful. WCF Data Services ini mensupport beberapa kembalian data bertipe XML, JSon dan AtomPub. Pada kesempatan kali ini kami mencoba memberikan contoh bagaimana menggunakan QueryInterceptor data di WCF Data Service . Berikut ini langkah-langkahnya :
1. Buka VS 2010 anda.
2. Create New Project –> ASP .Net Empty Web Application (disini kami menggunakan VB .Net)
3. Simpan dengan nama AkademikDataService
4. Pilih Menu Project –> Add New Item…… , kemudian Pilih ADO .Net Entity Data Model
5. Beri Nama dengan AkademikModel.
6. Akan tampil jendela Choose Model Content.. , kemudian pilih Next.
7. Setting Data Connection anda, (di contoh ini konek ke Database Akademik), jangan Lupa disimpan nama Entity Connection di Web Config
8. Pilih database Objectnya. Dicontoh ini kami memilih Tabel yang ada di Database Akademik, kemudian tekan Finish.
10. Pilih Menu Project –> Add New Item…… , kemudian Pilih WCF Data Service
11. Beri Nama dengan AkademikDataService.svc
12. Buka file AkademikDataService.svc.vb kemudian ketikkan code berikut :
di Code ini terdapat perintah QueryInterceptor untuk mengembalikan data Mahasiswa yang namanya sesuai dengan user yang sedang login.
1: Imports System.Data.Services
2: Imports System.Data.Services.Common
3: Imports System.Linq
4: Imports System.ServiceModel.Web
5: Imports System.Linq.Expressions
6:
7: Public Class AkademikDataService
8: ' TODO: replace [[class name]] with your data class name
9: Inherits DataService(Of AkademikEntity)
10:
11: ' This method is called only once to initialize service-wide policies.
12: Public Shared Sub InitializeService(ByVal config As DataServiceConfiguration)
13: ' TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.
14: ' Examples:
15: config.SetEntitySetAccessRule("*", EntitySetRights.All)
16: ' config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All)
17: config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2
18: End Sub
19:
20: <QueryInterceptor("Mahasiswas")> _
21: Public Function OnQueryMahasiswas() As Expression(Of Func(Of Mahasiswa, Boolean))
22: Dim Nama() As String
23: Nama = Split(HttpContext.Current.User.Identity.Name, "\", 0, CompareMethod.Text)
24:
25: Return Function(m As Mahasiswa) m.Nama = Nama(1)
26: End Function
27: End Class
13. Jalankan AkademikDataService.svc maka akan tampil
14. Tambahkan New Project “ASP .Net Empty Web Application” Melalui File –> Add –> New Project
15. Beri Nama dengan WCFClient
16 Tambahkan Satu Buah WebForm berinama dengan Default.aspx
17. Buat Tampilan Seperti Berikut ini (Button dan GridView).
18. Tambahkan Service Reference melalui Menu Project –> Add Service Reference…
19. Kemudian ketikkan “http://localhost:1065/AkademikDataService.svc/” pada TextBox Address, beri nama ServiceAkademik
20. Ketikkan code berikut ini di Default.aspx.vb
1: Imports System.Data.Services.Client
2: Imports WCFClient.ServiceAkademik
3: Imports System.Data.Services
4: Imports System.Data.Services.Common
5: Imports System.Linq
6: Imports System.Linq.Expressions
7: Imports System.ServiceModel
8: Public Class _Default
9: Inherits System.Web.UI.Page
10:
11:
12: Protected Sub btnSimpan_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnLoad.Click
13: LoadGrid()
14: End Sub
15: Sub LoadGrid()
16: Dim svc As New AkademikEntity(New Uri("http://localhost:1065/AkademikDataService.svc/"))
17: GridView2.DataSource = svc.Mahasiswas
18: GridView2.DataBind()
19: End Sub
20:
21:
22: End Class
21. Jalankan Default.aspx maka akan tampil berikut ini
22. Sebelumnya saya login dengan user ferry (ditampung di HttpContext.Current.User.Identity.Name), maka QueryInterceptor yang ada di AkademikDataSerivice akan meng-query data Mahasiswa yang namanya sesuai dengan user yang login (tidak dapat melihat data user lainnya).
23. Terima Kasih & Semoga Bermanfaat :)
SQL Server 2008 menyediakan beberapa fungsi yang mendukung tipe data Basis data Spasial (geometry / geography). Untuk menghitung jarak antara dua instances anda dapat menggunakan fungsi STDistance() . Contoh penerapannya seperti berikut :
Query Berikut ini mencari 10 titik terdekat dengan titik POINT (210000 890000) di tabel Customer
1: DECLARE @Point geometry
2: SET @Point = geometry::STPointFromText('POINT (210000 890000)', 26986)
3: SELECT TOP 10
4: Nama
5: Alamat,
6: Lokasi.STDistance(@Point) AS Jarak
7: FROM
8: Customer
9: ORDER BY
10: Lokasi.STDistance(@Point) ASC
Query diatas benar dan dapat dijalankan namun ternyata kurang efisien karna akan menscan semua row kemudian baru diurutkan (memerlukan waktu). Solusi yang dapat digunakan untuk memberikan efisiensi maka anda dapat menggunakan tambahan fungsi STBuffer() dan Filter() seperti berikut :
1: DECLARE @Point geometry
2: SET @Point = geometry::STPointFromText('POINT (210000 890000)', 26986)
3:
4: DECLARE @Cari geometry
5: SET @Cari = @Point.STBuffer(500)
6:
7: SELECT TOP 10
8: Nama
9: Alamat,
10: Lokasi.STDistance(@Point) AS Jarak
11: FROM
12: Customer
13: WHERE
14: Lokasi.Filter(@Cari) = 1
Query tersebut akan mencari 10 titik terdekat namun sudah difilter terlebih dahulu yang berada dalam radius 500 meter.
Implementasi di Web Application (menggunakan control ASPMap)
1. Download dan Attach Database GIS yang dapat diunduh disini.
2. Buatlah Stored Procedure seperti berikut ini
1: Create procedure [dbo].getPoint(@x float , @y float,@tipe varchar(30))
2: as
3: Begin
4: DECLARE @titik geometry
5: SET @titik = geometry::Point(@x,@y,0)
6: DECLARE @cari geometry
7: SET @cari = @titik.STBuffer(0.005)
8:
9: SELECT [name]
10: ,[type]
11: ,[geom].STAsText(),
12: geom.STDistance(@titik) AS Distance
13: FROM
14: points
15: WHERE
16: geom.Filter(@cari) = 1
17: and [type]=@tipe
18: End
3. Buka Visual Studio anda buat website baru, beri nama dengan GazaMap kemudian tambahkan ASPMap control ke halaman default.aspx seperti berikut :

4. Tambahkan Code seperti berikut.
1: Imports System
2: Imports System.Data
3: Imports System.Data.SqlClient
4: Imports AspMap
5: Imports AspMap.Web
6: Partial Class _Default
7: Inherits System.Web.UI.Page
8: Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
9: LayerFromSHP()
10: If IsPostBack = False Then
11: LoadBangunan()
12: End If
13: End Sub
14: Private Sub LayerFromSHP()
15: Dim layer As AspMap.Layer
16: Map1.MapUnit = MeasureUnit.Meter
17: Dim MapDir As String = MapPath("MAP/")
18: layer = Map1.AddLayer(MapDir & "roads.shp")
19: layer.LabelField = "name"
20: layer.ShowLabels = True
21: layer.LabelFont.Color = Drawing.Color.Indigo
22: layer.LabelFont.Name = "Verdana"
23: layer.LabelFont.Size = 12
24: layer.LabelFont.Bold = True
25: layer.LabelStyle = LabelStyle.Default
26: End Sub
27: Private Sub LoadLayerFromDB(ByVal x As Double, ByVal y As Double, ByVal strTipe As String)
28: Dim cn As New SqlConnection("Data Source=PDI-APP-LAPTOP\MOBILE;Initial Catalog=GIS;Trusted_Connection=yes;")
29: cn.Open()
30: Dim cmd As New SqlCommand("getPoint " & x & "," & y & ",'" & strTipe & "'", cn)
31: Dim rdr As SqlDataReader
32:
33: Map1.Markers.Clear()
34: rdr = cmd.ExecuteReader()
35: While rdr.Read
36: Dim strTemp() As String
37: Dim strPoint As String
38: Dim intPosisi As Byte
39: intPosisi = InStr(Trim("" & rdr(2)), "(", CompareMethod.Text)
40: strPoint = Right(Trim("" & rdr(2)), Len(Trim("" & rdr(2))) - intPosisi)
41: strPoint = Left(strPoint, Len(strPoint) - 1)
42: strTemp = Split(strPoint, " ")
43:
44: Dim marker As Marker = New Marker(New AspMap.Point(Val(strTemp(0)), Val(strTemp(1))), Trim("" & rdr(0)), "Nama Bangunan : " & Trim("" & rdr(0)) & "<BR>" & "Jarak dari titik : " & Val("" & rdr(3)).ToString)
45: Map1.Markers.Add(marker)
46:
47: End While
48: rdr.Close()
49: cmd = Nothing
50: cn.Close()
51: cn = Nothing
52: End Sub
53: Sub LoadBangunan()
54: Dim cn As New SqlConnection("Data Source=PDI-APP-LAPTOP\MOBILE;Initial Catalog=GIS;Trusted_Connection=yes;")
55: cn.Open()
56: Dim cmd As New SqlCommand("SELECT DISTINCT [type] FROM [points]", cn)
57: Dim rdr As SqlDataReader
58:
59: ddlTipe.Items.Clear()
60: rdr = cmd.ExecuteReader()
61: While rdr.Read
62: ddlTipe.Items.Add(Trim("" & rdr(0)))
63: End While
64: rdr.Close()
65: cmd = Nothing
66: cn.Close()
67: cn = Nothing
68: End Sub
69: Protected Sub Map1_InfoTool(ByVal sender As Object, ByVal e As AspMap.Web.InfoToolEventArgs) Handles Map1.InfoTool
70: Dim Titik As New AspMap.Point
71: Titik = e.InfoPoint
72: LoadLayerFromDB(Titik.X, Titik.Y, ddlTipe.SelectedValue)
73: End Sub
74: End Class
5. Jalankan kemudian pilih tipe bangunannya, klik icon InfoTool klik peta di sembarang Peta “Gaza” maka akan tampil bangunan terdekat seperti berikut.
6. Source Code dapat didownload disini
7. Selamat mencoba, Semoga Bermanfaat dan Terima Kasih.
8. Tak lupa saya berdoa semoga bumi Palestina selalu dalam lindungan ALLAH S.W.T dan Semoga tercipta Perdamaian di Timur Tengah. Amin.
Web Map Service (WMS) adalah protokol standar untuk melayani rujukan geografis gambar peta melalui internet yang dihasilkan oleh server peta menggunakan data dari GIS database. Contoh WMS Server dari negeri sendiri yang bisa anda rujuk adalah :
- WMS Kementrian Kehutanan : http://appgis.dephut.go.id/appgis/
- WMS Kota Samarinda (Kalimantan Timur) : http://www.samarindacity.com/wms/
Sebagai contoh disini saya akan menampilkan Peta Kota Samarinda melalui WMS nya yang diatas. Untuk menampilkan peta tersebut saya masih menggunakan control ASPMap seperti yang saya tulis disini dan disini. Untuk detil informasi WMS Kota Samarinda dapat anda rujuk ke http://www.samarindacity.com/wms/?SERVICE=wms&VERSION=1.1.1&REQUEST=GetCapabilities
Berikut ini langkah-langkahnya menampilkan Peta Kota Samarinda dari WMS Servernya :
1. Buka Visual Studio anda. Buat New Website Beri nama dengan Samarinda. (disini menggunakan VB .Net)
2. Tambahkan control ASPMap dan control ZoomBar ke halaman Default.aspx, Seperti Berikut :
3. Ketikkan code berikut ini di Default.aspx.vb untuk menampilkan petanya ke control Map1
1: Imports Microsoft.VisualBasic
2: Imports System
3: Imports System.Collections
4: Imports System.ComponentModel
5: Imports System.Data
6: Imports System.Data.SqlClient
7: Imports System.Drawing
8: Imports System.Web
9: Imports System.Web.SessionState
10: Imports System.Web.UI
11: Imports System.Web.UI.WebControls
12: Imports System.Web.UI.HtmlControls
13: Imports AspMap
14: Imports AspMap.Web
15: Partial Public Class _Default
16: Inherits System.Web.UI.Page
17: Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
18: DisplayMap()
19: End Sub
20: Sub DisplayMap()
21: ' akses wms server
22: Dim wms As WmsLayer = New WmsLayer("http://www.samarindacity.com/wms/", New AspMap.Rectangle(117.048, 0.319929, 117.302, -0.716833))
23: ' menambahkan layer
24: wms.AddLayer("kecamatan")
25: wms.AddLayer("kelurahan")
26: wms.AddLayer("jalan")
27: wms.AddLayer("nama_jalan")
28:
29: wms.ImageFormat = ImageFormat.Png
30: ' add the WMS layer to the map
31: Dim wmsLayer As AspMap.Layer = Map1.AddLayer(wms)
32: ' set the coordinate system of the map to the coordinate system of the TerraServer layer
33: Map1.CoordinateSystem = CoordSystem.WGS1984
34: ' make the map image transparent to display background WMS layers
35: Map1.ImageOpacity = 0
36: End Sub
37: End Class
4. Jalankan halaman tersebut maka akan tampil seperti berikut ini.
5. Selamat Mencoba, Terima Kasih & Semoga Bermanfaat :)
6. Source dapat diunduh disini.
Setelah satu bulan tidak menulis di blog (dikarnakan keikut-sertaan saya dalam mengurus putri pertama saya yang baru lahir :-) ) , maka pada kesempatan kali ini saya akan sedikit berbagi tulisan mengenai pembuatan “WCF Client di Windows Mobile”. Meskipun windows phone 7 sudah diluncurkan pada tahun ini tetapi saya tetap mengutak-atik mengenai pengembangan windows mobile 6.5 kebawah yang tentunya dengan .Net Compact Frameworknya. Untuk penjelasan WCF dengan konsep ABC (Address, Binding, Contract ) tidak saya bahas ulang. Berikut ini langkah-langkahnya:
I. Pembuatan WCF Service :
1. Buka VS 2008 anda.
2. Buat project “WCF Service Library” baru kemudian beri nama dengan WCFLanguage (disini memakai C#)
3. Kemudian kopikan code dibawah ini di file app.config project tersebut
Catatan : - Address Host saya gunakan : http://192.168.10.68:8282/WCFLanguage/Language
- EndPoint : <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
- Ganti sesuai settingan anda
1: <?xml version="1.0" encoding="utf-8" ?>
2: <configuration>
3: <system.web>
4: <compilation debug="true" />
5: </system.web>
6: <!-- When deploying the service library project, the content
7: of the config file must be added to the host's app.config
8: file. System.Configuration does not support config files
9: for libraries. -->
10: <system.serviceModel>
11: <services>
12: <service name="WCFLanguage.Language"
13: behaviorConfiguration="WCFLanguage.LanguageBehavior">
14: <host>
15: <baseAddresses>
16: <add baseAddress ="http://192.168.10.68:8282/WCFLanguage/Language" />
17: </baseAddresses>
18: </host>
19: <!-- Service Endpoints -->
20: <!-- Unless fully qualified, address is relative to
21: base address supplied above -->
22: <endpoint address =""
23: binding="basicHttpBinding"
24: contract="WCFLanguage.ILanguage" />
25: <!--
26: Upon deployment, the following identity element
27: should be removed or replaced.
28: -->
29: <!-- Metadata Endpoints -->
30: <endpoint address="mex"
31: binding="mexHttpBinding"
32: contract="IMetadataExchange"/>
33: </service>
34:
35: </services>
36: <behaviors>
37: <serviceBehaviors>
38: <behavior name="WCFLanguage.LanguageBehavior">
39: <!-- To avoid disclosing metadata information,
40: set the value below to false and remove the metadata
41: endpoint above before deployment -->
42: <serviceMetadata httpGetEnabled="True"/>
43: <!-- To receive exception details in faults for
44: debugging purposes, set the value below to true.
45: Set to false before deployment to avoid disclosing
46: exception information -->
47: <serviceDebug includeExceptionDetailInFaults="False" />
48: </behavior>
49:
50: </serviceBehaviors>
51: </behaviors>
52: </system.serviceModel>
53: </configuration>
4. Ganti nama file IService1.cs ke ILanguage.cs untuk pembuatan Interface yang digunakan dalam pendefinisian contract Language.
Kemudian ketikkan code berikut ini.
1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Runtime.Serialization;
5: using System.ServiceModel;
6: using System.Text;
7:
8: namespace WCFLanguage
9: {
10:
11: [ServiceContract]
12: public interface ILanguage
13: {
14: [OperationContract]
15: string[] GetAllLanguages();
16: [OperationContract]
17: string ChooseLanguage(string Code);
18:
19: }
20:
21:
22: [DataContract]
23: public class DataLanguage
24: {
25: string strLanguage = "";
26: string strResult = "";
27:
28: [DataMember]
29: public string StringLanguage
30: {
31: get { return strLanguage; }
32: set { strLanguage = value; }
33: }
34:
35: [DataMember]
36: public string StringResult
37: {
38: get { return strResult; }
39: set { strResult = value; }
40: }
41: }
42: }
5. Ganti nama file Service1.cs menjadi Language.cs kemudian ketikkan code berikut ini.
1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Runtime.Serialization;
5: using System.ServiceModel;
6: using System.Text;
7:
8: namespace WCFLanguage
9: {
10: // NOTE: If you change the class name "Service1" here, you must also update the reference to "Service1" in App.config.
11: public class Language : ILanguage
12: {
13: public string[] GetAllLanguages()
14: {
15: string[] strLanguages = new string[3];
16: strLanguages[0] = "C#";
17: strLanguages[1] = "F#";
18: strLanguages[2] = "VB .Net";
19:
20: return strLanguages;
21: }
22: public string ChooseLanguage(string Code)
23: {
24: string strResult = "";
25: if (Code == "C#")
26: {
27: strResult = "Amazing language";
28: }
29: else if (Code == "F#")
30: {
31: strResult = "Interesting New Language";
32: }
33: else if (Code == "VB .Net")
34: {
35: strResult = "Familiar Language";
36: }
37: return strResult;
38: }
39:
40: public DataLanguage YourFavLanguage (string Code)
41: {
42: var L = new DataLanguage();
43: L.StringLanguage = Code;
44:
45: string strResult = "";
46: strResult = ChooseLanguage(L.StringLanguage);
47: L.StringResult = strResult;
48: return L;
49:
50: }
51: }
52: }
6. Jalankan project tersebut maka akan tampil seperti berikut. Service WCFLanguage siap diimplementasikan.
II. Pembuatan WCF Client di Windows Mobile.
1. Download .Net Compact Framework Power Toys 3.5 disini, kemudian install.
2. Pada project tadi pilh menu File –> Add –> New Project.
3. Pilih SmartDevice (C#), kemudian simpan dengan nama WMClient.
4. Target Device ke Windows Mobile 6
5. Tambahkan namespace System.Runtime.Serialization dan System.ServiceModel melalui Add References
6. Kopikan file WCFLanguage.dll (di folder project anda) ke path “C:\Program Files\Microsoft.NET\SDK\CompactFramework\v3.5\bin”
7. Jalankan Service WCFLanguage tadi (Point I.6)
8. Buka Command Prompt kemudian ketikkan “CD C:\Program Files\Microsoft.NET\SDK\CompactFramework\v3.5\bin”
9. Ketikkan di Command prompt tadi seperti berikut “NETCFSvcUtil.exe http://192.168.10.68:8282/WCFLanguage/Language”
10. Ketikkan di Command prompt seperti berikut “NETCFSvcUtil.exe WCFLanguage.dll”
11. Ketikkan di Command prompt seperti berikut “NETCFSvcUtil.exe *.wsdl *.xsd”
12. Kembali ke project WMClient anda, kemudian buat tampilan seperti berikut ini.
13. Pilih menu Project –> Add Existing Item. Kemudian buka path “C:\Program Files\Microsoft.NET\SDK\CompactFramework\v3.5\bin”
Tambahkan file Language.cs dan CFClientBase.cs ke project tersebut.
13. Ketikkan di code berikut ini di Form1.cs
1: using System;
2: using System.Linq;
3: using System.Collections.Generic;
4: using System.ComponentModel;
5: using System.Data;
6: using System.Drawing;
7: using System.Text;
9: using System.Runtime.Serialization;
10: using System.ServiceModel;
8: using System.Windows.Forms;
11:
12:
13: namespace WMClient
14: {
15: public partial class Form1 : Form
16: {
17: public Form1()
18: {
19: InitializeComponent();
20: }
21:
22: private void button1_Click(object sender, EventArgs e)
23: {
24:
25: var l = new LanguageClient();
26: MessageBox.Show(l.ChooseLanguage(cboLanguage.SelectedItem.ToString()));
27:
28:
29:
30: }
31:
32: private void Form1_Load(object sender, EventArgs e)
33: {
34: var l = new LanguageClient();
35: string[] strLang = l.GetAllLanguages();
36:
37: cboLanguage.Items.Clear();
38: foreach (string str in strLang)
39: {
40: cboLanguage.Items.Add(str);
41: }
42: cboLanguage.SelectedIndex = 0;
43: l = null;
44:
45: }
46:
47:
48: }
49: }
14. Jalankan Service WCFLanguage tadi (Point I.6)
15 Kemudian jalankan pula Project SmartDevice WMClient melalui Klik Kanan –> Debug –> Start New Instance
16. Hasil akhir seperti berikut ini.
17. Source code dapat diunduh disini
18. Terima Kasih dan Semoga Bermanfaat :)
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.
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 .
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 .
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 |
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.
yang berwarna merah adalah marker untuk lokasi Airport di State tsb.
9. Semoga Bermanfaat & Terima Kasih :)
10. Source Code dapat didownload disini.
Beberapa hari terakhir ini saya mencoba beberapa control untuk menampilkan data spatial di SQL Server 2008. Untuk kesempatan yang pertama ini saya mencoba web mapping component ASPMap dari VDS Technologies (dapat didownload disini). Component ini didesain cukup powerfull untuk pengembangan aplikasi “data spatial”. Pada contoh yang pertama ini saya juga mencoba juga menggunakan Visual Studio 2010 :). Berikut ini langkah-langkahnya :
1. Download file .mdf untuk database DbUSA yang akan kita gunakan di contoh ini (download disini)
2. Extract file .rar tersebut kemudian attach ke database SQL Server 2008 anda. Maka database DbUSA akan siap digunakan.
3. Buka Visual Studio 2010 anda kemudian buat New Website, simpan dengan nama USAMap. Buat tampilannya seperti berikut.
4. Tambahkan Tab Baru di ToolBox anda dengan cara Add Tab, kemudian simpan dengan nama ASP Map. Pada Tab tersebut klik kanan –> choose items. Cari file AspMapNET.dll di Folder “C:\Program Files\VDS Technologies\AspMap 4.5\BIN” sampai tampil seperti berikut ini.
5. Tambahkan New Folder di website anda kemudian rename menjadi MAP. Tambahkan 3 file yang berada di folder “C:\Program Files\VDS Technologies\AspMap 4.5\DATA\MAPS\USA” seperti di gambar .
6. Tambahkan New Folder lagi di website anda kemudian rename menjadi Icon. Tambahkan 4 file .gif yang berada di folder “C:\Program Files\VDS Technologies\AspMap 4.5\DATA\TOOLS” seperti di gambar .
7. Drag n Drop 1 buah control Map kedalam web form Default.aspx
8. 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 |
9. Ketikkan code berikut ini (vb.net) di dalam Default.aspx.vb.
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports AspMap
Imports AspMap.Web
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
LoadLayerFromShp()
LoadLayerFromDB()
End Sub
Private Sub LoadLayerFromShp()
Dim layer As AspMap.Layer
Dim MapDir As String = MapPath("MAP/")
layer = Map1.AddLayer(MapDir & "states.shp")
End Sub
Private Sub LoadLayerFromDB()
Dim strKueri As String = "SELECT *, geom.STAsBinary() AS geomWKB FROM cities"
Dim cnString As String = "Data Source=pdi-app-laptop\mobile;Initial Catalog=DbUSA;Trusted_Connection=yes;"
Dim da As SqlDataAdapter = New SqlDataAdapter(strKueri, cnString)
Dim dt As DataTable = New DataTable()
da.Fill(dt)
da.Dispose()
Dim Layer As Layer = Map1.AddSpatialDataLayer(dt, "geomWKB")
Layer.LabelField = "CITY_NAME"
Layer.ShowLabels = True
Layer.LabelFont.Name = "Verdana"
Layer.LabelFont.Size = 10
Layer.LabelFont.Bold = True
Layer.LabelStyle = LabelStyle.Default
End Sub
End Class
Penjelasan :
- Sub LoadLayerFromShp() untuk menampilkan Layer dari file .shp untuk di contoh ini ialah file states.shp
- Sub LoadLayerFromDB() untuk menampilkan layer dari Database DbUSA Tabel cities. Dengan kueri select ………., nama.kolom.STAsBinary() from tabel maka data spatial tsb dapat ditampilkan. untuk menampilkan label dari cities tsb dapat anda gunakan perintah layer.showlabels = true, layer.labelfield = namakolom.
10. Jalankan di browser maka tampil map states.shp dan kemudian diatasnya ada layer cities yang diambil dari Database DbUSA. Gunakan zoom in dan zoom out ataupun pan untuk memilih kotanya.
yang berwarna merah adalah nama kota yang diambil dari database.
11. Semoga bermanfaat & Terima Kasih :)
12. Source dapat didownload disini.
Sebelum memulai penjelasan tentang “Converter” koordinat UTM ke Geographic ataupun sebaliknya maka ada baiknya kami berikan sedikit pengertian tentang Longitude, Latitude, UTM.
-
Longitude / Garis Bujur : Menggambarkan lokasi sebuah tempat di timur atau barat Bumi dari sebuah garis utara-selatan yang disebut Meridian Utama. Longitude diberikan berdasarkan pengukuran sudut yang berkisar dari 0° di Meridian Utama ke +180° arah timur dan -180° arah barat
-
Latitude / Garis Lintang : garis khayal yang digunakan untuk menentukan lokasi di Bumi terhadap garis khatulistiwa (utara atau selatan). Posisi lintang biasanya dinotasikan dengan simbol huruf Yunani f. Posisi lintang merupakan penghitungan sudut dari 0° di khatulistiwa sampai ke +90° di kutub utara dan -90° di kutub selatan. Dalam bahasa Indonesia lintang di sebelah utara khatulistiwa diberi nama Lintang Utara (LU), demikian pula lintang di sebelah selatan khatulistiwa diberi nama Lintang Selatan (LS)
Posisi Koordinat Geographic sendiri adalah gabungan antara koordinat Longitude, Latitude misalkan letak Kota Banjarmasin berada pada Posisi Longitude : 114.4xxxx dan Posisi Latitude : -3.2xxxx (dapat dilihat pada gambar)
Posisi Koordinat Universal Transverse Mercator (UTM) sendiri adalah metode menentukan posisi koordinat bumi dengan memetakannya secara 2 dimensi dimana dibagi-bagi menjadi kotak-kotak kecil (lokal). Saya contohkan disini misalkan Kota Banjarmasin berada pada Zona 50 S ( South / Selatan). (dapat dilihat pada gambar)
Seperti diketahui bersama bahwa SQL Server 2008 telah mendukung Data Spatial, ini berarti dapat menyimpan Data Spatial dari kedua contoh metode penentuan koordinat diatas (Geographic atau UTM). Tapi bagaimana jika yang disimpan di Database hanya salah satu metode koordinat diatas (Misal UTM), kemudian anda ingin mengkonversi ke Geographic ataupun sebaliknya. Ikutilah langkah-langkah berikut:
1. Download .Net Assembly yang kami buat disini. (Jika ingin lengkap dengan Source Code nya disini dengan Bahasa VB .Net)
2. Buka SQL Server 2008 anda, login dan Buat Database Baru bernama SPATIAL.
3. Buatlah Kueri baru untuk membuat Assembly dan Function di SQL Server 2008. Berikut ini Kuerinya. (Sesuaikan Path dari ClassMap.dll yang anda download diatas)
exec sp_configure 'clr enabled','1'
go
alter database SPATIAL set trustworthy on
go
CREATE ASSEMBLY [myConverter]
FROM 'D:\ClassMap.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS;
GO
CREATE FUNCTION [dbo].[ConvertToLonLat](@strInputan [nvarchar](max), @Zone [float], @Southemi [int])
RETURNS [nvarchar](max) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [myConverter].[ClassMap.clsMAP].[ConvertToLonLat]
GO
CREATE FUNCTION [dbo].ConvertToUTM(@strInputan [nvarchar](max))
RETURNS [nvarchar](max) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [myConverter].[ClassMap.clsMAP].ConvertToUTM
GO
CREATE FUNCTION [dbo].getZone(@strInputan [nvarchar](max))
RETURNS [nvarchar](5) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [myConverter].[ClassMap.clsMAP].getZone
GO
Hasil dari Pembuatan Assembly tersebut (Buka TreeView Assembly dan Function di SQL Server 2008) :
4. Buatlah Kueri baru untuk membuat Tabel ContohSpatial dan mengisi datanya seperti berikut.
create table ContohSpatial
(
NamaTempat varchar(50),
Lokasi geometry
)
Insert Into ContohSpatial
Values ('Gedung S. Suriansyah Banjarmasin',
geometry::STGeomFromText('POINT(232221.715513239 9635028.93805386)',4326))
Insert Into ContohSpatial
Values ('Gedung di BJM',
geometry::STGeomFromText('POLYGON ((234513.73966272507 9631784.7328673452,
234529.49938104203 9631773.91853934, 234534.20553610422 9631780.8087223079,
234518.43700368819 9631791.6325512715, 234513.73966272507 9631784.7328673452))',4326))
5. Buka Browser anda ketikkan halaman http://maps.google.com/ kemudian ketikkan Inputan disebelah Tombol Search Maps Koordinat yang sama seperti data yang kita masukkan dinomor 4 tadi yaitu posisi Gedung Sultan Suriansyah di Banjarmasin. Posisinya adalah 232221.715513239 9635028.93805386 (ketikkan kemudian tekan tombol Search Maps) maka hasilnya tidak dapat ditemukan karna posisinya masih dalam UTM seperti berikut ini.
6. Untuk mengkonversi posisi UTM tersebut ke Geographic maka gunakan function ConvertToLonLat(…., …. , ….) yang kita buat diatas tadi seperti berikut ini :
Select
Lokasi.STAsText() as LokasiUTM,
dbo.ConvertToLonLat(Lokasi.STAsText(),50,1) as LokasiLonLat
From ContohSpatial
Hasil Kolom Pertama adalah Posisi UTM dan Kolom Kedua adalah Posisi Geographic : Konversi ke Geographic ialah posisi : POINT (-3.29903799999901 114.590287000032)

Catatan : Function ConvertToLonLat memiliki 3 Parameter (Posisi, Zona, isSouth)Karna Banjarmasin berada di Zona 50 S maka pemanggilannya dengan dbo.ConvertToLonLat(Lokasi.STAsText(), 50 ,1) as LokasiLonLat
1 = Selatan , 0 = Utara
Kita coba masukkan posisi -3.29903799999901 114.590287000032 ke Google Maps maka posisi Gedung Sultan Suriansyah di Banjarmasin akan tampil sebagai berikut :
7. Untuk mengembalikan dari Geographic ke UTM gunakan function ConvertToUTM () dan Jika ingin mengetahui Zonanya gunakan function getZone () seperti berikut ini :
Select dbo.ConvertToUTM('POINT (-3.29903799999901 114.590287000032)') as LokasiUTM
Select dbo.getZone('POINT (-3.29903799999901 114.590287000032)') as Zona
Hasilnya :
Catatan :
- Function ConvertToUTM dan getZone memiliki 1 Parameter yaitu Text dari Posisi Longitude dan Latitude.
- Semua function diatas menggunakan model Ellipsoid WGS 84
8. Semoga Bermanfaat dan Terima Kasih :)
Pada hari sabtu tanggal 10 April 2010 ini, Anggota MUGI Banjarmasin yaitu Suherman MVP dan saya sendiri Ferry Kurniawan bekerjasama dengan STMIK Banjarbaru mengadakan seminar tentang Update Teknologi MICROSOFT. Acara ini bertujuan untuk memperkenalkan tentang teknologi Microsoft yaitu SQL Server 2008 dan Visual Studio .net. Acara ini dimulai dari pukul 09:00 Wita dan berakhir sekitar pukul 17:00 Wita. Yang menjadi suatu kehormatan bagi kami adalah para peserta dari seminar ini adalah para Dosen STMIK Banjarbaru. Materi yang disampaikan adalah :
-
Spatial Data menggunakan SQL Server 2008 oleh Suherman MVP
-
Perkenalan MUGI oleh Suherman MVP
-
Web Application menggunakan ASP .Net oleh saya sendiri Ferry Kurniawan (Menggantikan Mas Reza Faisal yang berhalangan hadir)
-
Windows Mobile Application oleh saya sendiri : Ferry Kurniawan.
Kami dari anggota MUGI Banjarmasin mengucapkan terima kasih sedalam-dalamnya kepada Dosen-dosen dan Seluruh Karyawan STMIK Banjarbaru yang telah menerima dan menjamu kami dengan sangat ramah. Tak lupa kami sampaikan terima kasih sebesar-besarnya kepada mas narenda dan mas ronald atas atensi, dukungan dan kiriman DVD nya :) , Terima kasih juga kepada rekan-rekan komunitas lainnya :)
Berikut ini dokumentasi dari acara tersebut :

Pengertian Data Spatial menurut wikipedia adalah data yang memiliki referensi ruang kebumian (georeference) dimana berbagai data atribut terletak dalam berbagai unit spasial. Sekarang ini data spasial menjadi media penting untuk perencanaan pembangunan dan pengelolaan sumber daya alam yang berkelanjutan pada cakupan wilayah continental, nasional, regional maupun lokal. Untuk itulah Microsoft SQL Server 2008 diluncurkan untuk mendukung data spatial dengan tambahan tipe data geography dan geometry – nya. Pada kesempatan kali ini kami akan memberikan sedikit contoh untuk menampilkan data spatial dengan menggunakan “Web Mapping Service” (Application Programming Interfaces) yang disediakan oleh Bing Maps ataupun Google Maps.
Pada kasus berikut ini kami akan mencontohkan menampilkan data spatial tentang “Lokasi Gempa yang ada di Negara USA dalam kurun waktu 7 hari terakhir” . Berikut ini langkah-langkahnya :
1. Buka Browser anda kemudian ketikkan url berikut ini : http://earthquake.usgs.gov/earthquakes/catalogs/eqs7day-M1.txt link tersebut memuat dataset berupa file text yang memberikan informasi gempa yang terjadi di USA dalam kurun waktu 7 hari terakhir.
2. Dari Browser anda pilih File –> Save As. Kemudian simpan di C:\gempa.txt
3. Buka SQL Server 2008 anda kemudian buat Database Baru dengan nama GEMPA.
4. Dari database Gempa kemudian Klik Kanan –> Task –> Import Data. Kemudian akan tampil Jendela Import and Export Wizard. Klik Next
5. Pilih Data Source ke Flat File Source. Klik tombol Browse kemudian cari File C:\gempa.txt tadi.
6. Setting Text Qualifier menjadi tanda petik dua (“).
7. Centang check box Column Names in the First Data Row.
8. Klik Option Advance Kemudian Setting masing-masing Column Properties seperti Berikut ini :
| Name | DataType | OutputColumnWidth |
| Src | string [DT_STR] | 2 |
| Eqid | string [DT_STR] | 8 |
| Version | string [DT_STR] | 1 |
| Datetime | string [DT_STR] | 50 |
| Lat | double-precision float [DT_R8] | |
| Lon | double-precision float [DT_R8] | |
| Magnitude | float [DT_R4] | |
| Depth | float [DT_R4] | |
| NST | two-byte signed integer [DT_I2]
| |
| Region | string [DT_STR] | 255 |
9. Setelah itu klik Next, Maka akan tampil jendela Choose Destination pilih Database Gempa yang tadi kita buat kemudian tekan Next. Pilih tabel tujuan nya dengan nama gempa. Klik Finish maka data file C:\gempa.txt tadi diekspor menjadi tabel gempa di database Gempa. Kemudian tampilkan data di tabel gempa tersebut maka akan tampil seperti berikut :
catatan :
- Data gempa yang anda coba kemungkinan akan berubah-ubah terus dikarnakan data yang diinformasikan hanya dalam kurun waktu 7 hari terakhir.
- Kolom Lat & Lon adalah posisi terjadinya gempa.
10. Buka SQL Server 2008 anda kemudian ketikkan kueri untuk menambahkan kolom location yang bertipe geography. Kemudian Update kolom location tersebut dengan kueri seperti berikut :
alter table gempa
add location geography
update gempa
set location = geography::Point(lat,lon,4326)
11. Buat
Stored Procedure untuk menampilkan informasi terjadinya gempa seperti berikut ini.
Create PROCEDURE [dbo].LokasiGempa
@latitude float,
@longitude float
AS
BEGIN
DECLARE @Point geography
SET @Point = geography::Point(@latitude, @longitude, 4326)
DECLARE @SearchArea geography
SET @SearchArea = @Point.BufferWithTolerance(50000,1000,0)
SELECT
location.STGeometryType() AS GeometryType,
location.STAsText() AS WKT,
'Lokasi Gempa : ' + eqid as Title,
'Wilayah : ' + REGION + '<br/>' +
'Tanggal :' + [Datetime] + '<br/>'
AS Description
FROM
gempa
WHERE
location.STIntersects(@SearchArea) = 1
UNION ALL SELECT
@SearchArea.STGeometryType() AS GeometryType,
@SearchArea.STAsText() AS WKT,
'Lokasi Gempa ' as Title,
'Lokasi gempa yang terdekat sejarak 50 km' AS Description
END
12. Buka Visual Studio anda kemudian buat New Website. Beri nama GempaUSA. (Disini kami menggunakan Visual Basic)
13. Tambahkan sebuah Generic Handler dengan cara Klik Kanan –> Add New Item –> Generric Handler. Simpan dengan nama Handler.ashx di handler ini tambahkan code untuk menampilkan data Lokasi Gempa.
<%@ WebHandler Language="VB" Class="Handler" %>
Imports System
Imports System.Web
Imports System.Data.SqlClient
Imports System.Configuration
Imports System.Text
Public Class Handler : Implements IHttpHandler
Public Sub ProcessRequest(ByVal context As HttpContext) _
Implements IHttpHandler.ProcessRequest
'Declare the global script variables
Dim Output As String = "" 'The JavaScript response sent back to the Map API
Dim MapType As String = context.Request.Params("maptype") 'API to use (VE/GM)
'Declare the variables used to create each feature
Dim WKT As String = "" 'The WKT representation provided by the stored proc
Dim VEGM As String = "" 'The VE/GMaps equivalent representation
Dim Shape As String = "" 'The unique name of each shape
Dim ShapeTitle As String = "" 'The title to display for each shape
Dim ShapeDescription As String = "" 'The description attached to the shape
Dim id As Integer = 0 'Shape counter
Dim LineStyle As String = "" 'The line style
Dim FillStyle As String = "" 'The fill style
'Set up a connection to SQL server
Dim myConn As SqlConnection = New SqlConnection("server=PDI-APP-LAPTOP\Mobile;" & _
"Trusted_Connection=yes;" & _
"database=GEMPA")
'Open the connection
myConn.Open()
'Define the stored procedure to execute
Dim myQuery As String = "dbo.LokasiGempa"
Dim cmd As New SqlCommand(myQuery, myConn)
cmd.CommandType = Data.CommandType.StoredProcedure
'Send the point the user clicked on to the stored proc
cmd.Parameters.Add("@Latitude", Data.SqlDbType.Float)
cmd.Parameters("@Latitude").Value = context.Request.Params("lat")
cmd.Parameters.Add("@Longitude", Data.SqlDbType.Float)
cmd.Parameters("@Longitude").Value = context.Request.Params("long")
'Create a reader for the result set
Dim rdr As SqlDataReader = cmd.ExecuteReader()
'Go through the results
While rdr.Read()
'Set a unique variable name for this shape
Shape = "shape" + id.ToString
'Set the title for the shape
ShapeTitle = rdr("Title").ToString
'Set the description for the shape
ShapeDescription = rdr("Description").ToString
'Set the appropriate styling options for each shape
'Set the color and opacity for fills
FillStyle = 'new VEColor(0, 0, 255, 0.5)'
'Set the color and opacity for lines
LineStyle = 'new VEColor(255, 255, 255, 0.7)"
'Convert from WKT to the relevant API constructor for the type of geometry
Select Case rdr("GeometryType").ToString
Case "Point"
'Get the WKT representation of the object
WKT = rdr("WKT").ToString
'Replace the double brackets that surround the coordinate point pair
WKT = Replace(WKT, "POINT (", "")
'Remove the closing double brackets
WKT = Replace(WKT, ")", "")
'Build the appropriate Pushpin/GMarker object from the coordinates
VEGM = ""
Dim Coords() As String = Split(Trim(WKT), " ")
VEGM = VEGM + "new VELatLong(" + Coords(1) + "," + Coords(0) + ")"
Output += "var " + Shape + _
"=new VEShape(VEShapeType.Pushpin, " + VEGM + ");"
'Display descriptive airport information when mouse hovers over point
'Set the shape title
Output += Shape + ".SetTitle('" + ShapeTitle + "');"
'Set the shape description
Output += Shape + ".SetDescription('" + ShapeDescription + "');"
Case "Polygon"
'Get the WKT representation of the object
WKT = rdr("WKT").ToString
'Replace the double brackets that surround the coordinate point pairs
WKT = Replace(WKT, "POLYGON ((", "")
'Remove the closing double brackets
WKT = Replace(WKT, "))", "")
'Create an array of each point in the Polygon
Dim PointArray() As String = Split(WKT, ",")
'Build the appropriate VE/GMaps Polygon object from the coordinates
VEGM = ""
Dim i As Integer = 0
While i <= PointArray.Length - 1
Dim Coords() As String = Split(Trim(PointArray(i)), " ")
VEGM = VEGM + "new VELatLong(" + Coords(1) + "," + Coords(0) + "),"
i = i + 1
End While
'Remove the last trailing comma
VEGM = Left(VEGM, VEGM.Length - 1)
'Add the constructor for the Polygon, and apply styling options
Output += "var " + Shape + _
"=new VEShape(VEShapeType.Polygon, [" + VEGM + "]);"
Output += Shape + ".SetLineColor(" + LineStyle + ");"
Output += Shape + ".SetFillColor(" + FillStyle + ");"
Output += Shape + ".HideIcon();"
End Select
'Add the shape to the map
Output += "map.AddShape(" + Shape + ");"
'Increment the shape counter
id = id + 1
End While
'Close the reader
rdr.Close()
'Close the connection
myConn.Close()
'Tell the browser to handle the response as JavaScript
context.Response.ContentType = "text/JavaScript"
'Do not cache the results, so always load new data
context.Response.CacheControl = "no-cache"
'Make the response expire immediately
context.Response.Expires = -1
'Return the constructed JavaScript
context.Response.Write(Output)
End Sub
ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
Get
Return False
End Get
End Property
End Class
13. Tambahkan sebuah JScript File dengan cara Klik Kanan –> Add New Item –> Jscript File. Simpan dengan nama JScript.js di dalam JScript ini terdapat function-function yang digunakan untuk mengakses API dari Bing Maps dan terhubung dengan Handler yang kita buat sebelumnya.
// Declare the global map object
var map = null;
// Set the Load callback
if (window.addEventListener) { window.addEventListener("load", getMap, false); }
else if (window.attachEvent) { window.attachEvent("onload", getMap); }
// Set the unLoad callback
if (window.addEventListener) { window.addEventListener("unload", disposeMap, false); }
else if (window.attachEvent) { window.attachEvent("onunload", disposeMap); }
// This function is called when the page has been loaded
function getMap() {
// Create a new map object in the divMap container
map = new VEMap('divMap');
// Configure the initial map view
map.LoadMap(new VELatLong(34, -118), 8, VEMapStyle.Aerial);
// Call the loadAirportData function when the user clicks the map
map.AttachEvent("onclick", loadAirportData);
}
// This function creates a cross-browser AJAX object
function GetXmlHttp() {
var xmlHttp;
try { xmlHttp = new XMLHttpRequest(); } // Firefox, Opera 8.0+, Safari
catch (e) {
try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); } // IE 6.0+
catch (e) {
try { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } // Older IE
catch (e) {
alert("Your browser does not support AJAX!");
return false;
}
}
}
return xmlHttp;
}
function loadAirportData(e) {
// Clear the map
map.DeleteAllShapes();
// Convert the cursor location to latitude / longitude
var pos = map.PixelToLatLong(new VEPixel(e.mapX, e.mapY));
//Get the appropriate XMLHTTP object for the browser
var xmlhttp = GetXmlHttp();
// If we have a valid XMLHTTP object
if (xmlhttp) {
// Define the url of the handler
var url = "./Handler.ashx";
// Build the parameters that must be passed
var params = "lat=" + pos.Latitude + "&long=" + pos.Longitude + "&maptype=VE";
// Open the XmlHTTP request
xmlhttp.open("GET", url + '?' + params, true);
// Fire this when the readyState of the request changes
xmlhttp.onreadystatechange = function() {
// readystate 4 indicates that the request is complete
if (xmlhttp.readyState == 4) {
// Read in the JavaScript response from the handler
var result = xmlhttp.responseText;
// Update the status message
window.status = 'Loading Data...';
try {
// Execute the dynamically created JavaScript
eval(result);
// Update the status message
window.status = 'Data Loaded!';
}
catch (e) {
// If the response cannot be evaluated
window.status = 'Data could not be loaded.';
}
}
}
// Send the XMLHttp Request
xmlhttp.send(null);
}
}
// This function is called when the page is unloaded
function disposeMap() {
// Release all resources assigned to the map
map.Dispose();
// Unset the map variable
map = null;
}
14. Buka file Default.aspx kemudian klik source nya kemudian tambahkan code seperti berikut ini.
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Data Spatial Lokasi Gempa di USA</title>
<script src="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.2" type="text/JavaScript"></script>
<script src="JScript.js" type="text/JavaScript"></script>
</head>
<body>
<div id="divMap" style='position:relative; width:800px; height:600px;"></div>
</body>
</html>
15. Jalankan Defaut.aspx tersebut (harus terhubung dengan internet). Kemudian akan tampil Bing Maps yang menampilkan peta USA. Klik di peta tersebut sampai ada tanda merah (lokasi gempa) , kemudian dekati mouse maka akan tampil Informasinya.

16. Dowload Source Code –nya disini.
17. Selamat Mencoba , Semoga Bermanfaat dan Terima Kasih :)
Windows Phone 7 telah diluncurkan oleh Microsoft beberapa waktu yang lalu, untuk pengembangan aplikasi di Windows Phone 7 ini anda diberikan dua pilihan framework yaitu Silverlight atau XNA Framework. Timbul pertanyaan dari saya untuk teknik penyimpanan local database di Windows Phone 7 ini bagaimana caranya? Setelah beberapa saat mencari referensi akhirnya ketemu juga solusi alternatifnya yaitu Siaqodb. Apa itu Siaqodb dan bagaimana cara mengembangkannya anda dapat menuju ke TKP berikut ini. Berikut ini gambar contoh Siaqodb di Windows Phone 7. Bagi ada solusi lainnya mohon kiranya di posting di Blog, Terima Kasih & Semoga Bermanfaat :)

Setelah minggu lalu Pak Suherman Ketua MUGI Banjarmasin bertandang ke Universitas Lambung Mangkurat untuk berbagi pengalaman tentang SQL Server 2008 disini, maka pada kesempatan hari ini tanggal 20 Maret 2010 saya ikut pula berbagi pengalaman di Kampus STMIK Banjarbaru. Materi yang saya bawakan bertajuk “Membangun Web Dinamis Menggunakan ASP .Net” dengan peserta kurang lebih 40 mahasiswa dimana acara ini berlangsung selama 2,5 jam.Terima Kasih ktak lupa kami ucapkan kepada seluruh jajaran dosen dan petinggi STMIK Banjarbaru yang telah memberikan waktu dan tempatnya.
Untuk selanjutnya minggu depan tepatnya tanggal 27 Maret di tempat yang sama, InsyaAllah akan diadakan lagi kuliah umum dengan judul “Membangun Aplikasi Berbasis Windows Mobile menggunakan Visual Studio .Net”. Untuk selanjutnya acara kuliah umum ini direncanakan nantinya akan dipresentasikan di hadapan para Dosen dan akan mengundang pembicara lainnya seperti Pak Reza Faisal dan Pak Suherman dari MUGI Banjarmasin. Mohon doa dan dukungan rekan-rekan komunitas semoga acara yang direncanakan nantinya dapat segera terwujud dan berjalan dengan lancar :) Amin. Berikut ini dokumentasi dari acara Kuliah Umum “Membangun Web Dinamis Menggunakan ASP .Net” :


Sejak Windows Mobile 5 diluncurkan, .Net Compact Framework melucurkan pula sebuah API (Application Programming Interface) yang digunakan untuk “Meng-Query” Setting dari Device beserta event-event di dalamnya ketika settingan tersebut ikut berubah. API tersebut dikenal dengan nama State & Notification Broker yang sangat bermanfaat untuk mengakses properties dari Sistem. Salah satunya penggunaan API tersebut adalah untuk mengetahui Level Power Baterai dari Alat (Low, High, Medium dll). Berikut ini contoh penggunaannya :
1. Buat project SmartDevice baru di Visual Studio 2008. (disini kami menggunakan VB .Net)
2. Tambahkan 3 buah control berikut ke dalam form.
-
Label , Name = Label1, Text = Battery Level
-
Progress Bar, Name = pbLevel
-
Label, Name = lblStatus, Text = Status :
3. Add NameSpace Microsoft.WindowsMobile & Microsoft.WindowsMobile.Status ke dalam project anda.
4. Buka form1.vb kemudian tambahkan code dibawah ini. Pada code dibawah ini kita membuat sebuah SystemState yang bernama BatteryPower yang digunakan untuk menangkap Power Baterai dari Device, kemudian tambahkan sebuah Handler yang digunakan untuk menangkap perubahan Power Baterai dari Device dan kemudian ditampilkan di Progress Bar pbLevel melalui Prosedur CekBatteryPower.
Imports Microsoft.WindowsMobile
Imports Microsoft.WindowsMobile.Status
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim BatteryPower As SystemState
BatteryPower = New SystemState(SystemProperty.PowerBatteryStrength)
AddHandler BatteryPower.Changed, AddressOf BatteryPower_Changed
CekBatteryPower(SystemState.PowerBatteryStrength)
End Sub
Private Sub CekBatteryPower(ByVal levelBatt As BatteryLevel)
Select Case levelBatt
Case BatteryLevel.VeryHigh
lblStatus.Text = "Status : Very High"
pbLevel.Value = 100
Case BatteryLevel.High
lblStatus.Text = "Status : High"
pbLevel.Value = 75
Case BatteryLevel.Medium
lblStatus.Text = "Status : Medium"
pbLevel.Value = 50
Case BatteryLevel.Low
lblStatus.Text = "Status : Low"
pbLevel.Value = 25
Case BatteryLevel.VeryLow
lblStatus.Text = "Status : Very Low"
pbLevel.Value = 0
End Select
End Sub
Private Sub BatteryPower_Changed(ByVal sender As Object, ByVal args As ChangeEventArgs)
CekBatteryPower(DirectCast(args.NewValue, BatteryLevel))
End Sub
End Class
5. Jalankan project tersebut maka akan tampil PowerBaterai dari Device tersebut.
6. Selamat Mencoba, Semoga Bermanfaat & Terima Kasih :)
Terkadang orang lebih mudah menyimak gambar atau grafik daripada tulisan / teks-teks yang panjang ketika anda menampilkan data. Pada aplikasi windows mobile untuk menampilkan Grafik perlu pemahaman dan pengertian yang luas tentang graphical output di .Net Compact Framework. Sekarang anda dapat menggunakan control dari Resco untuk menampilkan grafik di Aplikasi Windows Mobile. Untuk mendownloadnya anda dapat mengunjungi disini. Berikut langkah-langkah menggunakan control CompactChart dari Resco untuk menampilkan Grafik.
1. Buat Smart Device Project di VS 2008. Pilih Bahasa sesuai yang anda kuasai, (disini kami menggunakan Visual Basic)
2. Tambahkan dua buah control ke dalam form1.vb, yang pertama control Label dengan Text = Grafik Penjualan, kemudian Control CompactChart seperti berikut
3. Klik Control CompactCompactChart1 kemudian setting ChartType = Bar .
4. Klik properti Series di CompactChar1 kemudian tambahkan sebuah Collection dengan Name=Penjualan, DisplayType=Primary, ColumnName=Penjualan seperti berikut.
5. Buka form1.vb kemudian tambahkan code dibawah ini untuk membuat DataTable baru kemudian ditampilkan di CompactChart1 tersebut.
Imports System.Data
Public Class Form1
Private Function Datanya() As DataTable
Dim newDT As New DataTable
newDT.Columns.Add("Kota", GetType(String))
newDT.Columns.Add("Penjualan", GetType(Double))
newDT.Rows.Add("Sby", 20)
newDT.Rows.Add("Jkt", 10)
newDT.Rows.Add("Bjm", 60)
newDT.Rows.Add("DIY", 27)
newDT.Rows.Add("Mdn", 10)
Return newDT
End Function
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim dt As DataTable
dt = Datanya()
CompactChart1.DataSource = dt
dt = Nothing
End Sub
End Class
6. Jalankan project tersebut maka akan tampil Grafik seperti berikut ini.
7. Selamat Mencoba & Semoga Bermanfaat, Terima Kasih :)
Windows API (Application Programming Interface) adalah sekumpulan antarmuka pemrograman aplikasi yang dibuat oleh Microsoft dalam inti Sistem Operasi buatannya. Semua program Windows, kecuali program konsol, harus berinteraksi dengan Windows API tanpa melihat dengan bahasa apa ia dibuat. Bagaimana dengan API yang ada di Windows Mobile? untuk itulah di tulisan kali ini kami akan memberika contoh untuk mengakses API di Windows Mobile. Contoh di kasus ini kami menggunakan API untuk :
-
Sleep (mempause sejenak waktu)
-
Shutdown Device
-
Mematikan Taskbar di layar Windows Mobile beserta dengan Always On Top-nya
Berikut ini langkah-langkahnya :
1. Buat project SmartDevice baru di Visual Studio 2008. (disini kami menggunakan VB .Net)
2. Tambahkan 3 buah control berikut ke dalam form.
-
Label Name=Label1 , Text = Form ini Always On Top
-
Button Name=btnSleep, Text = Sleep
-
Button Name=btnShutdown, Text= Shutdown
3. Tambahkan sebuah Module melalui klik kanan –> Add –> Module. Beri nama modul tersebut dengan mdlMain.vb , module ini berisi code deklarasi prosedur / function-function yang mengakses Windows Mobile API.
Module mdlMain
'Always On Top
Public Declare Function FindWindow Lib "coredll.dll" (ByVal className As String, ByVal windowName As String) As Integer
Public Declare Function ShowWindow Lib "coredll.dll" (ByVal hWnd As Integer, ByVal nCmdShow As Integer) As Integer
Public Declare Function EnableWindow Lib "coredll.dll" (ByVal hWnd As Integer, ByVal bEnable As Integer) As Integer
'Shutdown Device
Public Declare Sub GwesPowerOffSystem Lib "Coredll" ()
'Sleep
Public Declare Sub Sleep Lib "Coredll" (ByVal dwMilliseconds As Long)
Public Sub setTaskBar(ByVal frm As Form, ByVal Tampil As Boolean)
Dim hWnd As Integer
hWnd = FindWindow("HHTaskBar".ToCharArray(), "")
If Tampil = False Then
EnableWindow(hWnd, 0)
Else
EnableWindow(hWnd, 1)
End If
frm.MaximizeBox = Tampil
frm.MinimizeBox = Tampil
frm.ControlBox = Tampil
frm.FormBorderStyle = FormBorderStyle.None
frm.WindowState = FormWindowState.Maximized
End Sub
End Module
4. Buka form1, kemudian ketikkan perintah berikut ini.
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
setTaskBar(Me, False) 'Always On Top & Matikan Taskbar
End Sub
Private Sub btnShutdown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnShutdown.Click
If MsgBox("Shutdown", MsgBoxStyle.YesNo + MsgBoxStyle.Question, "Win Mobile API") = MsgBoxResult.Yes Then
Application.Exit() 'Exit App
setTaskBar(Me, True) 'Taskbar tampilkan lagi
GwesPowerOffSystem() 'Shutdown
End If
End Sub
Private Sub btnSleep_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSleep.Click
Sleep(5000)
MsgBox("Pesan ini dikerjakan setelah 5 detik", MsgBoxStyle.Information, "Win Mobile API")
End Sub
End Class
5. Jalankan project tersebut, dapat anda lihat di emulator / device bahwa form1 tersebut ditampilkan secara Maximized dan Taskbar di layar tidak ditampilkan karna diset enable-nya menjadi false.

6. Tekan tombol Sleep, maka akan tampil pesan yang akan dijalankan setelah 5 detik anda menekan tombol Sleep tersebut.
7. Tekan tombol Shutdown untuk menshutdown device
8. Selamat mencoba & semoga bermanfaat, terima kasih :)
Bagi kebanyakan developer desktop ataupun aplikasi windows mobile, grid kontrol digunakan untuk menampilkan data di form. Terkadang grid kontrol yang disediakan oleh Visual Studio .net tersebut memiliki keterbatasan, atas dasar itulah suatu Perusahaan yang bernama Resco membuat beberapa kontrol yang dapat digunakan di Aplikasi Windows Mobile. Salah satu kontrolnya ialah SmartGrid yang mempunyai fitur lebih daripada grid kontrol biasanya, untuk mendownloadnya anda dapat menuju ke sini dan untuk tutorialnya dapat anda lihat disini.
Untuk permulaan pembahasan kontrol-kontrol yang disediakan oleh Resco kami akan mengulas sedikit kontrol SmartGrid yang dapat menampilkan Gambar, CheckBox dlll. Berikut ini langkahnya :
1. Buat Smart Device Project di VS 2008. Pilih Bahasa sesuai yang anda kuasai, (disini kami menggunakan Visual Basic)
2. Tambahkan sebuah Database SQL Mobile dgn cara Klik Kanan –> Add New Item –> Database File. Simpan dgn nama DB.sdf
3. Buat Tabel Baru di Database tersebut (DB.sdf) dgn nama “Penjualan” yang mempunyai kolom Kode (nvarchar(10)) , Nama (nvarchar(50)) dan Jumlah (Numeric).
4. Isi beberapa data dengan cara klik kanan –> Show Table Data kemudian diketikkan datanya.
5. Tambahkan Kontrol SmartGrid, ImageList dan Button ke dalam Form1.vb
6. Klik Kontrol ImageList kemudian Tambahkan Collection Images-nya di Jendela Properties, disini kami tambahkan 2 buah gambar (Smile.png dan Sad.png)
7. Klik kontrol SmartGrid kemudian Tambahkan Collection Column di Jendela Properties, tambahkan 3 buah kolom (Kode, Nama, Jumlah) Untuk kolom Kode & Nama anda cukup mensetting Name, Data Member dan Header Text nya saja. Untuk kolom Jumlah disamping properti diatas setting juga CustomizeCells =True dan ImageList = ImageList1.
8. Klik Kontrol SmartGrid kembali kemudian Tambahkan Collection Styles di Jendela Properties, tambahkan dua buah Styles yang pertama Green dan yang kedua Red. Yang anda setting ialah properti BackColor dan ImagePosition-nya.
9. Tambahkan code dibawah ini, code ini untuk menampilkan data ke dalam SmartGrid dimana pada kolom jumlah nya dilakukan pengecekan jika nilainya > 100 maka warnanya akan hijau dan ada gambar Smile.png di samping kirinya, dan jika tidak warnanya merah dan ada gambar Sad.png.
Imports System.Data
Public Class Form1
Private Sub btnTampil_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTampil.Click
SmartGrid1.DbConnector.ConnectionString = "Data Source = \Program Files\SmartGrid\DB.sdf"
SmartGrid1.DbConnector.CommandText = "SELECT * FROM PENJUALAN"
SmartGrid1.LoadData(False)
End Sub
Private Sub SmartGrid1_CustomizeCell(ByVal sender As Object, ByVal e As Resco.Controls.SmartGrid.CustomizeCellEventArgs) Handles SmartGrid1.CustomizeCell
If e.Cell.Header = False Then
If e.Cell.Column.DataMember = "Jumlah" Then
e.Cell.Text = FormatNumber(e.Cell.Data)
If e.Cell.Data > 100 Then
e.Cell.Style = Me.SmartGrid1.Styles("Green")
e.Cell.Image = Me.ImageList1.Images(0)
Else
e.Cell.Style = Me.SmartGrid1.Styles("Red")
e.Cell.Image = Me.ImageList1.Images(1)
End If
End If
End If
End Sub
End Class
10. Jalankan Project tersebut kemudian tekan tombol Tampil. Maka akan tampil grid seperti berikut ini.
11. Selamat mencoba & Semoga Bermanfaat. Terima Kasih :)
More Posts
Next page »