Avancement du chapitre sur l'export des données OSM-QGIS

This commit is contained in:
Guyot 2021-05-22 00:10:05 +02:00
parent 8d1d07e4ec
commit da47738954
7 changed files with 47262 additions and 0 deletions

Binary file not shown.

View File

@ -991,6 +991,160 @@ Les éléments constituant les couches sont enregistrés dans deux tables, comme
\label{figure:arbresepstableattributs}
\end{figure}
\subsection{Gestion des données}
La construction de cartes nécessite un fond de carte. Mais parfois on en veut plus, et on utilise des surcouches, et parfois on en veut moins et il faut envisager une gestion des données du fond de carte lui-même.
On a vu qu'OSM, par exemple, était constitué de plusieurs types d'éléments : des points, des lignes et des relations. Les relations permettent de grouper des éléments entre eux soit sous forme graphique (plusieurs lignes formant un polygone par exemple), soit sous forme symbolique (l'ensemble des arbres, par exemple). Ces éléments font partie des données qui peuvent être extraites d'OSM et qu'il est possible de sélectionner indépendamment.
\subsubsection{Récupération des données}
Sur la page d'OSM figure un bouton \emph{Exporter} (voir figure \ref{figure:exporter}).
\begin{figure}
\centering
\includegraphics[width=\textwidth]{images/Exporter.eps}
\caption{L'export d'OSM}\label{figure:exporter}
\end{figure}
Celui-ci permet d'obtenir les données relatives à la zone sélectionnée sous la forme d'un fichier au format osm. Il semble que parfois l'export puisse poser des problèmes et il est conseillé d'utiliser un miroir d'OSM, le site \og \emph{Planète OSM Copies régulièrement mises à jour de la base de données complète dOpenStreetMap} \fg{} ou le \og \emph{Téléchargements de Geofabrik Extractions régulièrement mises à jour des continents, des pays et des villes sélectionnées} \fg{}.
Il est donc possible de télécharger des données d'OSM de plusieurs manières\footnote{Voir~: \url{https://wiki.openstreetmap.org/wiki/Downloading_data}}.
\smallskip
Le fichier téléchargé de la zone des parcs Gallet et des Crêtets depuis OSM a une taille inférieure au Mo. Pour comparaison, celui qu'il est nécessaire de télécharger sur Geofabrik ne peut couvrir une surface plus petite que la Suisse et fait donc quelques centaines de Mo.
\smallskip
Les formats de fichiers contenant les données sont très nombreux. Le format le plus accessible est certainement celui d'OSM\footnote{Voir~: \url{https://wiki.openstreetmap.org/wiki/FR:OSM_XML}}. Nous allons le décrire et voir comment l'utiliser dans Qgis. L'autre format auquel nous allons nous intéresser est le pbf\footnote{Voir~: \url{https://wiki.openstreetmap.org/wiki/FR:Format_PBF}}, un format binaire léger et rapide.
\subsubsection{Formats de fichier}
Il est intéressant de considérer ces deux formats de fichiers essentiellement très différents. Le format osm et un format xml\footnote{Voir~: \url{https://fr.wikipedia.org/wiki/Extensible_Markup_Language}}, soit un format constitué de balises humainement compréhensibles, alors que le pbf étant binaire ne l'est pas. Mais la sémantique du premier l'alourdit et le rend plus lent, alors que le second est plus léger et rapide. Pour comparaison, pour la même zone des parcs Gallet et des Crêtets, le fichier osm a une taille de 420 ko, alors que le fichier pbf fait moins de 25 ko.
Ainsi, par nature, le pbf est plus adapté à la récupération d'un grand nombre de données, alors que le format osm l'est plus pour de petites régions.
Pour aller plus loin dans la compréhension de ces deux formats, entrevoyons leur structure~:
\begin{description}
\item[Format osm] À l'instar d'html ou de gemini, par exemple, ce format est construit autour de balises chevronées. La structure de celles-ci est simple~:
\lstinline|<balise attribut="valeurattribut">contenu</balise>|
Les trois exemples donnés dans le listing \ref{listing:formatosm}, extrait du fichier couvrant la zone des deux parcs Gallet et des Crêtets impoté d'OSM, présentent successivement les balises \verb|node|, \verb|way| et \verb|relation|. On y voit aussi des attributs comme \verb|visible| ou \verb|user| ainsi que du contenu lui-même formaté en xml comme \verb|tab| ou \verb|member|. Sans aucune connaissance particulière, ces éléments sont déjà naturellement compréhensibles. En connaissant quelque peu le langage, on comprend bien que ce type de fichier est aisément sémantiquement manipulable par un humain.
\begin{lstlisting}[float,language=xml,caption={Le format osm},label={listing:formatosm},numbers=right,numberstyle=\tiny,numbersep=6pt]
<node id="8108491590" visible="true" version="1" changeset="93933826" timestamp="2020-11-11T14:21:48Z" user="guyotv" uid="3731325" lat="47.0957466" lon="6.8269104">
<tag k="natural" v="tree"/>
<tag k="species" v="Sequoia pleureur"/>
</node>
<way id="556506855" visible="true" version="5" changeset="93349833" timestamp="2020-10-31T19:26:46Z" user="guyotv" uid="3731325">
<nd ref="8005863896"/>
<nd ref="648243604"/>
<tag k="highway" v="path"/>
</way>
<relation id="11815711" visible="true" version="1" changeset="93327746" timestamp="2020-10-31T08:56:57Z" user="guyotv" uid="3731325">
<member type="way" ref="864290676" role="inner"/>
<member type="way" ref="864290677" role="outer"/>
<tag k="building" v="yes"/>
<tag k="informal" v="yes"/>
<tag k="surface" v="compacted"/>
<tag k="type" v="multipolygon"/>
</relation>
\end{lstlisting}
\item[Format pbf] Comme tout binaire, il est bien plus difficile de présenter la structure d'un fichier fait de zéros et de uns. Le wiki en anglais d'OSM consacré au format pbf\footnote{Voir~: \url{https://wiki.openstreetmap.org/wiki/PBF_Format}} en présente la structure de manière assez complète. Comme on peut le voir dans l'exemple final, ce fichier peut aussi être représenté sous forme hexadécimale.
La manipulation des fichiers pbf peut se faire avec un outil de manipulation des données d'OSM comme \emph{Osmium}\footnote{Voir~: \url{https://osmcode.org/osmium-tool/} ou \url{https://wiki.openstreetmap.org/wiki/Osmium}}. Il s'agit d'un outil en ligne de commande dont nous verrons l'utilisation à la section \ref{subsubsection:Pbf}.
\end{description}
\subsection{Extraction des données}
\subsubsection{OSM}
L'extraction est simple. Il suffit de se rendre sur OSM, de cliquer sur \og Exporter \fg, puis \og Sélectionner manuellement une autre zone \fg{} et de dessiner un rectangle sur la zone voulue, comme le montre la figure \ref{figure:exporter}.
Ensuite, on peut importer ces données sur QGIS via le menu \og Couche \fg, puis \og Ajouter une couche \fg{} et \og Ajouter une couche vecteur... \fg. En sélectionnant \emph{Fichier} comme type de couche, un codage UTF8 et pour source le fichier extrait d'OSM (d'extension .osm), on crée automatiquement les couches présentées dans la figure \ref{figure:exportparcs}.
\begin{figure}
\centering
\includegraphics[width=\textwidth]{images/ExportParcs.eps}
\caption{Données OSM dans QGIS}\label{figure:exportparcs}
\end{figure}
Elles se trouvent en bas à gauche de la figure et sont notées~:
\begin{itemize}
\item Parcs points
\item Parcs lines
\item Parcs multilinestrings
\item Parcs multipolygons
\item Parcs other relations
\end{itemize}
Il est intéressant de noter les différences entre la représentation d'OSM en haut à gauche et celle des données d'OSM affichées pas QGIS. On pourrait presque penser qu'il ne s'agit pas de la même zone.
Plusieurs différences sont significatives.
\begin{itemize}
\item Les couleurs de la représentation sont en premier lieu frappantes. Il est évidemment possible de les changer et il ne s'agit pas ici de mentionner l'importance de celles-ci dans un cas comme celui-ci où des bassins d'eau sont présents, aisément identifiables sur OSM et inexistants sur QGIS, mais d'observer que le rendu de QGIS ne distingue pas la couleur des deux bassins en bas à droite des couleurs du sol des parcs et de la piscine.
\item La zone sélectionnée sur OSM ne correspond pas totalement à celle visible sur QGIS. En particulier, les voies de chemin de fer débordent largement de celle-ci. Il semble que certains objets débordant le cadre sélectionné soient présents parce qu'il aurait fallu les couper, ce que l'export d'OSM ne fait pas.
\item La géométrie de la zone n'est pas non plus identique. On constate visiblement une déformation qui semble avoir étiré la représentation sur l'axe horizontal.
\item Les points sont présents autant dans le parc Gallet que dans celui des Crêtets. Or, seul la moitié sud du parc Gallet était cartographiée avec des arbres. L'immense majorité des points figurant dans le parc des Crêtets ne sont donc pas des arbres, mais des lampadaires.
Sur OSM, un changement d'échelle permet de voir que seuls huit arbres sont présents, car les lampadaires n'y sont pas représentés malgré un zoom important.
Sur QGIS, la représentation prête sérieusement à confusion.
\item Enfin, chose qui n'apparaît pas sur la figure \ref{figure:exportparcs}, car corrigée pour qu'on voie les points, mais la couche de ceux-ci a été récupérée par QGIS en dessous de toutes les autres. Ainsi, à l'ouverture, aucun arbre ou lampadaire n'étaient visibles.
\end{itemize}
\subsubsection{Pbf}\label{subsubsection:Pbf}
Nous allons ici voir l'extraction des données des parcs Gallet et des Crêtets à l'aide d'Osmium.
L'installation d'Osmium se fait par celle du paquet éponyme \verb|osmium-tool|. Pour son utilisation un \verb|man osmium| donne accès à sa documentation. Son utilisation en ligne de commande est à justifier par l'existence du paquet \verb|python3-pyosmium| qui donne accès à Osmium par l'intermédiaire de python.
Osmium installé, on peut extraire du fichier pbf de Geofabrik couvrant toute la Suisse uniquement la région des deux parcs grâce à la commande du listing \ref{listing:osmiumextract} qui utilise un cadre (bounding box : bbox) déterminé avec l'outil d'export d'OSM, la stratégie (-s) d'extraction smart permettant une bonne gestion des éléments aux bords de la zone d'extraction (voir \verb|osmium help extract|) et un fichier de sortie nommé \emph{parcs.pbf}.
\begin{lstlisting}[language=bash,caption={Le format osm},label={listing:osmiumextract},numbers=right,numberstyle=\tiny,numbersep=6pt]
osmium extract --bbox 6.82364,47.09480,6.82859,47.09783 -s smart switzerland-latest.osm.pbf -o parcs.pbf
\end{lstlisting}
L'extraction des données dans cette zone uniquement fait passer la taille du fichier pour la Suisse de 344 Mo à 23 ko.
\medskip
Outre le fait qu'osmium soit un outil en ligne de commande, il permet une gestion fine des limites de l'exportation. En effet, trois options de stratégie (-s) d'exportation sont disponibles et présentées à la figure \ref{figure:limitesosmium}. Le manuel d'Osmium (\verb|osmium -h export|) les décrits précisément.
\begin{description}
\item[-s simple] Cette option correspond à la figure \ref{figure:limiteosmiumsimple}. Les calculs se font en un seule passe. Les n\oe uds sont entièrement référencés. Les chemins et les relations traversant la région choisie ne sont pas complètement référencés.
\item[-s complete] Cette option correspond à la figure \ref{figure:limiteosmiumcompleteway}. Les n\oe uds sont entièrement référencés. Les calculs se font en deux passes. Les chemins sont entièrement référencés, mais pas les relations.
\item[-s smart] Cette option correspond à la figure \ref{figure:limiteosmiumsmart}. Les n\oe uds sont entièrement référencés. Les calculs se font en trois passes. Les chemins et quasiment toutes les relations sont référencées.
\end{description}
Évidemment, l'extraction des données est une chose complexe. Il faut garder à l'esprit que l'ensemble des opérations réalisées pour extraire une zone de données géographiques doit aboutir non seulement sa représentation visuelle, mais aussi à une structure de base de données. Si cela n'est pas directement visible dans un format comme le pbf, alors qu'on peut directement le constater dans la structure textuelle du format osm, cela reste dans les deux cas une opération de base de données.
\begin{figure}
\centering
\begin{subfigure}{0.8\textwidth}
\centering
\includegraphics[width=\textwidth]{images/ParcSimple.eps}
\caption{L'option -s simple}\label{figure:limiteosmiumsimple}
\end{subfigure}
\begin{subfigure}{0.8\textwidth}
\centering
\includegraphics[width=\textwidth]{images/ParcComplete_ways.eps}
\caption{L'option -s complete\_ways}\label{figure:limiteosmiumcompleteway}
\end{subfigure}
\begin{subfigure}{0.8\textwidth}
\centering
\includegraphics[width=\textwidth]{images/ParcSmart.eps}
\caption{L'option -s smart}\label{figure:limiteosmiumsmart}
\end{subfigure}
\caption{Gestion des limites de l'export sous Osmium}
\label{figure:limitesosmium}
\end{figure}
\subsection{Filtrage des données}
...
\subsection{Ajouts de données}
...
\subsection{Umap}
L'utilisation d'Umap a déjà été décrite dans le corps de ce document.

10468
images/ExportParcs.eps Normal file

File diff suppressed because it is too large Load Diff

27703
images/Exporter.eps Normal file

File diff suppressed because it is too large Load Diff

3129
images/ParcComplete_ways.eps Normal file

File diff suppressed because it is too large Load Diff

2495
images/ParcSimple.eps Normal file

File diff suppressed because it is too large Load Diff

3313
images/ParcSmart.eps Normal file

File diff suppressed because it is too large Load Diff