1
Université Montpellier 2/3 et
AgroParisTech Master Géomatique
2016 - 2017
Automatisation et optimisation de chaînes de
traitements visant à consolider l'attribution d'informations
géographiques aux bâtiments
DELORY Nicolas
Rapport de stage ForCity
Modélisation urbaine
Supervisé en entreprise par Emilie CORBI et
académiquement par Carmen GERVET
2
Table des matières
Introduction 1
Remerciements 2
Définitions et sigles 2
1) Présentation de l'entreprise ForCity 3
2) Choix du stage 3
3) Objectifs du stage 3
A. Compétences à mobiliser 3
B. Précision de la mission 3
C. Le data-set « usage des bâtiments » 3
Solution de géocodage de masse et Snapping
1
Le géocodage 3
1.1 Définition et précision du besoin 6
A. Définition du géocodage 3
B. Le rôle du géocodage 3
C. Les besoins de ForCity 3
1.2 Etat de l'art 6
A. Benchmarking des solutions 3
B. Démarche des tests 3
C. Résultats des tests 3
1.3 Les solutions internes 6
A. Présentation des solutions internes 3
B. Choix de la solution 3
C. Fonctionnalités et limites de la solution 3
1.4 Les solutions internes 6
A. Initiation au scripting en python et à la librairie
Pandas 3
B. Mes améliorations sur l'outil geoloc_csv 3
C. Limites des améliorations et optimisations possibles
3
Le snapping aux bâtiments 3
2.1 Définition et précision du besoin 6
A.
3
Définition du Snapping 3
B. Précision du besoin 3
C. Zones de tests 3
2.2 Méthodes et processus 6
A. Snapping des activités commerciales sur la porte
des Alpes 3
B. Snapping des activités commerciales sur la zone du
centre-ville de Lyon 3
C. Snapping des activités industrielles sur
Vaulx-en-Velin 3
2.3 Conclusion sur le Snapping 6
La ventilation 1
La ventilation de la surface salariale aux bâtiments 3
1.1 Les conditions initiales 6
A. Résultat du workflow et limites 3
B. La ventilation 3
1.2 Méthodologie et étapes de développement
6
A. Les contraintes à respectés 3
B. Technologies et librairies employées 3
C. Méthodologies et étapes de développement
3
1.3 Retour d'expérience 6
A. Difficultés rencontrés et résultats 3
B. Limites et pistes d'améliorations possibles 3
Conclusion 1
Annexes 1
4
1 Introduction
Au cours du XXème et XXIème siècle,
l'évolution de la population urbaine a connu un essor sans
précédent. Les villes où grandes aires urbaines
rassemblent aujourd'hui près de 60 % de la population en France, soit
37,8 millions d'habitants. Au niveau international, la population des villes
représentait 30% de la population mondiale en 1950, 54% en 2014 et avec
le développement des pays émergents on estime qu'en 2050, 70% de
la population mondiale vivra en milieu urbain (OCDE, 2012).
S'imposent alors des interrogations et réflexions
associées au développement du tissu urbain.
« Les questions de l'étalement urbain
(périurbanisation) et de l'organisation réticulaire des espaces
urbains alimentent les réflexions sur la fin de la ville ou la ville
émergente » (A. Hertzog, A. Sierra)
En effet, les dirigeants et décideurs des villes voient
nombres de leurs responsabilités augmenter. Face aux contraintes
sociales et à des pressions environnementales ou économiques
grandissantes, les décideurs publics et privés sont
confrontés à la complexité de l'évolution urbaine.
La ville est un système complexe, les projets de modification urbaine
affectent les réseaux de transports, d'alimentation de la ville en
énergie, eau et donc la performance générale de la ville.
De plus, la somme des comportements individuels semble rendre tout cela
imprévisible.
Ces décideurs, politiciens et grandes entreprises font
aujourd'hui appel à de nombreuses compétences pour pouvoir
répondre entièrement aux besoins des villes. En effet, la
connaissance approfondie d'un phénomène urbain isolé n'est
plus suffisante. Il est nécessaire aujourd'hui de connaître les
interactions entre les problématiques de la ville afin de mieux
prévoir les impacts d'un projet.
Pour imaginer la ville de demain et la
numérisée, des outils peuvent être mis en place. Ces outils
fonctionnent avec la nouvelle « matière première » de
notre temps, la donnée numérique, qui en est l'essence. La
donnée numérique constitue le nouvel or, cependant comme toute
matière première elle nécessite d'être
remaniée, consolidée, transformée... ceci afin de pouvoir
travailler avec, visualiser des phénomènes ou bien extrapoler des
phénomènes futures. C'est là le dessein de ForCity,
proposer des outils qui permettent via l'absorption de multiples données
de modéliser des projets urbains futurs.
Ce travail porte sur l'ensemble des processus mis en oeuvre
pour utiliser la donnée, et particulièrement les
mécanismes mis en jeu pour rattacher l'information géographique
à l'échelle du bâtiment.
5
1.1 Remerciements
Je souhaiterai remercier ma tutrice universitaire Carmen Gervet
pour avoir accepté d'encadrer ce stage, ainsi que mon tuteur au sein de
l'entreprise Remy Martin pour son accueil.
Je tiens particulièrement à remercier Amaury
Valorge, qui m'a accompagné et guidé durant mon stage, nos
réunions régulières m'ont permis d'avancer
méthodiquement afin de mener à bien ce travail.
Je remercie également ma tutrice de stage Emilie Corbi
pour m'avoir fourni des missions très enrichissantes et pour m'avoir
fait partager ses connaissances en géomatique.
Je remercie aussi Thomas Leysens que j'ai sollicité pour
la première partie de mon stage et qui a été disponible
pour moi.
Enfin je remercie également toutes les autres personnes de
ForCity de Lyon avec lesquelles j'ai pu échanger, et qui ont su se
rendre disponible pour m'apporter leur aide et leurs conseils lorsque j'en
avais besoin, ainsi que me partager leur bonne humeur.
1.2 Définitions et Sigles
SPoC (Synthetic Population Creation) : Modéle de
localisation et caractérisation des individus dans des ménages
qui sont eux-mêmes localisés dans des logements.
TULIP (Transport Urban Landuse Integrated Planing) :
Modèle Forcity de la dynamique du territoire. DYNEX( Dynamix Expertise)
: Modèle simplifié et agrégé du modèle
TULIP.
Pandas : librairie du langage de programmation python
permettant de travailler facilement sur les données.
Geopandas : extension de Pandas permettant le
géotraitement. Psycopg2 : un adaptateur python-base PGSQL
Yed : éditeur de graphique.
API : Interface de programmation. En informatique, une
interface de programmation applicative (souvent désignée par le
terme API pour Application Programming Interface) est un ensemble
normalisé de classes, de méthodes ou de fonctions qui sert de
façade par laquelle un logiciel offre des services à d'autres
logiciels.
6
1.3 Présentation de l'entreprise ForCity
ForCity est une start-up créée à Lyon en
janvier 2014. L'ambition de cette jeune entreprise est mondiale mais elle se
développe tout d'abord dans le tissu entrepreneurial lyonnais. Elle est
constituée d'une grande diversité de profils : parcours R&D
consacrés à la modélisation systémique des
territoires mélangeant des équipes expertes en géomatique,
modélisation (transport, eau, déchets et énergie) et
management de l'innovation.
Cette start-up offre aux services publics et privés un
outil d'aide à la décision. Cet outil est
matérialisé par un accès à une plateforme de
simulation. C'est une carte 3D interactive contenant des informations
géolocalisées. Des informations relatives au transport, à
l'eau, à l'énergie et aux déchets peuvent être
affichées via différents indicateurs. L'intérêt de
cette plateforme est de pouvoir effectuer des simulations : il s'agit
d'évaluer l'influence des évolutions possibles de certains
paramètres sur les valeurs de ces indicateurs. Par exemple, en
connaissant le flux de circulation routier du Cours Lafayette, il est possible
d'en déduire les fuites de ce flux vers les autres rues et donc de
déterminer quels impacts les ralentissements matinaux de 8h30 du Cours
vont avoir sur la Rue Garibaldi. Cela constitue le coeur de métier de
ForCity, elle met les données et la technologie au service des
décisions qui engagent l'avenir : construire une nouvelle ligne de
métro pour soulager les ralentissements du Cours Lafayette.
L'évolution urbaine résulte d'une myriade
d'interactions entre les individus, les projets, les infrastructures et les
services. Pour anticiper cette évolution, il ne suffit pas de s'appuyer
sur une expertise sectorielle, mais il faut oser répliquer
numériquement cette complexité, et pouvoir impliquer les acteurs
eux-mêmes dans le processus. L'ambition de ForCity, c'est de proposer un
outil permettant de simuler des projets, des infrastructures, des services, et
des individus sur un territoire et d'étudier leurs interactions
dynamiquement afin de pouvoir créer des solutions durables.
L'intérêt majeur réside dans la capacité à
modéliser le système complexe qu'est la ville, et de restituer
des résultats sous une forme digeste.
ForCity est constituée de plus d'une soixantaine de
personnes divisée en différents pôles. La
répartition est donc faite selon la liste suivante :
- Direction
- Ressources Humaines et Services Généraux
- Marketing, Communication, Commerce et Consulting
- Production
- Développement
Les pôles Production et développement sont les
pôles techniques. La production concerne la création de la carte
interactive 3D, des visuels, et de la récupération et traitement
de données, c'est un pôle de géomatique. Le
développement concerne la création de modèles de calculs
prévisionnels et de la plateforme de stockage des modèles et de
la donnée, c'est un pôle de modélisation et de
développement logiciel.
7
Figure 1 : Organigramme simplifié de ForCity
Cette jeune entreprise développe des modèles de
calculs qui peuvent être couplés, permettant ainsi de
représenter des phénomènes complexes. Ces modèles
sont validés à l'aide de données réelles. La
plateforme de simulation est un outil de partage et de visualisation pour les
clients. ForCity améliore son expertise de la ville au grès des
différents projets, et vise à se rapprocher petit à petit
d'un modèle numérique multi-systémique complexe.
ForCity possède deux particularités majeures, la
première est audacieuse et suscite l'enthousiasme, il s'agit de sa
capacité à travailler à différentes échelles
temporelles et spatiales. La ville est son terrain de jeu, or cela entraine des
contraintes techniques. Les modèles se doivent par exemple d'être
suffisamment performants pour que leurs temps de calculs restent relativement
courts. La seconde particularité de ForCity concerne l'esprit
collaboratif qu'elle développe avec ses clients. ForCity met à
disposition un lieu de partage protégé de données, ce qui
permet de capitaliser des données de terrain réutilisable. Ainsi,
cette jeune entreprise développe un double intérêt à
toucher tous les secteurs de marchés.
1.4 Choix du stage
Lors de ma recherche de stage, mes principaux critères
d'intérêt se trouvaient dans la manipulation de données
numériques, la modélisation ainsi que la gestion de ces
données, ainsi que la possibilité d'accroître mes
compétences en développement informatique. Lorsque j'ai pris
connaissance de l'offre que proposait ForCity, j'ai tout de suite
été intéressé et leur ai donc fait part de ma
motivation pour le sujet proposé durant les différents entretiens
qui ont constitué mon recrutement. D'autre part, le fait que ForCity
soit une start-up m'a réconforté dans mon choix, le climat
régissant ce type d'entreprise m'attirant tout
particulièrement.
Une problématique mobilisant des compétences
en gestion de données géographiques
De par ma formation en géographie, j'ai
été sensibilisé aux différentes évolutions
dont les villes sont sujettes. Pour ma part, c'est une problématique que
je trouve passionnante et grâce à mon stage au
8
sein de ForCity, dont l'essence même est
l'évolution de la ville, je pouvais être sûr de participer
à un projet dont les tenants et aboutissants correspondent à mes
attentes. En effet, un des points principaux du stage proposé consistait
en l'élaboration de chaines de traitements permettant de constituer des
« data set » alimentant des modèles prospectifs
d'aménagement du territoire. Plus particulièrement, sur un data
set qui porte sur l'usage détaillé des bâtiments.
Un sujet portant sur l'infrastructure des données
et la précision du géocodage
Un des points important du stage consistait au traitement de
données au préalable, notamment avec une partie géocodage.
L'entreprise ayant des besoins ponctuels mais réguliers de
géolocalisation d'adresses, une partie de ma mission consisterait
à choisir une solution de géocodage adéquate au besoin de
ForCity, c'est-à-dire au géocodage de masse (volume important
d'adresses à géocoder).
J'ai appris lors de mes entretiens que la mission consisterait
à effectuer un état de l'art des solutions actuelles existantes
au niveau web service mais aussi au niveau local, où des solutions ont
été développées individuellement par certains
employés, mais non testées. Il y avait également
possibilité de modifier, le cas échéant, les solutions
crées localement afin de leur apporter des fonctionnalités. La
2em partie de la mission consisteraient à l'affectation des informations
géocodées à l'échelle du bâtiment via des
méthodes de snapping de points, que je préciserai au cours du
rapport.
J'ai également été prévenu lors de
mes entretiens que je serai probablement assigné à diverses
tâches selon les besoins circonstanciels induit par les différents
projets.
Possibilité d'accroître mes
compétences en développement informatique
Les tendances actuelles montrent que nous nous dirigeons vers
un monde de plus en plus numérique. En effet, les outils à notre
disposition pour modéliser ou numériser notre environnement afin
de le comprendre plus aisément dans sa globalité, sont de plus en
plus nombreux et performants. Je pense pour ma part qu'en tant qu'apprenti
géomaticien contemporain, il convient de renforcer ses
compétences en termes de développement informatique.
D'une part car la majorité des outils à notre
disposition sont « customisables », c'est-à-dire qu'ils
peuvent être agrémentés de fonctionnalités multiples
selon les besoins de ses utilisateurs, ceci à condition d'avoir un
certain bagage en développement informatique.
D'autre part car il me semble que dans ce monde de plus en
plus numérique, l'acquisition de compétences en
développement informatique ne peut être qu'un plus, et renforcer
la casquette pluridisciplinaires qui fait office de force pour le métier
du géomaticien.
9
1.5 Objectifs du stage
1.1 Compétences à mobiliser
Dans le cadre de mon stage, il m'a été
attribué un sujet de recherche sur lequel je devais travailler
principalement, en addition aux besoins ponctuels de l'entreprise de main
d'oeuvre pour certaines tâches induites par les projets.
Ces missions principales consistaient en :
· La mise en place d'une chaine de traitements pour
géocoder en volume (fichier contenant des milliers de lignes)
· Consolidation et optimisation d'une méthode
d'affectation des informations géocodées sur les bâtiments
à proximité
· Consolidation et optimisation de la chaîne de
traitements : subdivision territoriale
· Création du socle territorial (ensemble de
données composant un territoire) sur des agglomérations
françaises ou étrangères
Il me faudrait donc mobiliser nombreuses compétences
acquises lors de ma formation et d'autres, telles que :
· Des notions en programmation, particulièrement en
Python et SQL
· La manipulation des logiciels SIG ARCGIS, QGis, et FME
· La manipulation et consolidation de données
· La création de données pour un socle
territoriale
1.2 Précision de la mission
A mon arrivé au sein de ForCity, j'ai été
reçu par mon maître de stage monsieur R. Martin. Celui-ci m'a
précisé dès lors les objectifs principaux de mon stage. Je
serai affecté premièrement à une mission de benchmarking
des différentes solutions de géocodages existantes, en effectuant
un état de l'art, puis un test de ces différentes solutions.
Il m'a également été rapporté
qu'au sein de l'entreprise, deux solutions ont été
développés localement, mais pas encore testées. Il me
fallait alors convenir d'un entretient avec leurs développeurs
respectifs, pour comprendre le fonctionnement des applications, les
testées et voir s'il y a possibilité de les améliorer en
leur implémentant d'autres fonctionnalités.
Ma deuxième mission prioritaire concerne l'affectation
des données qui ont été géocodées. Plus
précisément, la consolidation et l'optimisation d'une
méthode d'affectation des informations géocodées aux
bâtiments à proximité. On parle ici de technique de «
Snapping », que je détaillerai au cours du rapport.
Pour conclure, mes tâches seront essentiellement
concentrés sur le data-set « usage des bâtiments » de
l'entreprise ForCity. Ce sont des sets de données qui visent à
alimenter des modèles prospectifs d'aménagement du territoire.
10
1.3 Le data-set « usage des bâtiments
»
La chaîne de traitement Building_Use (ou usage des
bâtiments) permet de définir pour chaque bâtiment le ou les
usages qui l'occupent, que cet usage relève d'une activité
économique, d'un équipement ou d'une occupation
résidentielle. Chaque usage étant associé à une
surface d'occupation et, éventuellement d'un effectif d'emploi ou de
ménages et d'habitants. Ces usages doivent être définis
afin d'alimenter les modèles TULIP et DYNEX. Le workflow est
développé sous FME et fonctionne en trois temps :
- Identification des usages autres que résidentiels
principalement en s'appuyant sur les usages. - Génération des
bâtiments et locaux d'habitats par SPOC, ainsi que définition des
ménages et des personnes.
- Consolidation des données pour les besoins de chacun des
modèles.
Le workflow doit permettre de définir au mieux :
- les usages des bâtiments d'un territoire ainsi que les
surfaces occupées par ces usages (usages
résidentiel comme usages d'activité).
- les emplois associés aux bâtiments d'un
territoire.
- les ménages et les personnes composant ces
ménages.
Le workflow traite les usages par grandes catégories
d'usages. Ce type de traitement permet de filtrer au fur et à mesure des
workflows, les entités en fonction des usages déjà
déterminés. Un premier workflow permet de créer la base
bâti de référence, de formater et consolider les
données SIRENE, les zones d'exclusion et de définir les usages de
type indéterminé liés aux bâtiments trop petits.
Les workflows suivants traitent les différentes
catégories d'usages. Pour chaque workflow, on ramène les
précédents résultats aux bâtiments afin de filtrer
les bâtiments dont les usages sont incompatibles. Les points
définissant les usages sont snappés soit au bâtiment, soit
à la parcelle, soit à la zone d'activité (cela
dépend de la catégorie d'activité). La dernière
étape consiste à formater les données en fonction du
modèle que le workflow devra alimenter. Pour le modèle DYNEX, les
données sont consolidées au bloc. Pour le modèle TULIP
Expert, les données seront consolidées au bâtiment.
11
2 Solutions de géocodage de masse et
Snapping
2.1 Le géocodage
1.1 Définition et précision du besoin
A. Définition du géocodage
Premièrement, commençons par définir ce
qu'est le géocodage au sens propre.
« Le géocodage consiste à affecter des
coordonnées géographiques (latitude/longitude) à une
adresse postale. Ce procédé conduit à la mise en place de
traitement automatisés de manière ponctuelle ou sur des fichiers
d'adresses (individus, entreprises, points d'intérêt, etc.).
Les coordonnées géographiques permettent de situer
chaque adresse sur une carte numérique via un Système
d'Informations Géographiques (SIG). Le géocodage est une des
techniques de géolocalisation
ou de géoréférencement. » Source :
Wikipédia
Je trouve cette définition appropriée pour une
définition générale. Cependant, il me semble que celle-ci
ne fournit pas assez de détails quant au processus mis en jeu. J'ai
trouvé cette définition sur un site de statistique Canadien :
Le géocodage est le processus utilisé pour
attribuer des identificateurs géographiques (codes ou coordonnées
x,y) aux détails cartographiques et aux enregistrements de
données. Les géocodes ainsi créés permettent
d'apparier géographiquement les données à un endroit sur
la terre.
Les ménages, les codes postaux et les données
sur le lieu de travail sont appariés aux points représentatifs
(coordonnées) de côté d'îlot lorsque la rue et
l'adresse sont connues, autrement ils sont appariés aux points
représentatifs d'îlot de diffusion (ID). En certain cas, les codes
postaux et les données sur le lieu de travail sont appariés aux
points représentatifs d'aire de diffusion (AD) lorsqu'il n'est pas
possible de les apparier aux ID. De plus, les données sur le lieu de
travail sont appariées aux points représentatifs de subdivision
de recensement lorsqu'il n'est pas possible de les apparier
aux AD. » Source : Statistique Canada
Cette définition du géocodage, malgré
qu'elle ne puisse être utilisée comme définition globale
étant donné qu'elle utilise des termes propres à la
région canadienne (îlot et aire de diffusion), me parait
pertinente. Tout d'abord parce qu'elle ne limite pas le géocodage
à une affection de coordonnées géographiques sur une
adresse postale, mais aussi parce qu'elle apporte plus de détails sur le
procédé en question. En effet le géocodage, peu importe la
région sur terre, utilise des échelles géographiques comme
niveau de détail et de perfectionnement du résultat. Le
mécanisme cherche le plus haut niveau de détails pour affecter
les coordonnées, s'il ne trouve pas, il attribuera l'adresse à
une échelle plus grossière. En France, les niveaux de
détails du géocodage sont les suivants, du plus précis au
moins précis (attention, tous les géocodeurs ne permettent pas
forcément ce niveau de détails) :
1. Au pays, département, ou à la commune (voire
à l'arrondissement) : le point retourné est situé au
centroïde de l'entité concernée.
2.
12
Au centroïde de la voie : lorsque le numéro n'est
pas connu, le point se situe au centre de la voie.
3. À l'interpolation du tronçon : le
géocodage au n° dans la rue est fait par technique d'interpolation.
La base de données référentielle préalablement
localisée comprend une adresse pour chaque segment de rue, ainsi que ses
quatre bornes de numérotation (Bornes
inférieures/supérieures des numéros pairs/impairs). Le
géocodage interpole la position du numéro de la rue à
partir des bornes du référentiel sur le dessin de la rue.
4. À la plaque : certains référentiels
d'adresse disposent de l'emplacement exact de la plaque mentionnant le
numéro de l'immeuble ou de la maison (comme base "Point Adresse" de
l'Institut Géographique National).
B. Le rôle du géocodage
Le géocodage est utile dans de nombreux domaines de
nos jours, il permet de trouver différents type d'emplacements.
Les types d'emplacements recherchés sont notamment les
points d'intérêt ou les noms issus d'un répertoire
géographique ainsi que les adresses, qui peuvent adopter
différents styles et formats, notamment les intersections de rues, les
numéros de domicile avec les noms de rue, et les codes postaux. Deux
grandes catégories d'usage apparaissent pour les géocodeurs :
? Le géocodage à la volée. La validation
éventuelle est alors demandée au compte-goutte. Il correspond
à l'usage quotidien des sites comme google maps par les particuliers. Il
est ainsi utilisé dans les interfaces homme machine.
? Le géocodage de masse. Un maximum d'adresses sont
géocodées automatiquement. L'ensemble des adresses non
géocodées, appelés rejets, doivent alors être
traités une par une par un opérateur. Ce système peut
être utilisé lorsque des adresses sont échangées
entre deux organisations. Il est ainsi utilisé dans les interfaces
machine-machine.
C. Les besoins de Forcity
Pour l'entreprise ForCity, le type d'usage de géocodage
utilisé est le géocodage de masse. En effet, ForCity utilise un
grand nombre de données de toutes sortes provenant de plateforme
territoriales denses, à l'échelle des grandes
agglomérations, des départements, régions, etc... Plus
particulièrement sur les territoires de l'île de France, les
agglomérations de Lyon et Rouen, ainsi que Hong Kong à
l'étranger.
Pour les besoins de l'entreprise, il est nécessaire de
géocoder ces données le plus précisément possible.
Il faut savoir que la précision en France du géocodage est
moindre, ceci notamment dû au
13
fait qu'un même code postal couvre un très grand
nombre d'adresses (en opposition avec le système anglais, où
chaque code postal correspond à une adresses unique
géo-référencée).
Comme dis précédemment sur les précisions
de ma mission, j'ai dû travailler sur le data-set usage du
bâtiment. Autrement dit, travailler à l'échelle du
bâtiment, et importer les informations des données
géocodées sur les bâtiments correspondants. Hors le
géocodage ne permet pas un tel degré de précision. Il y a
donc une seconde étape à effectuer pour récupérer
ces données et les affectés au bâtiment à
proximité. Cette étape se nomme le « Snapping », je
détaillerai cette étape plus tard dans le rapport.
Néanmoins, la précision obtenue en sortie du
géocodage est véritablement importante car elle simplifie
fortement l'opération de Snapping obligatoire qui suit.
Pour résumer, l'entreprise doit mobiliser une solution
capable de:
D. Géocoder massivement un fichier d'adresses
comportant des centaines de milliers d'entités
E. Obtenir un degré de précision satisfaisant
sur l'ensemble de l'opération
F. Géocoder un grand nombre d'adresses avec un temps
de traitement raisonnable
1.2 Etat de l'art
A. Benchmarking des solutions
Pour commencer ma tâche sur le thème du
géocodage, j'ai dû effectuer un état de l'art des diverses
solutions existantes à ce jour. Etant donné l'utilité du
géocodage dans de nombreux domaines, il existe une multitude solutions
à ce jour qui permettent de géocoder des adresses. Ces solutions
se divisent tout d'abord en deux catégories, les solutions gratuites et
les solutions payantes.
Pour ma tâche, je me suis intéressé aux
diverses solutions qui permettent de géocoder sur le territoire
français, selon les besoins de ForCity (ces besoins sont
focalisés sur le territoire français, et non sur les territoires
étrangers). Il en existe de nombreuses, il m'a été
demandé de favoriser les solutions non payantes, tout en ne
négligeant pas une solution payante si le rapport
coût/efficacité me paraissait satisfaisant.
B. Démarche des tests
Tous les tests que j'ai réalisés ont
été effectués à partir d'un fichier CSV qui
correspond aux adresses SIRENE. En effet, les données qu'il fallait
géocoder au niveau du bâtiment correspondent aux données
Sirène de l'Insee, disponibles sur :
http://www.sirene.fr/sirene/public/accueil
Les données du répertoire SIRENE portent sur
l'ensemble des établissements qui ont une activité sur le
territoire Français. Comme je l'ai précisé
précédemment, ma mission est focalisée sur le data-set
14
« usage des bâtiments », les données
SIRENE alimentent en grande partie ce data-set notamment pour certains secteurs
d'activités comme l'industrie. D'autres sources de données plus
spécifiques ont été privilégiées pour
d'autres secteurs, comme par exemple le RES1 pour les
équipements sportifs, ou encore les données FINESS2
pour les établissements hospitaliers.
L'échantillon sur lequel j'ai testé les
différentes solutions comprend les adresses de commerces basées
sur le 7ém arrondissement Lyonnais, environ 14 000 adresses. Pour chaque
solution, j'ai donné le temps de traitement ainsi que le degré de
confiance du résultat obtenu si cela est possible.
J'ai détaillé au possible l'obtention des
chiffres qui représentent le degré de confiance, qui
dépend du géolocaliseur utilisé. Le but de
l'opération étant de comparer les différentes solutions
testées pour cibler celles qui pourraient être susceptibles de
subvenir aux besoins de l'entreprise en termes de géocodage.
C. Résultats des tests
Le site gouvernemental
-Temps de traitement : environ 4 minutes pour obtenir le CSV
géocodé.
- Degré de confiance :
Nombre d'adresses
|
Intervalle des degrés de confiance
|
Pourcentage
|
373
|
20% à 40%
|
2,6
|
216
|
40% à 60%
|
1,5
|
8642
|
60% à 80%
|
61,9
|
6547
|
80% à 90%
|
46,9
|
Tableau 1: Degré de confiance de l'API
Gouvernementale
Le degré de confiance est censé
représenté la pertinence du résultat obtenu après
l'opération de géocodage. Pour l'API du gouvernement, c'est une
note comprise entre 0 et 1, plus elle est proche de 1, plus haute est la
précision.
Le code du moteur de géocodage de l'API est basé
sur un outil du nom d'Addok. Celui-ci ne donne pas vraiment d'explication sur
le calcul de la précision des adresses géocodées.
1 Recensement des équipements sportifs
disponible sur le site du RES
2 Sélection d'informations sur les
établissements sanitaires, sociaux, médico-sociaux, et de
formation aux professions de ces secteurs
Distribution des adresses par degré de précision
20% à 40% 40% à 60% 60% à 80% 80% à
90%
15
Figure 2: Diagramme degré de précision de l'API
Gouvernementale
L'API de l'IGN
Cette API offre la possibilité de géocoder des
adresses en ligne directement sur une API à l'adresse :
https://mesadresses.ign.fr/geocod/
Cette API est limitée au géocodage de 100 000
adresses sur 30 jours, et offre la possibilité de sauvegarder ses
résultats (donc la base d'adresses géocodée) si l'on
possède un compte utilisateur. En ce qui concerne la précision du
résultat, l'API assure une finesse de précision
élevé car basé sur les données de l'IGN. Je n'ai
pas jugé utile de joindre les résultats obtenu étant
donnés que l'API de l'IGN requête sur la BAN, comme l'API du
gouvernement, les degrés de précision sont les mêmes. Il y
a également possibilité de déplacer les marqueurs
manuellement, et d'ajouter des adresses sur l'interface graphique qu'offre le
logiciel.
Le temps de traitement sur l'échantillon du fichier
SIRENE (13992 adresses) est d'environ 28 minutes.
L'outil TestGéocoder
Celui-ci semble plus long pour effectué les traitements de
géocodage.
-Temps de traitement pour 2000 adresses et leur affichage:
environ 90 minutes.
16
-Précision du géocodage : elle est
attribuée par une note (colonne accuracy) qui va de 0 à 8 :
· 0 : Non trouvé
· 1 : Pays
· 2 : Région
· 3 : Sous-région
· 4 : Ville
· 5 : Code-Postal
· 6 : Rue
· 7 : Intersection
· 8 : Adresse
Possibilité de géocoder 375 adresses par
jour.
La solution ne semble clairement pas adapté/adaptable
à du géocodage de masse.
Les packages Nominatim et Photon(Python)
Il existe une possibilité de géolocaliser en
masse grâce au logiciel R et un certain nombre de packages python,
notamment les packages Nominatim et Photon qui sont disponibles sur GitHub.
Cette solution est basé sur les données OSM et l'Open Data,
même s'il est possible sous réserve de bien maîtriser les
outils de travailler avec une autre source de données telle que la
BAN.
Les résultats donnés par Nominatim et par photon
ne sont pas les mêmes. Nominatim semble beaucoup mieux répondre
à des requêtes structurées tandis que photon semble mieux
s'en sortir quand les requêtes sont un peu floues. Cela est probablement
dû au moteur de recherche employé par photon, conçu pour la
recherche par auto complétion (et entre autre basé sur les
algorithmes n-grams).
Je n'ai pas eu le loisir de tester cette solution, notamment
dû aux connaissances confirmées en langage R et Python qu'imposent
cette solution.
Source :
http://rgeomatic.hypotheses.org/622
Le plugin QBAN(0)
Ce plugin de QGIS permet de géolocaliser vos adresses
issues d'un fichier excel ou CSV. Il se sert de la base BAN (Base Adresse
Nationale).
Le fichier des adresses doit être ouvert dans Qgis.
L'adresse doit être contenue dans une seule colonne (numero, rue, code
postal, ville). Une fois la géolocalisation effectuée, une
colonne "score" permet de connaitre la fiabilité de l'adresse, 1
étant la meilleure note (à partir de 0,5, la localisation est
fiable).
17
J'ai testé ce plugin sur un échantillon de 2000
adresses du fichier Sirene, voici les résultats : - Temps de traitement
: environ 2 minutes.
- Degré de précision du traitement :
Voir les figures 3 et 4 en annexes.
Les autres solutions
J'ai pu tester d'autres solutions de géocodages, qui
sont disponibles en annexes. Parmi celles-ci, des solutions web services
gratuites comme les précédentes, mais aussi un listing de
solutions payantes avec leurs caractéristiques.
1.3 Les solutions internes
A. Présentation des solutions internes
Au sein de ForCity, deux solutions de géocodage de
masses ont été développées. Une des solutions par
Mr. Leysens Thomas se nommant geoloc_csv, et l'autre par Mr. Valorge Amaury se
nommant Mass_Geocoder. J'ai obtenu un premier entretien avec Thomas, afin qu'il
m'explique les tenants et aboutissants de sa solution, qui se nomme geoloc_csv,
puis un second entretient avec Amaury pour les mêmes raisons.
Caractéristiques de la solution geoloc csv :
Cet outil a été développé en
interne par Mr Leysens Thomas. Il permet à l'aide d'un script python
d'interroger un serveur local où distant (data Gouv). On lui fournit un
fichier de format CSV en entrée, puis on récupère ce
même fichier géocodé en sortie avec un certain nombre
d'informations et statistiques sur la qualité et la précision du
géocodage. Le script est quant à lui basé sur l'API
gouvernementale disponible à l'adresse suivante :
https://adresse.data.gouv.fr/api/
Attention, l'utilisation de cette base de données implique
le respect de sa licence d'utilisation :
https://www.vvlibri.org/fr/licence/odbl/10/fr/legalcode#Droits
cedes par la licence/
Il faut savoir que l'API du gouvernement utilise un
géocodeur open source qui se nomme Addok. Cependant, le site est
limité à une utilisation d'un fichier CSV de 6mo, ce qui ne
permet pas d'effectuer un géocodage de masse sur un fichier de plusieurs
milliers d'entités. C'est donc pour cette raison que geoloc_csv est
né. En effet, cet outil (script) permet de passer au-delà de la
limite imposé par le gouvernement. Comment est-ce possible ? Simplement
en important la BAN(O) ou la BAN sur un serveur local. De cette manière,
les contraintes de limitation imposées par la plupart des solutions web
sont contournées. De plus, les requêtes sur les adresses sont
locales et non distantes, ce qui permet
18
en théorie de gagner en performance sur les temps de
traitement. L'outil se lance sur un terminal en se plaçant dans le
dossier geoloccsv en l'appelant de la façon suivante :
L'option -h permet de lancer le programme avec l'aide. Il
s'agit ensuite de lui fournir des paramètres, qui correspondent aux
champs utilisés pour le géocodage. Néanmoins, il y a des
inconvénients à cette méthode, le principal étant
le poids de la BAN à importer sur le serveur local. Un 2em
inconvénient d'un ordre plus juridique est l'utilisation que l'on peut
faire ou non du produit sortant de geoloc_csv, d'où
l'intérêt d'informer son utilisateur quant aux licences
d'utilisation en question.
Par conséquent, nous avons (Thomas et moi-même)
décidé d'implémenter au code un message à
l'intention de l'utilisateur de geoloc_csv mentionnant l'l'utilisation de la
BANO et la référence à sa licence d'utilisation (comme
précisé sur l'article 4.3 de la licence).
Caractéristiques de la solution Mass Geocoder :
Cet outil a été développé en
interne par Mr Valorge Amaury. Son principe de fonctionnement est très
semblable à celui de geoloc_csv, c'est aussi un script écrit en
python et qui est basé sur le code de l'API du gouvernement. La
différence de ce script est qu'il évolue dans l'environnement
QGIS, c'est-à-dire qu'il se lance sur une console QGIS, à l'aide
d'un plugin se nommant ScriptRunner, celui-ci permet d'exécuter un
script externe dans QGIS.
Lors de mon entretient avec Amaury, j'ai appris qu'il n'avait
pas pu tester sa solution et qu'elle risquait de ne pas être
fonctionnelle. Effectivement lorsque j'ai tenté un test pour la
première fois, cela n'a pas fonctionné. Ceci en raison de ma
version de QGIS qui était antérieure à celle sur laquelle
Amaury avait développé sa solution.
Je ne détaillerai pas plus cette solution étant
donné que les mécanismes mis en jeu sont très sensiblement
les mêmes que pour la solution précédente, à la
différence de l'environnement d'exécution du programme.
5. Choix de la solution
Après avoir étudié et tester un certain
nombre de solutions, il se trouve que nombre d'entre elles ne soient pas
conçues pour le géocodage de masse, mais plus en tant que service
ponctuel pour ses utilisateurs via un outil de type web service.
Pour les solutions qui supportent le géocodage de
masse, elles sont pour la plupart limitées à un seuil
d'utilisation (google maps, osm, API de l'IGN, etc...). Il m'a paru
intéressant de me pencher sur une des solutions qui ont
été développés au sein de l'entreprise.
D'une part car celle-ci répondrait plus efficacement
aux besoins de la dite entreprise car elle a été conçu
pour. D'autre part, ces solutions qui sont en réalité des scripts
écrits en python permettent une liberté de manoeuvre en ce qui
concerne leur customisation (optimisation du processus, ajouts de
fonctionnalités...). Enfin, pour une raison plus personnelle, la
possibilité d'une amélioration d'une des solutions internes me
permettrait de me plonger dans le développement en python et ainsi
améliorer mes compétences.
19
Par ailleurs, les résultats du géocodage obtenus
avec ces solutions internes sont similaires à ceux obtenus via l'API du
gouvernement, c'est en France ce que l'on peut obtenir de mieux en terme de
précision (requête sur la BAN), avec les services de Google et OSM
également.
Pour toutes ces raisons, j'ai choisi de me pencher sur une
solution interne. Il fallait alors choisir une des deux solutions. J'ai donc
opté pour la solution de Thomas, geoloc_csv. Premièrement, cette
solution s'exécute sur terminal et ne nécessite aucun logiciel
externe pour fonctionner, simplement les dépendances en termes de
librairies pythons doivent être satisfaites, mais c'est aussi le cas pour
l'autre solution interne. Deuxièmement, geoloc_csv était à
quelques détails près fonctionnel avant même mon
arrivée (Thomas avait dû développer la solution dans le
cadre d'un projet plus large auparavant). Et pour finir, d'un point de vue plus
pratique, Thomas était durant la période du début de mon
stage plus disponible qu'Amaury, ce qui facilitait les entretiens pour les
nombreuses questions que j'avais à propos du script.
6. Fonctionnalités et limites de la solution
Comme je l'ai précisé
précédemment, la solution geoloc_csv s'exécute sur un
terminal où un quelconque interpréteur python. A supposé
que les dépendances envers les librairies soient satisfaites, il suffit
de lancer le script avec un certains nombres de paramètres :
- Les champs utilisés pour le géocodage ?
Correspondent aux champs Rue, Numéro, Ville et
Code postal
- Le nom du fichier CSV en entré qui contient les adresses
à géocoder
- Le serveur sur lequel les requêtes vont être
effectuées ? Serveur local ou distant
- Le nom du fichier CSV en sortie
Il faut savoir que l'utilisation de l'outil nécessite
un prétraitement des données en entrée afin que les champs
utilisés soient conformes (split de l'adresse, utilisation de la casse
majuscule, pas de bis, pas de numéro dans le champ ville...) et que le
géocodage s'effectue dans les meilleures conditions.
Ceci constitue une première limite à cette
solution, le prétraitement des données pouvant coûter
à l'utilisateur un temps plus ou moins long selon la qualité des
données en entré. Une deuxième limite, inhérente
à la plupart des solutions de géocodage, est le fait que les
adresses qui n'ont pas été géocodées ne sont pas
directement récupérables dans un second fichier CSV qui
contiendrait ces adresses. En effet, si tel était le cas, l'utilisateur
aurait alors la possibilité de tenter un second géocodage de ces
adresses à l'aide d'une nouvelle solution. Etant donné que la
plupart des adresses du fichier original auront été
géocodé, il est probable que le reste des adresses soit en nombre
assez restreint pour passer la limitation imposée par les web services
proposant un géocodage performant comme celui de Google.
A la fin du processus, plus ou moins long selon le nombre
d'adresses à géocoder, nous récupérons un fichier
CSV des adresses qui ont été géocodées avec des
informations sur la qualité du géocodage. L'outil créer un
champ result avec l'adresse géocodée, ainsi que le niveau de
précision du géocodage (street, housenumbers...)
Pour la prochaine étape, mon but était donc
d'améliorer le script pour lui ajouter les fonctionnalités qui
comblerait ces limites au mieux où diminuerait leur impact au cas
échéant.
20
1.4 Mes améliorations
A. Initiation au Scripting en Python et à la librairie
Panda
De par ma formation en géomatique, j'ai
déjà été initié au langage python au premier
semestre de ma 1ere année de Master. Malgré le projet
réalisé pendant cette période (médiatisation de
données cartographiques sur une interface web), mon niveau était
loin d'être suffisant ne serait-ce que pour comprendre le script. A
l'aide de Thomas, j'ai pu comprendre le fonctionnement général du
script, les mécanismes principaux. Puis en me documentant et en
expérimentant le langage Python de mon côté, j'ai pu petit
à petit comprendre le script en détail et à terme le
modifier en y ajoutant mes améliorations. Le plus difficile à
appréhender au début a été la manière dont
le code a été construit.
En effet, je n'avais jamais été
confronté à des scripts fonctionnels complexes en python au cours
de mes études mais plus à des bouts de codes. Une autre
difficulté non des moindres, fut la compréhension de la librairie
Panda (se référer à la partie sigle et
définitions). En effet, le script gère des données en
entrées sous format CSV, donc un tableau. Pandas permet de manipuler ces
données tabulaires et d'effectuer des transformations sur la
donnée d'entrée.
Le script est composé d'un ensemble de fonctions qui vont
permettre :
- de « spliter » le fichier d'entrée en
multiples fichiers pour accroître les performances en terme
de temps de traitement (car les fichiers peuvent être
imposants)
- de traiter la donnée simplement sur les champs
concernés (Rue, Ville, etc...), encore pour augmenter les
performances
- de créer une « progress bar » pour visualiser
l'avancement du traitement
Et enfin d'une fonction principale, qui va envoyer les
multiples requêtes sur le serveur interrogé et en
récupérer les réponses, pour les écrire dans un
fichier de sortie à l'aide de Pandas.
B. Mes améliorations sur l'outil geoloc_csv
Après avoir compris le fonctionnement du script, j'ai
donc décidé d'apporter quelques changements au script de base,
des changements qui permettront d'ajouter des fonctionnalités où
bien de simplifier les prés traitements imposés à
l'utilisateur.
J'ai premièrement pensé à ajouter au
script un module de pré traitement des données afin que le
géocodage s'effectue dans les conditions optimales quel que soit la
qualité des données en entrée. Voici le tableau qui
résume la forme que doit avoir la donnée en entrée avant
d'être envoyée au serveur Addok pour que le géocodage
s'effectue avec précision :
21
Figure 3: Tableau résumant la forme que doivent
avoir les données en entrée
Or peu de données sont fournies dans ce format en
respectant les règles citées sur le tableau. Je me suis donc
basé sur ces règles pour créer une fonction qui va
permettre au lancement du script d'effectuer automatiquement un «
blanchissement » des données afin qu'elles correspondent au format
attendu. Voici la fonction que j'ai créée, se nommant corrector
:
Figure 4: La fonction de correction des données en
entrée
Avec cette fonction, les données envoyées au
serveur possèdent le format requis, à supposer bien sûr que
les champs soient respectés (c'est-à-dire ne pas avoir l'adresse
complète dans un seul champ par exemple). Pour les abréviations,
j'ai utilisé un dictionnaire qui possède en clé les
abréviations officielles, et en valeurs leur nom complets, pour
effectuer le remplacement au cas où il y aurait une
abréviation.
Secondairement, j'ai ajouté quelques lignes au code
pour pouvoir récupérer les adresses qui n'ont pas
été géocodées dans un fichier CSV. J'ai rendu cette
fonctionnalité optionnelle et donc c'est à l'utilisateur
d'utiliser le paramètre « shp_out » que j'ai
créé pour utiliser cette fonction et récupérer les
adresses dans un fichier dont il aura spécifié le nom.
22
Enfin, j'ai créé une fonction qui va permettre
à l'utilisateur, toujours à travers un paramètre lors de
l'appel de la fonction, de créer directement une sortie sous format
shapefile du fichier CSV des adresses géocodées. Pour cette
fonction, j'ai utilisé les modules de Fiona, Shapely et Geopandas pour
créer à partir des coordonnées les points qui
correspondent et construire le shapefile.
C. Limites des améliorations et optimisations possibles
Bien que les améliorations apportées au script
lui ajoutent une plus-value, je suis conscient qu'il existe des failles et
qu'il demeure en l'état optimisable. Par exemple, la création de
la fonction qui permet d'effectuer un pré traitement des données
est utile, cependant elle ne permet pas non plus de formater automatiquement
l'adresse dans les champs correspondant au cas où celle-ci n'est pas
conforme.
Par ailleurs, la fonction de création du shapefile est
efficace pour un échantillon d'adresses traitées qui ne
dépasse pas les 10 000 adresses. Au-delà, le temps de traitement
évolue exponentiellement et donc le traitement peut devenir beaucoup
plus important. Hors avec FME, il est possible de vectorisé les points
à partir de leurs coordonnées très rapidement même
sur des fichiers de grande ampleur. Ma solution de vectorisation est donc
adaptée et permet un gain de temps sur des fichiers d'adresses
moyennement important (de 1 à 15000 adresses). Cela reste tout de
même une option donc ce n'est pas fondamental pour le fonctionnement du
script.
2.2 Le Snapping aux bâtiments
2.1 Définition et précision du besoin
A. Définition du Snapping
Nous pouvons traduire le terme « Snapping » par
« Capture » en français. Le Snapping en terme SIG peut
être considéré comme une opération où
géotraitement qui va permettre d'affecter des informations d'un point A
à un point B selon certains paramètres. Il existe une multitude
de solutions de Snapping différentes, cependant la plus commune est
celle du Snapping au voisin le plus proche. Voici un figuré pour
comprendre les processus mis en jeu lors d'une opération de Snapping
:
Figure 5: Snapping d'un point à un autre
23
Sur la figure 7, c'est une opération de type
géométrique. En effet, le Snapping du point de fin de ligne
à une autre peut permettre de résoudre certaines erreurs
topologiques, notamment pour les réseaux. L'opération fonctionne
de telle sorte que le point final sur la ligne candidate va se snappé
sur le point final de la ligne cible le plus proche.
On peut également ne pas modifier les
géométries mais se servir des méthodes de Snapping pour
attribuer les informations d'un figuré géométrique
à un autre, ce qui peut être très pratique dans de nombreux
cas.
B. Précision du besoin
L'opération de géocodage permet de
récupérer des points qui ont des coordonnées et un certain
nombre d'informations. Dans le cadre de mon stage, j'ai travaillé avec
le répertoire national SIRENE, qui recense l'ensemble des entreprises en
activité sur le territoire. Comme dit précédemment, j'ai
travaillé sur le data-set « Usage des bâtiments », donc
à l'échelle du bâtiment. Concrètement, la
nécessité est de rattacher l'information qui est associée
à un point qui a été géocodé, au
bâtiment qui lui correspond. Et c'est là qu'intervient donc le
Snapping, ou plus précisément les différentes techniques
de snapping des informations aux bâtiments. Lors de mon arrivée,
la seule et unique manière de snappé les informations provenant
du fichier SIRENE aux bâtiments pour compléter le data set usage
des bâtiments est la technique dite du « Voisin le plus proche
». J'en ai déjà évoqué le principe (cf. figure
6), c'est-à-dire que dans le cas de ForCity, les informations
étaient snappés au bâtiment le plus proche. Or dans de
nombreuses situations, le snapping au voisin le plus proche n'est pas la
solution la plus adaptée.
En effet, selon le secteur d'activité de l'entreprise
où de l'établissement d'activités, il se peut que
plusieurs bâtiments ne soient pas pris en compte par le snapping, c'est
le cas lorsque l'entreprise est diffusée sur plusieurs bâtiments
mitoyens, et non comprise dans un seul. Il faut donc considérer la
nature du secteur d'activité, et étudier en détail la
structure de la donnée en entré pour obtenir un maximum
d'informations sur le ou l'ensemble de(s) bâtiment(s) à
snappé(s). Il existe aussi d'autres problèmes liés
à la donnée d'entré, par exemple pour le cas du Fichier
SIRENE certains établissement administratifs ont leurs effectifs
regroupés au niveau du siège principal, ce qui provoque une
surpopulation salariale au niveau du siège et un désert au niveau
des autres établissements (ex : les services de police, gendarmerie,
mairie).
Le besoin et ma mission sont ici de faire en sorte
d'améliorer les workflows visant à attribuer des usages aux
bâtiments. Pour cela, il fallait tout d'abord que je comprenne le
processus général de mise en place du data-set sur l'usage des
bâtiments. C'est donc avec ma tutrice Emilie que j'ai tout d'abord
plongé dans les workflows afin d'en comprendre le fonctionnement
général (cf. l'introduction sur l'usage des bâtiments). Mon
travail en ce qui concerne le snapping des informations sur le data-set usage
des bâtiments concerne particulièrement les catégories
d'usages « Commerce », « Industrie ». L'ordre dans lequel
sont traités les différents secteurs d'activités est le
suivant :
1. Secteur agricole
2. Transport
3. Enseignement
4. Santé
5. Administration et services publiques
6.
24
Industrie
7. Sports et Loisirs
8. Commerce
9. Bureau
Le fichier récupéré en sortie est alors
traité par Spoc.
C. Zones de tests
Afin d'améliorer les processus de Snapping sur les
workflows, Emilie m'a attribuer une zone de test adaptée aux deux
secteurs d'activités. J'ai tout d'abord travaillé sur le 7em
arrondissement de Lyon au niveau de Gerland, et sur les docks de
Vaulx-en-Velin, ceci pour le secteur industriel.
Figure 6: Localisation de la zone de Gerland
J'ai travaillé sur la zone sud du quartier de Gerland
car c'est un territoire qui abrite sur Lyon un bon nombre d'entreprises dont le
secteur d'activité est l'industrie.
J'ai également travaillé sur la commune de
Vaulx-en-Velin, là où se concentrent nombre d'activités
industrielles et artisanales (cf. figure 8 dans l'annexe).
Pour les activés commerciales, nous avons choisis une
zone comportant un grand centre commerciale au niveau de la porte des alpes
(cf. figure 9 dans l'annexe).
Ainsi qu'une zone en plein centre-ville composée de
divers commerces de proximité au niveau de la place Bellecour (cf.
figure 10 dans l'annexe).
2.2 Méthodologie et processus de Snapping
A. Snapping des activités commerciales sur la zone de la
porte des Alpes
Le premier secteur d'activité sur lequel j'ai
travaillé est le commerce. Pour cela, nous avons choisis deux zones sur
Lyon qui représentent des activités de commerce
différentes (proximité et centre commerciaux, cf. la partie Zone
d'étude). Je vais dans cette partie montrer un certain nombre de cartes
qui sont le résultat d'un Snapping avec différents
paramètres. Pour chacune, je préciserai les observations que j'ai
pu avoir et les piste possibles qui en résultent pour améliorer
les résultats de l'opération de Snapping. Ainsi, je détail
la méthodologie mise en place pour arriver à mes
résultats.
25
Figure 7: Snapping au bâtiment sans
paramétrages
26
Observations:
- ? Il semble que le snapping au bâtiment fonctionne
correctement sur les centres commerciaux et commerces possédant une
grande surface.
- ? Cependant on remarque au Nord-Ouest que des logements ont
été snappés, ceci dû à la présence de
petits commerces.
Piste possible :
- Implémenter une contrainte d'exclusion des entrepreneurs
individuels pour limiter le
snapping sur logement.
Après examen des champs de la donnée SIRENE en
entrée, j'ai remarqué l'existence d'un champ nommé
NATETAB. C'est la nature de l'activité exercée par l'entrepreneur
individuel (artisanale, commerciale, libérale etc). De telle
façon, j'ai pensé pouvoir filtrer tous les entrepreneurs
individuels en partant du principe que ceux-ci exercent à leur domicile.
Se référé à la figure 12 de l'annexe pour
visualisé le résultat du snapping.
Observation:
- ? Moins de logements ont été snappés.
- ? Il reste néanmoins une importante part de logements
qui sont snappés. Piste possible :
- Implémenter une contrainte d'exclusion par rapport
à l'effectif des salariés.
La contrainte d'exclusion des entrepreneurs individuels ne
suffisant pas à éviter le snapping sur certains logements, j'ai
utilisé un autre champ de fichier SIRENE qui contient l'effectif
salarial par tranche afin de limiter le snapping sur résidences.
27
Figure 8: Snapping au bâtiment avec contraintes sur
entrepreneurs individuels et effectifs
Observation:
- ? La contrainte sur l'effectif couplée à celle
sur le champ natetab permet de ne pas snapper les bâtiments de logement
qui possède des petits commerces du type commerce de proximité
- ? Le snapping engendre parfois ce genre de problèmes
:
Figure 9: Problème lorsque le point SIRENE est mal
placé
Le bâtiment snappé correspond à un
logement, tandis que la zone (défini par le cercle bleu sur
l'image) qui correspond au point SIRENE est un centre commercial inclus dans
le bâtiment de logements. Il
semble donc, en ce qui concerne les grands centres
commerciaux, que le snapping au bâtiment soit la méthode la plus
adaptée.
B. Snapping des activités commerciales sur la zone du
centre-ville de Lyon
Sur la zone du centre-ville de Lyon, nous sommes en
présence de nombreux logements et commerce de proximités, ce qui
est différent de la zone de commerce de la porte des Alpes qui regroupe
principalement des grands centres commerciaux. Se référé
à la figure 15 de l'annexe pour observer le résultat du snapping
au bâtiment au niveau de la place Bellecour.
Observation :
- ? Sur la zone du centre-ville, il semble que le
paramétrage de contrainte sur l'effectif et sur
le champ NATETAB n'est pas suffisant, beaucoup de bâtiments
de logement sont snappés.
Piste possible :
- Séparation des commerces de grande surface et des
commerces de proximité pour les traiter différemment dans la
chaîne du workflow.
28
Figure 10: Snapping au bâtiment sur la zone du
centre-ville
29
Observation :
- ? Sur la zone du centre-ville où le bâti est dense
et les activités multiples, le snapping en
différenciant les deux catégories de commerces
pose problème car les deux catégories sont présentes dans
des bâtiments qui comportent des logements.
- ? Etant donné la présence de la
catégorie d'usage « Bâtiments à grande surface
commerciale », il semble difficile d'effectuer une catégorisation
pré-snapping.
Piste possible :
- Snapping au bâtiment pour tous les commerces, et
recoupage avec la surface activité de la BD TOPO pour savoir si le
bâti peut ou non, recevoir de l'habitat.
Pour conclure sur l'activité commerciale, l'existence des
commerces de proximités et boutiques rend le snapping difficile
étant donné qu'il ne faut pas snapper d'activité sur des
bâtiments résidentiels. La méthode de snapping au
bâtiment fonctionne bien sur les grands centres commerciaux mais moins
lorsqu'il y a présence de commerce de proximité.
Une des pistes envisagées est d'utiliser les zones
d'activité spécifiée par la BD TOPO en tant que filtre.
Ainsi, tout bâtiment snappé dans la zone peut être candidat
au snapping.
C. Snapping des activités industrielles sur
Vaulx-en-Velin
Pour les activités industrielles, j'ai repris la
même méthodologie que précédemment pour le commerce,
en partant de la méthode de snapping actuelle (utilisée) et en
tentant d'en améliorer le résultat au fur et à mesure. Je
montrerais les résultats obtenus sur la zone de Vaulx-en-Velin, ceux
obtenus sur la zone du Gerland sont disponibles en annexes.
Je vais dans cette partie décrire les grandes
étapes de mon raisonnement et les résultats obtenus. Je laisserai
volontairement les cartes dans cette partie et non en annexes, pour la raison
qu'elles permettent de bien comprendre les étapes du raisonnement, et
ainsi la méthodologie employée. Pour commencer, je suis donc
parti sur le méthode de snapping simple au bâtiment le plus proche
qui était la méthode employée.
30
Figure 11: Snapping au bâtiment le plus proche sur
Vaulx-en-Velin
Observations:
-? Des bâtiments qui correspondent à des logements
ont été snappé, notamment à l'Ouest au niveau de
l'école.
- ? Des bâtiments avec peu de surface ont été
snappé.
- ? Snapping de surface triangulaire due à la BD TOPO (la
géométrie des bâtiments sur la BD TOPO).
Par la suite, j'ai décidé d'inclure une contrainte
sur la surface des bâtiments pris en compte pour le snapping. Ceci afin
d'éviter de snappé des bâtiments résidentiels avec
peu de surface.
31
Figure 12: Snapping aux bâtiments avec exclusion de
surface sur Vaulx-en-Velin
Observations:
- ? Il semble que la contrainte d'exclusion de surface permet
d'éviter de snapper des bâtiments qui ne peuvent être des
bâtiments industriels.
- ? Cependant, on remarque que des bâtiments non
industriels continuent d'être snappés, c'est toujours le cas de
l'école.
N.B : Les carrés verts représentent les zones
où il y a eu modification.
La prochaine étape consiste en l'exclusion des
entrepreneurs individuels exerçant à domicile via le champ
NATETAB, comme je l'avais fait précédemment pour les
activités commerciales.
32
Figure 13: Snapping aux bâtiments avec contrainte sur
entrepreneurs individuels et surface sur Vaulx-en-Velin
Observations :
- ? Semble le plus adapté au snapping sur le bâti
industriel.
- ? Exclue les activités avec des entrepreneurs
individuels au statut d'artisan.
- ? Tous les bâtiments industriels ne sont pas
snappés.
Le résultat est plus satisfaisant que sans la
contrainte sur les entrepreneurs individuels. Cependant, certains
bâtiments ont été snappés deux fois pour deux points
différents. De plus, certaines entreprises sont contenues dans plus d'un
bâtiment, pour celles-ci cette méthode de snapping ne fonctionne
pas. J'ai donc changé l'échelle de snapping pour qu'elle
corresponde à la parcelle et non au bâtiment, ceci afin de
récupérer les informations sur l'ensemble des bâtiments de
l'entreprise.
33
Figure 14: Snapping à la parcelle sans
paramétrage sur Vaulx-en-Velin
Observations :
- ? Il semble que des bâtiments industriels sont
oubliés lorsque snappés à la parcelle.
- ? Des logements ne sont plus snappés.
J'inclus alors une contrainte sur les entrepreneurs
individuels, avec une méthode de snapping à la parcelle.
34
Observations :
Si l'on compare les méthodes de snapping sur parcelles
et sur bâtiments avec le paramètre d'exclusion NATAB sur les
artisans, on peut observer :
- Le snapping sur parcelles inclus plus d'entité que celui
sur bâtiments (avec les mêmes
paramètres d'exclusion).
- Cependant, le snapping sur bâtiments inclut certains
bâtis industriels que celui sur parcelle n'incluait pas.
Avec ces observations, ma réflexion fut la suivante. Il
semble que chacune des deux méthodes de snapping possède des
avantages et des inconvénients. Le snapping au bâtiment est moins
complet que celui à la parcelle cependant il inclut certain
bâtiments non pris en compte par ce dernier. Le snapping à la
parcelle semble plus précis que celui au bâtiment mais n'inclus
pas certaines entreprises. J'ai donc pensé à combiner les deux
méthodes de snapping pour obtenir un meilleur résultat.
35
Figure 15: Snapping aux parcelles puis bâtiments sur
Vaulx-en-Velin
Observations :
- Ce processus de snapping fonctionne de la maniére
suivante :
1) Snapping au niveau de la parcelle.
2) Snapping au bâtiment le plus proche avec contrainte de
surface
3) Ajout d'une condition « SI » :
- Si le bâtiment snappé se trouve dans la parcelle,
alors on snap tous les bâtiments au niveau de cette parcelle.
- Si le bâtiment snappé se trouve en dehors de la
parcelle, alors on snap au bâtiment le plus proche sans garder ceux
présents dans la parcelle.
- ? Cette méthode combine les bénéfices
du snapping au niveau du bâtiment ainsi que ceux au niveau de la
parcelle.
- ? Cette méthode permet de snapper le bon
bâtiment même si le point SIRENE n'est pas dans la bonne
parcelle.
- ? Il reste cependant un problème, si le
bâtiment industriel à snappé est trop petit, cette
méthode trouvera un bâtiment plus important en surface
(possibilité que ce soit un logement...)
36
On pourrait alors changer le seuil d'exclusion des bâtis
industriels, cependant le gain en précision serait probablement plus
faible que la perte en terme de bâtiments non snappés.
2.3 Conclusion sur le Snapping
Les changements consécutifs que j'ai
opéré sur les modules des workflows concernant l'industrie et le
commerce, suivant la méthodologie définie dans la partie
précédente, a permis d'affiné les résultats que
l'on obtenait précédemment (obtenus avec le snapping simple au
bâtiment). Dorénavant, l'attribution de l'information au
bâtiment prend en compte l'échelle du bâtiment, mais aussi
la zone d'activité (en ce qui concerne le commerce) ainsi que la
parcelle (échelle administrative). Ces prises en compte des
différentes échelles selon un cheminement de conditions de type
« SI-SINON » permet d'obtenir un snapping « intelligent »
des informations au bâtiment. Ce qui se traduit par la diminution du
nombre de bâtiments résidentiels snappés, et cela permet
aussi de snappé des ensembles de bâtiments qui correspondent
à un seul point SIRENE (au lieu de ne snappé qu'un seul
bâtiment). J'ai dû expérimenter plusieurs méthodes et
en observer les résultats sur cartes pour suivre des pistes
d'améliorations et obtenir un résultat plus précis que
celui obtenu initialement.
Comme je l'ai précisé, j'ai principalement
travaillé sur les modules industrie et commerce du workflow
building_usage. Il faut savoir que chaque module du workflow implique une
réflexion en amont quant au snapping de l'information au bâtiment.
Par exemple, les bâtiments de santé publique occupent des surfaces
importantes et les activités sont réparties au sein de nombreux
bâtiments. Ce qui nécessite de réfléchir en amont
aux surfaces que l'on va snappé ; bâtiment, parcelle, zone
d'activité ... ? D'autres difficultés peuvent provenir de la
source de donnée en entrée, comme par exemple le fait que
l'effectif salariale pour les administrations soit regroupé au niveau du
siège social. Il faut donc pouvoir jouer avec ces différentes
échelles et les inexactitudes inhérentes aux données en
entrée afin d'obtenir un résultat raisonnablement correct,
c'est-à-dire correspondant au besoin de l'entreprise. En effet, les
workflows construisant le data-set usage des bâtiments ne vise pas la
perfection comme ma tutrice me l'a précisé en me le
présentant (hors de portée via les processus usités
actuellement), mais vise plutôt à consolider les données
sur les usages au niveau du bâtiment afin qu'il soit correctement
utilisés à l'étape prochaine par les modèles tels
que SPOC.
Après consolidation des workflows sur l'usage, nous
nous retrouvons avec une table renseignant de nombreuses informations sur les
bâtiments, dont la surface de plancher et la surface d'usage par
catégories d'activités. Des problèmes surviennent alors,
en cause les techniques de snapping, les données en entrée et
l'interprétation par le modèle SPOC. Un des problèmes sur
lequel j'ai dû m'attarder étant celui-ci : une surface de plancher
du bâtiment inférieure à l'ensemble des surfaces des usages
qui le constitue. Pour pallier à ce problème, il y a
nécessité de ventiler la surface en trop plein.
37
3 La ventilation
3.1 La ventilation de la surface salariale aux
bâtiments
1.1 Les conditions initiales
A. Résultat du workflow et limites
En sortie du workflow, plusieurs incohérences sont
détectées. Les limites se trouvent à différents
niveaux :
? Dans les données en entrée :
La principale donnée utilisée pour
définir les usages des bâtiments, et surtout les effectifs et les
surfaces utilisées pour ces usages, est le fichier SIRENE. Le calcul des
surfaces pour chaque activité repose sur les données d'effectifs
renseignées dans le fichier SIRENE. Or ces données sont
déclarées à la création de l'entreprise et ne sont
pas toujours remise à jour, elles sont donc peu précises.
D'autre part, certains sites d'une entreprise peuvent
regrouper les effectifs de plusieurs établissements situés sur
d'autres sites. On peut donc trouver des effectifs disproportionnés
attachés à certains établissements. C'est le cas de
certaines administrations publiques, certains équipements de type
scolaire notamment. L'étude rapide de la relations entre les
établissements présentant le même numéro SIRET n'a
pas permis de mettre en lumière ces cas de figures. Elles
nécessitent une étude plus approfondie.
? Dans les postulats de calcul :
Le calcul des surfaces salariales à partir des moyennes
sur le fichier SIRENE engendre une fourchette d'incertitude en plus, ainsi que
celui des surface de planchers par bâtiments.
? Dans les traitements :
C'est la partie sur laquelle j'ai travaillé,
c'est-à-dire les limites induites par le Snapping. En sortie du workflow
sur l'usage des bâtiments, qui traite l'ensemble des activités
à des échelles de précision différentes (plusieurs
niveaux de précision allant de n1 le moins précis à n4 le
plus précis), nous obtenons une table avec l'ensemble des
bâtiments de la zone étudiée selon une classification
propre à ForCity. Ces bâtiments ont un certains nombres
d'informations renseignées, parmi celles-ci, la surface salariale
octroyée par activités pour chaque bâtiments, ainsi que la
surface totale du bâtiment. Par exemple, un bâtiment peut
posséder une surface totale de 250m2 avec pour usage
numéro 1 une activité de type commerciale qui occupe
150m2 de surface, et une activité de type bureau qui occupe
50m2 de surface. Il reste donc 50m2 de surface libre,
lorsque l'on envoie ces données à SPOC, celui-ci
déterminerait en théorie qu'il pourrait y avoir potentiellement
dans ce bâtiment 50m2 de surface résidentielle. Hors
les traitements peuvent induire des erreurs de type surface d'usage totale plus
élevée que la surface du bâtiment pour certains
bâtiments. Pour pallier à ce problème, une solution est
adoptée au coeur de l'entreprise, nommée ventilation. Cependant,
à l'heure actuelle, aucune solution de ventilation n'a été
mise en place en ce qui concerne l'usage des bâtiments. Ce qui fausse
38
les résultats obtenus post SPOC. Ma mission était
donc de créer une solution permettant de ventiler ces surfaces salariale
en surplus.
B. La ventilation
Le principe de la ventilation est plutôt simple, il
consiste à ventiler la surface d'usage en trop plein aux bâtiments
adjacents qui ont de la surface libre. Ce processus permet d'éviter
l'obtention de bâtiments en surplus de surface d'usages, et ainsi
d'éviter par la même occasion les erreurs retournées par
SPOC. Ces erreurs concernent la répartition des ménages sur les
bâtiments possédant une surface libre.
Evidemment, on peut d'ores et déjà
émettre une critique quant à la pertinence du processus de
ventilation. En effet, comme je l'ai dit précédemment ce
processus va permettre de ventiler la surface en surplus aux bâtiments
adjacents qui possèdent de la surface libre. Par conséquent, on
se retrouve alors avec des résultats qui peuvent être
faussés par la ventilation. Si l'on prend par exemple un bâtiment
possédant 200m2 de surface totale, et 300m2 de
surface d'usage. Après l'opération, 100m2 de surface
vont être ventilés sur les bâtiments adjacents qui ont de la
surface libre. Donc en théorie, certains bâtiments vont se
retrouver avec une surface salariale qu'ils ne devraient pas avoir.
J'expliquerai dans la partie suivante tous les mécanismes qui doivent
être mis en jeu pour effectuer l'opération de ventilation en
limitant au maximum le remplissage de bâti non concernés.
J'ai eu avant de me lancer sur cette tâche une
discussion avec Emilie, qui m'a informé que la ventilation est un
procédé utilisé au sein de l'entreprise comme solution
« par défaut », c'est-à-dire qu'elle induit
irrémédiablement un certain taux d'erreurs. Cependant, ces
erreurs ont une incidence négative moins importante que les erreurs post
SPOC retournées sans utilisation de ce procédé. C'est donc
une question de limitation et contournement du problème plus qu'une
résolution du problème en elle-même. Cette méthode
intervient dans la volonté de consolidation du data-set Building_Use.
1.2 Méthodologie et étapes de
développement
A. Les contraintes à respecter
Après l'affinage des techniques de snapping, il me
fallait donc trouver un moyen de ventiler les surfaces salariale en surplus des
bâtiments afin d'envoyer à SPOC des données conformes. Il
faut savoir qu'au cours de mes avancées, il y a eu quelques
complications et autres changements de directions qui ont changé les
buts premiers de ma mission. J'expliquerai au mieux le cheminement de ma
réflexion propre ainsi que les attentes de ma tutrice au cours de la
période sur laquelle j'ai travaillé sur cette mission.
Comme je l'ai dit précédemment, le but de la
solution était de ventiler les surfaces d'usages en surplus. Pour cela,
je devais respecter un certains nombres d'indications et de contraintes :
39
? La jointure entre les tables
Je devais au préalable effectuer une jointure entre la
table comportant un certain nombre d'informations par bâtiment mais
surtout les surfaces d'usage par bâtiment et leur surface de plancher,
avec le shapefile comprenant la base bâti. Ces tables étant des
paramètres variables, c'est donc une première contrainte en ce
qui concerne le choix technologique de la solution. Au final, j'obtiens une
table avec chaque usage par bâtiment. La majorité des
bâtiments ne possèdent qu'un usage, cependant certains
possèdent plusieurs usages, ce qui fait que la table ne contient pas
d'identifiant de bâtiment unique.
? Le facteur distance
Après réflexion et réunion avec ma
tutrice, nous nous somme dis qu'il serait judicieux voir indispensable
d'implémenter à la solution un paramètre de distance.
C'est-à-dire que la ventilation opérerait successivement du
bâtiment le plus proche à celui qu'il faut ventiler, au plus
lointain. Ce qui évitera de ventiler des surfaces d'usages sur des
bâtiments qui ne serait pas voisins.
? La ventilation seulement sur les bâtiments candidats
Il ne faut ventiler la surface salariale en surplus que sur les
bâtiments possédant de la surface libre et non sur les autres.
? Le temps de traitement
Il faut savoir que l'on travaille sur des zones de grande
surfaces (ex : la métropole de lyon, les départements de
l'île de France, une commune..), ce qui peut porter le nombre
d'entités à analysés à plusieurs milliers. Hors, la
solution devant intervenir entre la fin du workflow sur les usages et la passe
des données à SPOC, on ne peut se permettre des temps de
traitements trop long.
? Un script Python
Il m'a été donné comme consigne de
développer une solution en python, en raison des multiples
possibilités offertes par ce langage, du caractère polymorphique
qu'il propose, mais aussi de la disponibilité de l'aide que l'on
pourrait m'apporter si je développais la solution avec ce langage.
B. Technologies et librairies employées
A ce stade, il me fallait choisir une technologie où un
environnement de développement. J'ai alors eu une réunion
pré développement avec Amaury, un géomaticien
développeur s'occupant entre autre du déploiement des indicateurs
dans les plateformes ForCity. Ceci afin de choisir l'environnement de
développement le plus adapté vis-à-vis du but de la
mission et des contraintes, mais aussi d'établir une stratégie de
développement à l'aide d'un diagramme Yed, disponible via un lien
annexe. Amaury m'a alors suggérer de développer le script sur un
environnement QGIS. Pour raison principale, le fait que QGIS offre via son
application pyQGIS de nombreux outils qui permettent d'effectuer des
traitements géographiques sur les couches importées directement
sur l'interface QGIS. Cela permet de satisfaire la contrainte sur la distance,
et d'effectuer divers géotraitements sur les données en
entrée si le besoin apparaît. Qgis offre de nombreuses
possibilités via pyQGIS pour traiter la donnée
géographique. En effet, l'interface graphique du logiciel est
limitée dans son utilisation à un certains nombres de
possibilités. L'interface de développement sous la console QGIS
permet à son utilisateur de créer une chaine de
traitements/géotraitements sur la donnée importée selon
ses besoins, et offre donc plus de
40
liberté, ceci à condition de pouvoir prendre en
main l'outil de développement, ce qui n'est pas forcément
aisé... En effet, le développement sous pyQGIS est une
tâche laborieuse, principalement en raison du manque de documentation sur
les fonctions qui y sont disponibles. Cependant, Amaury m'a dirigé vers
cette solution car il était en capacité de m'aider, ayant
déjà développé sur cet environnement. J'ai
également utilisé une extension de QGIS nommée Script
Runner qui permet d'exécuter un script externe sur l'appli QGIS, ce qui
octroie un confort non négligeable pour le scripting étant
donné le caractère quelque peu trivial de la console python de
QGIS.
Pour une raison que je détaillerai dans la partie
suivante qui correspond aux étapes et à la méthodologie,
j'ai dû utiliser d'autres outils et sortir de l'environnement QGIS. En le
faisant, j'ai dû utiliser des librairies qui permettent le traitement
spatial de données sous python. Je me suis dirigé vers la
librairie Geopandas, une extension de la librairie pandas qui permet de
travailler sur des données géographiques. Cette solution m'a paru
la plus adaptée étant donné que j'avais eu l'occasion lors
de l'amélioration du script de géocodage de m'entraîner sur
la libraire Panda, parente de Geopandas. Cette librairie fonctionne de la
même manière que Pandas à la différence que l'on
manie des géodataframes à la place de dataframes, et donc permet
les traitements géographiques. J'ai également utilisé un
outil nommé psycopg2, celui-ci permet de faire la liaison entre une base
de données PgSQL et un script python. On se connecte à la base de
donnée via le script et on peut alors récupérer les tables
qui nous intéressent, les transformer en géodataframes où
dataframes pour lancer la série de traitements souhaités.
C. Méthodologie et étapes de
développement
Dans cette partie, je vais définir les étapes de
développement de mon script final que j'ai développé hors
de l'environnement QGIS. Lors de mon premier essai sous QGIS, j'ai finalement
réussi à atteindre le résultat escompté, cependant
le temps de traitement était beaucoup trop important (de l'ordre de 44h
pour traiter 250 000 entités). Je vais donc détailler les
étapes de mon script python développé avec les librairies
pandas et geopandas. Je dois cependant insister sur le fait que mon premier
script sous pyqgis m'a permis de consolidé mon raisonnement et de me
familiariser avec les outils de géotraitements sous python, ce qui a
largement facilité mon 2em essai en « sortant » le script de
l'environnement QGIS (se reporter au diagramme disponible en annexe pour
visualisé le fonctionnement général du script pour une
meilleur compréhension). Voici les étapes principales :
1. Jointure des deux couches J'ai utilisé l'outil
psycopg2 et geopandas.
2. Création du champ « free_surf »
A cette étape, je créer un champ contenant la
surface disponible sur chaque bâtiment. Obtenu par la différence
entre la surface totale du bâtiment et la surface salariale totale sur ce
bâtiment. Les valeurs contenues peuvent donc être négatives.
Ce qui permet de filtrer les bâtiments par cette valeur et d'obtenir une
liste de bâtiments dont les surfaces d'usages en surplus sont à
ventilé.
3. Création de la boucle principale
Création de la boucle qui va permettre de parcourir la
liste de bâtiments à ventilé.
4. 41
Création d'un buffer autour du bâtiment
analysé
Je créer alors un buffer autour du bâtiment
analysé, de l'ordre de 400m. Ceci permet d'obtenir une liste de
bâtiments autour du bâtiment analysé, afin d'éviter
de calculer ensuite les distances sur l'ensemble des 250 000 entités.
C'est une question de gain de temps de traitement.
5. Création de la liste de bâtiments contenus dans
le buffer
Consiste en une opération d'intersection via des
opérateurs de géopandas pour récupérer une liste de
bâtiments contenus dans le buffer, en excluant le bâtiment
analysé dans la grande boucle.
6. Calcul des distances
Calcul des distances entre le bâtiment analysé
et chaque bâtiment contenu dans le buffer, création d'une liste
contenant l'ensemble de ces bâtiments avec leur distance respective au
bâtiment analysé et le champ free_surf.
7. Création d'une fonction de ventilation
Une fonction qui va permettre de ventiler la surface du
bâtiment analysé sur les bâtiments adjacents en partant du
plus proche au plus lointain jusqu'à ce qu'il ne reste plus de surface
à ventilé. Techniquement, ce fut l'étape la plus
compliquée à mettre en oeuvre.
1.3 Retour d'expérience
A. Difficultés rencontrés et résultat
Lors de ces diverses étapes, j'ai rencontré de
nombreuses difficultés de toute sorte. Je vais simplement résumer
dans cette partie les principales, et les solutions que j'ai apportées.
Une des première grande difficultés à surmonté fut
le temps de traitements sur ma première version du script sur
l'environnement QGIS. Après discussion avec certains développeurs
de l'entreprise, j'ai pris la décision de réadapter le script
dans une version plus générique, pour gagner en performance et en
versatilité. La réadaptation fut relativement aisé
(vraiment relativement...), cependant j'ai eu du mal à transformer la
fonction de ventilation de la première version de mon script à la
version finale. L'adaptation n'était pas intuitive étant
donné que les outils de pyQGIS n'étaient pas superposables, je
m'efforçai à traduire ma fonction d'un script à l'autre
alors qu'il fallait simplement repenser la fonction pour l'adapter aux
nouvelles librairies. Au final, la fonction était plus simple et
compréhensible, mais aussi plus efficace en terme de performance. J'ai
réussi à atteindre un temps de traitements de 2h pour le
même nombre d'entités (au lieu de 44 heures), ce qui est beaucoup
mieux mais toujours insuffisant. Pour atteindre un temps raisonnable, j'ai
finalement eu recours à la création d'index spatial sur la couche
de bâtiments au préalable (avant le passage dans la boucle), ainsi
le calcul des distances entre ceux-ci est beaucoup plus rapide étant
donné que le script ne prend pas en compte la géométrie
pour le calcul mais l'index du bâtiment. Il faut savoir qu'avec une telle
méthode, le calcul des distances est approximatif, dans le sens
où l'index spatial va créer une bounding box autour du
bâtiment. Cependant, je n'avais aucunement besoin d'un grand degré
de précision dans le calcul des distances donc ce fut un choix
pertinent.
42
Au cours du développement de ma solution, j'ai dû
faire face à quelques difficultés. Cependant, j'ai au final
aboutit à un résultat, se matérialisant par un script en
python utilisant un certain nombre de librairies. J'ai testé la solution
sur un échantillon de la couche bâti du département 93,
puis sur l'ensemble du département. Le script est fonctionnel et permet
la ventilation de la surface salariale en trop plein sur les bâtiments
adjacents. J'ai réussi grâce à cette solution à
atteindre un temps de traitements de 30 minutes, écriture des nouvelles
valeurs de surfaces dans la table comprise dans le temps (en effet,
après toutes ces étapes, il faut écrire les nouvelles
valeurs dans la couche, ce qui allonge le temps de traitement).
B. Limites et pistes d'améliorations possibles
Bien que je sois arrivé au résultat final
escompté, il existe quelques limites à ma solution qui reste en
soit quelque peu triviale. En effet, mon script permet de ventiler la surface
salariale en surplus des bâtiments, cela en utilisant le champ free_surf
que j'ai créé au préalable (cf. partie C). Cependant,
lorsque la surface salariale est ventilée aux bâtiments adjacents
qui ont de la surface totale libre, mon script ne prend pas en compte la
surface d'usage attribuée par type d'activité.
C'est-à-dire que la surface qui va être ventilée correspond
à un usage spécifique, hors l'information n'apparait pas sur le
bâtiment qui aura reçu cette surface. En pratique, il m'aurait
fallu ajouter une fonction à mon script qui permette pour chaque usage
qui est ventilé sur un bâtiment de créer un nouvel usage
sur ce bâtiment comprenant la surface ainsi ventilée, et donc
d'ajouter une entité à la table finale, ce qui aurait
complexifié ma tâche sur l'aspect technique. La raison pour
laquelle je ne suis pas allé jusqu'à ce niveau de détail
technique est purement logistique.
En effet, peu avant que j'aboutisse à mon script final,
j'ai eu une réunion avec ma tutrice Emilie ainsi que Amaury pour
discuter du script de ventilation. Après discussion, nous en sommes
arrivés à la conclusion qu'il n'était pas forcément
utile de développer le script outre mesure, et y inclure la prise en
compte des usages pourrait être le sujet d'une prochaine
amélioration. Cependant, en l'état actuel des choses, il
n'était pas pertinent selon Emilie de retravailler le script afin qu'il
intègre toutes les contraintes induites par le workflow
générale. Celui-ci était encore en phase de pleine
transformation, et donc susceptible de changer. D'autant plus que l'on ne
savait à cette heure encore où intégrer mon script, ni
comment. Où, dans le sens suivant : à quel moment du workflows
faire tourner mon script ? Une option était de l'intégrer entre
chaque module du workflow sur les usages (industrie, transport, etc...)
plutôt qu'à la fin du workflow général. Ainsi, nous
éviterions de mélanger tous les usages cependant le temps de
traitement serait plus conséquent. D'autre part, comme je l'ai
précisé en partie d'introduction au data-set sur l'usage des
bâtiments, le workflow building_use est construit sur FME. Ce qui
implique qu'il faudrait intégrer également mon script à
FME afin qu'il puisse être exécuté dans le workflow. Hors
intégrer un script python utilisant des librairies externes au sein de
FME ne semble pas tâche aisée. Il existe cependant des pistes qui
peuvent être suivies, comme l'utilisation du transformer « python
caller » sur FME ou l'utilisation des environnements de travail, qui
permettent d'exécuter à la chaine des modules différents,
et possiblement des modules externe à FME. Je n'ai cependant pas
creusé plus en profondeur la question, car j'ai été
dépêché sur une autre mission plus urgente pour les besoins
de l'entreprise.
Pour finir, il me semble avoir atteint un temps de traitement
convenable à l'aide la création de l'index spatial. Cependant il
est possible que celui-ci puisse être encore réduit
légèrement en revoyant la structure de mon code, et
particulièrement la fonction qui permet la ventilation qui pourrait
probablement être plus optimisée.
43
4 Conclusion
Pour une entreprise qui vise à modélisé
la ville de demain, il est nécessaire de prendre en compte de multiples
paramètres. En l'occurrence, ces paramètres se
matérialisent principalement par la donnée numérique
géographique. La donnée brut peut être
récupérée de différentes manières, mais
nécessite obligatoirement un traitement afin de pouvoir être
utilisée. La totalité de mon stage a été
dédié au traitement de la donnée, un domaine vaste que
l'on peut subdiviser en de multiples catégories, dont certaines ont
été l'objet de ma mission.
J'ai travaillé particulièrement sur le
géocodage des données provenant de sources telles que le
répertoire SIRENE ou encore le RES (Répertoire des Equipements
Sportifs), ainsi que sur les différents procédés menant
à un snapping intelligents de ces points aux bâtiments. La
solution développée par Thomas sur laquelle j'ai apporté
mes améliorations permettra à ses utilisateurs (celle-ci est
principalement destinée aux membres de l'équipe Geodata) de
pouvoir géocodé des adresses en masse plus aisément et
d'une façon plus coordonnée au sein de l'équipe. En effet,
les besoins en terme de géocodage de l'entreprise sont ponctuels mais
néanmoins réguliers, et une solution unique au sein de
l'équipe permet d'évité certains problèmes. En ce
qui concerne le snapping, nous avons pu améliorer les workflows initiaux
sur lesquels j'ai travaillé via une méthodologie qu'il faut
adapter à chaque secteur d'activité.
Le script de ventilation que j'ai conçu reste pour le
moment au stade de « prototype », car il n'a pas été
instancié dans le workflow final sur les usages des bâtiments.
Ceci notamment dû au fait que l'ensemble des workflows sont en chantier
dû aux nouveaux projets à la charge de ForCity, ainsi qu'à
la difficulté d'intégration d'un script externe sous FME.
Cependant, celui-ci pose les bases immuables du concept de la ventilation
adapté aux besoins de l'entreprise, et pourra donc à terme
être amélioré et incorporé au workflow.
Pour conclure, mes différentes réalisations au
sein de l'entreprise ont été source de défis
intellectuels, particulièrement celles qui concernent le
développement informatique. J'ai dû avoir recours à la
réflexion, la recherche et parfois une certaine dose
d'ingéniosité pour arriver à mes fins et ainsi satisfaire
les besoins des missions sur lesquelles j'ai été affecté.
A travers cette expérience, j'ai pu découvrir le monde
professionnel de l'intérieur, et cela en tant que géomaticien.
J'ai également augmenté mes compétences en logiciels SIG
(notamment FME que je ne connaissais pas) et en gestion de base de
données. Néanmoins, ce sont surtout mes compétences en
développement qui ont été largement accrues lors de mon
expérience, et qui je l'espère me permettront de commencé
ma carrière professionnelle en tant que géomaticien au profil
développeur.
44
Annexes
Distribution des adresses par degré de précision
0% à 20% 20% à 40% 40% à 60% 60% à
80% 80% à 90% 90% à 100%
Figure 16: Diagramme de précision pour le plugin
QBAN(O)
Figure 17: Visuel de la précision obtenue avec le
plugin QBAN(O)
45
Figure 18: Localisation de la zone étudiée
sur Vaulx-en-Velin
Lien 1: Diagramme du script de ventilation de la surface
http://www.cjoint.com/c/GHCnXD5HLbe
->> à ouvrir avec le logiciel Yed.
46
Figure 19: Zone commerciale de la porte des Alpes
Figure 20: Zone commerciale aux alentours de
Bellecour
47
Figure 21: Snapping aux bâtiments avec contrainte
d'exclusion des entrepreneurs individuels
Figure 22: Snapping au bâtiment avec contrainte
d'effectifs sur la zone du centre-ville de Lyon
48
Rapport sur la solution DOGEO
Voici les fonctionnalités de cette API :
· Importer des données à partir d'un CSV
· Importer des données par copier/coller
· Effectuer le géocodage uniquement si les scores
sont inférieurs à un score
· Géocoder avec Google
· Géocoder avec Bing
· Géocoder avec IGN/Géoportail
· Géocoder avec OSM/Mapquest
· Géocoder avec la Ban
· Possibilités de modifier les composants de
l'adresse directement dans la table en double cliquant dessus.
· Il est possible de forcer le géocodage d'une ligne
en cliquant sur l'un des 4 icônes en bout de ligne.
· Pour chaque groupe de score une couleur au marker est
attribuée
· Déplacer le marker manuellement en le faisant
glisser sur la carte (le score passe alors à 100)
· Trier les résultats en cliquant sur l'entête
d'une colonne
· Centrer la carte sur la ligne
sélectionnée
· Lors d'un clic sur un marqueur, mise en surbrillance de
la ligne correspondante
· Exporter les résultats en CSV, KML et GeoJSON
Pour chaque résultat, un score représentant la
précision et de la qualité du géocodage est
attribué
· 3x => commune
· 6x => rue
· 9x => adresse (rue + numéro)
Le « x » étant la façon dont a
été attribuée l'adresse (extrapolation, relevé
terrain, etc...) Ce score permet de comparer les résultats entre les
différents services et de ne garder que le
plus élevé. Ainsi en utilisant plusieurs
services à la suite, il est possible d'optimiser la qualité de
ces résultats.
Seuls les résultats ayant un score inférieur
à la valeur donnée dans le champ prévu à cet effet
sont géocodés. Par défaut la valeur est à 93 ce qui
correspond à une localisation à l'adresse (numéro
extrapolé).
De plus, il est possible de géocoder une même
table d'adresses avec différents webservices. Le principe est donc
d'affiner la précision du géocodage en relançant le
géocodage avec un
service différent. J'ai testé cet API avec un
échantillon de 200 adresses (en effet, le navigateur a crashé
lorsque j'ai essayé avec un échantillon de 2000 adresses), en
utilisant les différents services pour pouvoir les comparer.
49
Avec le service qui utilise les données de la BAN,
on obtient : -Temps de traitement : 18 secondes
-Précision du géocodage :
Rue+Numéro Rue Commune Non attribué
Distribution des adresses selon le degré
de précision
Nombre d'Adresses
|
Précision Pourcentage
|
184
|
Rue+Numéro 92%
|
12
|
Rue 6,5%
|
2
|
Commune 1,5%
|
2
|
Non attribué 1,5%
|
Avec le service qui utilise les données Google, on
obtient : -Temps de traitement : 11 secondes
-Précision du géocodage :
Rue+Numéro Rue Commune Non attribué
Disctribution des adresses par degré de
précision
Nombre d'Adresses
|
Précision
|
Pourcentage
|
194
|
Rue+Numéro
|
97%
|
0
|
Rue
|
0
|
4
|
Commune
|
2%
|
2
|
Non attribué
|
1%
|
Avec le service qui utilise les données IGN, on
obtient : -Temps de traitement : 36 secondes
-Précision du géocodage :
Rue+Numéro Rue Commune Non attribué
Disctribution des adresses par degré de
précision
50
Nombre d'Adresses
|
Précision
|
Pourcentage
|
184
|
Rue+Numéro
|
92%
|
13
|
Rue
|
6,5%
|
0
|
Commune
|
0
|
3
|
Non attribué
|
1,5%
|
L'API de géocodage n'a pas fonctionné en
utilisant les services BING et OSMMapQuest. Enfin, j'ai combiné les 2
services qui semblent les plus performants, à savoir Google et BAN pour
affiner la précision, toujours sur le même échantillon.
J'ai obtenu les résultats suivants :
-Temps de traitement : 31 secondes.
-Précision du géocodage :
Rue+Numéro Rue Commune Non attribué
Disctribution des adresses par degré de
précision
Nombre d'Adresses
|
Précision Pourcentage
|
198
|
Rue+Numéro 99%
|
2
|
Rue 1%
|
0
|
Commune 0
|
0
|
Non attribué 0
|
51
On observe effectivement une amélioration de la
précision dans les résultats en combinant 2 méthodes
différentes.
Il semble cependant que l'API peut provoquer un
dysfonctionnement du navigateur si on lui fournit un fichier d'adresses plus
fourni (par exemple 2000 lignes).
52
Master Géomatique Montpellier
2016-2017
Le travail présenté dans ce mémoire
concerne la mise en place de solutions pour consolider les chaînes de
traitements visant à affecté l'information géographiques
aux bâtiments. Ceci consiste en une étape à la
création de modèles qui vont alimenter des maquettes
numériques représentant des projets urbains. Ces maquettes vont
être contenues dans un outil web qui va permettre aux acteurs du
territoire d'effectuer des actions grâce des scénarios modulables
sur une plateforme 3D interactive représentant le secteur
étudié et de voir leurs impacts via des indicateurs. Toute la
réflexion se situe au niveau de la phase de traitement, consolidation et
affectation des données collectées qui vont constituer un
data-set particulier dans ce cas, nomme « Building_Use ». Les axes
principaux du rapport traitent les problématiques de géocodage de
masse, de snapping de points/informations géographiques, ainsi que la
ventilation de surface. Pour répondre aux besoins de l'entreprise, ces
chaînes de traitements visant à consolidés les
données doivent être elles-mêmes consolidées et
améliorées, en termes de performance mais aussi de
précision.
MOTS-CLES : Chaîne de traitements, Données,
Data-Set, Workflows, Snapping, Géocodage, Ventilation.
The work presented in this thesis is about the implementation
of solutions wich can consolidate the processing chains intended to affect
geographical informations to the buildings. This is a step towards the creation
of models that will feed digital models representing urban projects. These
models will be contained in a web tool that will allow the territory's actors
to carry out actions trough modular scenarios on an interactive 3D platform,
representing the studied sector. It'll allowed them to see their impacts
trought indicators. All the reflection is mainly based on the processing phase,
wich is about consolidation and allocation of the collected data wich will
constitute in this case a particular data-set, named « Building-Use
». The main axes presented in this paper deal with these themes : mass
geocoding, snapping of points/geographical information and how to ventilate
surface. In order to meet
the need of the company, these processing chains aiming at
consolidating datas must themselves be consolidated and improved, in terms of
performance but also in term of precision.
KEYWORDS : Processing chains, Data, Data-set, Workflows,
Snapping, Geocoding, Ventilation.
|