Standort nach Text und zurück kopieren
Hallo,
Ich habe bei meinen Kunden mehrere Felder für die Lieferadresse:
Mehrere Textfelder: Straße & Hausnummer, PLZ, Ort
und ein Standort-Feld. (Dieser wird über die Karte ausgewählt)
Gerne würde ich es so machen, dass wenn eines ausgefüllt ist, dies dann per Button auf das andere übertragen werden kann.
Leider bekomme ich es nicht hin, den Standort in Text zu konvertieren bzw. umgedreht.
9 Antworten
-
Hallo Benedikt,
Das Standort-Feld kann die Koordinaten nicht alleine Nach angaben der Adresse suchen/festlegen. Um das Feld zu füllen braucht man dreis parameter:
Adresse, Longitude, Latitude.
Die Koordinaten kann man über ein Drittanbieter über REST-Protikol ermitteln lassen. Z.B. Google-Maps Geocode. Man muss sich dort registrieren, Geocode als Dienst aktivieren und den API Schlüssel holen.
Eine globale Funktion für die Koordinatenermittlung kann so aussehen:---
function getGeocode(adress : text) do
let url := "https://maps.googleapis.com/maps/api/geocode/json?address=" + urlEncode(adress) + "&key=" + DEINAPIKey;
let methode := "GET";
let response := do as server
http(methode, url, "", "")
end;
{
place_id: response.result.first(results).place_id,
lat: response.result.first(results).geometry.location.number(lat),
lng: response.result.first(results).geometry.location.number(lng),
}
end;
---
Und die Formel für ein Button um das Standortfeld zu füllen wäre dann in etwa:
---let myAdr:= 'Straße & Hausnummer'+", "+PLZ+" "+ Ort;
let myCode:=getGeocode(myAdr);
StandortFeld:=location(myAdr,myCode.lat,myCode.lng)
---
Leo
-
Hallo Leo,
ich bin auch gerade dabei, sowas in meine Datenbank zu integrieren. Da ich es erst mal testen will, bin ich auf einen Dienst gekommen, der bis zu einer bestimmten Anzahl an Anfragen kostenlos ist.
Die Seite ist www.positionstack.com.
Der Request sieht so aus: http://api.positionstack.com/v1/forward? access_key = YOUR_ACCESS_KEY& query = 1600 Pennsylvania Ave NW, Washington DC
Ich verstehe bei Deiner Formel oben diesen Absatz nicht, ist das auf die Felder von Google bezogen, oder sind das Felder von Ninox?
{
place_id: response.result.first(results).place_id,
lat: response.result.first(results).geometry.location.number(lat),
lng: response.result.first(results).geometry.location.number(lng),}
Bei positionstack.com sieht der Response so aus:
{
"data": {
"results": [
{
"latitude": 38.897675,
"longitude": -77.036547,
"label": "1600 Pennsylvania Avenue NW, Washington, DC, USA",
"name": "1600 Pennsylvania Avenue NW",
"type": "address",
"number": "1600",
"street": "Pennsylvania Avenue NW",
"postal_code": "20500",
"confidence": 1,
"region": "District of Columbia",
"region_code": "DC",
"administrative_area": null,
"neighbourhood": "White House Grounds",
"country": "United States",
"country_code": "US",
"map_url": "http://map.positionstack.com/38.897675,-77.036547"
}
]
}
}Was müsste ich denn jetzt in der globalen Formel eintragen, damit die Formel in der Tabelle funktioniert?
Gruß
Mirko
-
Hallo,
ich hab es jetzt mal so probiert:
function getGeocode(adress : text) do
let myAcc := "MEIN_API_KEY";
let url := "http://api.positionstack.com/v1/forward?access_key =" + myAcc + "&query =" + adress;
let methode := "GET";
let response := do as server
http(methode, url, "", "")
end;
{
label: response.result.first(data).results.text(label),
latitude: response.result.first(data).results.number(latitude),
longitude: response.result.first(data).results.number(longitude)
}
endGibt in der globalen Formel keine Fehlermeldung, irgendwas passt aber nicht, bekomme immer diese Meldung in der Formel in der Tabelle:
"Die Funktion ist nicht definiert: location(string,any,any)"
Hat da einer eine Idee?
Gruß
Mirko
-
Hallo Mirko,
ich würde in der funktion die number weglassen und in der Location dann:
StandortFeld:=location(myAdr,number(myCode.lat),number(myCode.lng))
Leo
-
Hallo Leo,
das hat schon mal funktioniert, da gibt es jetzt keine Fehlermeldung mehr.
Aber der globale Code scheint nicht zu laufen, es gibt kein Ergebnis, bei positionstack zeigt er mir auch nicht an, dass er eine Anfrage hatte. Dort gibt es einen Zähler, wieviele Anfragen per Monat man gemacht hat. Der verändert sich nicht nach einer Anfrage.
Was könnte da falsch sein?
Gruß
Mirko
-
Hallo,
hab es heraus gefunden, bei einem kostenlosen Account ist es doch nicht möglich json Rückgabewerte zu bekommen.
Aber ich habe mir Google noch mal näher angeschaut, und festgestellt, dass es ja dort doch kostenlos geht, habe ich hier herausgefunden:
https://www.revilodesign.de/blog/google-maps-api/google-maps-api-erstellen/
Werde also dort einen Account erstellen und es dann wieder mit dem Code von Leo oben versuchen.
Gruß
Mirko
-
Hallo Mirko
Deine Aussage bezüglich des Rückgabewertes stimmt so nicht.
Du bekommst schon ein JSON zurück.
Ich habe mal eine DB für Positionstack nachgebaut.
Abfrage als globale Funktion und direkt per http-Call im Button.https://www.dropbox.com/s/a4pvgh4te46vi03/PositionStack.ninox?dl=0
Bezüglich der Genauigkeit der Anfrage, reicht die Anschrift manchmal allein nicht immer aus.
Die Übergabe des Länderkürzels und der Region zur besseren Genauigkeit könnten hier helfen. -
Hallo Uwe,
das ist ja super, nun klappt es! Vielen Dank dafür!!
Da wäre ich im Leben nicht drauf gekommen, dafür sind meine Codekenntnisse wohl nicht ausreichend.
Gruß
Mirko
Content aside
- vor 2 JahrenZuletzt aktiv
- 9Antworten
- 1069Ansichten
-
1
Folge bereits