Vb.net OpenStreetMap einbinden

  • VB.NET
  • .NET 4.5

SSL ist deaktiviert! Aktivieren Sie SSL für diese Sitzung, um eine sichere Verbindung herzustellen.

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von OxFord.

    Vb.net OpenStreetMap einbinden

    Hallo zusammen,

    ich habe nach langem suchen keine Antwort gefunden. Ich möchte in ein Programm eine Openstreetmap hineinbringen, Google maps als Browser Anwendung möchte ich nicht verwenden, da ich am ende dort Taktischezeichen hineinbringen möchte.
    Kennt jemand eine alternative oder eine Lösung zu meinem Problem.

    Vielen Dank im voraus

    Mit Freundlichen Grüßen

    OxFord
    Hey, da darf ich wieder mal mein Bachelorprojekt auspacken!
    Also für WPF gibt's GMap.NET: greatmaps.codeplex.com/
    Die haben auch DLLs für WinForms, aber damit habe ich noch nicht gearbeitet.

    Sehr einfach einzubinden:
    Verweise auf GMap.NET.Core und GMap.NET.WindowsPresentation einfügen.
    xmlns:gmap="clr-namespace:GMap.NET.WindowsPresentation;assembly=GMap.NET.WindowsPresentation" im Window und dann z.B. in ein Grid ein gmap:GMapControl einbauen:

    XML-Quellcode

    1. <!-- Langweilige Sachen ausgelassen -->
    2. <Window
    3. xmlns:gmap="clr-namespace:GMap.NET.WindowsPresentation;assembly=GMap.NET.WindowsPresentation"
    4. >
    5. <gmap:GMapControl
    6. x:Name="MapControl"
    7. CanDragMap="True"
    8. ShowTileGridLines="False"
    9. MinZoom="1"
    10. MaxZoom="18"
    11. MouseWheelZoomType="MousePositionWithoutCenter"
    12. />
    13. </Window>
    14. <!-- Warum MinZoom und MaxZoom so gesetzt werden müssen, weiß ich nicht mehr. Experimentier einfach mal damit. -->

    Die Bibliothek ist nicht sehr schön programmiert (aber sie funktioniert gut), deshalb muss man ein paar Sachen im Code-Behind machen:

    VB.NET-Quellcode

    1. 'Im Konstruktor nach InitializeComponent()
    2. GMap.NET.GMaps.Instance.CacheOnIdleRead = False 'Diese zwei Zeilen bewirken, dass nicht so aggressiv versucht wird, die heruntergeladenen Kartensegmente zu cachen.
    3. GMap.NET.GMaps.Instance.BoostCacheEngine = True 'Macht man das nicht, bleibt der Prozess nach dem Schließen des Fensters noch einige Sekunden im Hintergrun offen.
    4. MapControl.IgnoreMarkerOnMouseWheel = True
    5. MapControl.MapProvider = GMap.NET.MapProviders.OpenStreetMapProvider.Instance 'Hier gibt's z.B. auch GoogleMaps.
    6. MapControl.ShowCenter = False

    Fertig!

    Man kann auch Markierungen zu MapControl.Markers hinzufügen. Beispiel:

    VB.NET-Quellcode

    1. MapControl.Markers.Add(New GMap.NET.WindowsPresentation.GMapMarker(New GMap.NET.PointLatLng(Latitude, Longitude)) With _
    2. {
    3. .Shape = New Ellipse With _
    4. {
    5. .Width = 10,
    6. .Height = 10,
    7. .RenderTransform = New TranslateTransform(-5, -5),
    8. .Fill = Brushes.Red
    9. }
    10. })

    Latitude und Longitude sind hier Koordinaten des Punktes auf der Erde. GMap berechnet von alleine, wo der Marker dann angezeigt werden muss.

    Verschieben mit rechter Maustaste, Zoomen mit dem Mausrad. Hier kannst Du auch einen Slider einbauen:

    XML-Quellcode

    1. <Slider Value="{Binding Path=Zoom}" Minimum="1" Maximum="18" SmallChange="1" LargeChange="1"/>
    2. <!-- Und entsprechend die Zoom-Property von gmap:GMapControl an die selbe Property binden. Hier muss man auf die richtigen Einstellungen achten. -->
    3. <gmap:GMapControl ... Zoom="{Binding Path=Zoom, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ... />
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Vielen Dank für die schnelle Antwort :thumbsup: , ich habe es gerade einmal versucht ich kriege es aber nicht in Vb.net eingebunden. Können Sie mir das vielleicht noch einmal etwas genauer erklären ?

    Liebe Grüße
    OxFord
    Direkt unter den eingebundenen DLLs ist ine Box mit "Importierten Namespaces". Da sollte irgendwo auch der Namespace aus der GMap dabei sein. Wahrscheinlich heißt er so ähnlich. Da einen Haken dran machen und es sollte laufen. Oder, wenn Du VS2017 hast: in Denem Code auf das GMap klicken und dann sollten Korrekturvorschläge gemacht werden, welche Namespaces importiert werden müssen. Alternativ Alt+Enter, dann kommen die Vorschläge auch.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    ― Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.