Google Maps-JavaScript-API
Hallo zusammen,
ich möchte gerne in Zukunft ein paar Markt-Standorte in einer in Ninox eingebetteten Google Karte mit Pin-Nadeln anzeigen lassen.
Mit der Google Maps Embed-API hat das bei einem Standort schonmal geklappt.
Wenn ich nun mehrere Standorte auf der Karte haben will muss ich wohl die Maps-JavaScript-API verwenden. Dazu habe ich schon einiges an Dokus gelesen und auch im Ninox API-Team eine DB „Google Maps POI“ gefunden die meine Anforderung eigentlich darstellt.
Warum gibt mir dann bspw. der unten angegebene Code keine Karte aus, wenn ich ihn in einem Berechnungsfeld ausführe??
let myAPIkey := first((select 'Weitere Einstellungen')['Parameter (admin)' = "Maps_APIkey1"]).Wert;
html("<iframe
<div id=""map""></div> <style>#map { height: 100%; }</style><script>function initMap() {var myCenter = {lat: 52.525145, lng: 13.3672179}; var map = new google.maps.Map(document.getElementById(""map""),{zoom: 4,center: myCenter});}</script> <script async defer src=""https://maps.googleapis.com/maps/api/js?key=" +
myAPIkey +
"&callback=initMap""></script>></iframe>")
Danke vorab für eure Hilfe :-)
10 Antworten
-
Oder anders gefragt, lässt sich JavaScript nicht in Ninox ausführen?
-
Hallo Benjamin
Die Google Karte mit mehreren Pins ist auch ein Thema welches uns längere Zeit beschäftigt hat. So wie di es im Moment ausführst denke ich nicht, dass es funktionieren kann. Wenn du die Google Maps API über Javascript einbindest kannst du das ganze nicht auch noch in eine iframe packen. Ich mache auch gerade noch ein paar Tests wie das funktionieren kann und melde mich nochmals wenn ich etwas gefunden habe.
Aber grundsätzlich kann man JavaScript problemlos in Ninox ausführen.
Gruss Etienne
-
let myAPIkey := "[API-KEY]"; html(" <div id='map' style='height: 100%;'></div> <script> function initMap() { var map = new google.maps.Map(document.getElementById('map'), { center: { lat: -34.397, lng: 150.644 }, zoom: 8, }); var marker1 = new google.maps.Marker({ position: { lat: -34.397, lng: 150.644 }, map: map, }); var marker2 = new google.maps.Marker({ position: { lat: -34.697, lng: 150.344 }, map: map, }); }; var mapsLink = 'https://maps.googleapis.com/maps/api/js?key=" + myAPIkey + "&callback=initMap'; if ($('script[src=""'+mapsLink+'""]').length === 0) { let script = document.createElement('script'); script.src = mapsLink; script.async = true; script.defer = true; document.body.append(script); } else {initMap()} </script> ")
So funktioniert das ganze bei mir
-
MOin in die Runde,
ich wollte das ganze mal ausprobieren und habe deinen Code kopiert. Allerdings wird mir angezeigt "Hoppla es ist Fehler aufgetreten. Google Maps wurde nicht richtig geladen. Den Api Code habe ich natürlich ausgetauscht gegen meinen.
Habt ihr eine Idee was da los sein könnt?
-
Jetzt habe ich aber doch noch eine Frage. Vielleicht habt ihr ja eine Idee. Wenn ich auf die Maker klicke wird mir der Name einer Location angezeigt. Gibt es die Möglichkeit, dass ich den Namen anklicke und mir Ninox den entsprechenden Eintrag öffnet?
Aktuell sieht der Code wie folgt aus
html(" <div id='map' style='height: 100%;'></div> <script> var locations = " + formatJSON((select Locations).{ position: { lat: lat, lng: lon }, title: Location }) + "; var map; var icon = { url: 'https://maps.google.com/mapfiles/ms/icons/red-dot.png', // Roter Marker scaledSize: new google.maps.Size(50, 50) // Größe anpassen (50x50 Pixel) }; function addMarker(feature) { var marker = new google.maps.Marker({ position: feature.position, title: feature.title, icon: icon, map: map, }); var infoWindow = new google.maps.InfoWindow({ content: feature.contentString, }) marker.addListener('click', () => { infoWindow.open({ anchor: marker, map: map, }); }); }; function initMap() { map = new google.maps.Map(document.getElementById('map'), { center: { lat: 51.1657, lng: 10.4515 }, // Zentrum auf Deutschland zoom: 7, // Zoom-Level, um ganz Deutschland zu zeigen }); locations.forEach(function(location) { addMarker({ position: location.position, title: location.title, contentString: '<div>'+location.title+'</div>', }); }); }; var mapsLink = 'https://maps.googleapis.com/maps/api/js?key=" + myAPIkey + "&callback=initMap'; if ($('script[src=""'+mapsLink+'""]').length === 0) { let script = document.createElement('script'); script.src = mapsLink; script.async = true; script.defer = true; document.body.append(script); } else { initMap() } </script> ")
Content aside
- vor 19 StundenZuletzt aktiv
- 10Antworten
- 204Ansichten
-
4
Folge bereits