Automatische Kilometerberechnung über Google
Für alle, die auf der Suche nach einer automatischen Berechnung der Kilometer sind, hier mein Lösungsansatz:
Start-Adresse (Text-Feld)
Ziel-Adresse (Text-Feld)
Google (Berechnungs-Feld)
Km (Berechnungs-Feld)
Code Google-Feld
text(http("GET", "https://maps.googleapis.com/maps/api/distancematrix/json?origins=" + 'Start-Adresse' + "&destinations=" + 'Ziel-Adresse' + "&key=API_KEY"))
Den API-Key von Google kann man sich hier erstellen lassen und bei API_KEY einsetzen.
Code Km-Feld
let at := text(extractx(Google, "(text...)\d*.\d*"));
text(extractx(at, "\d+.\d+"))
Als Übergangslösung bis Ninox mit Arrays arbeiten kann, funktioniert es super.
Sobald man nun in das Start- und Zielfeld eine Adresse eingibt, berechnet er die Kilometer der schnellsten Route.
Man kann das ganze auch noch mit einem Button vervollständigen, der die Route in Google-Maps oder Apple-Maps öffnet.
Für Google:
openURL("http://maps.google.com/maps?saddr=" + text('Start-Adresse') + "&daddr=" + text('Ziel-Adresse') + "&hl=de")
Für Apple-Karten:
openURL("http://maps.apple.com/maps?daddr=" + text('Straße' + " " + 'Hausnr.' + " " + PLZ + " " + Ort))
84 Antworten
-
man kann das ganze auch in einem Berechnungsfeld machen:
let gcode := text(http("GET", "https://maps.googleapis.com/maps/api/distancematrix/json?origins=" + 'Anfang-Adresse' + "&destinations=" + 'Ziel-Adresse' + "&key=API_Key"));
let at := text(extractx(gcode, "(text...)\d*.\d*"));
text(extractx(at, "\d+.\d+")) -
Hallo Matthias,
vielen Dank, sehr nutzlich. Ich habe in der App (Macbook) und in Cloud (Windows, Chrome) ausprobiert.
In der App bekomme ich die Antwort von Google ohne Probleme. Bei Berechnung der Kilometer musste ich zusätzlich text(Google) einfügen. sonst meckerte Ninox.
in der Cloud funktioniert die Anfrage leider nicht (reques failed. error).
Grüße
Leo
-
Kann man auch die Zeit auslesen und nicht nur die km? So könnte man schnell sehen wie lange man zu einem Kundem fährt. Idealerweise sogar, ob man mit dem Auto, Rad oder zu Fuß geht.
-
Ich habe den Code noch etwas modifiziert. Man kann sich einen Schritt sparen:
let gcode := text(http("GET", "https://maps.googleapis.com/maps/api/distancematrix/json?origins=" + 'Anfang-Adresse' + "&destinations=" + 'Ziel-Adresse' + "&key=API_KEY"));
text(extractx(gcode, "\d+.\d+ km"))So kann man auch die Dauer in einem Berechnungsfeld anzeigen:
let gcode := text(http("GET", "https://maps.googleapis.com/maps/api/distancematrix/json?origins=" + 'Anfang-Adresse' + "&destinations=" + 'Ziel-Adresse' + "&key=API_Key"));
text(extractx(gcode, "\d+ (Stunde.|Minuten)"))Gruß
Matthias
-
Habe doch noch einen Fehler in der Dauerberechnung entdeckt.
Hier nun der richtige Code:let gcode := text(http("GET", "https://maps.googleapis.com/maps/api/distancematrix/json?origins=" + 'Anfang-Adresse' + "&destinations=" + 'Ziel-Adresse' + "&mode=bicycling&key=Api_Key"));
let h := text(extractx(gcode, "[0-9]+.[Stunden|Stunde]+"));
let min := text(extractx(gcode, "[0-9]+.[Minuten|Minute]+"));
if h != "" then h + ", " + min else min endUm die Berechnung mit dem Rad oder zu Fuß durchzuführen, muss man nur in der Google-Api den Modus ändern (Fettgedrucktes).
Auto = driving oder weglassen
Rad = bicycling
zu Fuß = walking
ÖV = transit (hier könnte man noch die Abfahrtszeit, Ankunftszeit, Art des öffentlichen Verkehrsmittels und die Streckenpräferenz angeben)Gruß
Matthias
-
Hier eine Beispiel-Datenbank mit Kilometerberechnung und Switch-Schalter zur Berechnung der Dauer von Auto, Rad und Zu Fuß. Man muss nur den API_Key in den Formeln einsetzen.
https://www.dropbox.com/s/fksun7t0t58k9q4/Kilometerberechnung.ninox?dl=0
Grüße
Matthias
-
Hey Matthias danke für dein Input echt super haben heute dein Beispiel in dem Webinar gezeigt. Haben dort schon eine Beispieldatenbank liegen in dem Team Webinar DE 2018 lass dich doch mal in das Team einladen. Schreib eine mail an support@ninoxdb.de
-
Klasse Matthias. Aber: Bei mir bleiben die berechneten Felder leer in der DB , die Du bei dropbox bereitgestellt hast, obwohl ich meinen Key eingegeben habe. Lasse ich &key= weg und schreibe direkt den key hin, dann funktioniert zumindest das Feld Kilometer.
-
Hallo Dirk welchen Key hast du beantragt. Schau mal im Webinar Team dort ist ja auch eine Beispieldatenbank dort hab ich alles erklärt. Du musst nur deinen Key eintragen. Wichtig ist das du ein Matrix Distance Key beantragst für die entfernung. https://developers.google.com/maps/documentation/distance-matrix/get-api-key?hl=de
Für die anderen beispiele in der Datenbank benötigst du andere Keys.
-
Hi Bastian. Habe einen Distance-Key verwendet. Ich arbeite gerade mit der DB von Matthias. Dort habe ich überall den Distance-Key verwendet. Bei manchen Adressen funktioniert es gut, bei anderen steht plötzlich auch die PLZ und der Anfangsbuchstabe des Ziels oder des Starts mit im Formelfeld. Siehe Screenshot.
-
Habe den Fehler gefunden.
Tausche die [] gegen () in den regulären Ausdrücken aus.
Also so:
let d := text(extractx(gcode, "[0-9]+.(Tage|Tag)+"));
let h := text(extractx(gcode, "[0-9]+.(Stunden|Stunde)+"));
let min := text(extractx(gcode, "[0-9]+.(Minuten|Minute)+")); -
Habe meine Beispieldatenbank überarbeitet. Müsste jetzt funktionieren.
-
Ich habe jetzt noch ein Abfahrtsdatum hinzugefügt da die Fahrtzeit sich ja unterscheiden kann bezüglich stau.
hab ein Ninox Feld Datum Uhrzeit erstellt mit dem Namen Datum Abfahrt. Folgendes muss vor dem &Key= gesetzt werden.
"departureTime:" + 'Datum Abfahrt' +
-
In der Beispieldatenbank, die ich gerade aus der Dropbox geladen habe sind es noch die eckigen Klammern.
-
Sorry. Hatte die Dropbox nicht aktualisiert.
-
Spitze. Jetzt funktioniert es einwandfrei!
-
Wenn ich per Button Google Maps aufrufe übernimmt er die Startadresse, mit dem Button für Apple Maps geht er vom jetzigen Standort aus. Geht das bei Google auch bzw. kann man bei Apple Maps auch einen anderen Startpunkt auswählen?
-
Du kannst die Route in Apple Maps mit folgendem Code abrufen, dann startet er nicht bei dem Standort sondern bei deiner angegebenen Adresse.
openURL("http://maps.apple.com/maps?daddr=" + 'Ziel-Adresse' + "&saddr=" + 'Anfang-Adresse')
-
Okay, man muss aber bei Google und Apple jeweils eine Anfangsadresse eingeben. Aktueller Standort automatisch dürfte nicht funktionieren. Danke! Ich werde das einbauen in meine DB, dann kann ich schnell sehen wie weit ein neuer Patient enfernt wohnt bei Hausbesuchen. Toll!
-
Habe das nun auch mal ausprobiert, funktioniert aber nur auf dem iPad bei mir und nicht auf dem Windows PC in der WEB-App. Ist das derzeit so?
-
du musst die api request abfrage in do as sever schreiben. also
do as server
let request := http("GET", "https://maps.googleapis.com/maps/api/distancematrix/....
end
-
Hallo, ich habe das nun probiert, bekomme den Code aber nciht komplett zusammen. :- (
Auch das Beispiel 081_google_maps_entfernung hilft mir nicht weiter, denn da funktioniert es auch nicht. Kann sich mal bitte jemand ran setzen und den Code entsprechend anpassen so das es auch in der WEB-App unter Windows funktioniert?
Würde mciht sehr freuen...
-
Guten Morgen,
das ist eine super Geschichte hier und ich bin begeistert wie man bei Ninox alles einfach erstellen kann ohne großartig Kentnisse von Programmierung zu haben. Habe den Code jetzt bei mir in einer Datenbank integriert und es funktioniert auch super gut. Was für mich jetzt noch interessant ist, wie ich die zurückgegeben Werte Zeit und Kilometer als Zahl bekomme um weitere Berechnungen anstellen zu können.
mit bestem Dank
-
Hallo Alexander,
wenn du number(Zeit) eintippst, bekommst du Zeitwert in Millisekunden. Jetzt kommt es darauf an welche Einheiten du für deine Berechnungen brauchst. Für Stunden:
number(Zeitdauer)/1000/60/60
Leo
-
Hallo Leo,
danke für die schnelle Antwort. Mir fehlt leider das notwendige Verstehen. Wo gebe ich die Anweisung number ein, damit ich das als Zahlenwert habe? In dem Code habe ich versucht, das zu ändern... dabei kommt aber entweder null oder eben ein Fehlermeldung.
let gcode := text(http("GET", "https://maps.googleapis.com/maps/api/distancematrix/json?origins=" + 'Anfang-Adresse' + "&destinations=" + 'Ziel-Adresse' + "&key=Habe ich"));
let d := text(extractx(gcode, "[0-9]+.(Tage|Tag)+"));
let h := text(extractx(gcode, "[0-9]+.(Stunden|Stunde)+"));
let min := text(extractx(gcode, "[0-9]+.(Minuten|Minute)+"));
if d != "" then
d + " " + h + " " + min
else
if h != "" then h + " " + min else min end
endDas ist der Code, den ich in das Feld mit eurer Unterstützung hinterlegt habe. Was ist da, dann hier zu ändern, wenn überhaupt.
Gruß Alex
Content aside
- vor 3 JahrenZuletzt aktiv
- 84Antworten
- 23967Ansichten