What3Words

Wenn man Koordinaten z.B. mündlich übermitteln will, kommt man schnell an seine Grenzen. Mit den 3 Wörtern von what3words funktioniert das sehr gut.

Für ein kleines Projekt wollte ich gern die vorhandenen Koordinaten in die 3 Worte umwandeln. Dies ist eigentlich ein simpler GET request. Mit JSON und cURL stoße ich leider an meine Grenzen und brauche einen Anstoß.

Eigentlich geht es nur um den Befehl:
curl --request GET --url 'https://api.what3words.com/v3/convert-to-3wa?key=MY-API-KEY&coordinates=51.521251%2C-0.203586&language=en&format=json'
Wie in der Doku beschrieben. Zurück liefert der Befehl ein JSON.

Meine Frage ist, wie ich den Befehl im PHP-Skript schreiben muss, damit ich das JSON dann z.B. auf den JSON-Decoder in die einzelnen Werte aufteilen kann?

Mit dem hauseigenen JSON-Decoder ist das leichter als gedacht. Dazu der HTTP-Client, der die oben stehende url abfragt und mir wie gewünscht die Daten des JSON auflöst.

Jetzt stehe ich einzig noch vor der Frage, wie ich die url im HTTP-Client dynamisch (per Skript?) anpassen kann? Denn es ändern sich ja regelmäßig die Koordinaten.

Ich hatte damit mal vor einigen Jahren gespielt.
Ich habe diese Bibliothek genutzt.

Und dann im Script die Abfrage gemacht:

require_once ('36367.ips.php');
use What3words\Geocoder\Geocoder;
use What3words\Geocoder\AutoSuggestOption;
$api = new Geocoder("APIKey");


$result = $api->convertTo3wa(number_format($latitude,5,'.',''),number_format($longitude,4,'.',''),'de');
print_r ($result);
print_r($api->getError());
SetValue(44065,$result['words']);

Hab es dann doch noch irgendwie selbst zusammengeglaubt:

<?php
$API=getvaluestring(54847);
$lat=getvaluefloat(20306);
$long=getvaluefloat(42147);

//Umwandlung , in .
$lat=str_replace(",", ".", $lat);
$long=str_replace(",", ".", $long);

// erzeuge einen neuen cURL-Handle
 $ch = curl_init();

 // setze die URL und andere Optionen
 curl_setopt($ch, CURLOPT_URL, "https://api.what3words.com/v3/convert-to-3wa?key=".$API."&coordinates=".$lat."%2c".$long."&language=de&format=json");
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

 // führe die Aktion aus und gib die Daten aus
 $result = curl_exec($ch);

 // schließe den cURL-Handle und gib die Systemresourcen frei
 curl_close($ch);
 
 //Übergabe der Daten an ein VIO_JSON
 VIO_PushText(24802, $result);