MapComplete : HVAC

2023-07-10

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.

Attributs OpenStreetMap

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 :



Documentation MapComplete

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.

Structure JSON

Un thème MapComplete est contenu dans un fichier JSON. Il est composé de trois niveaux :




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 :





Thème HVAC

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"
			}
			}
		]
		}
	]
	}
]
}

Références

[1] Key:air_conditioning, OpenStreetMap Wiki 2023

[2] Key:heating, OpenStreetMap Wiki 2023

[3] Making your own theme, MapComplete 2023

[4] heating, TagInfo 2023


Source