Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Fundpunktdarstellung in OpenStreetMap

Begonnen von Mykis, November 19, 2022, 14:07:48

⏪ vorheriges - nächstes ⏩

Mykis

Hallo Access Freunde,

mit folgendem Code stelle ich einen Fundpunkt aus meiner Datenbank in OpenStreetMap dar:

Private Sub ShowOpenStreetMap_Click()
  Dim geobreite As Double
  Dim geolaenge As Double
  Dim HyperlinkGesamt As String
 
  On Error GoTo Err_ShowOpenStreetMap_Click
 
  geobreite = DezimalGradZahl(Me!A_geobgrad1, Me!A_geobminute1, Me!A_geobsekunde1)
  geolaenge = DezimalGradZahl(Me!A_geolgrad1, Me!A_geolminute1, Me!A_geolsekunde1)
 
  If Not (Abs(geobreite) = 0 And Abs(geolaenge) = 0) And Abs(geobreite) < 90 And Abs(geolaenge) < 180 Then
      HyperlinkGesamt = OpenStreetMapLink & "?mlat=" & StringKomma2Punkt(CStr(geobreite)) & "&mlon=" &
  StringKomma2Punkt(CStr(geolaenge)) & "&zoom=16"
  Else
      HyperlinkGesamt = OpenStreetMapLink & "?lat=51&lon=11&zoom=6"
  End If
  Application.FollowHyperlink HyperlinkGesamt, , True

Exit_ShowOpenStreetMap_Click:
    Exit Sub

Err_ShowOpenStreetMap_Click:
    MsgBox Error$
    Resume Exit_ShowOpenStreetMap_Click

End Sub

Wie müsste der Code aussehen, wenn ich mehrere Fundpunkte z. B. aus einer Abfrage heraus gleichzeitig in OpenStreetMap darstellen möchte?

LG
Frank

PhilS

Zitat von: Mykis am November 19, 2022, 14:07:48Wie müsste der Code aussehen, wenn ich mehrere Fundpunkte z. B. aus einer Abfrage heraus gleichzeitig in OpenStreetMap darstellen möchte?
Ich glaube, mehrere Punkte kannst du mit einem simplen Link und URL-Parametern nicht darstellen. Dafür wirst du JavaScript und eine passende Bibliothek einsetzen müssen. Es gibt zahlreiche Beispiel für den Einsatz verschiedener Mapping-Bibliotheken, z.B. hier Beispiele für OpenStreeMap mit der OpenLayers- und der Leaflet-Bibliothek.

Außerdem könntest du die mal die Downloads zu dem Landkarten-Vortrag von Thomas Pfoch bei der AEK22 anschauen.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Mykis

Hallo PhilS,

vielen Dank.

ZitatIch glaube, mehrere Punkte kannst du mit einem simplen Link und URL-Parametern nicht darstellen.

Über einen simplen Link mit URL Parameter geht das natürlich nicht. Ich hatte die Vorstellung, dass eine Routine im VBA die Wiederholung der einzelnen Geodaten aus einer Abfrage auch mehrere Markierungen in der OpenStreetMap erzeugen könnte. Ich selbst bin dazu nicht in der Lage. Es wäre ja möglich, dass sich schon mal jemand mit dieser Problematik aus einer Access Datenbank heraus beschäftigt hat.

LG
Frank

PhilS

Zitat von: Mykis am November 19, 2022, 22:04:08Es wäre ja möglich, dass sich schon mal jemand mit dieser Problematik aus einer Access Datenbank heraus beschäftigt hat.
Meinen Hinweis auf den Vortrag bei der AEK22 hast du gesehen? - Dort hat sich jemand sehr intensiv mit dieser Problematik beschäftigt.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Mykis

Den Vortrag AEK 22 habe ich mir angesehen. Dort werden aber nur eingebundene Karten als Kacheln dargestellt. Die Firma picoware ist sicher in der Lage, ein Modul zu programmieren, was mehrere Fundpunkte auf OpenstreetMap anzeigen kann. Sie vertreibt ja auch interaktive Karten, die direkt in Access eingebunden sind.
Als ehrenamtlicher Pilzberater, der das Kartierungsprogramm unseres Vereins betreut, sind solche Ausgaben für eine professionelle Hilfe nicht machbar.

LG
Frank

PhilS

Zitat von: PhilS am November 19, 2022, 16:19:59Dafür wirst du JavaScript und eine passende Bibliothek einsetzen müssen. Es gibt zahlreiche Beispiel für den Einsatz verschiedener Mapping-Bibliotheken
@Mykis, dieser Hinweis scheint dir ja nicht weiterzuhelfen. Kannst du mal kurz schreiben, woran es scheitert?
Ich überlege einen längeren Beitrag für meine Website oder YouTube zu erstellen, die dieses Thema behandelt (keine Garantie, kein Termin!). Dafür wüsste ich gern, worin die Schwierigkeiten bei dem obigen, konkreten Ansatz liegen.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Mykis

Zitat..... dieser Hinweis scheint dir ja nicht weiterzuhelfen. Kannst du mal kurz schreiben, woran es scheitert?
Es scheitert einfach an meinen Fähigkeiten. Auch wenn ich aufgrund meiner bisherigen Aktivitäten hier als "Access Profi" bezeichnet werde, trifft das wirklich nicht zu. Mit JavaScript habe ich noch nie gearbeitet.

LG
Frank

Mykis

Hallo PhiLS,

als ersten kleinen Schritt wollte ich mal OpenStreetMap in mein Formular einbauen und den einen Fundpunt dort anzeigen lassen. Leider kommt da keine Karte.
Mit GoogleMaps funktioniert es!



Mein Steuerelement: ="http://www.openstreetmap.org?mlat=" & [ZielLat] & "&mlon=" & [ZielLon] & "&zoom=16"

LG
Frank

steffen0815

#8
Glückauf :)  Frank,
im Formular hast du (vermutlich) das Webbrowser-Steuerelement, welches auf dem alten Internetexplorer basiert. Dieser ist (standardmäßig) nicht in der Lage die OSM-Seite korrekt anzuzeigen.
Evtl. kann man da noch am Kompatibilitätsmodus schrauben, aber das ist nmM. eine Sackgasse.

Auch wirst du deinem Ziel mehrere Standorte anzuzeigen so nicht näher kommen.

Ein einfach gangbarer Weg wäre aus Access eine Internetseite (Datei mit HTML-Code) zu generieren und diese Datei mit einem aktuellen Browser anzuzeigen.
Gruß Steffen

Mykis

Hallo Steffen,

vielen Dank für deine Antwort.
[zitat]im Formular hast du (vermutlich) das Webbrowser-Steuerelement, welches auf dem alten Internetexplorer basiert. Dieser ist (standardmäßig) nicht in der Lage die OSM-Seite korrekt anzuzeigen.[/zitat]

Ich arbeite unter Windows 11/Access 2010/Browser MS Edge bzw. Firefox, jeweils die neueste Version. Also könnte es nur an Access 2010 liegen? GoogleMaps geht allerdings in diesem Formular!

[zitat]Ein einfach gangbarer Weg wäre aus Access eine Internetseite (Datei mit HTML-Code) zu generieren und diese Datei mit einem aktuellen Browser anzuzeigen.[/zitat]

Diese Internetseite müsste da ja georeferenziert sein!? Dein "einfacher gangbarer Weg" ist für mich noch ein Buch mit sieben Siegeln. :)

LG
Frank

Köbi

Hallo Frank
Ich habe hier ein Beispiel für OpenStreetMap. Vielleicht hilft das weiter.

steffen0815

#11
Hallo,
ZitatIch arbeite unter Windows 11/Access 2010/Browser MS Edge bzw. Firefox, jeweils die neueste Version.
Das Steuerelement in deinem Formular ist kein Edge und kein FF sondern ein (alter) IE.

ZitatGoogleMaps geht allerdings in diesem Formular!
Ja viele Internetseiten funktionieren auch noch im alten IE, aber OSM halt nicht.

ZitatDiese Internetseite müsste da ja georeferenziert sein!?
Nein es ist ganz normaler HTML/Javascriptcode.

Folgender Beispielcode in eine Textdatei, welche du anschließend in pilze.html umbennenst und per Doppelklick startest:
<html>
<head>
   <title>Leaflet marker array example</title>
  
    <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.3/dist/leaflet.css" integrity="sha256-kLaT2GOSpHechhsozzB+flnD+zUyjE2LlfWPgU04xyI=" crossorigin="" />
    <script src="https://unpkg.com/leaflet@1.9.3/dist/leaflet.js" integrity="sha256-WBkoXOwTeyKclOHuWtc+i2uENFpDZ9YPdf5Hf+D7ewM=" crossorigin=""></script> 
    <script language="javascript">
      function init() {
         var map = new L.Map('map');                      
               
           L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
            attribution: '&copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors',
            maxZoom: 18
         }).addTo(map);
         map.attributionControl.setPrefix(''); // Don't show the 'Powered by Leaflet' text.

         var mitte = new L.LatLng(51.5056,-0.1213);
         map.setView(mitte, 15);
        
         // Define an array. This could be done in a seperate js file.
         // This tidy formatted section could even be generated by a server-side script
         // or fetched seperately as a jsonp request.
         var markers = [
            [ -0.1244324, 51.5006728, "Big Ben" ],
            [ -0.119623, 51.503308, "London Eye" ],
            [ -0.1279688, 51.5077286, "Nelson's Column<br><a href=\"https://en.wikipedia.org/wiki/Nelson's_Column\">wp</a>" ]
         ];
        
         //Loop through the markers array
         for (var i=0; i<markers.length; i++) {
          
            var lon = markers[i][0];
            var lat = markers[i][1];
            var popupText = markers[i][2];
           
             var markerLocation = new L.LatLng(lat, lon);
             var marker = new L.Marker(markerLocation);
             map.addLayer(marker);
        
             marker.bindPopup(popupText);       
         }
      }
    </script> 
</head>
<body onLoad="javascript:init();">
   <div id="map" style="height: 100%"></div> 
</body>                                                                                                                         
</html>

Hier müssen letztendlich nur die Koordinaten und Texte durch deine Werte ersetzt werden.
Im Ganzen ca. 20-30 Zeilen VBA-Code.

Gruß Steffen

Mykis

Danke, Steffen!

mit dem Ersetzen der Geodaten in der html werde ich mich nun mal beschäftigen. Die Daten sollen ja aus einen Abfrage kommen. Wahrscheinlich brauche ich da nochmal Hilfe.
Das Problem mit der Anzeige im Access Fenster habe ich gelöst. Folgender Eintrag muss in die Registry, dann klappt es wunderbar:
HKCU\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION" /v MSACCESS.EXE /t REG_DWORD /d 11000

LG
Frank

Mykis

Hallo Steffen,

ZitatHier müssen letztendlich nur die Koordinaten und Texte durch deine Werte ersetzt werden.

Hier schon mal mein erster Stolperstein: Wenn ich in der HTML andere Lat/lon Werte eingebe, entstehen keine neuen Marker.

LG
Frank

PhilS

Zitat von: Mykis am November 26, 2022, 10:35:36Wenn ich in der HTML andere Lat/lon Werte eingebe, entstehen keine neuen Marker.
Es wäre hilfreich, wenn du mindestens den Code-Teil mit den neuen Werten hier ergänzen würdest.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor