Page 1 sur 1

[RÉSOLU] Geocoding avec Nominatim

Publié : mar. oct. 02, 2018 6:55 pm
par Steph
Bonjour,

Voilà 2 jours que j'essaie de trouver une solution pour récupérer la latitude et longitude selon une adresse.

Que ce soit en XML ou JSON, pas moyen de récupérer avec PHP, chaque essai se solde par "bool(false)" pour ce qui est du XML et un "NULL" pour le JSON

Exemple avec JSON https://nominatim.openstreetmap.org/?st ... ormat=json

Code : Tout sélectionner

		$numero_rue = '5 Avenue Anatole';
		$code_postal = '75007';
		$ville = 'Paris';
		$pays = 'france';

		echo $url = 'https://nominatim.openstreetmap.org/?street=' . urlencode($numero_rue) . '&postalcode=' . urlencode($code_postal) . '&city=' . urlencode($ville) . '&country=' . urlencode($pays) . '&format=json';

		$json_data = json_decode($url, true);
		var_dump($json_data);
Exemple avec XML https://nominatim.openstreetmap.org/?st ... format=xml

Code : Tout sélectionner

		$numero_rue = '5 Avenue Anatole';
		$code_postal = '75007';
		$ville = 'Paris';
		$pays = 'france';

		echo $url = 'https://nominatim.openstreetmap.org/?street=' . urlencode($numero_rue) . '&postalcode=' . urlencode($code_postal) . '&city=' . urlencode($ville) . '&country=' . urlencode($pays) . '&format=xml';

		$XML = simplexml_load_file($url);

		var_dump($XML);
On dirait que soit les fichiers XML ou JSON ne sont pas valides ou alors que le serveur distant n'autorise pas la lecture.

Avez-vous une réelle solution à cela ?

Re: Geocoding avec Nominatim

Publié : jeu. oct. 04, 2018 6:14 pm
par OsmO
Pour ce qui est du JSON, je ne crois pas que json_decode() accepte une URL mais seulement une chaîne de caractères.
Il faut effectuer la requête HTTP au préalable. Le code suivant devrait fonctionner :

Code : Tout sélectionner

$data = array(
  'street'     => '5 Avenue Anatole',
  'postalcode' => '75007',
  'city'       => 'Paris',
  'country'    => 'france',
  'format'     => 'json',
);
$url = 'https://nominatim.openstreetmap.org/?' . http_build_query($data);
echo $url;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mettre ici un user-agent adéquat');
$geopos = curl_exec($ch);
curl_close($ch);

$json_data = json_decode($geopos, true);
var_dump($json_data);
Attention à bien respecter les conditions d'utilisation de Nominatim et à indiquer un User-Agent ou Referer.

Re: Geocoding avec Nominatim

Publié : ven. oct. 05, 2018 10:20 am
par Steph
Excellent, cela fonctionne :D

Un énorme merci, je n'avais pas penser à curl ;)

Re: [RÉSOLU] Geocoding avec Nominatim

Publié : dim. oct. 07, 2018 8:19 pm
par cquest
Si ce sont des recherches sur la France, nominatim sera très incomplet et il faudrait plutôt jeter un oeil sur https://adresse.data.gouv.fr/api