Tipp 0210 Orte mit der Google Maps API anzeigen
Autor/Einsender:
Datum:
  Michael Werner
20.01.2012
Entwicklungsumgebung:   VB.Net 2008
Framework:   2.0
Mit der geographischen Breite (Latitude) und Länge (Longitude) kann ein Ort auf der Erde genau lokalisiert werden. Die Erde wird dabei in 180 Breiten- und 360 Längengrade aufgeteilt.
Mit der Google Maps API kann der Längen- und Breitengrad zu einer belieben Ort abgefragt werden. Übergeben werden kann ein Ortsname mit oder ohne Straßenangabe beziehungsweise einem markantem Namen (z.B. Brandenburger Tor).
Für den Aufruf der Methode wird ein Google Maps API Key benötigt. Dieser kann hier kostenlos beantragt werden: 
http://code.google.com/apis/maps/signup.html
Zum Funktionieren des Tipp-Projektes müssen Sie also Ihren persönlichen Key bei Google besorgen und im Projekt eingeben.
Für die Kartendarstellung wird eine HTML-Code erzeugt, indem mit JavaScript die Koordinaten und ein Zoomfaktor den Kartenabschnitt bestimmen. Im WebBrowserControl wird dann die generierte HTML-Datei aufgerufen und die Map angezeigt. Für Mehrfachabfragen hintereinander muss eine Pause von ca. 100ms zwischen den Abfragen eingehalten werden.
 
Private Sub btnGo_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles btnGo.Click
  Dim myLocation As String = txtLocation.Text
  Dim LatLongData As New LatLong
  LatLongData = GeoData.GetCoordinates(myLocation, myKey)
  lblLat.Text = LatLongData.Latitude
  lblLng.Text = LatLongData.Longitude

  If CheckBox1.Checked Then
    Clipboard.SetText(lblLat.Text & ", " & lblLng.Text)
  End If

  WriteGeoHTMLFile("myGeoHTML.html")
End Sub

Private Sub WriteGeoHTMLFile(ByVal sFileHtml As String)
  Dim stream As IO.StreamWriter
  stream = New IO.StreamWriter(sFileHtml)
   'Html-Struktur erzeugen
  With stream
    .WriteLine("<!DOCTYPE html PUBLIC '-//W3C//DTD"_
     "XHTML 1.0 Strict//EN' ")
    .WriteLine("_
     "'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'> ")
    .WriteLine("<html xmlns='http://www.w3.org/1999/xhtml'  ")
    .WriteLine("xmlns:v='urn:schemas-microsoft-com:vml'> ")
    .WriteLine("<head>  ")
  .WriteLine("<meta http-equiv='content-type' content='text/html;"_
     "charset=utf-8'/> ")
    .WriteLine("<title>Zugriff auf Google Maps API</title> ")
    .WriteLine("<script src='http://maps.google.com/maps?file="_
     "api&amp;v=2&amp;key=ABQIAAAAwMzF90OPDYCo3ejYxew4zhQ4n4xc"_
     "LoLVQXW0-1NaLBfn657FaBQ8WA-rssNtB7dwdTd80OlCLmZqsw' ")
    .WriteLine("type='text/javascript'></script> ")

    .WriteLine("<script type='text/javascript'>  ")

    .WriteLine("var map; ")
    .WriteLine("var zoomFactor = " & nudZoomFactor.Value)
    .WriteLine("var lat = " & lblLat.Text)
    .WriteLine("var lng =  " & lblLng.Text)

    .WriteLine("function initialize() {  ")
    .WriteLine("  if (GBrowserIsCompatible()) {  ")
    .WriteLine("    "_
     "map = new GMap2(document.getElementById('map_canvas'));  ")
    .WriteLine("    "_
     "map.setCenter(new GLatLng(lat, lng), zoomFactor);  ")
    .WriteLine("    map.setUIToDefault(); ")
    .WriteLine("   } ")
    .WriteLine("}  ")
    .WriteLine("</script> ")
    .WriteLine("</head> ")

    .WriteLine("<body onload='initialize()' "_
     "onunload='GUnload()'> ")
   .WriteLine("<div id='map_canvas' style='width: 640px; height: "_
     "480px; float:left; border: 1px solid black;'></div> ")
    .WriteLine("</div> ")
    .WriteLine("<br clear='all'/> ")
    .WriteLine("<br/> ")

    .WriteLine("</body> ")
    .WriteLine("</html> ")
  End With
  stream.Close()
   'Im Browser anzeigen
  WebBrowser1.Navigate(Application.StartupPath & "/myGeoHTML.html")
End Sub


'Die Klasse GeoData
'ermittelt Latitude und Longitude zu einem Ortsnamen:

Imports System.Net
Imports System.Text
Imports System.IO

Public Class GeoData

  ''' <summary>
  ''' Koordinaten eines Ortes abrufen
  ''' </summary>
  ''' <param name="location">Ortsname eventuell mit Straße, "_
       "oder PLZ</param>
  ''' <param name="googleKey">Ihr persönlicher Google-Key für "_
       "die  API</param>
  ''' <returns>Breiten- und Längengrad</returns>
  ''' <remarks></remarks>

  Public Shared Function GetCoordinates(ByVal location As String, _
         ByVal googleKey As String) As LatLong
    Dim myLatLong As LatLong = New LatLong
    If Not String.IsNullOrEmpty(googleKey) Then
      Dim myReq As HttpWebRequest = CType(WebRequest.Create"_
        "("http://maps.google.com/maps/geo?q=" + location.Trim "_
        "+ "&output=csv&key=" + googleKey), HttpWebRequest)
      Dim webResponse As HttpWebResponse
      Try
        webResponse = CType(myReq.GetResponse, HttpWebResponse)
      Catch
        Return myLatLong
      End Try
      If Not (webResponse Is Nothing) Then
        If webResponse.StatusCode = HttpStatusCode.OK Then
          Dim streamReader As StreamReader = New StreamReader"_
            "(webResponse.GetResponseStream, Encoding.ASCII)
          Dim responseString As String = streamReader.ReadToEnd
          If Not String.IsNullOrEmpty(responseString) Then
            Dim arrayResponse As String() = "_
             "responseString.Split(","c)
            If arrayResponse.Length = 4 Then
              myLatLong.Latitude = arrayResponse(2)
              myLatLong.Longitude = arrayResponse(3)
            End If
          End If
        End If
      End If
    End If
    Return myLatLong
  End Function

End Class

Public Class LatLong

  Private _latitude As String
  Private _longitude As String

  ''' <summary>
  ''' Breitengrad
  ''' </summary>
  ''' <value></value>
  ''' <returns>String</returns>
  ''' <remarks></remarks>
  Public Property Latitude() As String
    Get
      Return _latitude
    End Get
    Set(ByVal value As String)
      _latitude = value
    End Set
  End Property

  ''' <summary>
  ''' Längengrad
  ''' </summary>
  ''' <value></value>
  ''' <returns>String</returns>
  ''' <remarks></remarks>
  Public Property Longitude() As String
    Get
      Return _longitude
    End Get
    Set(ByVal value As String)
      _longitude = value
    End Set
  End Property

End Class
 
Weitere Links zum Thema
 

Windows-Version
98/SE
ME
NT
2000
XP
Vista
Win 7


Download  (19 kB) Downloads bisher: [ 256 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Tipps | Projekte | Tutorials | Bücherecke | VB-/VBA-Tipps | API-Referenz | Komponenten | VB.Net-Forum | VB/VBA-Forum | DirectX-Forum | Foren-Archiv | DirectX | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Montag, 23. Januar 2012