[RÉSOLU] Geocoding avec Nominatim

Extraire des données OSM, créer sa carte, uMap, utiliser sur un GPS ou un smartphone...
Steph
Messages : 2
Inscription : lun. oct. 01, 2018 6:22 pm

[RÉSOLU] Geocoding avec Nominatim

Message par Steph » mar. oct. 02, 2018 6:55 pm

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 ?
Dernière édition par Steph le ven. oct. 05, 2018 10:21 am, édité 1 fois.

OsmO
Messages : 45
Inscription : mer. janv. 06, 2016 7:13 pm
Localisation : Paris

Re: Geocoding avec Nominatim

Message par OsmO » jeu. oct. 04, 2018 6:14 pm

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.

Steph
Messages : 2
Inscription : lun. oct. 01, 2018 6:22 pm

Re: Geocoding avec Nominatim

Message par Steph » ven. oct. 05, 2018 10:20 am

Excellent, cela fonctionne :D

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

Avatar de l’utilisateur
cquest
Messages : 1821
Inscription : ven. avr. 16, 2010 12:22 am
Localisation : Val de Marne
Contact :

Re: [RÉSOLU] Geocoding avec Nominatim

Message par cquest » dim. oct. 07, 2018 8:19 pm

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

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 10 invités