Projet

Général

Profil

Development #22639

Carto : gestion des fonds de carte

Ajouté par Frédéric Péters il y a environ 6 ans. Mis à jour il y a environ 4 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
20 mars 2018
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

0004-maps-default-tiles-layer-22639.patch (4,95 ko) 0004-maps-default-tiles-layer-22639.patch Lauréline Guérin, 11 février 2020 15:16
0005-maps-define-tiles-layers-with-opacity-22639.patch (18,7 ko) 0005-maps-define-tiles-layers-with-opacity-22639.patch Lauréline Guérin, 11 février 2020 15:16
0003-maps-add-tiles-layer-22639.patch (24,8 ko) 0003-maps-add-tiles-layer-22639.patch Lauréline Guérin, 11 février 2020 15:16
0002-maps-new-MapLayerOptions-model-22639.patch (27,7 ko) 0002-maps-new-MapLayerOptions-model-22639.patch Lauréline Guérin, 11 février 2020 15:16
0001-maps-add-missing-migrations.patch (2,99 ko) 0001-maps-add-missing-migrations.patch Lauréline Guérin, 11 février 2020 15:16
0004-maps-default-tiles-layer-22639.patch (4,95 ko) 0004-maps-default-tiles-layer-22639.patch Lauréline Guérin, 18 février 2020 14:32
0005-maps-define-tiles-layers-with-opacity-22639.patch (19 ko) 0005-maps-define-tiles-layers-with-opacity-22639.patch Lauréline Guérin, 18 février 2020 14:32
0003-maps-add-tiles-layer-22639.patch (25 ko) 0003-maps-add-tiles-layer-22639.patch Lauréline Guérin, 18 février 2020 14:32
0002-maps-new-MapLayerOptions-model-22639.patch (28 ko) 0002-maps-new-MapLayerOptions-model-22639.patch Lauréline Guérin, 18 février 2020 14:32
0001-maps-add-missing-migrations.patch (2,99 ko) 0001-maps-add-missing-migrations.patch Lauréline Guérin, 18 février 2020 14:32
0004-maps-default-tiles-layer-22639.patch (4,95 ko) 0004-maps-default-tiles-layer-22639.patch Lauréline Guérin, 19 février 2020 09:28
0005-maps-define-tiles-layers-with-opacity-22639.patch (19,2 ko) 0005-maps-define-tiles-layers-with-opacity-22639.patch Lauréline Guérin, 19 février 2020 09:28
0003-maps-add-tiles-layer-22639.patch (25 ko) 0003-maps-add-tiles-layer-22639.patch Lauréline Guérin, 19 février 2020 09:28
0002-maps-new-MapLayerOptions-model-22639.patch (28 ko) 0002-maps-new-MapLayerOptions-model-22639.patch Lauréline Guérin, 19 février 2020 09:28
0001-maps-add-missing-migrations.patch (2,99 ko) 0001-maps-add-missing-migrations.patch Lauréline Guérin, 19 février 2020 09:28

Révisions associées

Révision 34e627b0 (diff)
Ajouté par Lauréline Guérin il y a environ 4 ans

maps: new MapLayerOptions model (#22639)

Révision 7b186a3d (diff)
Ajouté par Lauréline Guérin il y a environ 4 ans

maps: add tiles layer (#22639)

Révision 98813316 (diff)
Ajouté par Lauréline Guérin il y a environ 4 ans

maps: default tiles layer (#22639)

Révision 9a087781 (diff)
Ajouté par Lauréline Guérin il y a environ 4 ans

maps: define tiles layers with opacity (#22639)

Historique

#2

Mis à jour par Lauréline Guérin il y a environ 4 ans

  • Assigné à mis à Lauréline Guérin
#3

Mis à jour par Lauréline Guérin il y a environ 4 ans

  • Assigné à Lauréline Guérin supprimé
#4

Mis à jour par Lauréline Guérin il y a environ 4 ans

  • Assigné à mis à Lauréline Guérin
#5

Mis à jour par Frédéric Péters il y a environ 4 ans

  • Description mis à jour (diff)
#7

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").
#9

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>).

#11

Mis à jour par Frédéric Péters il y a environ 4 ans

  • Statut changé de Solution proposée à Solution validée
#12

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)
#13

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

Formats disponibles : Atom PDF