Hallo Leute,
ich hab heute mal aus Langeweile gegooglet unter dem Begriff "Google Maps API .Net" das Ergebnis war überraschend:
Eine (2! ;)) DLL mit der man Landkarten aus Google Maps anzeigen kann. Sogar eine Suche nach Orten ist möglich.
Das ganze in ein Projekt zu verpacken war keine Schwierigkeit mehr
Die DLLs findet ihr im Anhang.
Das Beispielprojekt findet ihr im Anhang.
Ihr könnt ein Beispielprojekt & DLL (das allerdings nicht ganz funktioniert und in C# ist :() hier herunterladen.
Solltet ihr die "Static Maps" direkt aufrufen wollen und es ohne DLL machen wollen, schaut mal hier vorbei
Na gut. Dann an die Arbeit.
1. Schritt: DLLs herunterladen
Ladet euch die DLLs im Anhang oder auf der Website herunter.
( Solltet ihr die DLLs auf der Website heuntergeladen haben, müsst ihr das Projekt vorher erstellen um die Dlls zu finden.)
2.Schritt: Projekt anlegen
Legt ein neues Projekt (Windows Forms Anwendung) an.
Framework: mind 2.0 ( Bei 2.0 kommt bei der Einbindung der DLL "Newtonsoft.Json" eventuell ein Hinweis, dass eine höhere Frameworkstufe benötigt wird. Bestätige den Dialog - Es funktioniert trotzdem wunderbar )
3.Schritt: Verweise hinzufügen
Fügt einen Verweis auf beide DLLs hinzu (Ansicht -> Projektmappenexplorer -> Alle Dateien Anzeigen aktivieren -> Verweise -> Rechtsklick -> Verweis hinzufügen... -> Durchsuchen -> [Dateien auswählen] -> OK)
4.Schritt: Benutzeroberfläche gestalten
Legt im Designer eine Benutzeroberfläche wie diese an:
Die Einträge der ComboBox sind wie folgt:
Die rote Schrift zeigt den Namen des Steuerelements an, die blaue wurde nur bei der Picturebox hinzugefügt um Verwechslungen mit anderen Controls (wie etwa dem Panel) zu vermeiden - sie sind keine Labels oder sonst irgend ein Teil der UI.
5.Schritt: Imports-Anweisungen
Welchselt in den Quelltext (F7) und schreibt in die erste Zeile (vor der Klassendefinition) folgende Anweisung:
6.Schritt:
Für das weitere Projekt sind folgende Codeabschnitte noch nodwendig:
Einige Variablen für die Ansicht und die Karte selber. ( Ändert nicht die Reihenfolge der Array!!!)
Die Funktion zum herunterladen eines Bildes (leider geht ImageLocation der PB nicht
Die Funktion RefreshMap zum zeichnen des Bildes:
Der Code sollte bis auf weiteres klar sein.
(Warum Sensor auf false gesetzt werden muss ist mir unklar, aber ohne funktioniert es nicht )
Das besondere Augenmerk sollte auf Karte.ToUri gerrichtet sein. Diese Funktion gibt die URL des Bildes das angezeigt werden muss zurück
Die Klasse GeoResult (die eigentlich nicht viel tut, und nur dazu gut ist einen schönen Text in der Listbox anzuzeigen )
7. Schritt:
Das Load-Event der Form sollte wie folgt belegt sein:
8.Schritt: Die Suchen-Funktion
Es ist zwar nicht unbedigt logisch, aber die Google-API Programmierer wollten diesen Aufbau .
( Wieder ist Sensor auf false)
Naja. Ganz fertig sind wir noch nicht: Schließlich sollte der Ort den man dann ausgewählt hat auch auf der Karte erscheinen.
Dazu ist folgende Funktion notwendig:
Mehrere Markers werden mit einem "|" getrennt
Und ihr Aufruf:
Fertig.
ich hab heute mal aus Langeweile gegooglet unter dem Begriff "Google Maps API .Net" das Ergebnis war überraschend:
Eine (2! ;)) DLL mit der man Landkarten aus Google Maps anzeigen kann. Sogar eine Suche nach Orten ist möglich.
Das ganze in ein Projekt zu verpacken war keine Schwierigkeit mehr
Die DLLs findet ihr im Anhang.
Das Beispielprojekt findet ihr im Anhang.
Ihr könnt ein Beispielprojekt & DLL (das allerdings nicht ganz funktioniert und in C# ist :() hier herunterladen.
Solltet ihr die "Static Maps" direkt aufrufen wollen und es ohne DLL machen wollen, schaut mal hier vorbei
Na gut. Dann an die Arbeit.
1. Schritt: DLLs herunterladen
Ladet euch die DLLs im Anhang oder auf der Website herunter.
( Solltet ihr die DLLs auf der Website heuntergeladen haben, müsst ihr das Projekt vorher erstellen um die Dlls zu finden.)
2.Schritt: Projekt anlegen
Legt ein neues Projekt (Windows Forms Anwendung) an.
Framework: mind 2.0 ( Bei 2.0 kommt bei der Einbindung der DLL "Newtonsoft.Json" eventuell ein Hinweis, dass eine höhere Frameworkstufe benötigt wird. Bestätige den Dialog - Es funktioniert trotzdem wunderbar )
3.Schritt: Verweise hinzufügen
Fügt einen Verweis auf beide DLLs hinzu (Ansicht -> Projektmappenexplorer -> Alle Dateien Anzeigen aktivieren -> Verweise -> Rechtsklick -> Verweis hinzufügen... -> Durchsuchen -> [Dateien auswählen] -> OK)
4.Schritt: Benutzeroberfläche gestalten
Legt im Designer eine Benutzeroberfläche wie diese an:
Die Einträge der ComboBox sind wie folgt:
Die rote Schrift zeigt den Namen des Steuerelements an, die blaue wurde nur bei der Picturebox hinzugefügt um Verwechslungen mit anderen Controls (wie etwa dem Panel) zu vermeiden - sie sind keine Labels oder sonst irgend ein Teil der UI.
5.Schritt: Imports-Anweisungen
Welchselt in den Quelltext (F7) und schreibt in die erste Zeile (vor der Klassendefinition) folgende Anweisung:
6.Schritt:
Für das weitere Projekt sind folgende Codeabschnitte noch nodwendig:
Einige Variablen für die Ansicht und die Karte selber. ( Ändert nicht die Reihenfolge der Array!!!)
Die Funktion zum herunterladen eines Bildes (leider geht ImageLocation der PB nicht
Die Funktion RefreshMap zum zeichnen des Bildes:
VB.NET-Quellcode
- Sub RefreshMap() Handles cb_ansicht.SelectedIndexChanged, tb_zoom.ValueChanged
- Karte.Zoom = tb_zoom.Value
- Karte.Size = pb_karte.Size.Width & "x" & pb_karte.Size.Height
- If cb_ansicht.SelectedIndex <> -1 Then
- Karte.MapType = Ansichten(Me.cb_ansicht.SelectedIndex)
- End If
- Karte.Sensor = "false"
- 'Bild zeichen
- pb_karte.Image = Getimg(Karte.ToUri)
- End Sub
Der Code sollte bis auf weiteres klar sein.
(Warum Sensor auf false gesetzt werden muss ist mir unklar, aber ohne funktioniert es nicht )
Das besondere Augenmerk sollte auf Karte.ToUri gerrichtet sein. Diese Funktion gibt die URL des Bildes das angezeigt werden muss zurück
Die Klasse GeoResult (die eigentlich nicht viel tut, und nur dazu gut ist einen schönen Text in der Listbox anzuzeigen )
VB.NET-Quellcode
- Public Class GeoResult 'Wird angelgt, nur um ToString zu überschreiben
- Inherits GeocodingResult
- Public Overrides Function ToString() As String
- Return MyBase.FormattedAddress
- End Function
- Shared Function Kovert(ByVal obj As GeocodingResult) As GeoResult
- Dim gs As New GeoResult()
- gs.Components = obj.Components
- gs.FormattedAddress = obj.FormattedAddress
- gs.Geometry = obj.Geometry
- gs.Types = obj.Types
- Return gs
- End Function
- End Class
7. Schritt:
Das Load-Event der Form sollte wie folgt belegt sein:
8.Schritt: Die Suchen-Funktion
VB.NET-Quellcode
- Private Sub btn_suchen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_suchen.Click
- Dim request As New GeocodingRequest() 'Neue Suchanfrage
- request.Address = tb_suchbegriff.Text 'Suchbegriff festlegen
- request.Sensor = "false"
- Dim result = GeocodingService.GetResponse(request) 'Suche durführen
- Select Case result.Status
- Case Is = Google.Api.Maps.Service.ServiceResponseStatus.Ok
- 'Listbox füllen
- lb_suchergebnisse.Items.Clear()
- For Each res In result.Results
- lb_suchergebnisse.Items.Add(GeoResult.Kovert(res))
- Next
- Case Is = Google.Api.Maps.Service.ServiceResponseStatus.ZeroResults
- MessageBox.Show("Die Suche ergab keine Ergebnisse", "Ort suchen", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
- Case Else
- MessageBox.Show("Es trat ein Fehler bei der Suche auf!", "Ort suchen", MessageBoxButtons.OK, MessageBoxIcon.Error)
- End Select
- End Sub
Es ist zwar nicht unbedigt logisch, aber die Google-API Programmierer wollten diesen Aufbau .
( Wieder ist Sensor auf false)
Naja. Ganz fertig sind wir noch nicht: Schließlich sollte der Ort den man dann ausgewählt hat auch auf der Karte erscheinen.
Dazu ist folgende Funktion notwendig:
VB.NET-Quellcode
- Sub SelectPosition(ByVal pos As GeoResult)
- 'ACHTUNG: Der Beistrich der Dezimalzahl muss ersetzt werden!!!
- Dim lat = Replace(pos.Geometry.Location.Latitude, ",", ".")
- Dim lon = Replace(pos.Geometry.Location.Longitude, ",", ".")
- Karte.Center = lat & "," & lon
- Karte.Markers = Karte.Center
- RefreshMap()
- End Sub
Mehrere Markers werden mit einem "|" getrennt
Und ihr Aufruf:
Fertig.
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Memo“ ()