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

Sorry, hier mal der Codeteil des js mit zwei weiteren lat/lon, wo in Deutschland zwei Marker entstehen müssten.

<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" ],
            [ 12,77631, 50,85144 ],
            [ 12,76040, 50,85620 ],
         

        ];
       
        //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> 

PhilS

Zitat von: Mykis am November 26, 2022, 11:13:27      [ 12,77631, 50,85144 ],
      [ 12,76040, 50,85620 ],
Die Geokoordinaten müssen mit US-Zahlenformat eingetragen werden; d.h. mit dem Punkt als Dezimaltrennzeichen.

PS: Außerdem bin ich nicht sicher, ob die Beschreibungen zu dem Positionen optional sind. Evtl. musst du mindestens einen leeren String ("") angeben.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Mykis

Danke, kleine Ursache, große Wirkung. :)
Die Beschreibungen zu dem Positionen sind optional und die brauche auch nicht.
Da werde ich nun mal meinen Javascrpt-Anfängerkurs weitermachen.

Lg
Frank

Mykis

Hallo @steffen0815,

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

Das Access Browser-Fenster in meinem Fundpunkteformular ist jetzt so vorbereitet:

Option Compare Database
Private WithEvents CWeb As SHDocVw.WebBrowser
Option Explicit

Private Sub Form_Load()
Me!Webbrowser76.Object.Navigate2 "about:blank"
Set CWeb = Me!Webbrowser76.Object
End Sub

Private Sub Fundpunkte_Click()
    Dim oDoc As Object
    Dim sHTML As String
    CWeb.Navigate2 "about:blank"
    WaitForReady
    Set oDoc = CWeb.Document
    sHTML = "..............."
   
    oDoc.write sHTML
   
 

'Dim urlMap As String
'urlMap = "C:\Users\Frank\Desktop\pilze.html"
'Me!Webbrowser76.Object.Silent = True
'Me!Webbrowser76.Object.Navigate2 urlMap

End Sub

Private Sub WaitForReady()
    Do
        DoEvents
    Loop Until CWeb.ReadyState >= READYSTATE_INTERACTIVE
End Sub


Mein momentanes Problem ist den Code aus pilze.html (z.Zt. 2 feste Fundpunkte, die dann späterdurch Abfragewerte ersetzt werden sollen) in den obigen Code in den Zeilen sHTML einzubauen, damit diese Seite im Fenster gezeigt wird. Dazu habe ich im Netz keine Anleitung gefunden.
<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( 50.85144, 12.85144, 6 );
         map.setView(mitte, 6);
         
         // 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 = [
           
             [ 12.77631, 50.85144 ],
             [ 12.76041, 50.85621 ],

         ];
         
         //Loop through the markers array
         for (var i=0; i<markers.length; i++) {
           
            var lon = markers[i][0];
            var lat = markers[i][1];
           
           
             var markerLocation = new L.LatLng(lat, lon);
             var marker = new L.Marker(markerLocation);
             map.addLayer(marker);
         
           
         }
      }
    </script> 
</head>
<body onLoad="javascript:init();"><div id="map" style="height: 100%"></div> 
</body>                                                                                                                         
</html>
   

Schönen ersten Advent
Frank

steffen0815

Hallo,
viele Ziele führe  zum Ziel.

In der "Grundcode" (pilze.html) würde ich das Koordinatenarray und die Mittelpunktkoordinate durch einen "Kenner" ersetzen          var markers = [
           
             #KENNKoo#

         ];
und diesen per sHTML = Replace(sHTML, "#KENNKoo#", DeineKoordinaten) tauschen.

Je nachdem wie "transportabel" deine DB sein soll würde ich den Grundcode in einer Datei <muster.html> oder in einer Tabelle (Memofeld) speichern.

Eine Datei in einen Variable einlesen ist recht einfach
Function fncDatei2String(DatNam As String)
Const ForReading = 1
Dim objFSO As Object, objStream As Object
On Error GoTo Fehler
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objStream = objFSO.OpenTextFile(DatNam, ForReading)
    fncDatei2String = objStream.ReadAll
    objStream.Close
    Exit Function
Fehler:
    msgbox Err.Number & ": " & Err.Description
End Function

Ein Tabellenfeld (MEMO) auslesen am Einfachsten per DLookUp()


Gruß Steffen

Mykis

Hallo Steffen,

deinen dankbaren Hinweisen folgend,habe ich den html code in ein Memofeld der Tabelle "Grundcode" in die Spalte "Inhalt" kopiert. Erstmal noch mit einem Koordinatenpaar, um zu testen. Ich erhalte aber nur eine leere Seite im Access Browserfenster.
Private Sub Form_Load()
Me!Webbrowser76.Object.Navigate2 "about:blank"
Set CWeb = Me!Webbrowser76.Object
Me!Webbrowser76.Object.Silent = True
End Sub

Private Sub Fundpunkte_Click()
    Dim oDoc As Object
    Dim sHTML As String
   
    Dim strX As String
    strX = DLookup("Inhalt", "Grundcode")
   
    CWeb.Navigate2 "about:blank"
    WaitForReady
    Set oDoc = CWeb.Document
    sHTML = strX
    'sHTML = Replace(sHTML, "#KENNKoo#", "[12.77631, 50.85144]")
   
    oDoc.write sHTML

End Sub


LG
Frank

Mykis

Wenn ich den Code irgend einer anderen HTML (ohne Javascript) in das Memofeld eingebe, funktioniert die Anzeige dieser Page im Browserfeld.
Hier mal eine Verknüpfung zu meiner Test.accdb

LG
Frank

https://www.tomentella.de/Pages/Fundpunkte.zip

steffen0815

#22
Hallo,
ZitatEvtl. kann man da noch am Kompatibilitätsmodus schrauben, aber das ist nmM. eine Sackgasse.
Ich denke auch hier ist wieder der alte Internetexplorer das Problem.
Setz mal den stummen Modus auf false
Me!Webbrowser76.Object.Silent = Falseund du wirst vermutlich eine Fehlermeldung erhalten (deine DB habe ich mir noch nicht angesehen).
Auch hier könnte man wieder zaubern, aber der alte IE ist und bleibt eine Unsicherheit.

[EDIT]
Als Anhang mal ein schnelles Beispiel (dein Beispiel angepasst/erweitert), wie es funktionieren könnte.
29.11.22: Neue Beispieldatenbank mit Koordinaten direkt aus der Tabelle
Gruß Steffen

Mykis

Hallo Steffen,

vielen Dank für deine Bemühungen. Selbst hätte ich das nicht so hinbekommen. Meine erste "dumme" Frage dazu wäre, dass der Code für die Karte 4 Koordinatenpaare und die Karte aber 5 Punkte zeigt!?

arrKoo(0, 0) = 12.042: arrKoo(0, 1) = 50.012
arrKoo(1, 0) = 12.012: arrKoo(1, 1) = 50.023
arrKoo(2, 0) = 12.032: arrKoo(2, 1) = 50.045
arrKoo(3, 0) = 12.014: arrKoo(3, 1) = 50.055

LG
Frank

Mykis

Hallo Steffen,

der Fehler lag im Grundcode/Fuss, da wurde durch folgende Zeile ein zusätzlicher Marker für die Mitte gesetzt.

"markers.addMarker(new OpenLayers.Marker(lonLatMitte));" 

LG
Frank


Mykis

Hallo Steffen,

nochmals vielen Dank für deine professionelle Hilfe. Die Karte enstspricht jetzt perfekt meinen Vorstellungen.

LG
Frank