umap/docs-users/fr/tutorials/9-map-from-spreadsheet.md
2024-05-10 13:30:23 -04:00

315 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

!!! 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é.
<shot-scraper
data-output="static/tutoriels/upload-data.png"
data-url="https://umap.openstreetmap.fr/fr/map/new/"
data-alt="Bouton dimport de données."
data-width="46"
data-height="47"
data-selector=".leaflet-toolbar-icon.upload-data"
data-padding="5"
>Bouton dimport de données.</shot-scraper>
![importer_des_donnees.png](../../static/tutoriels/9-je-cree-une-carte-a-partir-dun-tableur/importer_des_donnees.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.
<shot-scraper
data-output="static/tutoriels/map-settings.png"
data-url="https://umap.openstreetmap.fr/fr/map/new/"
data-alt="Bouton des options de la carte."
data-width="46"
data-height="47"
data-selector=".leaflet-toolbar-icon.update-map-settings"
data-padding="5"
>Bouton des options de la carte.</shot-scraper>
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).