0

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

null
    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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

      • Benjamin_Kunzmann
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Leonid Semik ich habe deinen Code in meiner DB als Globale Funktion eingebaut um zwei Textfelder "lat" und "lon"  in einer Adressentabelle zu füllen.

      Leider kommen keine Resultate zurück. In der Google API Seite wird 100% Fehler pro Abfrage angezeigt. Das zeigt mir dass mein API-Key verwendet wird, allerdings an irgendeiner Übergabestelle etwas nicht verstanden wird.

      Hast du, oder jemand anderes eine Idee was der Fehler sein könnte?

      LG

      Benjamin

    • Mirko.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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

    • Mirko.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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)
    }
    end

     

    Gibt 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

    • Leonid_Semik
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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

    • Mirko.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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

    • Mirko.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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.

    • Mirko.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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