Development #22639
Carto : gestion des fonds de carte
0%
Description
On définit un fond de carte de base dans la config, genre :
COMBO_MAP_TILE_URLTEMPLATE = "https://carton.entrouvert.org/hydda-tiles/{z}/{x}/{y}{r}.png"
Mais on souhaiterait pouvoir y superposer d'autres fonds de carte, pour par exemple avoir en transparence l'heatmap de la qualité de l'air. (cf #22323)
Du coup j'imagine un nouveau modèle définissant un fond de carte (genre MapTilesLayer), avec la possibilité de définir qu'il s'agit du fond de carte par défaut (et en son absence, fallback sur COMBO_MAP_TILE_URLTEMPLATE).
Dans le modèle il y aurait slug, URL (compatible leaflet, ex: 'http://somedomain.com/blabla/{z}/{x}/{y}{r}.png') et une chaine pour l'attribution (ex: "contributeurs OpenStreetMap").
Ensuite, dans la config d'une carte on pourrait paramétrer les fonds souhaités (que je verrais stockés sous forme de liste de dictionnaires, avec comme clé slug et opacity (pour commencer)).
Ou alors, pour faire models.ManyToManyField comme pour les couches, mettre opacity dans les attributs du modèle MapTilesLayer.
De là je me demande aussi s'il y aurait intérêt à faire un seul modèle (MapLayer), y ajouter un attribut "kind" (tuiles ou geojson) et y combiner tous les attributs. Je me dis que ça a comme avantage de ne pour ainsi dire rien demander du côté de la cellule et certaines évolutions communes seront facilitées (j'imagine par exemple qu'on puisse avoir en front un menu pour afficher ou pas certaines couches). Côté UI dans la gestion des couches, j'imagine cependant que ça resterait des vues séparées, une vue "Ajouter une couche GeoJSON" et une vue "Ajouter une couche de tuiles" (et pareil pour l'édition, pour présenter des champs différents).
Pour tester, https://b.tiles.atmo-aura.fr/indices_j/{z}/{x}/{y}.png a les tuiles "qualité de l'air" de la région de Lyon.
Fichiers
Révisions associées
maps: add tiles layer (#22639)
maps: default tiles layer (#22639)
maps: define tiles layers with opacity (#22639)
Historique
Mis à jour par Lauréline Guérin il y a environ 4 ans
- Fichier 0005-maps-define-tiles-layers-with-opacity-22639.patch 0005-maps-define-tiles-layers-with-opacity-22639.patch ajouté
- Fichier 0004-maps-default-tiles-layer-22639.patch 0004-maps-default-tiles-layer-22639.patch ajouté
- Fichier 0003-maps-add-tiles-layer-22639.patch 0003-maps-add-tiles-layer-22639.patch ajouté
- Fichier 0002-maps-new-MapLayerOptions-model-22639.patch 0002-maps-new-MapLayerOptions-model-22639.patch ajouté
- Fichier 0001-maps-add-missing-migrations.patch 0001-maps-add-missing-migrations.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Frédéric Péters il y a environ 4 ans
Nickel, juste mini-détails :
- je n'incluerais pas "(GeoJSON)" derrière les couches GeoJSON (sur l'idée que ça va principalement être ça et qu'aujourd'hui ça fait une longue liste de "(GeoJSON)" répétés, pas jolis.
- j'ajouterais un help_text à opacity, pour dire que c'est entre 0 et 1. (j'ai tapé 0.5 et il n'a pas voulu parce qu'il attendait une virgule mais je n'ai pas pigé tout de suite et j'ai alors tapé 50 et il m'a dit que ça devait être inférieur à 1). (si ça se fait sans trop de galères tu peux ajouter step="0.1" et min="0" et max="1" sur l'<input type=number>).
- PageSnapshot.take(self.cell.page, request=self.request, comment=_('changed cell "%s"') % self.cell); je n'y ai pas pensé pour les liens mais je me dis que tant qu'à être dans du code spécifique autant taper un message spécifique, genre _('added layer "%s" to cell "%s").
Mis à jour par Lauréline Guérin il y a environ 4 ans
- Fichier 0005-maps-define-tiles-layers-with-opacity-22639.patch 0005-maps-define-tiles-layers-with-opacity-22639.patch ajouté
- Fichier 0004-maps-default-tiles-layer-22639.patch 0004-maps-default-tiles-layer-22639.patch ajouté
- Fichier 0003-maps-add-tiles-layer-22639.patch 0003-maps-add-tiles-layer-22639.patch ajouté
- Fichier 0002-maps-new-MapLayerOptions-model-22639.patch 0002-maps-new-MapLayerOptions-model-22639.patch ajouté
- Fichier 0001-maps-add-missing-migrations.patch 0001-maps-add-missing-migrations.patch ajouté
remarques prises en compte :)
Mis à jour par Frédéric Péters il y a environ 4 ans
Décalage de parenthèse lors du rebasage, dans :
cell = list(serializers.deserialize('json', json.dumps([cell_data], ignorenonexistent=True)))[0]
Et je pense que j'ajouterais quand même le help_text à opacity (même avec les attributs supplémentaires posés sur l'<input>).
Mis à jour par Lauréline Guérin il y a environ 4 ans
- Fichier 0005-maps-define-tiles-layers-with-opacity-22639.patch 0005-maps-define-tiles-layers-with-opacity-22639.patch ajouté
- Fichier 0004-maps-default-tiles-layer-22639.patch 0004-maps-default-tiles-layer-22639.patch ajouté
- Fichier 0003-maps-add-tiles-layer-22639.patch 0003-maps-add-tiles-layer-22639.patch ajouté
- Fichier 0002-maps-new-MapLayerOptions-model-22639.patch 0002-maps-new-MapLayerOptions-model-22639.patch ajouté
- Fichier 0001-maps-add-missing-migrations.patch 0001-maps-add-missing-migrations.patch ajouté
oups, merci Fred et les tests :)
Mis à jour par Frédéric Péters il y a environ 4 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Lauréline Guérin il y a environ 4 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 9a08778110b4be927b7ffc6aa72beb7eda0c37d9 Author: Lauréline Guérin <zebuline@entrouvert.com> Date: Tue Feb 11 14:58:00 2020 +0100 maps: define tiles layers with opacity (#22639) commit 9881331665314ca85ebb50771ca89449db4f83e7 Author: Lauréline Guérin <zebuline@entrouvert.com> Date: Mon Feb 10 16:42:08 2020 +0100 maps: default tiles layer (#22639) commit 7b186a3dfb565b7e15aae6d14540da3de0050556 Author: Lauréline Guérin <zebuline@entrouvert.com> Date: Mon Feb 10 16:02:44 2020 +0100 maps: add tiles layer (#22639) commit 34e627b0d855d13187879c87f244d45c37df88c2 Author: Lauréline Guérin <zebuline@entrouvert.com> Date: Thu Feb 6 11:41:52 2020 +0100 maps: new MapLayerOptions model (#22639)
Mis à jour par Frédéric Péters il y a environ 4 ans
- Statut changé de Résolu (à déployer) à Solution déployée
maps: new MapLayerOptions model (#22639)