<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Par-ci par-là</title><link href="https://par-ci.fr/par-l%C3%A0/" rel="alternate"/><link href="https://par-ci.fr/par-l%C3%A0/feeds/atom/" rel="self"/><id>https://par-ci.fr/par-là/</id><updated>2024-02-04T20:11:00+01:00</updated><entry><title>Données géographiques : avant de manipuler les géométries</title><link href="https://par-ci.fr/par-l%C3%A0/billets/donn%C3%A9es-g%C3%A9ographiques-avant-de-manipuler-les-g%C3%A9om%C3%A9tries/" rel="alternate"/><published>2024-02-04T20:11:00+01:00</published><updated>2024-02-04T20:11:00+01:00</updated><author><name>namori</name></author><id>tag:par-ci.fr,2024-02-04:/par-là/billets/données-géographiques-avant-de-manipuler-les-géométries/</id><summary type="html">&lt;p class="first last"&gt;Salut ! Je pensais vous montrer dès aujourd’hui quelques petites
manipulations sur des données géographiques. En cherchant un exemple,
j’ai repensé à un projet que j’avais commencé il y a quelques années,
et ça m’a donné une autre idée. En plus, même pas besoin de s’y
connaître en&amp;nbsp;code…&lt;/p&gt;
</summary><content type="html">&lt;div class="contents local topic" id="sommaire"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Sommaire&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#introduction" id="toc-entry-1"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#le-probleme" id="toc-entry-2"&gt;Le&amp;nbsp;problème&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#la-solution" id="toc-entry-3"&gt;La&amp;nbsp;solution&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#premiere-amelioration-le-fenetrage" id="toc-entry-4"&gt;Première amélioration&amp;nbsp;: le&amp;nbsp;fenêtrage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#deuxieme-amelioration-la-rotation-du-referentiel" id="toc-entry-5"&gt;Deuxième amélioration&amp;nbsp;: la rotation du&amp;nbsp;référentiel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#en-conclusion" id="toc-entry-6"&gt;En&amp;nbsp;conclusion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#notes" id="toc-entry-7"&gt;Notes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="introduction"&gt;
&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference internal" href="#sommaire"&gt;retourner au&amp;nbsp;sommaire&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Salut ! Je pensais vous montrer dès aujourd’hui quelques petites manipulations sur des données géographiques. En cherchant un exemple, j’ai repensé à un projet que j’avais commencé il y a quelques années, et ça m’a donné une autre idée. On ne va pas faire de code tout de suite, on va d’abord s’échauffer les&amp;nbsp;neurones.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Remarque&lt;/em&gt;&amp;nbsp;: si vous êtes spécialiste &lt;span class="caps"&gt;SIG&lt;/span&gt;, ou si vous touchez un peu aux données géométriques (par exemple pour du rendu 3D), vous n’apprendrez pas grand-chose (voire rien du tout)&amp;nbsp;! Je vous promets de faire quelque chose pour vous un de ces jours. À bientôt&amp;nbsp;😉️&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="le-probleme"&gt;
&lt;h2&gt;Le&amp;nbsp;problème&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference internal" href="#sommaire"&gt;retourner au&amp;nbsp;sommaire&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Il faut savoir qu’on n’a pas toujours envie de réinventer le fil à couper le poil dans la main, et qu’on utilise donc beaucoup d’outils clé sur étagère qui font généralement à peu près ce qu’on veut (s’ils fonctionnent&amp;nbsp;bien).&lt;/p&gt;
&lt;dl class="docutils"&gt;
&lt;dt&gt;Par&amp;nbsp;exemple&amp;nbsp;:&lt;/dt&gt;
&lt;dd&gt;&lt;div class="first last line-block"&gt;
&lt;div class="line"&gt;On a l’emprise du département dans un fichier et des limites de canton dans un autre&amp;nbsp;; un merveilleux outil va alors découper le territoire et nous fournir les cantons, non plus en limites linéaires, mais en zones surfaciques, ce qui permettra de les utiliser dans des requêtes spatiales ou pour de la représentation cartographique. Honnêtement, pas trop besoin de s’y connaître pour l’opération, même si trouver le bon outil prend plus de temps quand on n’a pas l’habitude.&lt;/div&gt;
&lt;/div&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;Notez les nuances dans le paragraphe précédent&amp;nbsp;: parfois, on préfère créer nous-même notre outil, ou bien on doit le faire car il n’existe pas (du moins, pas à notre connaissance). On a encore potentiellement le&amp;nbsp;choix&amp;nbsp;:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;on peut préparer les données avec des outils génériques, faire une opération minime «&amp;nbsp;à la main&amp;nbsp;», puis revenir à des outils génériques pour finir les traitements, enregistrer, exporter,&amp;nbsp;etc.&lt;/li&gt;
&lt;li&gt;ou bien on peut tout faire à la main&amp;nbsp;: on lit les données, on en génère des données formatées selon l’outil de notre langage, on fait tout, et on exporte (ou on met à jour les quelques éléments modifiés) à la&amp;nbsp;fin.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dans le premier cas, l’opération est généralement peu gourmande, et on peut se passer d’optimisation (à moins de la faire tourner en temps réel ou même en production à la demande sur le serveur). Dans le deuxième cas, ou si on tombe dans les cas particuliers de la parenthèse, on doit toujours optimiser un minimum. Si on ne le fait pas, notre nouvel outil va bien marcher sur le fichier test avec 10 éléments, puis une fois lancé sur la table de données réelles, sur tout le département ou tout le pays, vous êtes bon pour attendre un loooong moment. C’est le problème avec les données géographiques&amp;nbsp;: la géométrie, c’est facilement coûteux en temps de calcul et, souvent, les données sont&amp;nbsp;lourdes.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="la-solution"&gt;
&lt;h2&gt;La&amp;nbsp;solution&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference internal" href="#sommaire"&gt;retourner au&amp;nbsp;sommaire&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Donc que fait-on&amp;nbsp;? Le plus simple, c’est d’&lt;strong&gt;éviter au maximum de calculer pour rien&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Dans mon exemple (que je ne détaillerai pas ici), je dois évaluer la proximité deux-à-deux entre des éléments linéaires de deux sources distinctes avant d’appliquer un traitement aux couples ainsi formés. J’ai fait ce qui est fait dans toutes les fonctions des &lt;span class="caps"&gt;SIG&lt;/span&gt; (systèmes d’information géographique, comme &lt;span class="caps"&gt;QGIS&lt;/span&gt;) travaillant sur les éléments selon leur proximité, j’ai commencé par &lt;strong&gt;évaluer si je peux ne pas faire le calcul&lt;/strong&gt; pour chaque&amp;nbsp;élément.&lt;/p&gt;
&lt;p&gt;Pour ça, calculons les «&amp;nbsp;&lt;em&gt;bounding boxes&lt;/em&gt;&amp;nbsp;», ou boîtes englobantes, de chaque élément&amp;nbsp;: nous retenons leurs coordonnées minimale et maximale sur chaque axe. Si je souhaite exclure de tout calcul les éléments distants de plus de 50 m entre eux, j’ajoute une marge de 50 m autour des boîtes de l’une des sources (ou 25 m de toutes les boîtes). &lt;strong&gt;Si les boîtes englobantes de deux éléments ne s’intersectent pas, on s’arrête là&lt;/strong&gt;. Évaluer cette condition revient à évaluer quelques inégalités, et &lt;strong&gt;c’est très rapide&lt;/strong&gt; par rapport au calcul de distance complet&amp;nbsp;: sur tout un jeu de données, on s’épargne un temps fou. Bien sûr, on n’a pas calculé une distance précise, donc quand il y a intersection des boîtes, il faut vérifier un peu la disposition des éléments entre&amp;nbsp;eux.&lt;/p&gt;
&lt;p&gt;J’ai fait ça, et c’était toujours (un peu) trop lent. Avant même d’optimiser les calculs suivants, j’ai amélioré encore ce processus de sélection, parce que, contrairement aux outils génériques, je peux tenir compte de mes connaissances sur les données qui seront utilisées par l’outil. En l’occurrence, ce sont des tronçons, découpés à chaque intersection, dans un réseau relativement dense donc avec des longueurs toujours petites par rapport au dimension du&amp;nbsp;territoire.&lt;/p&gt;
&lt;p&gt;J’ai eu plusieurs &lt;strong&gt;idées d’amélioration&lt;/strong&gt; sur&amp;nbsp;mesure.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="premiere-amelioration-le-fenetrage"&gt;
&lt;h2&gt;Première amélioration&amp;nbsp;: le&amp;nbsp;fenêtrage&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference internal" href="#sommaire"&gt;retourner au&amp;nbsp;sommaire&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Compte tenu de ma connaissance des données, et je travaille alors par fenêtrage : &lt;strong&gt;on ne comparera des éléments que s’ils sont tous deux dans la même fenêtre&lt;/strong&gt;. Je calcule la longueur maximale des tronçons de chacun des jeux de données, et ma fenêtre sera dimensionnée en fonction du plus petit des maxima des longueurs des deux jeux de données. Après, je traite, position de la fenêtre après position : du premier jeu de données, je retire les données déjà sélectionnées et traitées&amp;nbsp;; dans le deuxième jeu de données, je les remets à chaque fois en jeu, mais je calcule une seule fois leur position par rapport à la fenêtre après chaque déplacement de&amp;nbsp;celle-ci.&lt;/p&gt;
&lt;p&gt;Au niveau algorithmique, en considérant que l’on a respectivement m éléments dans le premier jeu de données et n dans le deuxième, l’idée est ici de se rapprocher d’un calcul de complexité linéaire en O(m+n) plutôt que quadratique en&amp;nbsp;O(m×n).&lt;/p&gt;
&lt;p&gt;Bon, en y regardant un peu plus les temps de calcul de mon premier essai, la vraie raison de la lenteur du programme, ce n’est pas les comparaisons des boîtes. En fait, cette étape est tellement rapide que je n’y gagnerais quasiment rien à l’optimiser. J’ai alors laissé tombé de côté cette idée car j’en avais une autre en tête, potentiellement bien plus efficace. En plus, le fenêtre, ça pourrait améliorer un peu le temps de calcul avec un réseau dense, donc pour un territoire urbain&amp;nbsp;; mais pour un territoire rural, le gain serait encore plus réduit (et tant qu’à faire, si ce n’est pas un gros effort, autant permettre d’utiliser l’outil pour tout type de&amp;nbsp;territoire).&lt;/p&gt;
&lt;p&gt;On la met de côté dans notre cas actuel, mais gardez l’idée du fenêtrage dans un coin de la tête, elle peut parfois être très&amp;nbsp;efficace&amp;nbsp;!&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="deuxieme-amelioration-la-rotation-du-referentiel"&gt;
&lt;h2&gt;Deuxième amélioration&amp;nbsp;: la rotation du&amp;nbsp;référentiel&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference internal" href="#sommaire"&gt;retourner au&amp;nbsp;sommaire&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Mon vrai problème, c’est que les boîtes ne sont pas adaptées. Reprenons quelques paragraphes plus haut: j’ai simplement utilisé les coordonnées dans le système de référence des jeux de données. Du coup, si une ligne est dirigée selon un axe nord-ouest sud-est, je fais un carré, traversé en diagonale par la ligne, et dont 2 des coins sont situés à une distance de la moitié de la longueur de la ligne. C’est beaucoup trop englobant&amp;nbsp;! Et c’est très fréquent, d’autant plus que mes tronçons ne sont pas franchement sinueux et ne remplissent pas beaucoup les&amp;nbsp;boîtes.&lt;/p&gt;
&lt;p&gt;La solution que j’ai appliquée, c’est de calculer des boîtes dans d’autres référentiels, avec une rotation depuis le référentiel initial &lt;a class="footnote-reference" href="#footnote-1" id="footnote-reference-1"&gt;[1]&lt;/a&gt; (à 30° et 60°, par exemple). On augmente un peu le temps de calcul pour les évaluations d’intersection (on prend un peu de temps de préparation initiale puis on peut faire plusieurs évaluations pour un seul couple de lignes), mais pour un réel gain de temps&amp;nbsp;ensuite.&lt;/p&gt;
&lt;p&gt;Dans la suite du programme, je passais directement à des calculs plus compliqués et longs, qui servaient à la fois à valider le couple et dont les résultats étaient utiles ensuite pour d’autres calculs, le cas échéant&amp;nbsp;: distance de Hausdorff et comparaison des orientations locales (sur leur partie commune après projection de l’une sur l’autre). Pour éviter encore quelques uns de ces calculs, j’ai ajouté une étape intermédiaire&amp;nbsp;: calcul de la distance du centre de la première ligne à la seconde. Avec la technique des boîtes dans 3 référentiels différents, c’était un peu du bonus&amp;nbsp;; j’y ai quand même gagné entre 10 et 15&amp;nbsp;% de cas où j’évite le calcul de la distance de Hausdorff. Là, la pertinence doit être évaluée en fonction des données&amp;nbsp;: avec des lignes simples, la distance est calculée très vite, et cet ajout fait perdre du temps, mais avec des lignes complexes (contenant beaucoup de sommets), on peut être gagnant. J’ai donc laissé cette étape en option dans&amp;nbsp;l’outil.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="en-conclusion"&gt;
&lt;h2&gt;En&amp;nbsp;conclusion&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference internal" href="#sommaire"&gt;retourner au&amp;nbsp;sommaire&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bien connaître ses données&amp;nbsp;: c’est&amp;nbsp;important.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;J’ai parlé d’opérations préalables aux calculs, au sein de l’outil de traitement, mais il y a autre chose à faire avant même de créer l’outil (ou de le lancer)&amp;nbsp;: il faut préparer ses données. Si on n’a pas besoin d’une précision décimétrique ou plus précise, on peut certainement simplifier les géométries (ce qui fera moins de sommets pour les lignes et les contours des polygones) et on y gagnera sur tous les calculs à venir, ainsi que sur le stockage et sur la réactivité de l’affichage dans une carte dynamique. J’ai pu travailler sur des algorithmes de simplification au travail, et on en parlera peut-être un&amp;nbsp;jour.&lt;/p&gt;
&lt;p&gt;À noter que j’ai commencé mes études par une licence ès mathématiques, et ça m’aide. Si vous n’avez pas compris ce qu’était la «&amp;nbsp;distance de Hausdorff&amp;nbsp;», ce n’est pas grave (mais je vous invite à chercher). On peut se passer de ce genre de subtilités et arriver à pas mal de choses quand même. (D’ailleurs, j’utilise plus souvent la semi-distance de Hausdorff, qui n’est pas une distance, parce que les relations sont rarement symétriques et que j’ai rarement besoin d’une vraie&amp;nbsp;distance.)&lt;/p&gt;
&lt;p&gt;J’ai surtout fait &lt;strong&gt;de la trigonométrie au collège&lt;/strong&gt; et c’est &lt;strong&gt;très souvent utile&lt;/strong&gt; dans un travail où on fait de la géométrie. Remercions nos enseignants qui ont supporté nos tempéraments de l’époque et qui nous ont tant appris&amp;nbsp;!&lt;/p&gt;
&lt;p&gt;A&amp;nbsp;bientôt&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="notes"&gt;
&lt;h2&gt;Notes&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference internal" href="#sommaire"&gt;retourner au&amp;nbsp;sommaire&lt;/a&gt;&lt;/p&gt;
&lt;table class="docutils footnote" frame="void" id="footnote-1" rules="none"&gt;
&lt;colgroup&gt;&lt;col class="label" /&gt;&lt;col /&gt;&lt;/colgroup&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td class="label"&gt;&lt;a class="fn-backref" href="#footnote-reference-1"&gt;[1]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Pour l’anecdote, depuis le début, sans le dire, je travaillais dans un référentiel local (par translation) pour éviter de tripatouiller des gros nombres pour rien.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
</content><category term="géotraitements"/><category term="données"/><category term="système d’information géographique"/><category term="SIG"/><category term="traitements"/><category term="prétraitements"/></entry><entry><title>Chères données</title><link href="https://par-ci.fr/par-l%C3%A0/billets/ch%C3%A8res-donn%C3%A9es/" rel="alternate"/><published>2024-01-21T20:04:00+01:00</published><updated>2024-01-21T20:04:00+01:00</updated><author><name>namori</name></author><id>tag:par-ci.fr,2024-01-21:/par-là/billets/chères-données/</id><summary type="html">&lt;p class="first last"&gt;Cette semaine, j&amp;#8217;ai présenté mes activités professionnelles à un
stagiaire de seconde. Classique, me direz-vous&amp;nbsp;: je suis bien
d&amp;#8217;accord. Néanmoins, je me dis que ce que je lui apprends alors, vous
l&amp;#8217;ignorez peut-être, vous aussi. Dans le doute, je reprends pour&amp;nbsp;vous…&lt;/p&gt;
</summary><content type="html">&lt;div class="contents local topic" id="sommaire"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Sommaire&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#introduction" id="toc-entry-1"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#l-importance-des-donnees" id="toc-entry-2"&gt;L&amp;#8217;importance des&amp;nbsp;données&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#l-exemple-de-la-cartographie-interractive" id="toc-entry-3"&gt;L&amp;#8217;exemple de la cartographie&amp;nbsp;interractive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#en-conclusion" id="toc-entry-4"&gt;En&amp;nbsp;conclusion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#notes" id="toc-entry-5"&gt;Notes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="introduction"&gt;
&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference internal" href="#sommaire"&gt;retourner au&amp;nbsp;sommaire&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Cette semaine, j&amp;#8217;ai présenté mes activités professionnelles à un stagiaire de
seconde. Classique, me direz-vous&amp;nbsp;: je suis bien d&amp;#8217;accord. Néanmoins, je me dis
que ce que je lui apprends alors, vous l&amp;#8217;ignorez peut-être, vous aussi. Dans le
doute, je reprends pour&amp;nbsp;vous.&lt;/p&gt;
&lt;p&gt;Pour le contexte, je travaille dans une &lt;span class="caps"&gt;DSI&lt;/span&gt; (Direction des Systèmes d&amp;#8217;Information),
et j&amp;#8217;y suis en charge de l&amp;#8217;un des systèmes d&amp;#8217;information (&lt;span class="caps"&gt;SI&lt;/span&gt;). Mon boulot
a cela de particulier que je gère &lt;em&gt;et&lt;/em&gt; j&amp;#8217;utilise ce &lt;span class="caps"&gt;SI&lt;/span&gt; (contrairement à
certains de mes collègues qui gèrent mais n&amp;#8217;utilisent pas leurs&amp;nbsp;applications).&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="l-importance-des-donnees"&gt;
&lt;h2&gt;L&amp;#8217;importance des&amp;nbsp;données&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference internal" href="#sommaire"&gt;retourner au&amp;nbsp;sommaire&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pour commencer, un &lt;span class="caps"&gt;SI&lt;/span&gt;, c&amp;#8217;est quoi&amp;nbsp;? C&amp;#8217;est, en gros tout ce qu&amp;#8217;il faut pour
servir de l&amp;#8217;information. C&amp;#8217;est, ensemble, un ou plusieurs logiciels, le matériel
sur lequel ils tournent, les humains qui l&amp;#8217;administrent et&amp;#8230; l&amp;#8217;information
(les données). Pour arriver à son objectif, il collecte des informations,
les traite si besoin, les stocke si besoin, et les&amp;nbsp;diffuse.&lt;/p&gt;
&lt;p&gt;Dans le système que je gère, une partie du traitement réalisée par l&amp;#8217;humain (ou
sous son contrôle étroit). Je ne parle pas de la saisie, que j&amp;#8217;assimile à la
collecte, mais bien du traitement. Je présente souvent mon travail par la finalité
de ce &lt;span class="caps"&gt;SI&lt;/span&gt; (car je l&amp;#8217;utilise), ce qui correspond à la diffusion de
l&amp;#8217;information. La réalité, c&amp;#8217;est que la très grande majorité de mon temps est
dédié à la collecte et au&amp;nbsp;traitement.&lt;/p&gt;
&lt;p&gt;Beaucoup de ces traitements sont automatisables (et j&amp;#8217;en automatise beaucoup).
La raison principale pour laquelle on a toujours besoin de quelqu&amp;#8217;un, et on en
aura peut-être besoin longtemps, c&amp;#8217;est que le besoin exprimé par les utilisateurs
(moi inclus) concerna toujours l&amp;#8217;information diffusée. À partir de cette seule
partie finale du travail, il faut concevoir et mettre en place tout le reste
du système. Et n&amp;#8217;oublions pas les procédures de&amp;nbsp;maintenance.&lt;/p&gt;
&lt;p&gt;Pour faire une analogie avec un autre domaine, c&amp;#8217;est comme pour le train&amp;nbsp;:
vous, utilisateur, souhaitez aller d&amp;#8217;un point&amp;nbsp;A à un point&amp;nbsp;B, le plus
rapidement possible. Acquérir le foncier, réaliser les ouvrages, mettre en place
l&amp;#8217;infrastructure ferroviaire et les gares, exploiter le réseau, acheter et
maintenir le matériel roulant, le conduire&amp;nbsp;: vous ne le demandez même pas.
&lt;span class="caps"&gt;OK&lt;/span&gt;, ce n&amp;#8217;est pas vous qui demandez&amp;nbsp;; mais même l&amp;#8217;autorité en charge des
transports ne demandera finalement qu&amp;#8217;une fréquence de passage entre tels et
tels lieux (et une accessibilité, un confort,&amp;nbsp;etc.).&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="l-exemple-de-la-cartographie-interractive"&gt;
&lt;h2&gt;L&amp;#8217;exemple de la cartographie&amp;nbsp;interractive&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference internal" href="#sommaire"&gt;retourner au&amp;nbsp;sommaire&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Revenons à nos &lt;span class="caps"&gt;SI&lt;/span&gt;. Voilà une illustration de la vie de tous les jours
pour un certain nombre d&amp;#8217;entre vous : si vous avez l&amp;#8217;habitude
d&amp;#8217;utiliser des cartes interactives, par exemple celle proposée par votre moteur
de recherche, vous y voyez de nombreuses choses, en particulier des traits,
des aplats et des symboles de différentes couleurs. Mais quelles données sont
derrière tout ça&amp;nbsp;? Quelle est leur&amp;nbsp;complexité&amp;nbsp;?&lt;/p&gt;
&lt;p&gt;Dans &lt;a class="reference external" href="https://www.openstreetmap.org"&gt;OpenStreetMap&lt;/a&gt;, nous avons accès à ces
données et pouvons les consulter (et les modifier). Si vous ne l&amp;#8217;avez pas encore
remarqué, il existe un outil «&amp;nbsp;Interroger les objets&amp;nbsp;» (c&amp;#8217;est une flèche avec un
point d&amp;#8217;interrogation, en bas des outils proposés à droite de&amp;nbsp;l&amp;#8217;écran).&lt;/p&gt;
&lt;p&gt;Pour vous en rendre compte par vous-même, vous pouvez utiliser cet outil et
observer tous les objets derrière la carte, ainsi que les données associées à
chacun d&amp;#8217;entre eux. Vous trouverez des objets administratifs, les zonages
notamment (commune, canton, etc.), ainsi que les voies, le
mobilier urbain, les bâtiments, les boutiques et&amp;nbsp;administrations.&lt;/p&gt;
&lt;p&gt;Chacun de ces objets a des attributs qui dépendent notamment de son type. Le
revêtement peut être précisé pour une voie mais il ne le sera jamais pour une
commune. Les liens entre les objets sont également indiqués&amp;nbsp;: les nœuds partagés
entre plusieurs chemins, les relations entre objets (par exemple, entre une rue
et les numéros de cette rue). Cet ensemble est vraiment complexe, d&amp;#8217;où l&amp;#8217;intérêt
d&amp;#8217;avoir quelqu&amp;#8217;un derrière tout&amp;nbsp;ça.&lt;/p&gt;
&lt;p&gt;Je vous invite à parcourir OpenStreetMap à la recherche d&amp;#8217;un escalier ; observez
alors les informations le concernant. Si vous n&amp;#8217;en avez pas dans la carte à
proximité ou que vous avez des difficultés avec la navigation dans la carte, en
voici &lt;a class="reference external" href="https://www.openstreetmap.org/way/365612768"&gt;un exemple d&amp;#8217;escalier sur OpenStreetMap&lt;/a&gt; (pour les connexions limitées,
vous pouvez consulter les fiches xml associées &lt;a class="footnote-reference" href="#fiches-xml" id="footnote-reference-1"&gt;[1]&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;L&amp;#8217;objet représentant un escalier («&amp;nbsp;steps&amp;nbsp;» signifie «&amp;nbsp;marches&amp;nbsp;» en anglais) est
connecté de chaque côté à un autre élément (souvent de type chemin piéton). Cette
connexion se fait par le biais d&amp;#8217;un nœud, qu&amp;#8217;il partage à son extrémité avec cet
élément. C&amp;#8217;est indispensable pour calculer des itinéraires. Car l&amp;#8217;information que
c&amp;#8217;est un escalier, si elle vous peut être utile pour se repérer sur une carte, peut
aussi être exploitée de manière non graphique dans des calculs. C&amp;#8217;est d&amp;#8217;ailleurs
utilisé comme ça dans les calculs d&amp;#8217;itinéraire qui tiennent compte de
l&amp;#8217;accessibilité, qui devraient bientôt être généralisés (et s&amp;#8217;ils ne le sont pas
encore, c&amp;#8217;est parce que les données ne sont pas disponibles&amp;nbsp;partout).&lt;/p&gt;
&lt;p&gt;Je vous invite, si vous en avez la curiosité, à parcourir le modèle de données
&lt;a class="footnote-reference" href="#modele-de-donnees" id="footnote-reference-2"&gt;[2]&lt;/a&gt; du standard &lt;span class="caps"&gt;CNIG&lt;/span&gt; d&amp;#8217;accessibilité du cheminement en voirie,
partie 3.2 (à partir de la page 17) de la &lt;a class="reference external" href="https://cnig.gouv.fr/IMG/pdf/230626_standard_cnig_accessibilite_v2021-10_rev2023-06.pdf"&gt;dernière version du standard à cette date&lt;/a&gt;.
Les escaliers y sont représentés par un type spécifique de «&amp;nbsp;tronçon de cheminement&amp;nbsp;».
Ils sont situés entre 2 nœuds, lesquels sont alors également les extrémités d&amp;#8217;autres
cheminement, potentiellement de type circulation (ou bien un autre escalier,
une rampe, etc.). Ça vous rappelle quelque chose ? En effet, le modèle de
données est proche de celui d&amp;#8217;OpenStreetMap&amp;nbsp;: il y a d&amp;#8217;ailleurs &lt;a class="reference external" href="https://github.com/jmtrivial/OSM-vers-geostandardCNIG"&gt;un outil qui
convertit les données d&amp;#8217;OpenStreetMap vers ce standard&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="en-conclusion"&gt;
&lt;h2&gt;En&amp;nbsp;conclusion&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference internal" href="#sommaire"&gt;retourner au&amp;nbsp;sommaire&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;J&amp;#8217;ai illustré ici l&amp;#8217;importance des données dans le monde des &lt;span class="caps"&gt;SI&lt;/span&gt;, qu&amp;#8217;on ne
perçoit pas toujours en tant qu&amp;#8217;utilisateur. Et pourtant, si le mot «&amp;nbsp;système&amp;nbsp;»
est important dans «&amp;nbsp;Systèmes d&amp;#8217;Information&amp;nbsp;», il ne faut pas oublier le mot&amp;nbsp;«&amp;nbsp;information&amp;nbsp;»&amp;nbsp;!&lt;/p&gt;
&lt;p&gt;Nous n&amp;#8217;avons fait qu&amp;#8217;effleurer le sujet des données. Il reste tant de choses à
dire toutes les conditions pour qu&amp;#8217;elle soit utilisable. Ainsi, les prochains
billets de la thématique des données pourront porter sur leur&amp;nbsp;besoin&amp;nbsp;:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;de structuration (et donc au préalable de&amp;nbsp;modélisation),&lt;/li&gt;
&lt;li&gt;de qualité, ce qui va avec son évaluation et sa&amp;nbsp;qualification,&lt;/li&gt;
&lt;li&gt;de documentation, au travers des&amp;nbsp;métadonnées,&lt;/li&gt;
&lt;li&gt;de standardisation (qui doit prendre en compte l&amp;#8217;ensemble des points
précédents), préalable à une diffusion, en open data ou&amp;nbsp;non,&lt;/li&gt;
&lt;li&gt;de confidentialité et de gestion des&amp;nbsp;privilèges.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Comme vous le voyez, le sujet est&amp;nbsp;vaste&amp;nbsp;!&lt;/p&gt;
&lt;p&gt;J&amp;#8217;espère que la lecture de ce billet vous a été plaisante et enrichissante.
N&amp;#8217;hésitez pas à me faire des retours&amp;nbsp;! Pour notre prochain billet, nous
pourrons aborder une nouvelle thématique et introduire un peu de&amp;nbsp;code.&lt;/p&gt;
&lt;p&gt;namori&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;&lt;/em&gt;&amp;nbsp;: Je suis désolé si vous vous attendiez à ce que je parle de vol de données
personnelles, ou encore du coût d&amp;#8217;acquisition des données… Je n&amp;#8217;ai pas
trouvé meilleur titre, même s&amp;#8217;il manque certainement de&amp;nbsp;précision&amp;nbsp;!&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="notes"&gt;
&lt;h2&gt;Notes&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference internal" href="#sommaire"&gt;retourner au&amp;nbsp;sommaire&lt;/a&gt;&lt;/p&gt;
&lt;table class="docutils footnote" frame="void" id="fiches-xml" rules="none"&gt;
&lt;colgroup&gt;&lt;col class="label" /&gt;&lt;col /&gt;&lt;/colgroup&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td class="label"&gt;&lt;a class="fn-backref" href="#footnote-reference-1"&gt;[1]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;p class="first"&gt;Les fiches &lt;span class="caps"&gt;XML&lt;/span&gt; suivantes représentent les éléments de cet exemple&amp;nbsp;:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://www.openstreetmap.org/api/0.6/way/365612768"&gt;la fiche de l&amp;#8217;objet &amp;#8220;escalier&amp;#8221;&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://www.openstreetmap.org/api/0.6/node/3696172618"&gt;la fiche du nœud de départ&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://www.openstreetmap.org/api/0.6/way/365612776"&gt;la fiche du deuxième objet associé au nœud de&amp;nbsp;départ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="last"&gt;Vous retrouverez bien le nœud référence 3696172618 dans l&amp;#8217;escalier et dans le
deuxième objet de type way (signifiant «&amp;nbsp;chemin&amp;nbsp;» en&amp;nbsp;anglais).&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table class="docutils footnote" frame="void" id="modele-de-donnees" rules="none"&gt;
&lt;colgroup&gt;&lt;col class="label" /&gt;&lt;col /&gt;&lt;/colgroup&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td class="label"&gt;&lt;a class="fn-backref" href="#footnote-reference-2"&gt;[2]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;p class="first"&gt;Le modèle de données, c&amp;#8217;est la représentation qui permet de concevoir
la structure dans laquelle on va pouvoir sauvegarder les données,
les traiter et les diffuser. La structure des données est souvent appelée
elle-même  modèle de&amp;nbsp;données.&lt;/p&gt;
&lt;p class="last"&gt;Les données de chaque type peuvent par exemple être réuni dans
une table et des relations peuvent être faites entre des objets de
plusieurs tables, si le modèle le prévoit. Ce modèle est adapté aux
bases de données dites structurées relationnelles. Les modèles sont
cruciaux pour les bases de données non structurées, car la structure
de la base de données est alors moins explicite et sa compréhension
est parfois très délicate sans&amp;nbsp;documentation.&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
</content><category term="données"/><category term="données"/><category term="système d'information"/><category term="openstreetmap"/></entry><entry><title>Bienvenue</title><link href="https://par-ci.fr/par-l%C3%A0/billets/bienvenue/" rel="alternate"/><published>2024-01-06T12:25:00+01:00</published><updated>2024-01-21T19:30:00+01:00</updated><author><name>namori</name></author><id>tag:par-ci.fr,2024-01-06:/par-là/billets/bienvenue/</id><summary type="html">&lt;p class="first last"&gt;Salut et bienvenue sur Par-ci par-là&amp;nbsp;! C’est quoi, Par-ci par-là&amp;nbsp;?
Par-ci par-là, c’est ce blog. Pourquoi ce nom&amp;nbsp;? Parce que je
cherchais un nom à consonance géographique, mais pas trop barbant.
Par-ci par-là, c’est du langage courant, c’est facile à retenir.
Par-ci par-là, avec ou sans virgule&amp;nbsp;? J’essaie de toujours l&amp;#8217;écrire
sans, par simplicité et par cohérence, mais elle risque d’apparaître
par-ci,&amp;nbsp;par-là&amp;nbsp;!…&lt;/p&gt;
</summary><content type="html">&lt;div class="contents local topic" id="sommaire"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Sommaire&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#cest-quoi-par-ci-par-la" id="toc-entry-1"&gt;C’est quoi, Par-ci&amp;nbsp;par-là&amp;nbsp;?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#cest-qui-namori" id="toc-entry-2"&gt;C’est qui,&amp;nbsp;namori&amp;nbsp;?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#il-y-aura-quoi-ici-et-la" id="toc-entry-3"&gt;Il y aura quoi, ici (et&amp;nbsp;là)&amp;nbsp;?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#aparte-sur-ma-vie-professionnelle" id="toc-entry-4"&gt;Aparté sur ma vie&amp;nbsp;professionnelle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#la-vie-du-blog" id="toc-entry-5"&gt;La vie du&amp;nbsp;blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;Salut et bienvenue sur Par-ci&amp;nbsp;par-là&amp;nbsp;!&lt;/p&gt;
&lt;div class="section" id="cest-quoi-par-ci-par-la"&gt;
&lt;h2&gt;C’est quoi, Par-ci&amp;nbsp;par-là&amp;nbsp;?&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference internal" href="#sommaire"&gt;retourner au&amp;nbsp;sommaire&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Par-ci par-là, c’est ce blog. Pourquoi ce nom&amp;nbsp;? Parce que je cherchais un nom à
consonance géographique, mais pas trop barbant. Par-ci par-là, c’est du langage
courant, c’est facile à&amp;nbsp;retenir.&lt;/p&gt;
&lt;p&gt;Par-ci par-là, avec ou sans virgule&amp;nbsp;? J’essaie de toujours l&amp;#8217;écrire sans,
par simplicité et par cohérence, mais elle risque d’apparaître par-ci,&amp;nbsp;par-là&amp;nbsp;!&lt;/p&gt;
&lt;p&gt;Pour la petite histoire, j’avais pensé à un nom encore plus court, comme
là.xyz, mais par commodité, j’ai préféré éviter les accents dans le nom de
domaine. Ce sera donc par-ci.fr. En .fr, finalement, pour la simplicité
juridique et administrative (pas très envie de régler un éventuel conflit aux
&lt;span class="caps"&gt;US&lt;/span&gt;). En plus, c’est pas trop&amp;nbsp;cher.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="cest-qui-namori"&gt;
&lt;h2&gt;C’est qui,&amp;nbsp;namori&amp;nbsp;?&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference internal" href="#sommaire"&gt;retourner au&amp;nbsp;sommaire&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;C’est moi, namori. Vous m’avez peut-être déjà vu, sur les &lt;span class="caps"&gt;RS&lt;/span&gt; ou sur &lt;span class="caps"&gt;IRC&lt;/span&gt;. Ou pas.
Dans tous les cas, vous êtes ici et vous êtes les bienvenus. De mon côté, je ne
suis ni jeune ni vieux, peut-être 40 un de ces jours. Je vis quelque part en
France, à un endroit qui est plutôt pratique pour être visible et compté quand
on manifeste ses opinions dans la rue (oui, Paris) (Paris, c’est une notion qui
dépasse la commune ou le&amp;nbsp;département).&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="il-y-aura-quoi-ici-et-la"&gt;
&lt;h2&gt;Il y aura quoi, ici (et&amp;nbsp;là)&amp;nbsp;?&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference internal" href="#sommaire"&gt;retourner au&amp;nbsp;sommaire&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;On parlera donc, ici, de geekeries et de géographie. De géomatique, un peu. De
mes déboires personnels et professionnels contre la machine, son code et ses
utilisateurs. Le tout sous couvert d’anonymat quand nécessaire, ou de
pseudonymat avec&amp;nbsp;autorisation.&lt;/p&gt;
&lt;p&gt;On ne parlera pas&amp;nbsp;: de mes éventuels ennuis de santé, de famille, d’amitié,
d’amour, de sexualité et autres. On parlera par contre de vie associative, de
vie professionnelle (avec certaines limites, voir ci-dessous), de programmes et
de programmation, et de politique quand c’est en rapport avec l’un des éléments&amp;nbsp;précédents.&lt;/p&gt;
&lt;p&gt;Il est possible que des bouts de code fassent leur apparition. Du code
exemplaire (à mes yeux) ou des contre-exemples, parfois même ici de mon corpus.
Du code sur la géographie ou du code comme ça, un regard sur une repo ouverte,
etc. Si vous n’êtes pas à l’aise avec le code, aucun problème&amp;nbsp;; j’essaierai
d’inclure le mot-clé «&amp;nbsp;code&amp;nbsp;» systématiquement pour que vous puissiez filtrer
les billets&amp;nbsp;concernés.&lt;/p&gt;
&lt;p&gt;Tout au plus, je ferai peut-être un jour des statistiques de visite, agglomérées
par jour et sans discriminer l’origine. Pour l’instant, visitez sans prise de
tête&amp;nbsp;: personne d’autre que votre &lt;span class="caps"&gt;FAI&lt;/span&gt; ne le saura (et peut-être Google si vous
utilisez son navigateur&amp;nbsp;: ne le faites pas) (et optez pour un &lt;span class="caps"&gt;FAI&lt;/span&gt;&amp;nbsp;associatif).&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="aparte-sur-ma-vie-professionnelle"&gt;
&lt;h2&gt;Aparté sur ma vie&amp;nbsp;professionnelle&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference internal" href="#sommaire"&gt;retourner au&amp;nbsp;sommaire&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;J’ai longtemps essayé de découpler ma vie personnelle et professionnelle.
Je vous le dis tout de suite&amp;nbsp;: c’est fini, tout ça&amp;nbsp;! Non pas que ça m’apporte
grand chose, professionnellement&amp;nbsp;; ce serait plutôt l’inverse (c’est pour
arrêter de me prendre la tête à tout dissocier). Je travaille dans le public, et
les devoirs d’un agent public sont assez contraignants. C’est pourquoi je ne
donnerai pas le nom de mon employeur. Peut-être pourrez-vous le deviner&amp;nbsp;: si
vous y parvenez, je vous demanderai de le garder pour vous. C’est juste plus
simple, ça évite qu’un moteur de recherche associe mes écrits à son nom. Ça
n’empêchera pas mon employeur de me chercher des noises si je contreviens à mes&amp;nbsp;obligations.&lt;/p&gt;
&lt;p&gt;Je suis&amp;nbsp;: administrateur d’une application, avec ses utilisateurs et leurs
données (et celles de l’administration), mais aussi un peu data manager. À ce
titre, j’évalue, je documente (chères métadonnées), j’améliore, je traite les
données. Depuis quelques années, Python est mon ami. Par le passé, j’ai appris
avec d’autres langages, j’en ai utilisé d’autres, mais je ne touche plus qu’au
Python… ou presque. Presque, car je suis administrateur de mon
application, qui a une partie web dans laquelle je dois bricoler un peu&amp;nbsp;: miam,
des &lt;span class="caps"&gt;JSP&lt;/span&gt; (non, c’est une blague, fuyez ces objets du&amp;nbsp;Démon).&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="la-vie-du-blog"&gt;
&lt;h2&gt;La vie du&amp;nbsp;blog&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference internal" href="#sommaire"&gt;retourner au&amp;nbsp;sommaire&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Nous allons tenter un rendez-vous toutes les deux semaines. Comme ça risque de
ne pas être toujours précis (je préfère l’espace au temps), je vous invite à
vous abonner au flux &lt;span class="caps"&gt;RSS&lt;/span&gt; (Atom) pour être averti⋅e de tout nouveau&amp;nbsp;billet.&lt;/p&gt;
&lt;/div&gt;
</content><category term="général"/><category term="introduction"/><category term="blog"/><category term="présentation"/></entry></feed>