Fiche Javascript : API de cartographieObjet de la fiche :État de la fiche
Plan de la fiche :
Avant propos :Avertissement sur l'API GoogleCe service n'est plus disponible avec google map simplement car ce dernier devient payant et ne fonctionne plus que sur des pages sécurisées de type https. La démo ci dessous ne fonctionne donc pas pour les raisons précédentes, toutefois vous pourrez consulter le code qui fontionnait avant les restrictions et qui normalement devrait fonctionner si vous respectez les nouvelles règles de Google. Présentation![]()
Le but est de permettre d'implanter rapidement sur son site une partie localisation basée sur l'API (application programing interface) map de google.
IntégrationRemarques5 points principaux de cette intégration :
Autre solution sans APIIl s'agit là d'une toute petite commande pour se positionner sur la carte de google en fonction de l'adresse renseignée. ExempleOpen-source Leaflet : Configuration de base. Mise en oeuvreCette bibliothèque JavaScript moderne et open-source est rapidement devenue très populaire parmi les développeurs en raison de sa flexibilité. Si vous cherchez une liberté totale, c'est une bonne option de se raccorder sur OpenStreetMap, puis de se connecter en utilisant Leaflet. Ce chapitre va permettre de prendre connaissance de l'initialisation du mode de fonctionnement ainsi que des fonctionnalités de contrôle sur les cartes Leaflet. Il est bien sûr possible d'aller beaucoup plus loin et d'avoir un panneau de contrôle plus complexe intégrant filtres, informations diverses. Cette fiche est faite pour pouvoir démarrer rapidement avec un résultat sur ce type de produit. A vous de l'enrichir à votre guise. Les démos sont basées sur les documents de référence https://leafletjs.com/reference-1.6.0.html et https://esri.github.io/esri-leaflet/tutorials/ On va commenter étape par étape le code de base pour vous permettre de commencer rapidement sur les bases de Leaflet, puis voir dans les démos le travail avec des marqueurs, des polylines, des popups etc. et le traitement des événements. Pour la suite nous n'allons pas réécrire le code des l'exemples, mais explicitez chaque action proposée par les démos. Le but étant de préciser quelques syntaxes et objets de base afin que vous puissiez comprendre le mécanisme, et mettre en application par vous même, plus facilement les différentes propriétés, méthodes, et évènements utilisables avec l'API Leaflet.
Open-source Leaflet : Gérer les évènements sur la carte (demo 1)De façon générique : .on('Evènement', function(e){}; Parmi tant d'autres les évènements que l'on active dans la démo (principalement pour le journal) sont :
Note(1) : L'activation de l'évènement click par lui même ne pose aucun problème, c'est plutot sa désactivation qui a était embêtante.
Open-source Leaflet : Les boutons contrôle de zoom (demo 1)PropriétésLe zoom sur la carte peut être initialisé de différentes manières : les boutons de la carte, la roulette de la souris, les touches clavier plus et moins, par double click, par 2 doigts pour les écran tactiles.
Modes d'initialisation
Personnaliser de nouveaux boutons de zoom![]() Les boutons de contrôle de zoom sont initialisés par défaut, mais on peut facilement ne plus faire apparaitre ces boutons, en créer de nouveaux, les supprimer, les déplacer. Au départ les boutons de zoom c'est celà => Démarrer avec l'option zoomControl à falsePour cela il faut déclarer l'option zoomControl à false lors de l'instanciation de la carte map = L.map('map', {maxZoom: x,minZoom: y,zoomControl: false) Créer les boutons avec quelques optionsOn va utiler la classe L.control.zoom et ses options pour créer de nouveaux boutons de zoom sur la carte. Style des boutonsOn modifier les feuilles de style liées au zoom control Positionnement des boutonsA partir de son identifiant de création on pourra positionner les boutons par la méthode setPosition("paramètre position");. Le paramètre position peut prendre les valeurs "topleft", "topright", "bottomleft" ou "bottomright" correspondant à chacun des coins de la carte. EffacementA partir de son identifiant de création on pourra supprimer les boutons par la méthode remove();. RésultatOn obtient quelque chose comme celà, un peu plus engageant Open-source Leaflet : Block de recherche de localisation en fonction des adresses (demo 1).GénéralitésL'avantage de cette solution est que nous n'utilisons aucune API spécifique. Pour cela nous allons utiliser Nominatim qui est un moteur de recherche pour les données Openstreetmap. On peut y rechercher un nom ou une adresse (recherche prospective) ou rechercher des données par ses coordonnées géographiques (recherche inverse). Plusieurs modes de recherche avec leurs options associées sont possibles :
Pour plus de détails consultez le site : nominatim.org. Nous utiliserons (via une connection XMLHttpRequest) le type de format d'URL suivant pour la conversion adresse vers coordonnées géographiques. Dans cet exemple ce sont les coordonnées d'une adresse à Montrouge (rue henri ginoux montrouge) qui sont demandées https://nominatim.openstreetmap.org/search/?format=json&limit=2&q=avenue henri ginoux montrouge france
Comme paramètres passés par l'url on notera le format : on demande la réponse dans un fichier de type json ? Données brutes reçues
[{"place_id":108028477,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright","osm_type":"way","osm_id":98888400,"boundingbox":["48.8180197","48.8193267","2.3223094","2.3233936"],"lat":"48.8186535","lon":"2.3228631","display_name":"Avenue Henri Ginoux, Quartier Vieux Montrouge, Montrouge, Antony, Hauts-de-Seine, Île-de-France, France métropolitaine, 92120, France","class":"highway","type":"secondary","importance":0.6},{"place_id":279135444,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright","osm_type":"way","osm_id":776764634,"boundingbox":["48.8167147","48.81704","2.3214366","2.3216293"],"lat":"48.8168304","lon":"2.3215072","display_name":"Avenue Henri Ginoux, Quartier Vieux Montrouge, Montrouge, Antony, Hauts-de-Seine, Île-de-France, France métropolitaine, 92120, France","class":"highway","type":"tertiary","importance":0.6}]
Création du bouton de rechercheLe bouton se compose d'un champ d'entrée de l'adresse, d'un bouton d'activation de la recherche, d'une zone à cliquer de résultats disponibles.
Interrogation du serveur (requête XMLHttpRequest) et exploitation des résultats.Le mécanisme met en oeuvre 4 fonctions :
La séquence est la suivante: Une fois le champ adresse complété, l'appui sur le bouton "Rechercher" active la fonction addr_search("adresse recherchée"); tel que défini dans la variable layoutRecherche. Cette fonction est classique d'une requête XMLHttpRequest que nous avons déjà vue dans une fiche précédente ( ICI ). La réponse du serveur est récupérée dans le call back sous forme de données JSON que l'on parse pour obtenir une structure de tableau. Une fois ces résultats obtenus ils sont stockés dans le tableau myArrBack qui va être décodé par la fonction decodeRecherche et affiché sous forme de liste dans la zône results (zône elle aussi préalablement définie dans la variable layoutRecherche). A l'issue du choix de l'utilisateur la fonction onClickResults est appelée pour finalement générer un marker et ses informations sur le point de la carte recherché. Open-source Leaflet : Marqueursleaflet a un intéressant contrôle qui permet aux utilisateurs de contrôler les couches qu’ils voient sur la carte. Comment l'utiliseret plus : Il existe deux types de couches :
Application au projet de site web |