MTES-MCT / dialog

Intégration de la réglementation de circulation dans les solutions numériques
https://dialog.beta.gouv.fr
GNU Affero General Public License v3.0
8 stars 0 forks source link

Ajoute le type de localisation 'Données brutes GeoJSON' pour les admins #840

Closed florimondmanca closed 3 days ago

florimondmanca commented 1 week ago

Cette PR ajoute un type de localisation "Données brutes GeoJSON" qui s'ajoute à "Voie nommée" et "Route départementale"

Le type GeoJSON nécessite un descriptif (texte libre en 255 caractères) et la géométrie GeoJSON

Dans l'UI d'édition, il ne peut être utilisé que par un utilisateur ADMIN (en prod ça sera Mathieu F)

Ce type sera utilisé pour intégrer les tronçons des zones JOP sous forme de GeoJSON MultiLineString, sans avoir à définir la voie nommée de chaque tronçon concerné (ce qui serait lourd et inutile au vu du besoin)

Aperçus

Affichage

Screenshot 2024-06-18 at 13-03-13 Arrêté temporaire JOP2024-ZONES-1 - DiaLog

Formulaire

Screenshot 2024-06-18 at 13-03-19 Arrêté temporaire JOP2024-ZONES-1 - DiaLog

TODO

jjacquelinet commented 1 week ago

Quand je teste en local, on dirait que je n'ai pas les droits : je vois "Données brutes GeoJSON" dans le type de route ou de voie mais je ne peux pas cliquer sur les champs de texte en dessous. À noter que je suis admin via le fichier .env.local.

Mise à jour : ça s'affiche comme ça :

Capture d’écran 2024-06-20 à 14 07 18

Mais je ne peux pas cliquer dans les champs "Descriptif" et "Géométrie GeoJSON" (le code source dit que les input HTML sont en disabled="disabled").

florimondmanca commented 1 week ago

@jjacquelinet Bien vu, il manquait quelques attributs, normalement c'est corrigé

florimondmanca commented 1 week ago

@jjacquelinet Retours traités :+1:

jjacquelinet commented 1 week ago

J'arrive maintenant à entrer un GeoJSON mais après validation de la localisation, j'ai un "Content missing" :

Capture d’écran 2024-06-20 à 15 55 54

Le (gros) GeoJSON en question, obtenu à partir d'une requête sur la base de données OpenStreetMap : https://overpass-turbo.eu : en pièce jointe : export highway=primary aux alentour de Rennes.geojson.txt

jjacquelinet commented 1 week ago

Avec un geojson plus petit ( export D29 aux alentours de Rennes, node and way but no relations.geojson.txt ) ça franchit cette étape mais je n'ai pas de retour de l'interface (est-ce que mon GeoJSON est bien traité ?) et le bouton "publier l'arrêté" est désactivé.

jjacquelinet commented 1 week ago

Même soucis si j'extraie une géométrie du GeoJSON :

{
        "type": "LineString",
        "coordinates": [
          [
            -1.5694146,
            48.1410811
          ],
          [
            -1.5692121,
            48.1410792
          ],
          [
            -1.5689495,
            48.141065
          ],
          [
            -1.5684082,
            48.1410156
          ],
          [
            -1.5681382,
            48.1409791
          ],
          [
            -1.5678734,
            48.1409317
          ],
          [
            -1.5646563,
            48.1402529
          ]
        ]
      }
florimondmanca commented 1 week ago

@jjacquelinet Je pense que le pb est que ton GeoJSON contient une FeatureCollection

Le contenu du champ Géométrie est directement filé à PostGIS pour utilisation comme type geometry

Il faut donc qu'il contiennent la partie "geometry" d'une feature

Si je copie-colle le JSON de géométrie de ton dernier message en revanche je n'ai pas de problème... J'arrive à enregistrer, je n'ai pas de Content missing, et je peux publier

florimondmanca commented 1 week ago

@jjacquelinet Hmm est-ce que tu as lancé la migration ? (Création de la table raw_geojson et de la foreign key avec location)

Créer une DB de branche :

docker-compose exec database createdb -U dialog -T dialog dialog_geojson

Màj la DATABASE_URL dans .env.local

Puis lancer

make dbmigrate

PS : quand un "Content missing apparaît" tu peux ouvrir la console web et trouver la réponse 500 qui correspond. En ouvrant l'onglet "Response" tu vois normalement la page de debug Symfony. Bizarrement de mon côte cette dernière s'affiche si j'essaie de saisir une Feature, mais son affichage par Content Missing peut parfois provenir d'un pb de DB justement.

jjacquelinet commented 1 week ago

J'ai bien la table raw_geojson dans ma base de données …

Lorsque je tente avec l'exemple de la géométrie LineString, je note dans les consoles JavaScript de Safari et de Google Chrome des erreurs 422 "Unprocessable Content" :

Capture d’écran 2024-06-20 à 16 43 49 Capture d’écran 2024-06-20 à 16 46 58
jjacquelinet commented 1 week ago

Malgré une réinstallation de mon DiaLog (suppression des données Docker), ça ne fonctionne pas chez moi …

florimondmanca commented 1 week ago

@mmarchois Tu as le même problème si tu testes cette branche ?

@jjacquelinet Je n'arrive pas à reproduire le pb du cas LineString sous Chromium https://github.com/MTES-MCT/dialog/pull/840#issuecomment-2180838243 l'enregistrement se passe bien.

jjacquelinet commented 6 days ago

Ok c'est bon, j'avais mal configuré mon rôle admin 🫤 Je sais pas si ça vaut le coup d'avoir un retour sur l'interface utilisateur sur ce cas précis ?

florimondmanca commented 6 days ago

@jjacquelinet Le truc problématique c'est que tu avais la possibilité de saisir un GeoJSON sans être admin...

codecov-commenter commented 6 days ago

Codecov Report

All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 99.14%. Comparing base (e6bc8a7) to head (c774fe8).

Additional details and impacted files ```diff @@ Coverage Diff @@ ## main #840 +/- ## ============================================ + Coverage 99.11% 99.14% +0.02% - Complexity 1179 1218 +39 ============================================ Files 221 232 +11 Lines 4969 5129 +160 ============================================ + Hits 4925 5085 +160 Misses 44 44 ```

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

florimondmanca commented 6 days ago

@jjacquelinet Prêt pour une nouvelle review :+1:

florimondmanca commented 5 days ago

Il me manque des tests...

jjacquelinet commented 4 days ago

Alors sans être admin, l'option "Données brutes GeoJSON" m'apparaît toujours dans le menu déroulant. Tu reproduis de ton côté ?

florimondmanca commented 4 days ago

@jjacquelinet Non je ne reproduis pas :thinking:

Par ailleurs, les tests passent et il y a celui-ci qui vérifie que l'option est hidden... https://github.com/MTES-MCT/dialog/pull/840/files#diff-03a61d98d0711df17ab5325516c674ccd95ac083cf181c5d9da248d5c86e5f7eR482-R483

florimondmanca commented 4 days ago

@jjacquelinet Le pb sous Safari est corrigé et j'ai appliqué le comportement décidé (juste cacher l'option pour s'éviter la fragilité de la validation de permissions), en couvrant tous les cas avec des tests.