Nous avons utilisĂ© le relevĂ© des donnĂ©es des registres fonciers publiĂ© en open data par le Registre fédéral des bâtiments et des logements (RegBL). ProblĂšme: les donnĂ©es accessibles via un ensemble dĂ©diĂ© dâAPI ou sous forme de feuille de calcul ne rĂ©pondaient pas Ă nos besoins en termes de fonctionnalitĂ©s de requĂȘte et dâanalyse.
Comment chercher par exemple des bĂątiments situĂ©s dans une certaine commune Ă proximitĂ© dâespaces verts et obtenir en retour un classement de ces bĂątiments?
Les données brutes fournies par le RegBL contiennent ces informations, mais pas dans un format permettant une exploitation rapide et immédiate pour satisfaire à nos besoins.
Un cas dâĂ©cole idĂ©al pour crĂ©er un ensemble avancĂ© dâAPI Ă partir des donnĂ©es fĂ©dĂ©rales. Nous avons mis Ă profit les enseignements tirĂ©s de nos plus de dix ans dâexpĂ©rience en ingĂ©nierie et dĂ©veloppement dâAPI performants au service des donnĂ©es produits de lâun des plus grands dĂ©taillants suisses, entre autres projets.
Lâoutil que nous avons conçu prĂ©voit les fonctionnalitĂ©s suivantes, pour ne citer quâelles:
- Conception privilĂ©giant lâAPI, pour garantir la simplicitĂ© du traitement des donnĂ©es;
- Recherche plein texte en direct et multilingue dans lâintĂ©gralitĂ© des adresses de bĂątiments;
- Auto-complétion et suggestions dâadresses prĂ©dictives ;
- Correspondance géospatiale et récupération des données des bùtiments;
- Nettoyage et standardisation des données du relevé fédéral, et fonction de filtre des bùtiments;
- IntĂ©gration asynchrone des donnĂ©es sur les bĂątiments dans le cadre de stratĂ©gies de mise en correspondance multiples (plus dâinformations Ă ce sujet par la suite).
Lâapplication
Notre application API OpenSwissBuildings met en Ćuvre une API REST JSON qui peut ensuite ĂȘtre utilisĂ©e pour rĂ©cupĂ©rer et effectuer des activitĂ©s de mise en correspondance / recherche avec les donnĂ©es du RegBL.
LâAPI fournit en retour des donnĂ©es structurĂ©es selon le balisage [Schema.org]Schema.org, en particulier selon la dĂ©finition du schĂ©ma de lâadresse postale. Cette interopĂ©rabilitĂ© sĂ©mantique permet de rĂ©utiliser des outils existants en vue du data parsing (analyse syntaxique des donnĂ©es).
Lâapplication est constituĂ©e de trois parties:
- Ingestion de donnĂ©es: composante en charge dâextraire rĂ©guliĂšrement les donnĂ©es du RegBL et de mettre Ă jour Ă la fois le stockage gĂ©ospatial et le moteur de recherche en fonction des donnĂ©es des bĂątiments;
- Moteur de recherche: composante chargĂ©e de la recherche plein texte et des fonctionnalitĂ©s dâauto-complĂ©tion pour les adresses des bĂątiments (tolĂ©rance aux fautes de frappe et dĂ©tection de similitudes de texte incluses);
- Stockage / mise en correspondance gĂ©ospatial(e): composante en charge de traiter des recherches de donnĂ©es dĂ©finies par lâutilisateur·rice et de fournir les donnĂ©es des bĂątiments correspondants. Ce processus est dĂ©crit par la suite comme une activitĂ© de rĂ©solution.
Le moteur de recherche et le stockage/mise en correspondance géosaptial(e) sont les deux éléments principaux. Ce sont eux qui fournissent les fonctionnalités qui manquent aux API du RegBL.
Les deux composantes sont capables de stocker toutes les donnĂ©es relatives aux bĂątiments issues de lâintĂ©gralitĂ© des donnĂ©es accessibles au public, telles que: leur identificateur (EGID), leur adresse (multilingue dans certains cas), leurs coordonnĂ©es gĂ©ographiques sous forme de couple latitude-longitude (exprimĂ© selon le cadre de rĂ©fĂ©rence MN95 du système de coordonnées suisse.
Si la recherche plein texte et lâauto-complĂ©tion se servent des adresses, la tĂąche de «rĂ©solution» exploite lâintĂ©gralitĂ© des donnĂ©es relatives aux bĂątiments. Cette fonctionnalitĂ© nous permet dâidentifier et de joindre des mĂ©tadonnĂ©es dĂ©finies par lâutilisateur·rice aux bĂątiments identifiĂ©s comme correspondants.

Identification des bùtiments correspondants (résolution)
Câest la fonctionnalitĂ© maĂźtresse de lâapplication.
Elle permet, en fonction de critĂšres dĂ©finis, dâidentifier les bĂątiments (avec tous leurs dĂ©tails) qui correspondent Ă la recherche, en plus de quelques autres mĂ©tadonnĂ©es dĂ©finies par lâutilisateur·rice.
Quelques exemples permettront dâexpliquer cette fonction plus facilement.
Ătude de cas: trouver lâappartement idĂ©al
Imaginons un projet fictif dont le but est de trouver des bĂątiments dans lesquels il fait bon vivre.
Voici les critĂšres que ces bĂątiments doivent remplir:
- Le voisinage doit ĂȘtre agrĂ©able.
- Un espace vert doit se trouver à proximité.
- Ils doivent ĂȘtre situĂ©s dans une zone oĂč la vitesse est limitĂ©e Ă 30 km/h.
Ces critĂšres doivent ĂȘtre convertis en limites spatiales exprimĂ©es sous forme de polygones sur une carte.
Ces polygones peuvent ensuite ĂȘtre fournis Ă lâAPI OpenSwissBuildings au format GeoJSON.
En retour, lâAPI livrera une liste de bĂątiments correspondant aux polygones.
Il est possible de joindre des mĂ©tadonnĂ©es personnalisĂ©es aux polygones dans le GeoJSON. Ces mĂ©tadonnĂ©es seront alors jointes aux bĂątiments correspondant Ă la requĂȘte dans les rĂ©sultats.
Les rĂ©sultats ainsi obtenus pourront alors ĂȘtre utilisĂ©s dans le cadre de notre projet fictif afin de pointer les bĂątiments en question sur une carte.
Lâutilisation de plusieurs polygones avec des mĂ©tadonnĂ©es diffĂ©rentes permettra dâafficher des informations supplĂ©mentaires, par exemple la probabilitĂ© pour que notre client aime le bĂątiment, en fonction du nombre de critĂšres remplis.
Ătude de cas: recenser tous les bĂątiments Ă partir dâune liste dâadresses
Le traitement dâune liste dâadresses pourrait ĂȘtre un autre exemple dâapplication envisageable de lâAPI. On peut imaginer que cette liste contiendrait des adresses exactes, des fautes de frappe ou mĂȘme des sĂ©ries de numĂ©ros de maison. Le rĂ©sultat fournirait tous les bĂątiments correspondant aux adresses donnĂ©es, y compris leurs coordonnĂ©es.
Autre exemple, tout droit tirĂ© de notre projet: lâidentification et le recensement de toutes les adresses dâune commune ou dâune rue. Lâapplication met en Ćuvre une interface permettant explicitement dâextraire cette liste de notre registre, avec en soutien dâautres fonctionnalitĂ©s pour gĂ©rer les sĂ©ries de numĂ©ros de maisons ou les fautes de frappe dans le nom des rues.
Ces exemples ne sont que quelques-unes des nombreuses possibilitĂ©s quâoffre lâapplication. LâAPI OpenSwissBuildings permet de traiter les listes dâadresses, les communes et les limites spatiales (GeoJSON). Elle inclut Ă©galement des corrections avancĂ©es et des stratĂ©gies de mise en correspondance pour certains cas particuliers que nous avons identifiĂ©s concernant les limites entre rues et communes (plus dâinformations Ă ce sujet dans un prochain article de blog plus technique).
Open Source pour Open Data
Lâapplication met en Ćuvre la norme largement adoptĂ©e OpenAPI Specification pour la dĂ©finition de lâAPI. Cela nous a permis dâĂ©laborer rapidement une documentation claire de lâAPI et de ses formats de donnĂ©es. Nous avons Ă©galement pu rĂ©duire considĂ©rablement le temps nĂ©cessaire Ă la mise en Ćuvre de consommateur·rice·s tier·ce·s de lâAPI elle-mĂȘme.
LâAssociation des entreprises Ă©lectriques suisses (AES) et plus de 90 de ses membres ont cofinancĂ© le dĂ©veloppement de cet outil. Ils ont dĂ©cidĂ© de lâouvrir en open source sous licence MIT, permettant ainsi Ă quiconque de lâutiliser et de le dĂ©velopper, y compris Ă des fins commerciales.
Le code source de lâapplication est disponible dans lâAPI OpenSwissBuildings
du registre GitHub de Liip.
Tu pourras facilement exĂ©cuter ta propre instance de lâapplication, car nous avons inclus la prise en charge des dĂ©ploiements basĂ©s sur des conteneurs via Docker.
Tu peux l'essayer avec notre démo en ligne.
Tu as des questions? Tu veux savoir si cette application peut aussi rĂ©pondre Ă tes besoins? NâhĂ©site pas Ă me le faire savoir via le formulaire de contact.