[RESOLU] Nominatim reverse - choisir parmi plusieurs valeurs

Eléphanteau du PHP | 21 Messages

05 janv. 2023, 10:21

J'utilise Nominatim Reverse pour récupérer le nom d'un lieu à partir de coordonnées GPS ($latdepart3 et $londepart3) à partir de ce code :

Code : Tout sélectionner

<?php $latdepart3 = round($latdepart2, 5); $londepart3 = round($londepart2, 5); function getAddress($RG_Lat,$RG_Lon) { $json = "https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=".$RG_Lat."&lon=".$RG_Lon."&zoom=10&addressdetails=1"; $ch = curl_init($json); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:59.0) Gecko/20100101 Firefox/59.0"); $jsonfile = curl_exec($ch); curl_close($ch); $RG_array = json_decode($jsonfile,true); return $RG_array['address']['village']; //$RG_array['address']['town']; //$RG_array['address']['city']; //$RG_array['address']['hamlet']; } $addr = getAddress($latdepart3,$londepart3); update_field('depart', $addr); ?>
Problème :
Selon la taille du lieu (de la grande ville au hameau), les données restituées changent.
La valeur à récupérer peut être celle correspondant à, par ordre décroissant de taille :
- city
- town
- village
- hamlet

Dans tous les cas, dans la page restituée, une seule de ces informations figure (exemple : https://nominatim.openstreetmap.org/rev ... sdetails=1).

Comment puis-je modifier ce code pour obtenir la bonne donnée, quelque soit la restitution ?
Merci d'avance,

Mammouth du PHP | 1967 Messages

05 janv. 2023, 10:36

test avec isset dans ton ordre de préfèrence. si ton premier choix n'existe pas passe au second etc.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 21 Messages

06 janv. 2023, 14:52

Merci pour ta réponse.
Peux-tu s'il te plaît m'éclairer sur la façon de procéder ?
J'ai tenté plusieurs options, mais je n'y parviens pas encore.

Mammouth du PHP | 1967 Messages

06 janv. 2023, 16:12

A la place de ton
return $RG_array['address']['village'];

test les valeurs une à une avec isset et retourne la valeur correspodante
if (isset($RG_array['address']['city'])) return $RG_array['address']['city'];
if (isset($RG_array['address']['town'])) return $RG_array['address']['town'];
...
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 21 Messages

06 janv. 2023, 20:38

Super, merci !