Au détour d'une conversation sur le Fédiverse, il a été signalé l'existence d'une clé OpenStreetMap pour la climatisation[1], ainsi que de la difficulté d'accès et interaction avec celle-ci. Entrant dans la saison estivale, c'est le moment où jamais d'en faire mon premier thème MapComplete.
Plutôt que me limiter à l'air conditionné, j'ai étendu le thème au concept de HVAC – acronyme anglophone pour chauffage, ventilation, et climatisation – pour mettre en avant tous les lieux disposant d'une forme de contrôle des paramètres de l'air que sont la température, l'humidité, ou sa qualité générale.
À priori, seules deux clés existent actuellement à cet effet :
air_conditioning
, qui est une booléenne ;
heating
[2], qui peut prendre différentes valeurs.
MapComplete dispose d'une documentation sur la création d'un thème personnalisé[3], j'ai été incapable de le suivre. La structure est particulièrement tordue, et se rapproche plus de bribes d'informations sur la question qu'un réel tutoriel pas-à-pas, ce que je vais tenter de tirer au clair ici.
La documentation indique différentes ressources jugées utiles :
Pour une simple mise en évidence des informations, une simple carte uMap en surcouche d'une requête Overpass sur les deux clés aurait suffit. L'avantage de MapComplete est de pouvoir proposer une solution de contribution aux données, au delà d'une simple visualisation.
Un thème MapComplete est contenu dans un fichier JSON. Il est composé de trois niveaux :
layers
, pour les éléments visuels ;
tagRenderings
, pour les données OpenStreetMap.
Le cœur d'un thème est le concept de « couches ». Chaque couche a pour objectif de répondre à un besoin précis (ex : Des bancs, pour une personne souhaitant s'asseoir), ce qui peut permettre sa réutilisation pour d'autres thèmes si jugée pertinente. Encore une fois, cette atomicité est essentielle ; Pas question d'utiliser les couches comme filtres – la fonction filter
existe pour ça –, faute de quoi pourraient apparaître des doublons en faux-positifs si la création de données est autorisée.
Le tableau (array
) tagRenderings
concerne les données OpenStreetMap. Chaque attribut peut y être décrit via un ensemble :
question
, la question à laquelle répondre ;
freeform
, un champ de réponse libre ;
render
, une phrase déclarative pouvant contenir l'information lorsque celle-ci est présente ;
mappings
, une phrase déclarative spéciale selon les valeurs. Par exemple pour faire une phrase à partir d'un attribut booléen.
Deux couches sont nécessaires à savoir les lieux chauffés, et les lieux climatisés. Pour avoir rapidement un prototype utilisable, et à défaut de bien saisir l'idée, j'ai récupéré les couches builtins
du thème onwheels
sur l'accessibilité.
Une question est définie pour chaque clé. L'une étant booléeenne, l'autre étant associé à une dizaine de valeurs[4], un mapping est requis dans chaque cas.
{ "id": "hvac", "version": "2023-07-10", "credits": "LeJun", "title": { "en": "Heating, ventilation, and air conditioning" }, "description": { "en": "Map of places using technologies to control air parameters such as temperature, humidity, and overall quality." }, "icon": "https://upload.wikimedia.org/wikipedia/commons/1/1a/Fan_%28example%29.svg", "startZoom": 14, "startLat": 0, "startLon": 0, "layers": [ { "builtin": [ "indoors", "hotel", "cafe_pub", "pharmacy", "hospital", "shops", "governements", "walls_and_buildings" ], "override": { "minzoom": 16 } }, { "tagRenderings": [ { "id": "airconditioning", "question": { "en": "Does this place provides air-conditioning?" }, "mappings": [ { "if": "air_conditioning=no", "then": { "en": "This place doesn't provide air-conditioning" } }, { "if": "air_conditioning=yes", "then": { "en": "This place provides air-conditioning" } } ] }, { "id": "heating", "question": { "en": "Is this place heated?" }, "freeform": { "key": "heating", "addExtraTags": [ "fixme=Freeform input used, value need to be checked" ] }, "render": { "en": "This place is heated through {heating}" }, "mappings": [ { "if": "heating=no", "then": { "en": "This place isn't heated" } }, { "if": "heating=yes", "then": { "en": "This place is heated" } }, { "if": "heating=fireplace", "then": { "en": "This place is heated through one or multiple fireplaces" } }, { "if": "heating=stove", "then": { "en": "This place is heated through one or multiple stoves" } }, { "if": "heating=radiator", "then": { "en": "This place is heated through one or multiple radiators" } }, { "if": "heating=underfloor", "then": { "en": "This place has underfloor heating" } } ] } ] } ] }
=> [1] Key:air_conditioning, OpenStreetMap Wiki 2023 | [2] Key:heating, OpenStreetMap Wiki 2023 | [3] Making your own theme, MapComplete 2023 | [4] heating, TagInfo 2023 This content has been proxied by September (3851b).Proxy Information
text/gemini;