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:

  1. 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;
  2. 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);
  3. 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.