Nominatim (du Latin, 'par le nom') est un outil permettant de chercher des données géographiques par leur nom et leur adresse et de générer des adresses potentielles à partir de coordonnées géographiques (reverse geocoding). L'outil peut être utilisé en ligne sur cette page : http://nominatim.openstreetmap.org.
Nominatim est aussi utilisé par l'outil Search de la page d'accueil d'OpenStreetMap et améliore la qualité de la recherche proposée sur les sites MapQuest Open Initiative, PickPoint et OpenCage Geocoder.
La présente page décrit le processus d'installation de Nominatim sur un ordinateur personnel utilisé en qualité de serveur.
Nominatim peut être installé en suivant la documentation officielle (en).
Voir aussi la documentation pour avoir les commandes à rentrer dans un terminal.
La création d'un fichier <local.php> situé dans le répertoire settings permet de personnaliser Nominatim. Les paramètres possibles peuvent être consultés dans le fichier <settings/settings.php>. Pour davantage de détail voir (en) doc
Si vous souhaitez personnaliser les titres des pages internet telles qu'elles s'affichent dans votre navigateur, il suffit de modifier le texte figurant entre les balises <title> et </title> dans les fichiers <lib/template/search-html.php> <lib/template/details-html.php> et <lib/template/details-error-html.php>.
ex :
<title>Perso - OpenStreetMap Nominatim : Recherche</title>
au lieu de :
<title>OpenStreetMap Nominatim: Search</title>
Le fonctionnement de Nominatim peut être amélioré par le recours aux pondérations Wikipédia qui permettent de mesure l'importance des données osm. Nominatim peut fonctionner sans ces données mais la qualité du résultat s'en trouve dégradée.
Téléchargement des données
wget --output-document=data/wikipedia_article.sql.bin http://www.nominatim.org/data/wikipedia_article.sql.bin wget --output-document=data/wikipedia_redirect.sql.bin http://www.nominatim.org/data/wikipedia_redirect.sql.bin
La taille cumulée de ces deux fichiers atteint 1,5 GO et ajoute 30 GO à la taille finale de Nominatim sur le disque. La durée d'installation de Nominatim s'en trouve accrue d'une heure environ.
Le cas échéant, utile pour les recherches concernant le territoire britannique.
wget --output-document=data/gb_postcode_data.sql.gz http://www.nominatim.org/data/gb_postcode_data.sql.gz
Aux États-Unis d'Amérique, l'instance Nominatim d'OSM utilise la base de données d'adresses TIGER pour compléter les données sur les numéros de rues qui restent encore incomplètes dans OpenStreetMap. L'ajout des données TIGER est possible après avoir installé la librairie GDAL pour Python. Installation de la librairie GDAL pour Python
sudo apt-get install python-gdal
Téléchargement des données TIGER 2014
Les fichiers à télécharger sont les fichiers EDGES (3 234 fichiers compressés, 11GO au total)
wget -r ftp://ftp2.census.gov/geo/tiger/TIGER2014/EDGES/
Conversion des données en requêtes SQL (sauvegardées dans data/tiger2011) :
./utils/imports.php --parse-tiger-2011 <répetoire des fichiers tiger edge>
Importation des données dans la base de données Nominatim de votre station de travail
./utils/setup.php --import-tiger-data
sudo -u postgres createuser -s <votre nom d'utilisateur>
Le nom d'utilisateur correspond au nom du compte qui doit être utilisé pour finaliser l'installation. Vous devez vous assurer (paramétrage généralement par défaut dans la plupart des distributions) que cet utilisateur peut se connecter à la base de donnée sans mot de passe.
Création de l’utilisateur du site web (PostgreSQL)
sudo -u postgres createuser -SDR www-data
Utilisateur nécessaire pour l'installation. Si vous souhaitez utiliser le site web avec un autre utilisateur, reportez-vous à la documentation (section Set up the website).
Par défaut la base de données PostgreSQL s'installe dans le répertoire racine, au risque de ne plus laisser de place au système. Le répertoire de la base de donnée est le suivant sur mon Ubuntu 14.04 : </var/lib/postgresql/9.3/main> [9.3 pour la version actuelle]. Le répertoire par défaut peut être modifié dans le fichier de configuration </etc/postgresql/9.3/main/postgresql.conf>.
Pour redémarrer le serveur PostgreSQL, deux commandes équivalentes
sudo pg_ctlcluster 9.3 main start
oubien
sudo service postgres 9.3 main start
L'ensemble des fichiers et répertoire doit être accessible en lecture pour le serveur PostgreSQL car certaines fonctions Nominatim Postgres sont intégrées au module C nominatim.so.
Ainsi, pour le cas d'un téléchargement et d'une compilation dans le répertoire <src> du répertoire utilisateur, saisir :
chmod +x ~/src chmod +x ~/src/Nominatim chmod +x ~/src/Nominatim/module
L'importation préalable du fichier mondial ("Planet file") oud'une extraction (par exemple du site Geofabrik) est nécessaire. Utiliser le format PBF.
Une fois le téléchargement terminé, saisir la commande suivante :
./utils/setup.php --osm-file <your planet file> --all --osm2pgsql-cache 18000 2>&1 | tee setup.log
Le paramètre –osm2pgsql-cache est optionnel mais fortement recommandé en cas d'importation de l'ensemble des données planétaires. Ce paramètre fixe la taille du cache des noeuds lors de l'importation osm2pgsql. 24 GO sont recommandés pour une importation des données mondiales mais vous pouvez choisir de fixer une valeur inférieure. À adapter à la taille de votre RAM pour éviter le swap.
Il se peut que vous rencontriez des problèmes liés au paramétrage de postgresql lors de l'importation des données, fichiers manquants, opérations impossibles, etc. La procédure ci-dessous a permis de solutionner le problème pour une installation particulière. À tenter sans garantie et en réfléchissant un peu. NB : postgresql exige que la version soit précisée, dans l'exemple ci-dessous c'est la 9.3. À adapter selon votre configuration.
sudo pg_ctlcluster 9.3 main stop
sudo -i -u postgres pg_dropcluster 9.3 main --stop exit
sudo apt-get purge postgresql-9.3 postgresql postgresql-9.3-postgis-scripts postgresql-client-9.3 postgresql-client-common postgresql-common postgresql-contrib postgresql-contrib-9.3 liblwgeom-2.1.4 libgdal-dev libpostgis-java libpostgresql-jdbc-java libpq-dev php5-pgsql postgis postgis-doc osmosis sudo apt-get autoremove
/var/lib/postgresql /etc/postgresql /var/log/postgresql /usr/share/postgresql et votre répertoire de données
sudo rm -R /var/lib/postgresql /etc/postgresql/ /var/log/postgresql/usr/share/postgresql sudo rm -R <votre répertoire>
sudo apt-get install postgresql-9.3 postgresql postgresql-9.3-postgis-scripts postgresql-client-9.3 postgresql-client-common postgresql-common postgresql-contrib postgresql-contrib-9.3 liblwgeom-2.1.4 libgdal-dev libpostgis-java libpostgresql-jdbc-java libpq-dev php5-pgsql postgis postgis-doc osmosis
(selon le résultat de la commande <pg_config –libdir>)
sudo ln -s /usr/share/postgresql/9.3/contrib/postgis-2.1 /usr/lib
sudo pg_createcluster -d <votre répertoire> 9.3 main
sudo pg_ctlcluster 9.3 main start
sudo -u postgres createuser -s <votre nom d’utilisateur>
sudo -u postgres createuser -SDR www-data
cd <votre répertoire d'installation>
./utils/setup.php --osm-file <votre fichier.osm.pbf> --all --osm2pgsql-cache 18000 2>&1 | tee setup.lo
psql -l
dropdb nominatim
Saisir les instructions suivantes dans le terminal :
./utils/specialphrases.php --countries > data/specialphrases_countries.sql psql -d nominatim -f data/specialphrases_countries.sql
Si vous souhaitez retrouver des marqueurs particuliers ("amenity") comme par exemple des cafés parisiens, vous de devez importer les phrases spéciales de ce wiki de la manière suivante :
./utils/specialphrases.php --wiki-import > data/specialphrases.sql psql -d nominatim -f data/specialphrases.sql
Ces opération doivent être répétées de temps en temps pour prendre en compte les mises à jours et compléments du wiki. Il est notamment nécessaire d'effectuer la mise à jour après chaque mise à jour de Nomnatim.
Si vous n'avez pas besoin des phrases pour toutes les langues, éditez utils/specialphrases.php et supprimez en début de fichier les langues non utilisées.
Les instructions ci-dessous rendront Nominatim disponible à http://localhost/nominatim.
Créer le répertoire du site et assurez vous que les droits en écriture sont ouverts pour l’utilisateur d'installation et en lecture par Apache.
sudo mkdir -m 755 <répertoire racine apache>/nominatim sudo chown <votre nom d'utilisateur> <répertoire racine apache>/nominatim
Vérifier que settings/local.php est configuré avec les valeurs correctes pour CONST_Website_BaseURL : il faut créer un fichier local.php dans le répertoire Nominatim-2.4.0/settings contenant les valeurs suivantes :
@define('CONST_Website_BaseURL', '<répertoire racine serveur pour le navigateur>/nominatim');
par exemple :
@define('CONST_Website_BaseURL', 'http://localhost/nominatim/');
#@define('CONST_Website_BaseURL', 'http://'.php_uname('n').'/');
et la remplacer (donc insérer en dessous) par :
@define('CONST_Website_BaseURL', 'http://localhost/nominatim/');
Ce n'est pas orthodoxe mais ça peut fonctionner en cas de problème d'arborescence.
Rendre disponible le répertoire du site web avec les liens symboliques nécessaires :
./utils/setup.php --create-website <répertoire racine apache>/nominatim
Vérifier que le fichier de configuration Apache contient les valeurs suivantes pour les répertoires :
<Directory "/var/www/html/nominatim/"> Options FollowSymLinks MultiViews AddType text/html .php </Directory>
En d'autres termes il faut insérer ces lignes dans le fichier de configuration </etc/apache2/apache2.conf> (adapter le nom du répertoire).
</var/www/html/nominatim> doit être remplacé par le nom du répertoire défini lors de la mise en place du site web Nominatim (voir ci-dessus).
Relancer Apache après modification de la configuration (sudo service apache2 start | restart)
Vous pouvez désormais utiliser Nominatim
Saisir http://localhost/nominatim/search.php dans votre navigateur internet saisir une adresse...ml/
Pas testé. Voir (en) doc
La recherche dans Nominatim fonctionne à partir d'objets nommés ounumérotés à partir des données Openstreetmap (OSM) ainsi que d'une liste d'objets "non nommés" comme des commerces, des hôtels, des bâtiments publics, etc.
Le serveur Nominatim peut fonctionner de manière interactive dans le navigateur : saisir l'adresse localhost/nominatim/search.php affiche une carte du monde avec une zone à l'intérieur de laquelle il suffit de saisir une adresse physique pour la géocoder.
Toutefois Nominatim peut faire nettement plus, c'est ce que nous allons voir ci-dessous.
Le géocodage est l'action consistant à transformer une adresse en coordonnées géographiques.
Il est conseillé de saisir les requêtes de gauche à droite, en commençant par le plus précis (1, quai de la fraternité, Marseille) puis, en cas de difficulté, de réssayer en ordre inverse, de droite à gauche.
Les requêtes sont passées dans le navigateur sous la forme suivante :
"http://nominatim.openstreetmap.org/search?<paramètres>"
ou
"http://nominatim.openstreetmap.org/search/<requête>?<paramètres>"
Rue de la République, Marseille et Marseille, Rue de la République sont deux formats valides
La saisie des numéros améliore la précision de la recherche. Dans ce cas le format de gauche à droite est nécessaire : 51, rue de la République, Marseille
La présence de virgules entre les termes de la recherche n'est pas obligatoire mais améliore l’efficacité de la requête.
L'usage des mots clés spécifiques est possible si les "phrases spéciales" (special phrases) ont été ajoutées à la base de donnée.
format=[html|xml|json|jsonv2]
Format de la sortie
Format html
Format XML (format structuré)
Format json
Format jsonv2
json_callback=<chaîne>
Empaquette le résultat de la requête dans un appel de fonction json, c'est à dire une chaîne commençant par "json>"
accept-language=<langue du navigateur au format chaîne de caractère>
Force la langue de résultat indépendamment des valeur figurant dans l'en-tête (header) http. Accepte toutes les langues au format rfc2616 oudes codes de langue séparés par des virgules.
q=<requête> <requête> est la chaîne de caractères recherchée. Les valeurs suivantes sont possibles :
Les requêtes structurées sont plus rapides et nécessites moins de ressources serveur. NE PAS COMBINER AVEC LES PARAMETRES q=<query> PARAMETRES
Restreint la recherche à un pays (ouune liste de pays). Code au format ISO 3166-1alpha2 (fr pour France)
zone préferentielle de recherche des résultats
Restreint la recherche aux seuls objets contenus dans la zone de recherche. Cette restriction permet la recherche par aménité. Ainsi [pub] échouera alors que [pub] avec bounded=1 affichera une liste d'objets correspondant à l'item à l'intérieur de la zone de recherche.*
Obsolète
Séparation de l'adresse en différents éléments
Peu utile pour un serveur autohébergé. Concerne les usages en ligne en masse
Permet d'exclure de la liste des résultats certains objets à partir de leur identifiant OSM. Cette fonctionnalité est utile lorsqu'une première recherche n'a produt qu'un nombre lmité de résultats. Exclure ces objets permet d'obtenir davantage de réponses.
Limite le nombre des résultats au nombre précisé
Non documenté
Non documenté
Affiche la géométrie des résultats au format geojson.
Affiche la géométrie des résultats au format kml.
Affiche la géométrie des résultats au format svg.
Affiche la géométrie des résultats au format WKT.
Pour faciliter le travail des utilisateurs, les liens sont donnés d'abord sur le serveur internet Nominatim d'Openstreetmap puis sur localhost pour les ubuntunautes qui ont poursuivi le travail d'installation du serveur à son terme.
À noter : les place_id sont différents !
http://nominatim.openstreetmap.org/details.php?place_id=20684057
http://localhost/nominatim/details.php?place_id=147400
https://nominatim.openstreetmap.org/search.php?q=20+la+Canebi%C3%A8re+Marseille&format=json
http://localhost/nominatim/search.php?q=20+la+Canebi%C3%A8re+Marseille&format=json
Et une petite dernière pour la route :
https://nominatim.openstreetmap.org/search.php?q=20+la+Canebi%C3%A8re+Marseille&format=xml
http://localhost/nominatim/search.php?q=20+la+Canebi%C3%A8re+Marseille&format=xml
Le géocodage inversé est l'action qui consiste à déduire une adresse à partir d'une position en latitude et longitude. Le paramètre optopnnel de zoom précise le niveau de détail requis.
Format de la sortie
Format XML (format structuré)
Format json
Empaquette le résultat de la requête dans un appel de fonction json, c'est à dire une chaîne commençant par "json>"
Force la langue de résultat indépendamment des valeur figurant dans l'en-tête (header) http. Accepte toutes les langues au format rfc2616 oudes codes de langue séparés par des virgules.
objet OSM (noeud/route/relation) à géocoder. Lorsque cela est possible, l'usage des identifiants d'objets OSM est préférable.
Coordonnées du point à géocoder.
Niveau de zoom, 1 correspond à un pays, 18 à un immeuble.
Séparation de l'adresse en différents éléments
Peu utile pour un serveur auto hébergé. Concerne les usages en ligne en masse.
http://localhost/nominatim/reverse?format=xml&lat=43.29537&lon=5.37444&zoom=18&addressdetails=1
http://localhost/nominatim/reverse?format=xml&lat=43.29537&lon=5.37444&zoom=18&addressdetails=1
Surprise ! C'est : 1, La Canebière, Marseille 1er Arrondissement, Marseille, Bouches-du-Rhône, Provence-Alpes-Côte d'Azur, 13001, France
http://localhost/nominatim/reverse?format=xml&lat=44.88989&lon=6.63344&zoom=18&addressdetails=1
Et la capture d'écran :
Gare SNCF de Briançon.
Affiche les adresses d'un ouplusiseurs objets OSM : noeuds, routes, relations.
http://nominatim.openstreetmap.org/lookup?<query>
Format de la sortie
xml Format XML (format structuré) json Format json
Empaquette le résultat de la requête dans un appel de fonction json, c'est à dire une chaîne commençant par "json>"
Force la langue de résultat indépendamment des valeur figurant dans l'en-tête (header) http. Accepte toutes les langues au format rfc2616 oudes codes de langue séparés par des virgules.
liste de 1 à 50 objets dont l'adresse doit être retournée.
Séparation de l'adresse en différents éléments
Peu utile pour un serveur autohébergé. Concerne les usages en ligne en masse.
Plusieurs méthodes existent, la documentation OpenStreetMap conseille Osmosis et renvoie à la lecture de <./utils/update.php –help> pour obtenir la liste des autres méthodes.
La version d'Osmosis disponible dans les paquets de la plupart des distributions est trop ancienne pour repérer correctement les différences pour la mise à jour. Il est donc conseillé de télécharger le binaire de la dernière version stable sur le site Osmosis puis de le décompresser. Copier alors le binaire dans </usr/local/bin> :
wget http://bretth.dev.openstreetmap.org/osmosis-build/osmosis-latest.zip unzip osmosis-latest.zip bin/osmosis mv bin/osmosis /usr/local/bin/osmosis rmdir bin rm osmosis-latest.zip
Indiquer alors à Nominatim d'utiliser cette version d'Osmosis en ajoutant cette cible au fichier settings/local.php:
@define('CONST_Osmosis_Binary', '/usr/local/bin/osmosis');
Par défaut, Nominatim est configuré pour réaliser des mises à jour des différences globales à la minute (?? global minutely diffs - mon anglais technique est insuffisant pour une traduction optimale).
Pour modifier les sources de mise à jour, le paramétrage est à faire dans le fichier <settings/local.php>. Par exemple, pour utiliser les mises à jours quotidiennes en Irlande à partir de Geofabrik, ajouter les lignes suivantes à <settings/local.php> :
@define('CONST_Replication_Url', 'http://download.geofabrik.de/europe/ireland-and-northern-ireland-updates'); @define('CONST_Replication_MaxInterval', '40000'); // Process each update separately, osmosis cannot merge multiple updates @define('CONST_Replication_Update_Interval', '86400'); // How often upstream publishes diffs @define('CONST_Replication_Recheck_Interval', '900'); // How long to sleep if no update found yet
Et pour la France :
@define('CONST_Replication_Url', 'http://download.geofabrik.de/europe/france-updates');
Il est nécessaire de préalablement effacer le fichier <configuration.txt> puis d’exécuter la commande setup.php :
rm configuration.txt ./utils/setup.php --osmosis-init
Lorsqu'un lieu est modifié dans la base de données, l'ensemble des lieux qui contiennent cet endroit doit être également mis à jour. Ces mises à jour hiérarchiques sont désactivées pas défaut car elles ralentissent l'importation initiale. Il convient d'activer ces mises à jour avec la commande suivante :
./utils/setup.php --create-functions --enable-diff-updates
La commande ci-dessous permet de maintenir à jour en permanence la base de donnée :
./utils/update.php --import-osmosis-all --no-npi
Mise à jour des données si la base de données porte sur plusieurs pays : le script ci-dessous devrait faire le job (original ici)
#!/bin/bash ### Country list COUNTRIES="europe/isle-of-man europe/kosovo" NOMINATIM="/var/Nominatim" ### Foreach country check if configuration exists (if not create one) and then import the diff for COUNTRY in $COUNTRIES; do DIR="$NOMINATIM/updates/$COUNTRY" FILE="$DIR/configuration.txt" if [ ! -f ${FILE} ]; then /bin/mkdir -p ${DIR} /usr/bin/osmosis --rrii workingDirectory=${DIR}/. /bin/echo baseUrl=http://download.geofabrik.de/${COUNTRY}-updates > ${FILE} /bin/echo maxInterval = 0 >> ${FILE} cd ${DIR} /usr/bin/wget http://download.geofabrik.de/${COUNTRY}-updates/state.txt fi FILENAME=${COUNTRY//[\/]/_} /usr/bin/osmosis --rri workingDirectory=${DIR}/. --wxc ${FILENAME}.osc.gz done INDEX=0 # false ### Foreach diff files do the import cd ${NOMINATIM}/updates for OSC in *.osc.gz; do ${NOMINATIM}/utils/update.php --import-diff ${NOMINATIM}/updates/${OSC} INDEX=1 done ### Re-index if needed if ((${INDEX})); then ${NOMINATIM}/utils/update.php --index fi ### Remove all diff files rm -f ${NOMINATIM}/updates/*.osc.gz
—- Contributeurs principaux : Zococo.
Basé sur Installation Nominatim par OpenStreetMap.