Monthly Archives: Agustus 2009

Seleksi Obyek Dalam Radius Tertentu di MapXtreme

Di aplikasi  MapXtreme kita bisa melakukan seleksi obyek dalam radius tertentu dari titik tertentu. Biasanya seleksi semacam ini diterapkan untuk mengetahui jumlah kompetitor, atau jumlah POI disekitar titik pusat. Misal berapa jumlah dealer motor yang ada dalam radius 2 km dari dealer motor A.

Read the rest of this entry

Membuat Anti Spam di ASP.NET

Internet memberikan kebebasan informasi, kemudahan akses dan mempengaruhi kehidupan manusia. Bersamaan dengan kebebasan aliran informasi muncullah berbagai SPAM, blog SPAM, newsgroups SPAM, email SPAM dan lainnya. Untuk menghadang laju spam ini diciptakanlah CAPTCHA. CAPTCHA merupakan program yang digunakan untuk memastikan bahwa jawaban diberikan oleh manusia bukan dari program komputer.

Tehnik captcha atau anti spam yang umum digunakan adalah menggunakan gambar. Dengan gambar maka spam tidak bisa membaca karakter yang ada pada gambar. Program berikut adalah contoh membuat anti spam menggunakan gambar. Program ini originalnya menggunakan bahasa C# dan dimuat di Code Project , dan aku modifikasi menjadi VB.NET
Secara garis besar, alur programnya adalah sebagai berikut.

  • Buat string acak dan simpan dalam session.
  • Ubah string acak ini dalam bentuk gambar.
  • Tampilkan gambar
  • Cek input yang dilakukan user.

Membuat String acak

Private Function GenerateRandomCode() As String
   Dim builder As New StringBuilder()
   Dim random As New Random()
   Dim ch As Char
   Dim i As Integer
   Dim kode As Char
   For i = 0 To 5
      kode = Convert.ToChar(Convert.ToInt32(3 * random.NextDouble() + 48))
      Select Case kode
         Case "0"
            ch = Convert.ToChar(Convert.ToInt32((25 * random.NextDouble() + 97)))
         Case "1"
            ch = Convert.ToChar(Convert.ToInt32((25 * random.NextDouble() + 65)))
         Case Else
            ch = Convert.ToChar(Convert.ToInt32((9 * random.NextDouble() + 48)))
      End Select
   builder.Append(ch)
   Next
   Return builder.ToString()
End Function

Mengubah String Menjadi Gambar

Private Sub GenerateImage()
   Dim bitmap As Bitmap = New Bitmap(Me.width, Me.height, _
   PixelFormat.Format32bppPArgb)

   'buat bingkai
   Dim g As Graphics = Graphics.FromImage(bitmap)
   g.SmoothingMode = SmoothingMode.AntiAlias
   Dim r As Rectangle = New Rectangle(0, 0, Me.width, Me.height)

   'buat background
   Dim hb As HatchBrush = New HatchBrush(HatchStyle.SmallConfetti, _
     Color.LightGray, Color.White)
   g.FillRectangle(hb, r)

   'set teks font
   Dim size As SizeF
   Dim ukuranFont As Single = r.Height + 1
   Dim nmFont As Font

   'atur ukuran font agar tepat sesuai dg box image
   Do
      ukuranFont -= 1
      nmFont = New Font(Me.fontName, ukuranFont, FontStyle.Bold)
      size = g.MeasureString(Me.text, nmFont)
   Loop While size.Width > r.Width

   'format teks
   Dim format As StringFormat = New StringFormat()
   format.Alignment = StringAlignment.Center
   format.LineAlignment = StringAlignment.Center

   Dim path As GraphicsPath = New GraphicsPath()
   path.AddString(Me.text, nmFont.FontFamily, CType(nmFont.Style, Integer), _
     nmFont.Size, r, format)
   Dim v As Single = 4.0F
   Dim poins() As PointF = {New PointF(Me.acak.Next(r.Width) / v, Me.acak.Next(r.Height) / v), _
     New PointF(r.Width - Me.acak.Next(r.Width) / v, Me.acak.Next(r.Height) / v), _
     New PointF(Me.acak.Next(r.Width) / v, r.Height - Me.acak.Next(r.Height) / v), _
     New PointF(r.Width - Me.acak.Next(r.Width) / v, r.Height - Me.acak.Next(r.Height) / v)}
   Dim matrik As Matrix = New Matrix()
   matrik.Translate(0, 0)
   path.Warp(poins, r, matrik, WarpMode.Perspective, 0)

   'gambar teks
   hb = New HatchBrush(HatchStyle.ZigZag, Color.LightGray, Color.Blue)
   g.FillPath(hb, path)

   'bintik2 acak
   Dim m As Integer = Math.Max(r.Width, r.Height)
   For i As Integer = 0 To (r.Width * r.Height / 30.0F)
      Dim x As Integer = Me.acak.Next(r.Width)
      Dim y As Integer = Me.acak.Next(r.Height)
      Dim w As Integer = Me.acak.Next(m / 50)
      Dim h As Integer = Me.acak.Next(m / 50)
      g.FillEllipse(hb, x, y, w, h)
   Next

   'bersih-bersih
   nmFont.Dispose()
   hb.Dispose()
   g.Dispose()
   Me.image = bitmap
End Sub

Menampilkan Gambar.

Buat 2 file aspx. Gambar yang terbentuk ditampilkan di file aspx kedua dengan menyisipkan kode berikut di method Page Load

Dim gbAs As AntiSpam = New AntiSpam(Session("KODESPAM").ToString(), 200, 50)
Me.Response.Clear()
Me.Response.ContentType = "image/jpeg"
gbAs.image.Save(Me.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg)
gbAs.Dispose()

Dari file aspx pertama, panggil file aspx kedua di ImageWebControl

Image1.ImageUrl = "default2.aspx"

Untuk contoh kode vb.NET selengkapnya dapat di download disini.
Kode original menggunakan C# dapat di download disini

Happy Coding…

Mencari Angka Dalam String

Berikut adalah fungsi untuk mendapatkan angka yang terdapat dalam suatu string. Diasumsikan bahwa angka bisa lebih dari satu dan posisi angka random dalam string.

Contoh : asa23kdj212ndn1nckw —> maka akan dihasilkan 3 angka yaitu 23, 212 dan 1.

Angka yang di temukan akan disimpan dalam variabel array bertipe integer.
Read the rest of this entry

Menambahkan Google Map ke Aplikasi Web ASP.NET

Peta Google sekarang ini seperti sudah menjadi acuan dalam pembuatan aplikasi GIS. Dalam setiap kesempatan, sering ditanyakan, apakah aplikasi yang dibangun bisa terintegrasi dengan peta Google? Apakah tampilan petanya seperti tampilan peta Google? Bisakah memplot data yang ada di aplikasi kita ke peta Google?.

Menambahkan peta Google ke aplikasi web GIS sebenarnya bisa dikatakan ‘gampang-gampang susah’. Susahnya (baca: merepotkan) adalah penggunaan Google Map API. API ini adalah kode yang diberikan Google sesuai dengan domain yang kita daftarkan. Biasanya domain yang kita dafarkan adalah domain server dimana aplikasi akan di publish. Sedangkan pada masa pengembangan (pembuatan) aplikasi sering kita menggunakan komputer lokal atau laptop bukan di server. Akibatnya ada kendala pada saat ingin mencoba kode yang kita buat. Peta Google tidak akan muncul jika kode API tidak sesuai . Jadi harus bolak-balik ke server.

Untuk menambahkan peta Google bisa menggunakan beberapa cara, salah satunya adalah kode javascript yang cukup panjang. Yang menjadi masalah ketika menggunakan kode javascript adalah jika ingin menggabungkan data dengan kode javascript. Seperti diketahui aplikasi ASP.NET berjalan di server sedangkan javascript berjalan di client. Salah satu cara mengatasi hal ini adalah menuliskan kode javascript di
code behind yang berjalan di server.

Contoh berikut adalah potongan program untuk menambahkan peta Google ke aplikasi ASP.NET menggunakan javascript yang ditulis di codebehind:

Dim builder As New StringBuilder()
builder.Append("<script type='text/javascript'>" & vbCr)
builder.Append("//<![CDATA[" & vbCr)
builder.Append(vbCr)
builder.Append("function load() {" & vbCr)
builder.Append("if (GBrowserIsCompatible()) {" & vbCr)
builder.Append("var map = new GMap2(document.getElementById('map'));" & vbCr)
builder.Append("map.addControl(new GLargeMapControl());" & vbCr)
builder.Append("map.addControl(new GMapTypeControl());" & vbCr)
builder.Append("map.addControl(new GScaleControl());" & vbCr)
builder.Append("map.setCenter(new GLatLng(" & yy & "," & xx & "), 13, G_NORMAL_MAP);" & vbCr)
builder.Append(vbCr)
builder.Append("var point = new GLatLng(" & yy & "," & xx & ");" & vbCr)
builder.Append("var marker = createMarker(point,'gajah 22');" & vbCr)
builder.Append("map.addOverlay(marker);" & vbCr)
builder.Append("}" & vbCr)
builder.Append("}" & vbCr)
builder.Append(vbCr)
'Buat tanda di peta Google
builder.Append("function createMarker(point,number)" & vbCr)
builder.Append("{" & vbCr)
builder.Append("var marker = new GMarker(point);" & vbCr)
builder.Append("var html = number;" & vbCr)
builder.Append("GEvent.addListener(marker, 'click', function() {marker.openInfoWindowHtml(html);});" & vbCr)
builder.Append("return marker;" & vbCr)
builder.Append("};" & vbCr)
builder.Append(vbCr)
builder.Append("//]]>" & vbCr & "</script>" & vbCr)
builder.Append(vbCr)

yy dan xx di baris pertengahan adalah variabel untuk memasukkan nilai koordinat latitude dan longitude yang akan di plotkan ke peta Google.

Cara kedua untuk menambahkan peta Google ke aplikasi web ASP.NET adalah menggunakan tool atau dll dari pihak ketiga. Cara ini lebih mudah daripada cara pertama.

  • Download SubGurim wrapper dll disini http://en.googlemaps.subgurim.net/descargar.aspx
  • Unzip dan masukkan file Gmaps.dll ke folder Bin di aplikasi ASP.NET
  • Tambahkan di toolbox, pilih menu Tools – Choose Toolbox Items. Browse ke file Gmaps.dll yang ada di folder Bin. Di tool box akan tampak seperti ini

Google map toolbar

  • Buat web page baru dan drag GMap dari toolbox ke page, Gmap control muncul di page.
  • Dapatkan Google Map API disini, http://www.google.com/apis/maps/ .
  • Buka web config, masukkan key API di kode berikut
<appSettings>
 <add key= "googlemaps.subgurim.net" value= " CopyKodeAPIdiSini " />
</appSettings>
  • Tambahkan contoh kode berikut di event Page Load
Dim alamat As String
Dim keyAPI As String = ConfigurationManager.AppSettings("googlemaps.subgurim.net")
Dim GeoCode As Subgurim.Controles.GeoCode

alamat = "Jalan Ciputat Raya. Jakarta. Indonesia"
GeoCode = Subgurim.Controles.GMap.geoCodeRequest(alamat, keyAPI)
Dim gLatLng As New Subgurim.Controles.GLatLng(GeoCode.Placemark.coordinates.lat, _
GeoCode.Placemark.coordinates.lng)

GMap1.setCenter(gLatLng, 16, Subgurim.Controles.GMapType.GTypes.Normal)
Dim oMarker As New Subgurim.Controles.GMarker(gLatLng)
GMap1.addGMarker(oMarker)
  • Tekan F5 untuk menjalankan aplikasinya. Hasilnya seperti ini

Hasil

Jika ingin menampilkan lokasi tertentu berdasarkan koordinat lat dan long, seperti contoh javascript diatas, ganti variabel gLatLng menjadi seperti ini

Dim gLatLng As New Subgurim.Controles.GLatLng(-6.93395,107.620857)

Happy Coding…
Jika ada pertanyaan atau yang lainnya silahkan tulis di komentar.

Contoh kode cara kedua selengkapnya dapat di download di sini