Improving documentation

This commit is contained in:
David Larlet 2024-05-02 14:38:15 -04:00
parent 4cba114f3f
commit d66b84297f
No known key found for this signature in database
GPG key ID: 3E2953A359E7E7BD
84 changed files with 1883 additions and 5 deletions

View file

@ -16,7 +16,6 @@ manipuler. La carte uMap représentée ci-dessous est disponible
![anatomie_carte_umap_2021.jpg](../../static/tutoriels/1-je-consulte-une-carte-umap/anatomie_carte_umap_2021.jpg)
------------------------------------------------------------------------
À droite de la carte et selon le choix de son auteur peut être affiché
un des deux panneaux suivants :
@ -117,7 +116,7 @@ dépend de la manière dont vous souhaitez partager la carte :
page Web : il suffit de copier le code HTML et de linsérer dans
celui de votre page Web. Cette possibilité est explorée en détails
dans le tutoriel
[Je publie ma carte et en contrôle laccès](/tutoriels/7-je-publie-ma-carte-et-en-controle-lacces/).
[Je publie ma carte et en contrôle laccès](7-publishing-and-permissions.md).
- **Télécharger les données** permet dobtenir les données visibles
sur la carte, dans différents formats. Cela peut vous permettre
dutiliser ces données avec un autre outil.
@ -137,7 +136,6 @@ dafficher sur la carte la popup décrivant cet élément. Le texte de
saisie au-dessus de la liste permet de rechercher un élément, en ne
montrant que ceux dont le nom contient le texte saisi.
------------------------------------------------------------------------
## Faisons le point

View file

@ -0,0 +1,404 @@
!!! abstract "Ce que nous allons apprendre"
- Créer un calque qui utilise des données distantes
- Produire une carte de chaleur (heatmap)
- Afficher des calques en fonction du niveau de zoom
- Afficher des données qui évoluent en temps réel
- Utiliser un portail *open data*
- Créditer la source des données pour respecter la licence
## Procédons par étapes
Jusquici toutes les cartes que nous avons créées montrent des données
gérées par uMap. Même lorsque nous avons utilisé les données dun
tableur dans le tutoriel précédent, ces données ont été *importées* sur
le serveur uMap, où elles sont *stockées*. Si ces données sont
modifiées, nous devons de nouveau les importer pour mettre à jour la
carte.
Dans ce tutoriel nous allons apprendre comment créer une carte qui
utilise des **données distantes**, cest-à-dire stockées sur un autre
serveur que le serveur uMap.
### 1. Jutilise des données distantes
Nous prenons pour ce tutoriel le thème des stations de vélo-partage à
Paris, les fameux Vélib, dont les données sont disponibles en open
data.
#### Utiliser un portail open data
Commençons par observer le jeu de données « Vélib - Localisation et
caractéristique des stations », disponible sur le portail open data de
la ville de Paris :
<https://opendata.paris.fr/explore/dataset/velib-emplacement-des-stations/>.
Longlet **Informations** explique que les données « sont actualisées
chaque minute selon la norme GBFS 1.0 ». Cette norme décrit plusieurs
fichiers, accessibles avec lAPI décrite dans longlet **API**, dont le
format nest pas compris par uMap.
Longlet **Tableau** montre les données : chaque station a un nom et une
capacité (nombre demplacements), ainsi quune position géographique.
Longlet **Export** propose plusieurs formats, dont les formats
**GeoJSON**, **KML** et **GPX**, tous trois compris par uMap. Nous
choisissons le [format GeoJSON](https://fr.wikipedia.org/wiki/GeoJSON),
qui permet dexploiter tous les attributs présents dans les données.
Une possibilité serait de télécharger le fichier puis de limporter dans
uMap, comme nous lavons fait dans le tuto précédent avec un fichier au
format CSV. Outre les manipulations, cela impliquerait de mettre à jour
ces données régulièrement. Nous allons plutôt configurer notre carte
pour accéder directement aux données mises à disposition par le portail
open data. Pour cela nous copions le lien vers le fichier : un clic
droit ouvre un menu contextuel qui permet de **copier le lien** vers le
fichier :
https://opendata.paris.fr/api/explore/v2.1/catalog/datasets/velib-emplacement-des-stations/exports/geojson?lang=fr&timezone=Europe%2FBerlin
![umap-donnees-distantes.png](../../static/tutoriels/10-jintegre-des-donnees-distantes/umap-donnees-distantes.png)
#### Configurer les données distantes
Voyons maintenant comment utiliser ce lien dans uMap. Pour cela nous
créons un nouveau calque et ouvrons, dans les Propriétés du calque,
longlet **Données distantes**. Les informations à fournir sont les
suivantes :
- **URL** : nous collons ici le lien vers le fichier copié
précédemment.
- **Format** : nous devons sélectionner le format, ici **geojson**
- **Licence** : ODbL comme indiqué sur la page dexport du portail
open data
Le bouton **Vérifier lURL** permet de tester laccès au fichier depuis
uMap, et de vérifier que le format choisi correspond bien aux données.
Les données sont alors affichées sur la carte.
#### Proxy ou pas proxy ?
Si cela ne fonctionne pas (uMap affiche un bandeau qui indique «
Problème dans la réponse du serveur »), il est probable que le serveur
sur lequel le fichier est stocké nautorise pas laccès au fichier
depuis un service tiers.
!!! note
Il sagit du mécanisme CORS, décrit dans larticle
Wikipédia [Cross-origin ressource
sharing](https://fr.wikipedia.org/wiki/Cross-origin_resource_sharing).
uMap permet de contourner cette contrainte en faisant transiter le
fichier par le serveur uMap, grâce à loption **Avec proxy** quil
convient alors dactiver. Cette option est associée au menu déroulant
**Cacher la requête avec proxy**, qui permet au serveur uMap de
conserver le fichier afin de ne pas le récupérer à chaque affichage de
la carte. La durée la plus longue (1 jour) serait ici adaptée.
#### Au sujet de la licence
Le fichier des emplacements de stations Vélib est publié sous la
[licence ODbL](https://opendatacommons.org/licenses/odbl/). Celle-ci
exige que le producteur des données soit crédité lors de leur
utilisation. Les informations sur le portail open data indique que ce
producteur est « Autolib Velib Métropole ». Il convient donc de le citer
dans les **Crédits** de la carte, un onglet du menu *Propriétés de la
carte*.
![umap-geojson-properties.png](../../static/tutoriels/10-jintegre-des-donnees-distantes/umap-geojson-properties.png)
#### Afficher le nom et la capacité des stations
Afin dafficher le nom et la capacité de chaque station dans une
infobulle, nous devons déterminer les clefs permettant daccéder à ces
informations. Pour cela il nous faut observer le fichier GeoJSON.
Nous téléchargeons ce fichier depuis longlet Export du portail open
data, ou collons le lien copié précédemment dans la barre de navigation
du navigateur. Soit le fichier est directement affiché dans le
navigateur, soit il est téléchargé : une possibilité consiste alors à
louvrir dans un éditeur de texte, ou à le déposer dans la fenêtre du
navigateur.
Dans le bloc `properties` de chaque élément, nous observons plusieurs
associations clef-valeur : la propriété **name** contient le nom de la
station, **capacity** contient le nombre demplacements. Ces propriétés
correspondent à nos entêtes de colonnes dun fichier CSV (cf. tuto
précédent).
Nous pouvons alors configurer le **Gabarit de la popup** pour afficher
ces informations dans linfobulle de chaque station, comme nous lavons
vu dans le [tuto précédent](9-map-from-spreadsheet.md).
Par exemple :
# {name}
{capacity} emplacements
### 2. Je combine deux calques pour les mêmes données
Il y a beaucoup de stations Vélib et la carte est un peu dense à
léchelle de Paris. À cette échelle il serait plus intéressant davoir
une vue densemble de la répartition de loffre Vélib sur la capitale
et les communes voisines.
![umap-heatmap.png](../../static/tutoriels/10-jintegre-des-donnees-distantes/umap-heatmap.png)
#### Produire une carte de chaleur ou « Heatmap »
uMap permet de présenter les données dun calque sous plusieurs formes,
avec le menu déroulant **Type de calque** dans le menu *Propriétés du
calque*. Les différents types de calques sont :
- **Par défaut** : chaque donnée est affichée individuellement.
- **Avec cluster** : les points proches sont regroupés en un seul
cercle.
- **Heatmap** : les données sont représentées sous forme de *carte de
chaleur*.
- **Cloroplèthe** : cet affichage est adapté aux polygones, et permet
de graduer leur couleur.
Les types *Avec cluster* et *Heatmap* sont plutôt adaptés aux calques
contenant uniquement des points. Lorsquon choisit un de ces modes, un
onglet de configuration apparaît. Pour le type *Heatmap*, longlet
**Heatmap: paramètres** permet dajuster lintensité ou *chaleur* de
la carte (du bleu glacial au rouge brûlant), et de sélectionner une
propriété pour évaluer cette *chaleur*. Celle-ci doit correspondre à une
propriété de nos données contenant des valeurs numériques. Si aucune
propriété nest définie, chaque point a la même valeur et seule la
densité géographique des points influe sur la *heatmap*.
Notre fichier de stations contient justement la propriété `capacity`,
qui correspond au nombre demplacements de chaque station un bon
critère pour représenter loffre de vélos en libre-service. Quant au
**Rayon de heatmap**, un curseur permet de lajuster avec effet immédiat
sur la carte. Il est judicieux de tester ce rayon à différents niveaux
de zoom de la carte, afin que la carte révèle bien les données.
#### Dupliquer le calque
Le type daffichage dun calque sapplique quel que soit le niveau de
zoom. Or aux niveaux de zooms élevés, à léchelle du quartier, il est
plus intéressant de montrer les stations individuelles que la carte de
chaleur. Nous allons combiner les 2 représentations en créant 2 calques
qui utilisent les mêmes données, lun affichant les stations
individuelles, lautre sous forme de Heatmap. Lastuce consiste ensuite
à activer ou désactiver chaque calque en fonction du niveau de zoom.
Procédons par étapes :
1. Dupliquons notre calque avec lopération **Cloner** disponible dans
longlet **Opérations avancées** du panneau Propriétés du calque.
2. Le panneau Propriétés du nouveau calque est alors affiché :
renommons ce calque, par exemple « Heatmap stations Vélib ».
3. Changeons le type de calque pour **Heatmap**, longlet **Heatmap:
paramètres** apparaît.
4. Dans cet onglet, saisissons le nom de la propriété `capacity` et
ajustons le **rayon de heatmap** (une valeur autour de 30 fonctionne
bien pour ce jeu de données)
5. Dans longlet **Données distantes**, configurons le calque pour
quil saffiche **jusquau zoom** 15.
6. De la même manière, configurons le calque initial pour quil
saffiche **à partir du zoom** 15.
Nous faisons ici le choix de superposer, au zoom 15, la heatmap aux
stations individuelles. Cela produit une transition entre les 2 modes de
représentation, et permet de repérer les stations avec un grand nombre
demplacements.
Notez que nous navons pas eu besoin de préciser lURL des données
distantes et leur format : ces paramètres ont été conservés lors de la
duplication du calque.
### 3. Jutilise des données dynamiques
Un autre jeu de données du portail open data sintitule « Vélib - Vélos
et bornes - Disponibilité temps réel » :
<https://opendata.paris.fr/explore/dataset/velib-disponibilite-en-temps-reel/>.
Nous pouvons utiliser ces données *en temps réel* en réalité avec un
léger différé  pour alimenter notre carte uMap, et afficher le nombre
de places et de vélos disponibles. La procédure est la même que
ci-dessus, à une nuance près : loption **Dynamique** de longlet
**Données distantes** doit être activée. Elle indique à uMap de
récupérer les données à chaque affichage de la carte, cest-à-dire à
chaque fois que la carte est déplacée, zoomée ou dézoomée. Pour autant,
ces données ne seront pas automatiquement mises à jour par uMap à un
intervalle de temps régulier : cest à lutilisateur de rafraîchir la
page web ou de déplacer la carte.
![umap-api-properties.png](../../static/tutoriels/10-jintegre-des-donnees-distantes/umap-api-properties.png)
Il reste à
modifier notre gabarit de popup pour afficher les disponibilités en
temps réel. Pour identifier le nom des propriétés, nous pouvons utiliser
longlet **API** sur le portail open data : le panneau **Résultats**
montre un extrait des données avec toutes leurs propriétés. Ces
propriétés sont les mêmes que pour lexport GeoJSON. Voici un exemple
possible de gabarit de popup :
# {name}
{capacity} emplacements dont {numdocksavailable} libres
{numbikesavailable} vélos disponibles dont {ebike} VAE
![umap-api-parameters.png](../../static/tutoriels/10-jintegre-des-donnees-distantes/umap-api-parameters.png)
#### Filtrer les données à la source
Le panneau Résultats dans longlet **API** nous montre lexistence de la
propriété `is_installed`. Celle-ci permet de détecter des stations qui
ne sont pas en service, que nous ne souhaitons pas afficher sur notre
carte.
Le panneau **Requête pour lappel API** permet de générer une requête,
affichée sous ce panneau (**URL de lappel API**), et de visualiser les
données produites par cette requête dans le panneau **Résultats**. Il
permet également dajouter des paramètres à la requête, pour filtrer les
données produites. Le paramètre **refine** permet de filtrer les données
en fonction de la valeur dune ou plusieurs propriétés. Si nous
indiquons `is_installed` pour le nom de la propriété et `NON` pour la
valeur, nous pouvons voir le nombre de stations qui ne sont pas en
service, et que nous ne voulons pas intégrer à notre carte.
Les données produites à laide cet onglet **API** sont au format GBFS,
qui nest pas connu de uMap. Les requêtes dexport au format GeoJSON
acceptent les mêmes paramètres. Pour produire les données filtrées au
format GeoJSON, nous devons donc éditer la requête *à la main*.
Procédons par étapes *un peu geek* :
1. Saisir `is_installed` et `OUI` dans le champ **refine**
2. Supprimer la valeur du champ `limit`, car nous ne voulons pas
*limiter* la réponse de la requête à 20 stations.
3. Observons la requête générée :
`/api/explore/v2.1/catalog/datasets/velib-disponibilite-en-temps-reel/records?refine=is_installed%3AOUI`,
elle se compose de 3 sections :
- lURL de base, jusquau dernier caractère **`/`**
- le **endpoint** `records` suivi du caractère **`?`**
- le paramètre `refine=is_installed%3AOUI` (`%3A` est l*encodage*
du caractère **`:`**)
4. Prenons la requête générée pour lexport GeoJSON :
`https://opendata.paris.fr/api/explore/v2.1/catalog/datasets/velib-disponibilite-en-temps-reel/exports/geojson?lang=fr&timezone=Europe%2FBerlin`,
elle se compose des mêmes sections :
- lURL de base :
`https://opendata.paris.fr/api/explore/v2.1/catalog/datasets/velib-disponibilite-en-temps-reel/exports/`
- le endpoint `geojson?`
- la liste de paramètres `lang=fr&timezone=Europe%2FBerlin` (`%2F`
est lencodage du caractère **`&`** qui permet de séparer
plusieurs paramètres)
5. Nous pouvons combiner lURL et le endpoint de la requête GeoJSON,
suivi du paramètre `refine=is_installed%3AOUI` (les paramètres
`lang` et `timezone` ne sont ici pas utiles) :
`https://opendata.paris.fr/api/explore/v2.1/catalog/datasets/velib-disponibilite-en-temps-reel/exports/geojson?refine=is_installed%3AOUI`
Utiliser cette requête comme URL des données distantes de notre calque
**Stations Vélib** permet de nafficher que les stations en service.
Notez que pouvons aussi utiliser le paramètre `exclude` pour exclure les
stations dont la propriété `is_installed` a la valeur `NON`. Nous
pouvons utiliser ce même mécanisme pour exclure les stations qui nont
aucun vélo disponible :
https://opendata.paris.fr/api/explore/v2.1/catalog/datasets/velib-disponibilite-en-temps-reel/exports/geojson?exclude=is_installed%3ANON&exclude=numbikesavailable%3A0
### 4. Jinjecte des paramètres dans la requête
uMap permet dinjecter dans une requête des paramètres, avec la syntaxe
`{paramX}`. Ces paramètres dépendent de létat de la carte au moment de
lenvoi de la requête :
- les coordonnées du centre de la carte : {lat} et {lng}
- la *bounding_box* de la carte : {bbox} ou {west}, {south}, {east} et
{north}
- le niveau de zoom : {zoom}
Le portail open data peut prendre en compte certains de ces paramètres
pour affiner la requête. Notre objectif est ici de récupérer la
disponibilité des stations se trouvant **dans la partie visible de la
carte**, cest-à-dire dans la *bounding_box*. Cela permet de réduire le
volume de données transférées, et de les afficher plus rapidement.
#### Jutilise la console dAPI de la plateforme open data
Longlet API du jeu de données permet daccéder à la **console dAPI
complète**. Nous choisissons, dans la section Dataset, le *endpoint*
**Export a dataset**.
![umap-api-console.png](../../static/tutoriels/10-jintegre-des-donnees-distantes/umap-api-console.png)
Apparaît alors un formulaire où nous pouvons renseigner les différents
paramètres :
- **dataset_id** est lidentifiant du jeu de données :
`velib-disponibilite-en-temps-reel`
- pour le **format** nous sélectionnons `geojson`
- nous pouvons à nouveau filtrer les stations en service avec le
paramètre **refine** : `is_installed:OUI`
![umap-api-console-dataset.png](../../static/tutoriels/10-jintegre-des-donnees-distantes/umap-api-console-dataset.png)
Définissons le paramètre **where** avec la fonction `in_bbox()` (voir la
[documentation
OpenDataSoft](https://help.opendatasoft.com/apis/ods-explore-v2/#section/ODSQL-predicates/in_bbox()))
et pour linstant des latitudes et longitudes fixes (quelque part à
Paris) :
![umap-api-console-bbox.png](../../static/tutoriels/10-jintegre-des-donnees-distantes/umap-api-console-bbox.png)
**coordonnees_geo** est le nom du champ contenant la géométrie dans les
données dorigine, que lon peut trouver en les exportant dans un format
autre que GeoJSON.
Testons maintenant que la requête fonctionne en cliquant sur **Execute**
: le code de réponse 200 indique que la requête a fonctionné, et il est
possible de télécharger le fichier résultant.
![umap-api-console-execute.png](../../static/tutoriels/10-jintegre-des-donnees-distantes/umap-api-console-execute.png)
#### Je dynamise la requête
Modifions maintenant notre requête *statique* (tous les paramètres sont
fixes) pour la rendre *dynamique*, en remplaçant les coordonnées de la
bounding_box par les paramètres qui seront injectés par uMap. Nous
nutilisons pas ici le paramètre `{bbox}`, car lordre des valeurs ne
correspond pas à celui attendu par lAPI open data. La fonction sécrit
alors :
in_bbox(coordonnees_geo,{south},{west},{north},{east})
ce qui donne avec lencodage :
in_bbox%28coordonnees_geo%2C{south}%2C{west}%2C{north}9%2C{east}%29
La requête encodée complète est donc :
https://opendata.paris.fr/api/explore/v2.1/catalog/datasets/velib-disponibilite-en-temps-reel/exports/geojson?where=in_bbox%28coordonnees_geo%2C{south}%2C{west}%2C{north}9%2C{east}%29&limit=-1&refine=is_installed%3AOUI
Il ne reste plus quà utiliser cette requête comme URL pour nos données
distantes.
Notez quil nest pas nécessaire dutiliser la forme encodée, car uMap
procédera à lencodage. LURL peut donc être plus lisible :
https://opendata.paris.fr/api/explore/v2.1/catalog/datasets/velib-disponibilite-en-temps-reel/exports/geojson?where=in_bbox(coordonnees_geo,{south},{west},{north},{east})&limit=-1&refine=is_installed:OUI
## Faisons le point
La carte produite pour ce tuto est visible ici :
<http://u.osmfr.org/m/1051915/>
Nous avons vu comment **exploiter des données open data** sans les
télécharger, ce qui permet que notre carte reste à jour (à condition
bien sûr que les données soient actualisées par leur producteur). Nous
avons également vu comment **optimiser la requête** en injectant la
*bounding box* de la partie visible de la carte.
Dautres sites mettent à disposition des données via une API, lenjeu
est alors de sapproprier la syntaxe des requêtes en lisant la
documentation et testant les requêtes.
??? info "Licence"
Travail initié par Antoine Riche sur [CartoCité](https://wiki.cartocite.fr/doku.php?id=umap:10_-_j_integre_des_donnees_distantes) sous licence [CC-BY-SA 4](https://creativecommons.org/licenses/by-sa/4.0/deed.fr).

View file

@ -0,0 +1,345 @@
!!! abstract "Ce que nous allons apprendre"
- Créer un calque utilisant des *données distantes* cest-à-dire non
stockées par uMap
- Utiliser une **requête Overpass** comme source de données distantes
- Utiliser une *requête dynamique* prenant en compte létendue visible
de la carte
- Contrôler laffichage des calques en fonction du niveau de zoom
## Procédons par étapes
Lobjectif de ce tutoriel est dexplorer les différentes manières
dafficher sur une carte uMap des données externes, ou distantes,
cest-à-dire des données qui ne sont pas stockées sur le serveur uMap.
Nous allons pour cela utiliser des données **OpenStreetMap**, que nous
allons extraire avec l[API
Overpass](https://wiki.openstreetmap.org/wiki/FR:Overpass_API/Overpass_QL).
Nous allons en quelques étapes créer une carte du vélo à Nantes,
montrant les stationnements ainsi que les locations en libre-service.
### 1. Je crée un calque affichant le résultat dune requête Overpass
Commençons par afficher les stations *Bicloo*, les locations de vélos en
libre-service à Nantes. Allons-y étape par étape :
1. produire et tester la requête Overpass avec Overpass Turbo
2. adapter la requête pour produire des données acceptées par uMap
3. exporter la requête
4. créer un calque uMap utilisant cette requête
#### Créer la requête Overpass
Le site [Overpass Turbo](http://overpass-turbo.eu/) propose un assistant
qui facilite la rédaction dune requête. Activez lassistant et
saisissez le texte suivant, qui permet dextraire les locations de vélo
situées sur la commune de Nantes :
amenity=bicycle_rental in Nantes
Cliquez sur **Construire et exécuter la requête** : la requête est créée
dans léditeur à gauche de la carte, puis le résultat est affiché sur la
carte.
![overpass_turbo_assistant.jpg](../../static/tutoriels/11-je-valorise-les-donnees-openstreetmap-avec-overpass-et-umap/overpass_turbo_assistant.jpg)
#### Adapter la requête pour uMap
Avant dexporter la requête nous devons ladapter. Lassistant Overpass
Turbo produit des requêtes dont le résultat est au format JSON. uMap
sait lire des données dans plusieurs formats, dont le format GeoJSON,
mais pas le format JSON produit par Overpass. Par contre uMap comprend
très bien le format XML selon la syntaxe OSM (OpenStreetMap).
Pour que la requête produise des données au format XML/OSM, il suffit de
modifier dans léditeur de requête la clause **`[out:json]`** par
**`[out:xml]`**. Vous pouvez à nouveau exécuter la requête et observer
la différence de format dans longlet **Données** qui montre le résultat
de la requête.
![overpass_turbo_format_xml.jpg](../../static/tutoriels/11-je-valorise-les-donnees-openstreetmap-avec-overpass-et-umap/overpass_turbo_format_xml.jpg)
#### Exporter la requête Overpass
Exportez la requête en cliquant sur **Exporter** : un panneau saffiche.
Ouvrez longlet **Requête** et cliquez sur **compact** à droite de
**Overpass QL**. Un nouvel onglet intitulé **Overpass API Converted
Query** apparaît. Faites un **clic droit** sur la ligne soulignée en
bleu, et choisir **Copier ladresse du lien** (avec Mozilla Firefox) :
lURL de la requête est copié dans le presse-papier.
![overpass_turbo_exporter.jpg](../../static/tutoriels/11-je-valorise-les-donnees-openstreetmap-avec-overpass-et-umap/overpass_turbo_exporter.jpg)
#### Utiliser la requête dans uMap
![umap_requete_overpass_url.png](../../static/tutoriels/11-je-valorise-les-donnees-openstreetmap-avec-overpass-et-umap/umap_requete_overpass_url.png)
Dans un nouvelle carte uMap, créez un calque et ouvrez longlet
**Données distantes**. Collez dans la case URL le contenu du
presse-papier et sélectionez le format **osm**, qui correspond au format
XML dans Overpass.
Notez que lURL est *encodée* pour pouvoir être utilisée comme requête
HTTP : les caractères spéciaux comme `"` sont convertis en `%22`. Ne les
modifiez pas !
Vous pouvez configurer le calque comme cela a été décrit dans les
tutoriels précédents.
![umap_overpass_infobulle.jpg](../../static/tutoriels/11-je-valorise-les-donnees-openstreetmap-avec-overpass-et-umap/umap_overpass_infobulle.jpg)
De la même façon que les valeurs dun tableur peuvent être affichées dans les
infobulles (voir [cette section](9-map-from-spreadsheet.md)
du tutoriel précédent), vous pouvez afficher dans les infobulles les
*tags* OpenStreetMap. Les tags disponibles sont visibles dans longlet
Données sur Overpass Turbo.
Par exemple le gabarit suivant permet dafficher des infobulles comme
celle de droite.
# {name}
{capacity} emplacements
Carte bancaire : {payment:credit_cards}
{note}
### 2. Jaffiche les parkings à vélo efficacement
Ajoutons à notre carte les parkings à vélo. La requête Overpass pour
obtenir les parkings à vélos de Nantes est semblable à celle utilisée
pour les locations, et peut être créée avec lassistant :
`amenity=bicycle_parking in Nantes`.
![overpass_turbo_export_geojson.png](../../static/tutoriels/11-je-valorise-les-donnees-openstreetmap-avec-overpass-et-umap/overpass_turbo_export_geojson.png)
Lexécution de cette requête prend près de 5 secondes. Ce délai est trop
long pour une carte *interactive*. Aussi plutôt que dexécuter le
requête lors de laffichage de la carte nous préférons extraire les
données et les importer dans uMap.
#### Importer des données statiques
Dans Overpass Turbo, cliquez sur **Exporter**, sélectionnez longlet
**Données** puis cliquez sur **Download/copy as GeoJSON**. Cette
opération convertit le résultat de la requête dans le format GeoJSON (un
format standard pour transférer des données géographiques sur internet)
et crée un fichier nommé `export.geojson` dans le dossier
`Téléchargements` de votre ordinateur.
Dans la carte uMap importez le fichier ainsi produit dans un nouveau
calque (voir [cette section](9-map-from-spreadsheet.md) du tutoriel précédent).
Les parkings à vélos sont affichés mais la carte
perd en fluidité et ne réagit pas immédiatement lorsquon zoome ou la
déplace. Cela est dû au nombre élevé de marqueurs affichés sur la carte
(plus de 1600).
#### Afficher une carte de densité
![umap_heatmap.png](../../static/tutoriels/11-je-valorise-les-donnees-openstreetmap-avec-overpass-et-umap/umap_heatmap.png)
Une possibilité pour
contourner ce problème est dafficher les marqueurs sous forme de
clusters, ou de carte de chaleur (heatmap), aussi appelée carte de
densité. Nous choisissons la seconde option qui permet de prendre en
compte le nombre de places de chaque parking, stocké dans le tag
`capacity`.
Ainsi la carte montrera non pas le nombre de parkings à vélos mais le
nombre de places de stationnement (dans OpenStreetMap un seul parking à
vélo peut représenter un grand nombre d*appuis-vélos*).
Dans les propriétés du calque, sélectionnez le Type de calque
**Heatmap**.
Ensuite, dans longlet **Propriétés avancées** saisissez `capacity` dans
le champ **Propriété optionnelle à utiliser pour calculter lintensité
de la heatmap**. Enfin vous pouvez ajuster lintensité de la couleur en
modifiant la **Valeur de rayon pour la heatmap**.
La carte gagne en fluidité, mais lutilisation dune *heatmap* ne permet
pas didentifier lemplacement précis des parkings à vélos. Létape
suivante propose une solution pour résoudre cette inconvénient.
### 3. Jaffiche un calque en fonction du niveau de zoom
Lorsque les données dun calque sont ***distantes*** (cest-à-dire
**non** stockées sur le serveur uMap), il est possible de contrôler
laffichage de ces données en fonction du niveau de zoom. Il faut pour
cela déposer le fichier de données sur un serveur et déterminer lURL de
ce fichier.
#### Utiliser un fichier stocké sur un serveur
![umap_donnees_distantes_wordpress.png](../../static/tutoriels/11-je-valorise-les-donnees-openstreetmap-avec-overpass-et-umap/umap_donnees_distantes_wordpress.png)
Si vous disposez dun accès FTP à un serveur, cela ne pose pas de
difficulté. Si vous avez accès au *back office* dun CMS comme
Wordpress, vous pouvez probablement y déposer un fichier. Prenons
lexemple de Wordpress.
Par sécurité Wordpress ne permet pas de déposer un fichier au format
JSON. Il se fie pour cela à lextension du nom de fichier, il est donc
possible de contourner cette contrainte en renommant le fichier.
Procédons par étapes.
1. renommez le fichier `export.geojson` produit plus haut en
`parkings-velos-nantes.txt`
2. dans le *back office* Wordpress, ajoutez un **Média** et
sélectionnez le fichier ainsi renommé
3. affichez les détails du fichier et copiez son **Adresse Web**, de la
forme
`http://monsite.fr/wp-content/uploads/2018/01/parkings-velos-nantes.txt`
4. créez un nouveau calque uMap et collez cette adresse Web dans le
champ **URL** de longlet **Données distantes**
5. sélectionnez le format **geojson**
6. précisez la licence qui sapplique aux données : **ODbL 1.0**
puisquil sagit de données OpenStreetMap
7. activez loption **Avec proxy** en bas de cet onglet : cela autorise
le navigateur Web à accéder à un fichier stocké sur un serveur autre
que le serveur uMap
8. enregistrez les modifications de la carte
#### Combiner deux calques utilisant le même fichier
Pour associer fluidité de la carte et affichage de chaque parking nous
allons associer deux calques utilisant les mêmes données :
- jusquau niveau de zoom 16, un calque montrant la capacité de
stationnement sous forme de *heatmap*
- à partir du niveau de zoom 16, un calque montrant les parkings à
vélo sous forme de marqueurs
À nouveau procédons par étapes.
1. éditez le calque créé précedemment et dans longlet **Données
distantes** saisissez la valeur **16** dans le champ **Jusquau
zoom**
2. dupliquez le calque avec laction **Cloner** de longlet **Actions
avancées** : ainsi le nouveau calque est déjà configuré pour
utiliser le fichier placé sur le seveur
3. sélectionnez le **Type de calque** par défaut pour le nouveau calque
4. dans longlet **Données distantes** saisissez la valeur **16** dans
le champ **À partir du zoom**
![umap_heatmap_et_infobulle.jpg](../../static/tutoriels/11-je-valorise-les-donnees-openstreetmap-avec-overpass-et-umap/umap_heatmap_et_infobulle.jpg)
Enfin vous pouvez renommer le nouveau calque, configurer le type de
marqueur, et définir le gabarit de popup, par exemple :
# {capacity} emplacements
Type : {bicycle_parking}
Couvert : {covered}
Limage à droite montre un extrait de la carte au niveau de zoom 16,
auquel nous avons choisi dafficher les deux calques.
### 4. Jutilise une requête dynamique
Utiliser des données extraites plutôt quune requête présente un
inconvénient : la mise à jour des données sur OpenStreetMap nest pas
répercutée sur notre carte. Pour pallier à cela nous vous proposons de
modifier le calque montrant les parkings à vélos sous forme de
marqueurs, de sorte quil utilise une requête dynamique.
Une **requête dynamique** permet d*injecter* dans la requête des
*variables* relatives à létat actuel de la carte uMap. Nous allons
utiliser une requête qui sapplique sur la seule partie visible de la
carte, définie par un rectangle (ou *bounding box*). Cette requête
sexécutera à chaque zoom ou déplacement de la carte (doù le terme
*dynamique*) et récupérera les parkings à vélos à lintérieur de ce
rectangle.
#### Simplifier la requête Overpass
!!! note
Pour faciliter lopération nous commençons par
simplifier la requête Overpass. Les points importants sont :
1. placer la clause **`[bbox:{{bbox}}]`** en entête de requête pour que
ce paramètre ne soit présent quune seule fois
2. remplacer la production du résultat par la clause **`out center;`**
qui permet de convertir chaque *way* (fermé ou pas) en un point
[out:xml][bbox:{{bbox}}];
(
node["amenity"="bicycle_parking"];
way["amenity"="bicycle_parking"];
);
out center;
#### Adapter et exporter la requête
![requete_dynamique.png](../../static/tutoriels/11-je-valorise-les-donnees-openstreetmap-avec-overpass-et-umap/requete_dynamique.png)
Lopération est délicate, et exige sang froid et concentration :
1. remplacez `{{box}}` par `{south},{west},{north},{east}` : il sagit
de 4 variables quuMap remplacera, lors de lexécution de la
requête, par les valeurs définissant lemprise de la carte.
2. exportez la requête en utilisant loption **download/copy as
standalone query** : un fichier texte est produit et téléchargé.
3. ouvrez le fichier dans un éditeur de texte et ajoutez en début de
ligne la base de lURL permettant dexécuter une requête Overpass :
`http://overpass-api.de/api/interpreter?data=`
4. copiez la requête modifiée et collez le texte dans le champ URL de
longlet **Données distantes**
5. activez loption **Dynamique** et définissez le zoom à partir duquel
le calque est affiché
6. selon le serveur Overpass utilisé, loption **Avec
proxy** doit être activée ou désactivée (voir ci-dessous)
Par commodité la requête modifiée est reprise ci-dessous, où elle peut
être copiée par un triple-clic :
http://overpass-api.de/api/interpreter?data=[out:xml][bbox:{south},{west},{north},{east}];(node["amenity"="bicycle_parking"];way["amenity"="bicycle_parking"];);out center;
!!! note
Nhésitez pas à utiliser un autre serveur Overpass en
libre service, dont la liste est disponible dans les **Paramètres
généraux** de Overpass Turbo, par exemple
`https://overpass.kumi.systems/`. Attention ce dernier exige
d**activer** loption **Avec proxy**, alors que le serveur
`http://overpass-api.de/` nécessite que loption soit **désactivée**.
!!! note
Nutilisez pas la variable {bbox} car elle sera
remplacée par des coordonnées dont lordre (W,S,N,E) nest pas celui
attendu par Overpass (S,W,N,E) !
Vous pouvez manipuler ci-dessous la carte produite par lensemble de ce
tutoriel. Zoomez jusquà ce que les parkings à vélos apparaissent et
déplacez la carte pour constater laspect dynamique des requêtes.
<iframe width="100%" height="400px" frameBorder="0" src="https://umap.openstreetmap.fr/fr/map/le-velo-a-nantes_189194?scaleControl=false&miniMap=false&scrollWheelZoom=false&zoomControl=true&allowEdit=false&moreControl=false&searchControl=null&tilelayersControl=null&embedControl=null&datalayersControl=false&onLoadPanel=undefined&captionBar=false"></iframe><p><a href="http://umap.openstreetmap.fr/fr/map/le-velo-a-nantes_189194">Voir en plein écran</a></p>
## Faisons le point
Nous avons vu comment créer une carte montrant les données OpenStreetMap
à jour, à laide de requêtes Overpass. Seule la couche montrant la
densité des stationnements sous forme de *heatmap* nécessitera de
renouveler lextraction des données de temps en temps.
!!! note
Les serveurs Overpass utilisés dans ce tutoriel sont
des serveurs en libre service mis à disposition gracieusement. Ces
serveurs sont très sollicités aussi il convient de les utiliser avec
modération.
Si vous produisez une carte destinée à un grand nombre de consultations,
préférez lutilisation de données statiques, importées dans uMap ou
stockées sur un serveur. Merci !
Si vous utilisez Github, ce [court
tutoriel](https://hackmd.io/OkwpRqQ7QXC3p8C0jfTUGQ?view) en anglais
explique comment utiliser un *workflow* pour exécuter une requête
Overpass et placer le résultat en cache.
??? info "Licence"
Travail initié par Antoine Riche sur [CartoCité](https://wiki.cartocite.fr/doku.php?id=umap:11_-_je_valorise_les_donnees_openstreetmap_avec_umap) sous licence [CC-BY-SA 4](https://creativecommons.org/licenses/by-sa/4.0/deed.fr).

View file

@ -191,7 +191,7 @@ savons la retrouver facilement. Nous avons vu comment créer, *styliser*
et modifier points et lignes. Nous navons pas traité ici des polygones,
qui représentent des surfaces. Certaines fonctionnalités propres aux
polygones méritent dêtre détaillées, ce que nous ferons dans le
tutoriel [Le cas des polygones](/tutoriels/8-le-cas-des-polygones/).
tutoriel [Le cas des polygones](8-polygons.md).
Pour le moment voyons comment nous pouvons davantage [personnaliser
notre carte](4-customize-map.md).

View file

@ -60,7 +60,7 @@ carte peut vous aider à en choisir un plutôt quun autre, par exemple :
- les fonds **Outdoors**, **Landscape** ou **OpenTopoMap** montrent le
relief : judicieux pour une carte de randonnée
- **OpenCycleMap** montre les grands itinéraires cyclistes, comme les
EuroVélo (Côte Atlantique, Loire à Vélo...)
EuroVélo (Côte Atlantique, Loire à Vélo)
- **Positron**, **Toner** et **OSM-Monochrome** sont en noir et blanc
: vos marqueurs, lignes et polygones seront plus visibles
- le style **HOTOSM**, créé par le [groupe

View file

@ -0,0 +1,205 @@
!!! abstract "Ce que nous allons apprendre"
- Formater le texte des infobulles
- Ajouter un lien vers une page Web
- Insérer une photo et définir sa taille
- Intégrer une vidéo
## Procédons par étapes
![aide-miseenforme.png](../../static/tutoriels/5-je-cree-des-infobulles-multimedia/aide-miseenforme.png)
Nous avons vu dans
le tutoriel [Je consulte une carte uMap](1-browsing-a-map.md)
comment associer un nom et
une description à un élément de la carte. Ce nom et cette description
sont affichés dans une infobulle (*popup* en anglais) qui apparaît
lorsquon clique sur lélément.
Le contenu de cette infobulle peut être enrichi de plusieurs manières :
- en formatant le texte : titres, caractères gras et italiques
- en insérant un ou plusieurs liens vers une page Web
- en insérant une image ou une vidéo
Mettre en forme une infobulle nécessite dutiliser une syntaxe décrite
en cliquant sur le point dinterrogation visible à droite de lintitulé
**description**, reprise ci-contre.
------------------------------------------------------------------------
### 1. Mettre en forme le texte dune infobulle
![miseenforme-resultat.png](../../static/tutoriels/5-je-cree-des-infobulles-multimedia/miseenforme-resultat.png)
Un exemple
vaut mieux que de longues explications : la description ci-dessous
produit linfobulle à droite.
![miseenforme-syntaxe.png](../../static/tutoriels/5-je-cree-des-infobulles-multimedia/miseenforme-syntaxe.png)
Notez les points suivants :
- une ligne commençant par `#` définit une ligne titre, un **caractère
espace** doit être placé entre le caractère `#` et le texte du titre
- une **zone vide** est ajoutée automatiquement en-dessous de chaque
titre
- il est possible de combiner caractères gras et italiques en
utilisant `***`
- le triangle en bas à gauche du champ de saisie permet de lagrandir
### 2. Ajouter un lien vers une page Web
Reprenons [la carte de nos vacances à
Crozon](http://u.osmfr.org/m/64936/). Au 3ème jour de vacances un fort
vent dOuest nous amène à aller dans lAnse de Morgat, bien abritée du
vent. Nous décidons de documenter cette visite sur la carte. Nous
ajoutons un marqueur sur la carte, puis découvrons avec intérêt
larticle Wikipédia sur Morgat : <https://fr.wikipedia.org/wiki/Morgat>.
Pour
ajouter à notre infobulle **un lien vers larticle**, il suffit de
copier ladresse de la page Web, affichée dans la barre dadresse du
navigateur, et de la placer entre **double-crochets**. Linfobulle à
droite correspond à la description ci-dessous :
Morgat est un ancien village de pêcheurs.
Article Wikipédia :
[[https://fr.wikipedia.org/wiki/Morgat]]
![miseenforme-liensimple.png](../../static/tutoriels/5-je-cree-des-infobulles-multimedia/miseenforme-liensimple.png)
Nous pouvons aussi **cacher ladresse du lien** et la remplacer par un
texte. Pour cela il suffit de faire suivre ladresse dune barre
verticale (AltGr + 6 sur un clavier français) et du texte :
Morgat est un ancien village de pêcheurs.
[[https://fr.wikipedia.org/wiki/Morgat|Article Wikipédia]]
![miseenforme-lienavectexte.png](../../static/tutoriels/5-je-cree-des-infobulles-multimedia/miseenforme-lienavectexte.png)
Cette forme est particulièrement utile pour les adresses longues.
------------------------------------------------------------------------
### 3. Insérer une image
Umap ne permet pas de stocker des images, mais sait afficher des photos
publiées sur un serveur Web.
![miseenforme-photo.png](../../static/tutoriels/5-je-cree-des-infobulles-multimedia/miseenforme-photo.png)
Larticle
Wikipédia montre une belle photo de lAnse de Morgat. Les photos
visibles dans Wikipédia sont sous licence libre *[Creative
Commons](http://creativecommons.fr/)*. Cela signifie que lauteur·rice
de la photo renonce à ses droits dauteur : nous pouvons donc utiliser
cette photo. Pour cela nous devons :
1. copier l**adressse de limage** (cette opération est accessible
dans le menu affiché par un clic droit sur la photo)
2. placer cette adresse entre double accolades :
Morgat est un ancien village de pêcheurs.
{{https://upload.wikimedia.org/wikipedia/commons/thumb/2/22/Morgat_8006.jpg/330px-Morgat_8006.jpg}}
[[https://fr.wikipedia.org/wiki/Morgat|Article Wikipédia]]
#### Afficher vos photos
Si vous disposez dun serveur vous pouvez lutiliser stocker vos photos.
Si ce nest pas le cas vous pouvez utiliser un service comme
**[Framapic](https://framapic.org/)**, un service de stockage libre que
lassociation **[Framasoft](https://framasoft.org/)** met à la
disposition de tous sans contre-partie. Lopération est très simple :
1. stockez votre photo sur Framapic par un glisser-déposer depuis votre
explorateur de fichier vers le navigateur
2. copiez le lien daffichage de la photo
3. collez ce lien entre **double accolades** dans la description de
linfobulle : `{{https://framapic.org/xxx/yyy.jpg}}`
![lienframapic.png](../../static/tutoriels/5-je-cree-des-infobulles-multimedia/lienframapic.png)
#### Modifier la taille dune image
La taille de la photo est
restreinte par la taille de linfobulle. Pour **agrandir une image**
vous devez utiliser une infobulle plus grande. Pour cela ouvrez longlet
`Options dinteraction`, cliquez sur `Définir` en face de
`Style de popup` puis choisissez **Nom et description (large)**.
![styledepopup.png](../../static/tutoriels/5-je-cree-des-infobulles-multimedia/styledepopup.png)
A linverse vous pouvez **réduire la taille dune image**, en faisant
suivre le lien vers la photo dune barre verticale et dun nombre qui
définit la **largeur en pixels** de limage, par exemple :
{{https://framapic.org/xxx/yyy.jpg|400}}
#### Associer une image à un lien vers une page Web
Il est possible dintégrer une image qui ouvre une page Web lorsque
lutilisateur clique dessus. Cela consiste en fait à créer un lien vers
une page Web (syntaxe `[[lien|texte]]`), en utilisant en guise de texte
le lien vers une image (syntaxe `{{image}}`). Exemple avec le site et le
logo Framasoft :
[[https://framasoft.org/|{{https://framasoft.org/nav/img/logo.png}}]]
### 4. Insérer une vidéo
Insérer une vidéo est plus complexe. En effet le navigateur Web a besoin
dun lecteur pour afficher une vidéo. Les sites de partage de vidéos
comme Youtube, DailyMotion ou encore [Framatube](https://framatube.org/)
de Framasoft, proposent pour chaque vidéo un lien qui permet de
lintégrer dans une autre page Web en utilisant une *iframe*.
Nous trouvons sur YouTube une [vidéo des Grottes marines de
Morgat](https://www.youtube.com/watch?v=sKvjd8bGsZM), qui se visitent en
bateau. Pour intégrer cette vidéo à une infobulle, suivez les étapes :
1. ouvrez longlet **Intégrer** visible *sous* la vidéo
2. copiez ladresse après `src=` (sans les guillemets), notez quelle
comporte le terme *embed* qui signifie *intégrer*
![partageyoutube.png](../../static/tutoriels/5-je-cree-des-infobulles-multimedia/partageyoutube.png)
3. coller cette adresse entre **triple accolades** dans linfobulle :
{{{https://www.youtube.com/embed/sKvjd8bGsZM}}}
4. pour un meilleur résultat utilisez un style de popup large, notez la
hauteur et la largeur et définissez la taille de l*iframe* avec les
mêmes valeurs :
{{{https://www.youtube.com/embed/sKvjd8bGsZM|315*560}}}
Voici le résultat, la vidéo peut être directement visionnée dans notre
infobulle :
![miseenforme-video.png](../../static/tutoriels/5-je-cree-des-infobulles-multimedia/miseenforme-video.png)
## Faisons le point
Nous avons à présent tous les éléments pour produire une belle carte,
avec des éléments stylisés et les infobulles qui les décrivent avec un
contenu mis en forme et multimédia : liens, photos et vidéos.
La syntaxe permettant de mettre en forme une infobulle est certes un peu
complexe, mais la bonne nouvelle est que cette même syntaxe peut être
utilisée sur uMap en deux autres endroits :
- la description de la carte, définie dans le menu **Éditer les
paramètres**
- le descriptif des **calques**, que nous découvrons dans le
[prochain tutoriel](6-handling-datalayers.md).
??? info "Licence"
Travail initié par Antoine Riche sur [CartoCité](https://wiki.cartocite.fr/doku.php?id=umap:5_-_je_cree_des_infobulles_multimedia) sous licence [CC-BY-SA 4](https://creativecommons.org/licenses/by-sa/4.0/deed.fr).

View file

@ -0,0 +1,180 @@
!!! abstract "Ce que nous allons apprendre"
- Créer des calques et organiser le contenu de la carte
- Définir les propriétés dun calque
- Gérer les calques dune carte
## Procédons par étapes
### 1. Créer un calque
Reprenons la [carte du Festival des 3 continents](http://u.osmfr.org/m/26381/)
vu dans le tutoriel [Je consulte une carte uMap](1-browsing-a-map.md). Les
données de cette carte sont organisées en plusieurs calques :
- les cinémas : marqueurs jaunes
- les autres lieux du festival : marqueurs bruns
- les lignes de transport en commun
- les stations de vélo-partage Bicloo
![umap_calques_gauche_droite.jpg](../../static/tutoriels/6-je-structure-ma-carte-avec-des-calques/umap_calques_gauche_droite.jpg)
Le sélecteur de calques permet à lutilisateur de zoomer sur lensemble
des éléments dun calque, de le masquer ou lafficher à loisir. Chaque
calque peut être décrit dans le panneau latéral de la carte. Organiser
les éléments dune carte est donc pratique pour consulter la carte, nous
verrons aussi que cela permet de faciliter sa création.
![umap_edit_layers.png](../../static/tutoriels/6-je-structure-ma-carte-avec-des-calques/umap_edit_layers.png)
Le menu **Gérer les
calques**, disponible en mode édition, affiche la liste des calques
existants et permet de créer un nouveau calque. Cliquez ensuite sur
**Ajouter un calque**, apparaît alors le panneau **Propriétés de la
couche** du nouveau calque (*calque* ou *couche*, les deux termes sont
équivalents).
![](../../static/tutoriels/6-je-structure-ma-carte-avec-des-calques/umap_layer_props_top.png)
Saisissez le nom du calque et une description de la catégorie déléments
auxquels vous destinez ce calque : ils seront affichés dans le panneau
**À propos**. Ci-dessous le résultat correspondant aux propriétés
saisies à droite.
![umap_layer_description.png](../../static/tutoriels/6-je-structure-ma-carte-avec-des-calques/umap_layer_description.png)
!!! note
Sautez une ligne en début de description
pour celle-ci apparaisse **sous** le nom du calque et non à côté dans le
panneau À propos.
### 2. Organiser le contenu de la carte
Lorsque vous
ajoutez un élément à la carte, en haut du panneau de propriétés de
lélément se trouve un **menu déroulant** qui vous permet de choisir le
calque où placer lélément.
![umap_layer_select.png](../../static/tutoriels/6-je-structure-ma-carte-avec-des-calques/umap_layer_select.png)
Il est bien sûr possible de changer le calque dun élément déjà créé.
Nhésitez donc pas, lorsque votre carte senrichit, à *restructurer* son
contenu en plusieurs couches.
#### Comment définir les calques dune carte ?
Il ny a pas de méthode établie pour définir les calques : cela dépend
vraiment des données placées sur la carte et de lexpérience du
cartographe. Voici, pour quelques thématiques de cartes et à titre
dexemples, une proposition de listes de calques :
- tourisme : hébergement, restauration, transports, musées, points de
vue…
- logistique dun festival : accès, scènes, restauration, sanitaires,
déchets, postes de secours, réseau électrique…
- événement à portée internationale : un ou plusieurs calques par
langue
- structures dun réseau : structures porteuses, adhérentes au réseau,
partenaires
- projet daménagement : les différents scénarios ou variantes du
projet
Nous verrons plus loin que lorsquune carte est intégrée à une page Web,
il est possible de créer plusieurs présentations de la même carte, et de
sélectionner pour chacune quels calques sont visibles. Vous pourrez
donc, à partir dune même carte uMap, diffuser plusieurs cartes dont le
contenu est adapté au public visé par chacune des cartes.
Ainsi pour une carte multi-lingues vous pourrez diffuser la carte en
différentes langues en sélectionnant le ou les calques de chaque langue.
Pour lexemple dune carte de la logistique dun festival, vous pourrez
ainsi diffuser une carte vers le public (accès, scènes, restauration,
sanitaires), une autre vers les équipes techniques (sanitaires, déchets,
réseau électrique), une troisième vers la sécurtié civile (accès, postes
de secours, réseau électrique), etc.
### 3. Définir les propriétés dun calque
Un intérêt majeur de lutilisation des calques est la possibilité de
définir, pour chaque calque, le **style par défaut** des éléments qui
seront ajoutés au calque. Vous éviterez ainsi la tâche fastidieuse de
définir un à un le style de chaque élément et la carte sera nettement
plus *lisible* car homogène. Surtout, si vous décidez que les cinémas
doivent être affichés non plus en jaune mais en rouge, vous ne ferez la
modification quune seule fois pour lensemble du calque et non pour
chacun des éléments.
![](../../static/tutoriels/6-je-structure-ma-carte-avec-des-calques/umap_layer_edit.png)
Dans le
panneau de gestion des calques cliquez sur le crayon pour éditer les
propriétés du calque. Les onglets **Propriétés de la forme** et
**Propriétés avancées** vous permettent de définir les styles par défaut
du calque. Vous retrouvez les mêmes propriétés que celles utilisées dans
le tutoriel
[Jutilise un compte et crée une belle carte](3-create-account.md).
![umap_legende.png](../../static/tutoriels/6-je-structure-ma-carte-avec-des-calques/umap_legende.png)
Toutes les propriétés, qui
sappliquent aux marqueurs, aux lignes et aux polygones, sont ici
disponibles. Un calque peut en effet contenir indifféremment les trois
types déléments, vous pouvez donc définir les propriétés par défaut
pour chaque catégorie.
Une remarque toutefois : vous pouvez définir **une et une seule
couleur**, qui sapplique à tous les éléments quel que soit leur type.
Cette contrainte vise à créer une carte lisible, en associant une
couleur à chaque calque. Cette couleur apparaît en **légende du panneau
À propos**, comme dans lexemple ci-contre.
### 4. Gérer les calques
Revenons au **panneau de gestion des calques**. Nous avons vu comment
créer un nouveau calque et définir ses propriétés.
![](../../static/tutoriels/6-je-structure-ma-carte-avec-des-calques/umap_gestion_calques.png)
Le carré à droite permet de modifier l**ordre des calques** par un
glisser-déposer. Lordre ainsi défini est celui que lon retrouve dans
le sélecteur de calques et dans la liste des calques du panneau À
Propos.
Loeil permet de cacher/afficher un calque et la loupe de zoomer sur son
contenu, comme pour le sélecteur de calques. Nous verrons plus loin
lutilité d**Éditer dans un tableau** le contenu du calque. **Supprimer
le calque** vous demandera de confirmer lopération, cette opération
supprimant le contenu du calque.
![](../../static/tutoriels/6-je-structure-ma-carte-avec-des-calques/umap_layer_advanced.png)
Enfin, longlet **Actions avancées** permet de vider un calque : cela
supprime ses données mais conserve le calque. Vous pouvez également
**cloner un calque** : cette opération copie le contenu et les
propriétés du calque.
!!! note
Pour créer rapidement un nouveau calque dont
les propriétés sont proches dun calque existant, vous pouvez cloner le
calque initial puis renommer le clone et vider son contenu.
## Faisons le point
Sil est un peu abstrait, le concept de calques est un des atouts de
uMap. Au moment de créer un carte, prenez le temps de définir les
principaux calques en anticipant les usages et les mises à jours de la
carte. Familiarisez-vous à lutilisation des calques, nous en ferons une
grande utilisation dans le niveau avancé.
Nous avons à présent tous les éléments pour réaliser des cartes
structurées, utiles, dont le contenu est riche et joli. Il est temps
dapprendre à publier une carte sur un site internet, cest lobjet du
[prochain tutoriel](7-publishing-and-permissions.md).
??? info "Licence"
Travail initié par Antoine Riche sur [CartoCité](https://wiki.cartocite.fr/doku.php?id=umap:6_-_je_structure_ma_carte_avec_des_calques) sous licence [CC-BY-SA 4](https://creativecommons.org/licenses/by-sa/4.0/deed.fr).

View file

@ -0,0 +1,210 @@
!!! abstract "Ce que nous allons apprendre"
- Insérer une carte dans une page HTML
- Publier une carte sur Wordpress
- Adapter les fonctionnalités de la carte
- Définir qui peut voir ou modifier la carte
## Procédons par étapes
### 1. Insérer une carte dans une page HTML
Nous avons vu dans le tutoriel
[Je consulte une carte uMap](1-browsing-a-map.md) que
le menu de partage permet d*embarquer une carte en iframe*, sans donner
plus de détail. Voyons comment cela se passe.
![umap_share.png](../../static/tutoriels/7-je-publie-ma-carte-et-en-controle-lacces/umap_share.png)
Une **iframe** est une balise du langage informatique HTML qui permet
dintégrer (embarquer) le contenu dune page Web dans une autre page
Web. Cest en fait très simple et nous avons déjà utilisé ce mécanisme
pour intégrer une vidéo dans le tutoriel
[Je crée des infobulles multimédia](5-multimedia-tooltips.md).
![export-iframe.png](../../static/tutoriels/7-je-publie-ma-carte-et-en-controle-lacces/export-iframe.png)
Voici les étapes à suivre :
1. ouvrir le panneau **Exporter et partager la carte**
2. copier la totalité du texte sous **Intégrer la carte dans une
iframe** (astuce: placer le curseur sur le texte puis utiliser les
raccourcis clavier <kbd>Ctrl</kbd>+<kbd>a</kbd> pour tout sélectionner
puis <kbd>Ctrl</kbd>+<kbd>c</kbd> pour copier la sélection)
3. coller le texte copié dans le code source du fichier HTML dans
lequel vous souhaitez intégrer la carte (raccourci clavier: <kbd>Ctrl</kbd>+<kbd>v</kbd>)
Voici un exemple minimaliste de fichier HTML dans lequel liframe dune
carte uMap à été intégrée :
<!DOCTYPE html>
<html>
<head>
<title>Exemple de carte uMap intégrée à une page Web</title>
<meta charset="UTF-8">
</head>
<body>
<div>
<h1>La carte du festival</h1>
<iframe width="100%" height="300px" frameBorder="0" src="https://umap.openstreetmap.fr/fr/map/festival-des-3-continents_26381?scaleControl=false&miniMap=false&scrollWheelZoom=false&zoomControl=true&allowEdit=false&moreControl=true&searchControl=null&tilelayersControl=null&embedControl=null&datalayersControl=true&onLoadPanel=caption&captionBar=false"></iframe>
<p><a href="http://umap.openstreetmap.fr/fr/map/festival-des-3-continents_26381">Voir en plein écran</a></p>
<p>Cette carte vous est proposée par CartoCité :-)</p>
</div>
</body>
</html>
Voici la carte intégrée sur cette page, en utilisant les options
dexport par défaut :
<div style="border: solid 1px;">
<h1>La carte du festival</h1>
<iframe width="100%" height="300px" frameBorder="0" src="https://umap.openstreetmap.fr/fr/map/festival-des-3-continents_26381?scaleControl=false&miniMap=false&scrollWheelZoom=false&zoomControl=true&allowEdit=false&moreControl=true&searchControl=null&tilelayersControl=null&embedControl=null&datalayersControl=true&onLoadPanel=caption&captionBar=false"></iframe>
<p><a href="http://umap.openstreetmap.fr/fr/map/festival-des-3-continents_26381">Voir en plein écran</a></p>
<p>Cette carte vous est proposée par CartoCité :-)</p>
</div>
Bien entendu cela suppose de connaître un peu HTML et de disposer dun
serveur sur lequel publier un tel fichier. Mais le principe est posé et
pas si compliqué. Voyons maintenant un cas de figure plus courant.
### 2. Publier une carte sur WordPress
Publier une carte sur un site WordPress se passe de la même façon que
ci-dessus, en copiant le *code HTML de liframe* dans léditeur
WordPress. Il est par contre nécessaire d**utiliser léditeur textuel**
(onglet Texte) et non léditeur visuel.
![import-iframe-wordpress.png](../../static/tutoriels/7-je-publie-ma-carte-et-en-controle-lacces/import-iframe-wordpress.png)
Publiez la page et le tour est joué !
!!! note
Pour des raisons de sécurité, les sites mutualisés
comme <https://fr.wordpress.com/> nautorisent pas linclusion diframe.
Il vous sera donc impossible de publier une carte uMap sur de tels
sites.
### 3. Adapter les fonctionnalités de la carte
La carte intégrée ci-dessus nest pas très pratique : sa hauteur est
insuffisante et le panneau latéral est partiellement visible. Les
boutons disponibles à gauche ne sont pas forcément adaptés, par exemple
nous ne souhaitons pas intégrer le sélecteur de calques.
Longlet **Options dexport de liframe** permet de contrôler tout cela.
Certaines de ces options correspondent aux **Options dinterface** vu
dans le tutoriel
[Je modifie et personnalise ma carte](4-customize-map.md). Il suffit
dactiver ces options pour que le *code dimport de liframe* soit
modifié. Une fois les options choisies, copiez ce code puis intégrez-le
dans celui votre page Web.
![options-export-iframe.png](../../static/tutoriels/7-je-publie-ma-carte-et-en-controle-lacces/options-export-iframe.png)
Les premières options sont spécifiques à lexport par iframe et méritent
dêtre commentées :
- la **largeur** de 100% permet dutiliser toute la largeur disponible
de la page. Vous pouvez définir une largeur fixe en remplaçant le
texte par une largeur en pixels, par exemple `800px`
- le **lien "plein écran"** désigne le lien `Voir en plein écran`
placé sous la carte. Celui-ci permet à lutilisateur dafficher la
carte uMap telle nous lavons vue jusquici.
- loption **Vue courante plutôt que vue par défaut** permet
dappliquer le position et le niveau de zoom actuel de la carte à
lexport. Cette option est par exemple intéressante pour produire
plusieurs zooms dune même carte.
- loption **Garder les calques visibles actuellement** permet de
choisir les calques inclus dans la carte exportée. Cette option est
utile pour produire plusieurs cartes pour plusieurs profils
dutilisateurs.
- **Autoriser le zoom avec la molette** est peu adapté si la carte est
intégrée dans une longue page, que les utilisateurs vont faire
défiler avec la molette : arrivé à la carte la page ne défilera plus
et la carte va effectuer un zoom arrière. Rien de grave mais ce
comportement peut être surprenant.
!!! note
Lorsque les options **Vue courante plutôt que vue par
défaut** et **Garder les calques visibles actuellement** sont actives,
modifier la vue courante ou les calques visibles ne modifie pas le code
dexport. Vous devez désactiver puis réactiver loption pour prendre en
compte ces modifications.
Voici par exemple la même carte que ci-dessus, avec une vue et un choix
de calque différents, et la plupart des options désactivées. Il est
possible de déplacer la carte mais pas de zoomer ni modifier les
calques.
<iframe width="600px" height="400px" frameBorder="0"
src="https://umap.openstreetmap.fr/fr/map/festival-des-3-continents_26381?scaleControl=false&miniMap=false&scrollWheelZoom=false&zoomControl=null&allowEdit=false&moreControl=false&searchControl=null&tilelayersControl=null&embedControl=null&datalayersControl=false&onLoadPanel=none&captionBar=false&datalayers=53329%2C53328&locateControl=null&fullscreenControl=false#15/47.2132/-1.5503"
></iframe>
### 4. Définir qui peut voir ou modifier la carte
![umap_edit_rights.png](../../static/tutoriels/7-je-publie-ma-carte-et-en-controle-lacces/umap_edit_rights.png)
Le bouton **Changer
les permissions et les éditeurs** donne accès au panneau **Permissions
de la carte**. Celui-ci vous permet de contrôler, pour chaque carte, qui
peut la voir et qui peut la modifier.
![permissions.png](../../static/tutoriels/7-je-publie-ma-carte-et-en-controle-lacces/permissions.png)
Lorsque vous créez une carte celle-ci est visible dans votre *catalogue*
de cartes, dont ladresse est
`http://umap.openstreetmap.fr/fr/user/<votre-compte>/` : loption **Tout
le monde (public)** du menu déroulant **Qui a accès** est sélectionnée.
Les autres options de ce menu sont :
- **quiconque a le lien** : la carte napparaît plus dans votre
catalogue mais les personnes connaissant son lien peuvent la
consulter.
- **seulement les éditeurs** : seules les personnes ayant le droit
déditer la carte, et identifiées comme telles, peuvent consulter la
carte. Toute autre personne se verra refuser laccès. Nutilisez pas
cette option si vous intégrez la carte dans une iframe.
Lorsque vous créez une carte, vous êtes le seul à pouvoir la modifier.
Vous pouvez inviter dautres utilisateurs à la modifier en sélectionnant
loption **Seuls les éditeurs peuvent éditer** dans le menu **Statut
dédition**, puis en saisissant un à un le nom de compte des
utilisateurs invités dans le champ **Éditeurs**.
Le nom de chaque utilisateur est ajouté à la suite de ce champ.
Loption **Tout le monde peut éditer** du menu **Statut dédition** est
utile pour créer une carte collectivement.
!!! note
uMap ne permet pas à plusieurs éditeurs de modifier la
carte simultanément. Le logiciel vous alerte lorsque lopération
**Enregistrer** risque décraser les modifications dun autre
utilisateur, vous devez alors choisir entre ses modifications (en
validant Enregistrer) ou les vôtres (en annulant).
Si vous êtes plusieurs éditeurs dune même carte, concertez-vous avant
de modifier la carte.
Enfin vous pouvez **tranférer la propriété** dune carte à un autre
utilisateur : supprimez le propriétaire actuel (vous) en cliquant sur la
petite croix à droite du champ **Owner**, puis saisissez le nom de
compte de lutilisateur à qui vous donnez la carte.
## Faisons le point
À ce stade nous savons créer une carte structurée avec du contenu
multimédia, nous savons la publier et lintégrer à une page Web, nous
savons même la modifier collectivement. Nous allons bientôt pouvoir
passer au niveau avancé, dans lequel nous allons apprendre à **importer
des données** dans une carte et explorer les capacités douverture de
uMap.
Mais avant cela, nous allons terminer le niveau intermédiaire en
traitant [le cas des polygones](8-polygons.md).
??? info "Licence"
Travail initié par Antoine Riche sur [CartoCité](https://wiki.cartocite.fr/doku.php?id=umap:7_-_je_publie_ma_carte_et_en_controle_l_acces) sous licence [CC-BY-SA 4](https://creativecommons.org/licenses/by-sa/4.0/deed.fr).

View file

@ -0,0 +1,210 @@
!!! abstract "Ce que nous allons apprendre"
- Créer un polygone et le modifier
- Styliser un polygone : remplissage et contour(s)
- Associer une URL à un polygone
- Extraire des limites administratives dOpenStreetMap
- Importer des données dans une carte
!!! question
Pourquoi traiter les polygones à part, il ne sagit que dune ligne
fermée ? Un polygone est en réalité bien plus quun ligne fermée. Cette
ligne sépare l**intérieur du polygone** de son extérieur, ceci est
important car uMap peut réagir à un clic à lintérieur du polygone. De
plus un polygone être troué, il est alors défini par plusieurs lignes.
## Procédons par étapes
### 1. Créer un polygone
Revenons à la carte de nos vacances à Crozon. Un jour de beau temps nous
louons un dériveur et naviguons dans la zone définie par le club
nautique. Ajoutons cette zone à la carte.
![umap_edit_polygon.png](../../static/tutoriels/8-le-cas-des-polygones/umap_edit_polygon.png)
Le bouton
**Dessiner un polygone** permet de tracer le périmètre dun polygone
point par point, et de le terminer en cliquant à nouveau sur le dernier
point comme pour le tracé dune ligne. Une différence toutefois : dès le
troisième point lintérieur du polygone est coloré.
#### Propriétés dun polygone
![proprietes_polygones.png](../../static/tutoriels/8-le-cas-des-polygones/proprietes_polygones.png)
La liste des
propriétés dun polygone est assez longue. Les propriétés de la moitié
supérieure du menu sappliquent au périmètre du polygone, et sont
identiques aux propriétés sappliquant aux lignes. Le moitié inférieure
concerne le remplissage du polygone. Noter :
- les options **trait** et **remplissage** permettent de ne pas
afficher le périmètre ou lintérieur du polygone : si aucun de ces
deux éléments est affiché le polygone est invisible.
- la **couleur du remplissage** est par défaut celle du trait, mais
peut être modifiée.
- une faible **opacité du remplissage** permet de voir le fond de
carte *sous* le polygone.
#### Trouer un polygone
Il est parfois utile de créer un ou plusieurs trous dans un polygone,
par exemple pour dessiner une clairière dans une forêt ou un île au
milieu dun étang.
![polygone_trou.jpg](../../static/tutoriels/8-le-cas-des-polygones/polygone_trou.jpg)
Vous pouvez créer un
polygone avec un ou plusieurs trous en cliquant sur loption **Ajouter
un tracé intérieur** lorsque vous sélectionnez un polygone en mode
édition.
Le premier point du *périmètre intérieur* est créé directement là où
vous avez cliqué avant de choisir **Ajouter un tracé intérieur**.
Notez que les propriétés de périmètre dun polygone sappliquent à tous
les périmètres - extérieurs et intérieurs.
### 2. Définir les interactions avec un polygone
Longlet **Options dinteraction** propose deux options spécifiques aux
polygones.
![interaction-desactivee.png](../../static/tutoriels/8-le-cas-des-polygones/interaction-desactivee.png)
Toute interaction peut être désactivée en sélectionnant **OFF** pour
loption **Autoriser les interactions**. Aucune infobulle nest alors
affichée lors dun clic sur le polygone. Cette option est intéressante
pour donner de limportance à une zone de la carte sans que
lutilisateur ne puisse interagir avec.
![ile-de-nantes.jpg](../../static/tutoriels/8-le-cas-des-polygones/ile-de-nantes.jpg)
Voici un exemple montrant
lIle de Nantes entourée dun large trait rouge et sans remplissage. Il
nest possible de cliquer ni sur le contour ni à lintérieur du
polygone.
!!! note
Linteraction avec le polygone reste désactivée en mode
édition. Pour pouvoir éditer le polygone il est alors nécessaire de
passer par le panneau **Visualiser les données** (toujours accessible
par le panneau de Légende lui-même accessible depuis le lien **A
propos** en bas à droite de la carte).
![interaction-url.png](../../static/tutoriels/8-le-cas-des-polygones/interaction-url.png)
À linverse, il est
possible dassocier à un polygone une URL : un clic sur le polygone
ouvre alors la page Web correspondante directement, sans passer par une
infobulle. Il suffit pour cela de définir le **Lien vers…** puis de
saisir lURL. il existe trois options permettant de définir ***où***
sera ouverte la page Web :
- **nouvelle fenêtre** : la page souvre dans un nouvel onglet du
navigateur
- **fenêtre parente** : la page souvre dans le même onglet que celui
de la carte
- **iframe** : si la carte est intégrée dans une iframe, la page Web
est alors ouverte à lintérieur de liframe
### 3. Réaliser un menu cartographique
Associer un URL à un polygone permet de créer un *menu cartographique*,
cest-à-dire une carte permettant daccéder à plusieurs pages Web selon
la zone sur laquelle clique lutilisateur. Voici un exemple montrant les
différents quartiers de Nantes : un clic sur un quartier ouvre la page
correspondante du site <http://www.nantes.fr>.
<iframe width="500px" height="550px" frameBorder="0" src="https://umap.openstreetmap.fr/fr/map/quartiers-de-nantes_126581?scaleControl=false&miniMap=false&scrollWheelZoom=false&zoomControl=false&allowEdit=false&moreControl=false&searchControl=null&tilelayersControl=null&embedControl=null&datalayersControl=false&onLoadPanel=undefined&captionBar=false&fullscreenControl=false&datalayers=311326#12/47.24/-1.5"></iframe>
Voici les étapes pour réaliser cette carte.
#### a. Récupérer les contours des quartiers
Le contour des quartiers de Nantes provient les limites administratives
dOpenStreetMap (pour en savoir plus, consultez cette [page du
Wiki](http://wiki.openstreetmap.org/wiki/WikiProject_France/Liste_limites_administratives)).
Le site [OSM Boundaries](https://osm-boundaries.com/) permet de
sélectionner les limites administratives une à une, puis de les exporter
dans différents formats.
![osm-boundaries.png](../../static/tutoriels/8-le-cas-des-polygones/osm-boundaries.png)
Suivez ces étapes :
1. connectez-vous à votre compte OpenStreetMap (celui-ci est exigé pour
pouvoir exporter les limites administratives)
2. sélectionnez les limites administratives une par une, en ouvrant
successivement les différents niveaux : pays - région - département
etc.
3. sélectionez le format dexport JSON : le format
[GeoJSON](https://fr.wikipedia.org/wiki/GeoJSON) est alors utilisé
4. cliquez sur Export
Vous récupérez dans le dossier des téléchargements un fichier dont
lextension est `.geojson`.
![import-contours.png](../../static/tutoriels/8-le-cas-des-polygones/import-contours.png)
#### b. Importer les contours de quartier dans une carte
![umap_edit_import.png](../../static/tutoriels/8-le-cas-des-polygones/umap_edit_import.png)
Dans une nouvelle
carte, cliquez sur **Importer des données**. Dans le panneau qui appraît
alors, sélectionnez le fichier produit à létape précédente.
Le sélecteur de format se positionne automatiquement sur **geojson**,
sélectionnez-le si ce nest pas le cas, par exemple parce que
lextension du fichier nest pas `.geojson`. Cliquez sur **Importer** :
les contours apparaissent sur la carte.
#### c. Configurer la carte uMap
Configurez le calque afin dafficher une étiquette - au survol ou pas
selon votre choix. Ensuite éditez chaque polygone pour lui associer
lURL vers la page Web correspondante, comme nous lavons vu plus haut.
Enfin vous pouvez, dans les **Paramètres de la carte**, définir les
**Limites géographiques** de la carte. Cela permet dempêcher
lutilisateur de déplacer la carte au-delà de ces limites.
![limites-geographiques.png](../../static/tutoriels/8-le-cas-des-polygones/limites-geographiques.png)
#### d. Intégrer la carte dans une iframe
Récupérez le code de liframe, comme nous lavons vu dans le
[tutoriel précédent](7-publishing-and-permissions.md),
en prenant soin de désactiver toutes les options dinteraction : boutons
de zoom, zoom avec la molette, bouton « Plus » etc.
Copiez ce **code iframe** dans votre page Web, et le tour est joué !
!!! note
Lorsque vous modifiez la carte, vous devez recharger
entièrement la page contenant liframe pour vider le cache du
navigateur, par exemple en utilisant **Ctrl+F5** sur Firefox.
## Faisons le point
Ce tutoriel marque la fin du niveau intermédiaire. Vous savez structurer
le contenu dune carte avec des calques et utiliser des styles par
défaut. Vous savez formater les infobulles et y intégrer du multimédia.
Vous savez intégrer votre carte dans une page Web et contrôler qui peut
la voir et la modifier.
Nous venons de voir comment importer des données dans une carte, le
niveau avancé va nous permettre daller bien plus loin dans cette
démarche.
??? info "Licence"
Travail initié par Antoine Riche sur [CartoCité](https://wiki.cartocite.fr/doku.php?id=umap:8_-_le_cas_des_polygones) sous licence [CC-BY-SA 4](https://creativecommons.org/licenses/by-sa/4.0/deed.fr).

View file

@ -0,0 +1,298 @@
!!! abstract "Ce que nous allons apprendre"
- Structurer des données pour pouvoir les géocoder
- Géocoder des adresses et vérifier le résultat
- Importer un tableau de données dans une carte uMap
- Injecter le contenu du tableau dans les infobulles
- Configurer le tri et le filtre des données
## Procédons par étapes
Lobjectif de ce tutoriel est de créer une carte en important des
données dans uMap. Cela peut être utile dans plusieurs situations :
- visualiser des données que vous avez trouvées sur un portail open
data, par exemple <https://data.nantesmetropole.fr/>
- placer sur une carte les contacts (clients, fournisseurs,
concurrents…) que vous gérez dans un tableur
Lenjeu est de placer automatiquement chaque élément à sa **position
géographique**, définie par une **longitude** et une **latitude** (on
parle aussi de **point GPS**). Pour cela il faut que les données soient
**géocodées**, par exemple un tableau contiendra deux colonnes :
latitude et longitude.
Si les données *open data* sont parfois géocodées, ce nest généralement
pas le cas de votre fichier de contacts qui contient des adresses. Il
est dans ce cas nécessaire de passer par une étape de **géocodage**, qui
consiste à convertir chaque adresse en latitude et longitude. Nous
allons traiter ce cas de figure, étape par étape.
### 1. Je crée un tableau avec des adresses
Pour convertir des adresses en longitude et latitude nous allons
utiliser un **géocodeur**. Celui-ci utilise une base de données
dadresses géocodées, parmi lesquelles il recherche ladresse à
géocoder. Voici quelques conseils à suivre pour faciliter la tâche du
géocodeur et obtenir de bons résultats :
- répartir chaque adresse en **plusieurs colonnes** : adresse, code
postal et ville
- porter dans la colonne adresse le **libellé de la voie précédé du
numéro**, par exemple `14 rue de la Paix`, ou le nom du lieu-dit
- placer tout autre élément dadresse (boîte postale, étage…) dans
un autre champ
Voici par exemple quelques adresses bien structurées, provenant du
fichier [Sièges des syndicats intercommunaux de transports scolaires en
Loire-Atlantique](https://data.nantesmetropole.fr/explore/dataset/234400034_031-001_sits_shp/export/)
:
| NOM | ADRESSE | COMPL_ADR | CP | VILLE |
| ------------------------| -----------------------| -----------------------------| -------| --------------------------|
| C. C. LOIRE et SILLON | 2 bd de la Loire | | 44260 | SAVENAY |
| C. C. COEUR dESTUAIRE | 1 Cours dArmor | Route de Savenay | 44360 | SAINT ETIENNE DE MONTLUC |
| RESEAU CAP ATLANTIC | 4 rue Alphonse Daudet | Zone Tertiaire de Kerbiniou | 44350 | GUERANDE |
| SITS SUD LOIRE LAC | ZI de la Seiglerie | | 44270 | MACHECOUL |
Lutilisation de majuscules ou minuscules na en général pas
dincidence. Le tableau peut bien sûr contenir dautres colonnes, comme
ici les colonnes NOM et COMPL_ADR.
!!! note
Pour la suite des opérations, il est important que le
tableur respecte les règles suivantes :
- la première ligne du tableur doit contenir les noms de colonnes, les
autres lignes contiennent les données et rien dautre
- les noms de colonnes ne doivent contenir ni espace ni accent ou
autre caractère spécial
- les noms de colonnes doivent être tous différents
- les cellules ne doivent pas contenir de "retour chariot" ou "saut de
ligne"
- les cellules ne doivent pas être fusionnées
En dautres termes, le tableur doit représenter une **base de données**.
### 2. Je convertis les adresses en coordonnées géographiques
Plusieurs **géocodeurs** sont disponibles sur internet. La qualité du
géocodage peut différer en fonction de plusieurs facteurs :
- votre adresse est incomplète ou contient une erreur, par exemple un
mauvais code postal
- la base dadresses utilisée contient des adresses erronées ou nest
pas à jour
- lalgorithme chargé de comparer votre adresse à celles de la base de
données fait de mauvaises hypothèses
Aucun géocodeur nest parfait. Il est donc important de **vérifier la
qualité du géocodage**, voire de comparer et combiner le résultat de
plusieurs géocodeurs. La plupart des géocodeurs produisent, en
complément à chaque latitude et longitude, un score permettant dévaluer
la qualité du résultat.
En France le site <https://adresse.data.gouv.fr> donne accès à la Base
Adresse Nationale (BAN). Il fournit plusieurs outils, dont le [géocodeur
CSV](https://adresse.data.gouv.fr/csv) qui permet de géocoder une liste
dadresses très rapidement avec de bons résultats.
[DoGeocodeur](https://dogeo.fr/_apps/DoGeocodeur/) est un site
particulièrement bien pensé : il sait utiliser plusieurs géocodeurs
(Google, IGN, BAN…) et combiner leur résultat, afficher le résultat
sur une carte, et vous permet de positionner manuellement une adresse.
Lui aussi utilise des fichiers CSV.
!!! note
CSV désigne un fichier texte contenant les données dun
tableau, dont les valeurs (le contenu de chaque cellule) sont séparées
par des virgules (CSV signifie *comma-separated values*) … ou par un
autre caractère : limportant est que ce **séparateur** ne soit pas
utilisé à lintérieur dune valeur. Le point-virgule est souvent utilisé
comme séparateur pour créer un fichier CSV.
Pour géocoder les adresses dun tableau, les étapes à suivre sont :
1. exporter le tableau dans un fichier au format CSV, en choisissant le
séparateur (conseil : point-virgule) et le jeu de caractères
(encodage) **UTF-8**. Inclure les entêtes de colonnes si loption
vous est proposée. Voici par exemple le panneau dexport CSV de
LibreOffice Calc :
![export_csv_libreoffice_calc.png](../../static/tutoriels/9-je-cree-une-carte-a-partir-dun-tableur/export_csv_libreoffice_calc.png)
2. importer le fichier CSV dans le site de géocodage de votre choix,
celui-ci vous demande en général de sélectionner les noms de
colonnes correspondant à ladresse, au code postal et à la commune
3. vérifier le résultat du géocodage, lajuster et le compléter au
besoin
4. exporter le résultat, qui sera lui aussi au format CSV
!!! note
Pour exporter un fichier CSV en UTF-8 avec Microsoft
Excel, le menu **Options Web** dans la fenêtre **Enregistrer sous**
permet, dans longlet **Encodage**, de sélectionner **Unicode (UTF-8)**.
Malheureusement cela **ne fonctionne pas pour MS Excel 2016 ni Office
365/Excel**, il sagit dun [bogue
connu](https://answers.microsoft.com/en-us/msoffice/forum/all/office-365excel-generates-incorrect-csv-utf-8/56516c38-78d8-40f5-90b3-f5d9db3d6d10).
Pour contourner ce bogue, une possibilité est dutiliser léditeur
[Notepad++](https://notepad-plus-plus.org/) que vous devez installer. Ne
pas changer lencodage lors de lexport CSV, puis ouvrir le fichier dans
Notepad++, convertir en UTF-8 dans le menu **Encodage**, enfin
enregistrer le fichier.
### 3. Jimporte le tableau géocodé dans un calque
Cliquez sur
**Importer des données** pour afficher le panneau du même nom, puis
sélectionnez le fichier précédemment géocodé.
![importer_des_donnees.png](../../static/tutoriels/9-je-cree-une-carte-a-partir-dun-tableur/importer_des_donnees.png)
![umap_edit_import.png](../../static/tutoriels/9-je-cree-une-carte-a-partir-dun-tableur/umap_edit_import.png)
Vérifiez que uMap a bien reconnu **CSV** pour le format des données, et
choisissez de les importer dans un **nouveau calque**.
Enfin cliquez sur **Importer** : les données sont chargées puis
affichées sur la carte. Les lignes nayant pas de position géographique
sont ignorées, un message est alors affiché.
!!! note
uMap utilise la première ligne du fichier CSV pour
identifier les noms de colonnes, en particulier **latitude** et
**longitude** qui sont utilisés pour positionner les points (**lat** et
**lon** sont aussi compris). Vérifiez la présence de ces noms de
colonnes si lopération échoue. Attention également à ce que les
coordonnées soient exprimées en **degrés décimaux**, avec un point pour
délimiter les décimales. Exemple: 48.40 est correct mais 48,40 et 48°24
ne sont pas valides pour uMap.
Notez que vous pouvez directement coller les données dans le panneau
dimport. Il est cependant intéressant de passer par un fichier que vous
pouvez conserver sur votre poste.
Enfin vous pouvez réimporter les données, par exemple après les avoir
mises à jour. Sélectionnez alors le même calque et cochez la case
**Remplacer le contenu du calque**.
### 4. Jinsère le contenu du tableau dans les infobulles
![infobulle_nom_du_calque.png](../../static/tutoriels/9-je-cree-une-carte-a-partir-dun-tableur/infobulle_nom_du_calque.png)
Cliquez maintenant sur un marqueur importé à létape précédente :
linfobulle affiche le nom du calque (en loccurence le nom du fichier
importé si vous ne lavez pas renommé) au lieu du nom présent dans le
tableau de données.
Il y a plusieurs possibilités pour rémédier à cela.
#### Modifier le champ utilisé
![cle_du_libelle.png](../../static/tutoriels/9-je-cree-une-carte-a-partir-dun-tableur/cle_du_libelle.png)
Éditez le calque et
modifiez, dans longlet Propriétés avancées, la **Clé pour le libellé**.
Saisissez le nom de la colonne du fichier importé. Chaque infobulle
affiche désormais le contenu de cette colonne.
![infobulle_nom_correct.png](../../static/tutoriels/9-je-cree-une-carte-a-partir-dun-tableur/infobulle_nom_correct.png)
!!! note
Respecter la casse, cest-à-dire les majuscules et
minuscules. Le nom de colonne ne doit pas contenir de caractère spécial
: accents, espace, ponctuation…
#### Afficher un tableau
![popup_tableau.png](../../static/tutoriels/9-je-cree-une-carte-a-partir-dun-tableur/popup_tableau.png)
Le contenu du tableau peut
être affiché dans les infobulles, sous forme dun tableau à deux
colonnes : lintitulé et la valeur correspondante.
Dans longlet **Options dinteraction** du calque, changez le **Style de
la popup** en **Tableau**. Voici un exemple de résultat :
![infobulle_tableau.png](../../static/tutoriels/9-je-cree-une-carte-a-partir-dun-tableur/infobulle_tableau.png)
![modifier_tableau.png](../../static/tutoriels/9-je-cree-une-carte-a-partir-dun-tableur/modifier_tableau.png)
Notez que vous
pouvez modifier le contenu du tableau en cliquant sur **Éditer dans un
tableau** dans le sélecteur de calques. Vous pouvez alors supprimer ou
renommer des colonnes, voire même modifier les cellules du tableau.
#### Définir le gabarit des infobulles
![gabarit_popup.png](../../static/tutoriels/9-je-cree-une-carte-a-partir-dun-tableur/gabarit_popup.png)
Le tableau ci-dessus nest
pas particulièrement joli avec ses libellés en majuscules.
Dans le tutoriel [5-multimedia-tooltips.md) nous avons vu
comment formater le contenu dune infobulle. Nous pouvons utiliser la
même syntaxe pour définir le contenu de **toutes les infobulles dun
calque**, en y intégrant le contenu des cellules du tableau.
Dans longlet **Options dinteraction** du calque, éditez le **Gabarit
du contenu de la popup**. Définissez le format des popups (titres,
caractère gras, etc.) comme vu précédemment. Pour *injecter* le contenu
dune cellule dans linfobulle, il suffit dajouter le nom de la colonne
placé entre accolades, par exemple **{NOM}**.
![infobulle_avec_gabarit.png](../../static/tutoriels/9-je-cree-une-carte-a-partir-dun-tableur/infobulle_avec_gabarit.png)
Vous pouvez utiliser dans le gabarit tous les champs du tableau. Voici à
droite un exemple de gabarit et le résultat pour une infobulle.
**Cette approche est très puissante.** Vous pouvez lutiliser pour
injecter, pour chaque ligne du tableau, un lien vers un site internet
(et pourquoi pas le texte associé), une image ou une iframe. Il suffit
pour cela dintégrer le nom de colonnes et ses accolades, à la syntaxe
de mise en forme du texte, par exemple `[[{LIEN_SITE}|{TEXTE_LIEN}]]` ou
encore `{{{URL_IMAGE}}}`.
### 5. Je configure le tri et les filtres
![config_filtres.png](../../static/tutoriels/9-je-cree-une-carte-a-partir-dun-tableur/config_filtres.png)
Nous avons vu dans le tutoriel
[Je consulte une carte uMap](1-browsing-a-map.md) quil
est possible de voir lensemble des données de la carte sous la forme
dune liste. Cette liste peut aussi filtrée par lutilisateur, à partir
dun mot par exemple.
![umap_edit_props.png](../../static/tutoriels/9-je-cree-une-carte-a-partir-dun-tableur/umap_edit_props.png)
Pour permettre aux
utilisateurs de filtrer les données il convient de préciser à uMap à
quel(s) champ(s) le "mot-filtre" doit sappliquer. Cela seffectue dans
longlet **Propriétés par défaut** des **Propriétés de la carte**. Vous
pouvez indiquer plusieurs noms de champ (noms de colonne), le filtre
sappliquera à chacun des champs.
Notez que vous pouvez également trier la liste en sélectionnant la **Clé
de tri**, cest-à-dire le nom de la colonne utilisée pour le tri (tri
croissant uniquement). Enfin vous pouvez définir la clé par défaut pour
le libellé, qui sera utilisée si celle-ci nest pas définie pour le
calque.
!!! note
Les clés de tri et de filtre sappliquent à lensemble
des données, tous calques confondus. Si votre carte est constituée de
plusieurs calques, il est donc conseillé dutiliser le même nom de clé
pour désigner le même type dinformation. Évitez par exemple dutiliser
**Ville** pour un calque et **Commune** pour un autre, utilisez plutôt
**Commune** pour les deux.
## Faisons le point
Ce tutoriel est probablement le plus complexe de la série. Appréciez
toutefois les possibilités offertes par uMap pour intégrer des données
externes.
??? info "Licence"
Travail initié par Antoine Riche sur [CartoCité](https://wiki.cartocite.fr/doku.php?id=umap:9_-_je_cree_une_carte_a_partir_dun_tableur) sous licence [CC-BY-SA 4](https://creativecommons.org/licenses/by-sa/4.0/deed.fr).

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1,4 @@
!!! example "This is an ongoing work."
[Let us know](https://github.com/umap-project/umap/issues)
if you are interested to translate it from French.

View file

@ -0,0 +1,4 @@
!!! example "This is an ongoing work."
[Let us know](https://github.com/umap-project/umap/issues)
if you are interested to translate it from French.

View file

@ -0,0 +1,4 @@
!!! example "This is an ongoing work."
[Let us know](https://github.com/umap-project/umap/issues)
if you are interested to translate it from French.

View file

@ -0,0 +1,4 @@
!!! example "This is an ongoing work."
[Let us know](https://github.com/umap-project/umap/issues)
if you are interested to translate it from French.

View file

@ -0,0 +1,4 @@
!!! example "This is an ongoing work."
[Let us know](https://github.com/umap-project/umap/issues)
if you are interested to translate it from French.

View file

@ -0,0 +1,4 @@
!!! example "This is an ongoing work."
[Let us know](https://github.com/umap-project/umap/issues)
if you are interested to translate it from French.

View file

@ -0,0 +1,4 @@
!!! example "This is an ongoing work."
[Let us know](https://github.com/umap-project/umap/issues)
if you are interested to translate it from French.