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
9 stars 0 forks source link

Intégrer les données de la métropole européenne de Lille (MEL) #658

Open johanricher opened 6 months ago

johanricher commented 6 months ago

Contexte

La métropole européenne de Lille (MEL) est une intercommunalité de type métropole. Avec près de 1,2 millions d'habitants, c'est de loin la plus peuplée des 21 métropoles françaises. Elle compte 95 communes dont les principales sont Lille, Roubaix, Tourcoing et Villeneuve-d'Ascq (qui est un territoire JOP #563)

La MEL et (pour l'instant) 13 de ses communes membres utilisent Littéralis (service proposé par Sogelink) pour "instruire et diffuser" leurs arrêtés de circulation

La MEL a contacté DiaLog le 16 février 2024 et souhaite participer à l'expérimentation sur la numérisation de la réglementation de circulation routière.

Il s'agirait dans un premier temps, avant de lancer l'implémentation à proprement parler, de :

L'implémentation serait dans la continuité des précédents travaux d'intégration de données tierses dans DiaLog :

Littéralis étant un des outils les plus utilisé pour créer des arrêtés de circulation, cette première implémentation a vocation à être mutualisée pour l'intégration de données de nombreuses autres collectivités.

Critères d'acceptation

Implémentation

Pad dédié

johanricher commented 6 months ago

@MathieuFV Pourrais-tu retrouver et regrouper sur ce pad les enseignements sur Littéralis qui avaient été glanés lors des précédentes investigations, notamment auprès de Rennes ?

johanricher commented 6 months ago

La participation de la MEL à DiaLog pourrait nous permettre de faire des entretiens, tests utilisateurs voire des immersions pour

@MathieuFV et @aureliebaton vont travailler là-dessus.

florimondmanca commented 5 months ago

Le rendez-vous avec la MEL ce jour confirme qu'en principe leur flux WFS devrait contenir ce qu'il nous faut.

La direction voirie l'utilise pour ses propres analyses et visualisations dans QGIS. Ils ont paramétré des "couches" QGIS, chacune correspondant à une requête différente au WFS.

Donc on devrait pouvoir faire la requête qu'il nous faut. Il faut donc explorer ce qu'on peut récupérer via leur WFS...

jjacquelinet commented 4 months ago

J'arrive à me connecter au flux WFS, mais le nombre d'entités est 0 pour la couche "litteralis" …

johanricher commented 4 months ago

CR de la réunion du 22/04 : https://pad.incubateur.net/ozUvpN8oQEiZXtBrqb4Gqw#Lille--R%C3%A9union-du-lundi-22-avril-2024-09h30--gt-10h15-

florimondmanca commented 1 month ago

En attendant la réparation de la BD TOPO ce matin j'ai regardé la doc WFS de Sogelink.

On dirait bien que leur API et le format des données mis à disposition est standard. Dans leur doc générique on retrouve les mêmes champs que ceux de l'API de la MEL.

L'API Sogelink de la MEL peut donc être un support au développement d'une "intégration API WFS Litteralis" standardisée... réutilisable avec d'autres collectivités

L'URL est unique mais les données disponibles dépendent des identifiants que l'on utilise, lesquels doivent être paramétrés par la collectivité

Je récupère des données intéressantes avec cette URL

https://apps.sogelink.fr/maplink/public/wfs?outputFormat=application/json&SERVICE=wfs&VERSION=2&REQUEST=GetFeature&TYPENAME=litteralis:litteralis&cql_filter=mesures = 'SOGELINK - Circulation interdite'

Le serveur répond assez rapidement, de ce côté là on devrait être bons.

Exemple de point de données

        {
            "type": "Feature",
            "id": "litteralis.497573",
            "geometry": {
                "type": "Polygon",
                "coordinates": [
                    ["..."]
                ]
            },
            "geometry_name": "geometry",
            "properties": {
                "idemprise": 497573,
                "idarrete": 850507522,
                "shorturl": "https://dl.sogelink.fr/?tUatBTSM",
                "arretesrcid": "A 2024-058",
                "collectivitelibelle": "VILLE DE HOUPLINES",
                "collectiviteid": null,
                "collectiviteagencelibelle": "Mairie d'Houplines",
                "collectiviteagenceid": 174486,
                "documenttype": "ARRETE TEMPORAIRE",
                "arretedebut": "2024-04-30T02:00:00Z",
                "arretefin": "2024-05-03T02:00:00Z",
                "empriseno": 1,
                "emprisetype": "CIRCULATION",
                "emprisedebut": "2024-04-30T02:00:00Z",
                "emprisefin": "2024-05-03T02:00:00Z",
                "mesures": "SOGELINK - Circulation interdite",
                "localisations": " CONTOUR PARMENTIER (HOUPLINES)",
                "idagence": 174486,
                "fournisseur": "LIPRIME",
                "publicationinternet": true,
                "emetteurlibelle": "SALTI",
                "emetteurid": null,
                "categoriesmodele": "Travaux",
                "nommodele": "SOGELINK - AC2 - Arrêté temporaire travaux",
                "parametresarrete": "Date d'envoi de la demande : 18/03/2024 00:00:00 ; Date de réception de la demande : 18/03/2024 00:00:00 ; Date de début de l'arrêté : 30/04/2024 00:00:00 ; Date de fin de l'arrêté : 03/05/2024 00:00:00 ; Description des travaux : sur réseaux ou ouvrages de télécommunications ; ajout annexe : N ; chargé de MEP de la signalisation : Le demandeur de l'acte",
                "parametresemprise": "Dates de l'emprise : Du 30/04/2024 00:00:00 au 03/05/2024 00:00:00",
                "parametresmesures": "",
                "datecreation": "2024-03-21T16:39:18.665Z",
                "datemodification": "2024-03-21T16:39:18.994Z"
            },
            "bbox": [
                2.901985493,
                50.6868113468,
                2.9029349122,
                50.6876091667
            ]
        },

On voit que les géométries sont sous la forme de polygône mais c'est une "illusion", ces polygônes décrivent le linéaire de voie

Screenshot 2024-07-09 at 12-19-54 geojson io powered by Mapbox

Du point de vue de la DB cela ne poserait pas de problème de les intégrer tels quels, car le champ geometry peut contenir un GeoJSON arbitraire

Mais cela peut poser problème dans les exports DATEX et CIFS, notamment ce dernier qui essaie de récupérer les linéaires et suppose donc un format LineString ou MultiLineString.

On devrait donc probablement transformer les polygônes en polylignes avant de les intégrer en base. J'imagine que ça peut se faire avec une requête sur troncon_de_route conditionnée à WHERE ST_Intersects(polygone).

MathieuFV commented 1 month ago

Je trouve qu'une transformation en polylignes est de toutes manières souhaitable pour rester dans le paradigme linéaire. Sinon c'est cool, mais je vois peu de choses qui qualifient la restriction de circulation, je suppose que vu que Litteralis est principalement utilisé pour les travaux c'est implicitement circulation interdite pour tout le monde, on pourrait l'intégrer comme Eudonet

MathieuFV commented 1 month ago

Est-ce que ça veut dire que je peux répondre qu'on est OK à Sogelink ?

florimondmanca commented 1 month ago

je suppose que vu que Litteralis est principalement utilisé pour les travaux c'est implicitement circulation interdite pour tout le monde,

Oui j'imagine

Est-ce que ça veut dire que je peux répondre qu'on est OK à Sogelink ?

Niveau accès et utilisation de l'API ça semble OK oui

On devra demander la configuration de l'API à chaque collectivité qui souhaiterait intégrer ses données Litteralis dans DiaLog. Elle devra configurer des accès pour nous comme la MEL l'a fait

johanricher commented 1 month ago

Si je comprends bien on a un accès à l'intégralité des données de Littéralis (tout du moins celles qui sont pertinentes pour DiaLog) et pas seulement celles de la MEL ? Auquel cas je propose de convertir ce ticket pour refléter ce nouveau périmètre.

A propos du périmètre, il faudra du coup le préciser ainsi que les critères d'acceptation, c'est à dire ce qu'on prend en entrée et ce qui est attendu en sortie de DiaLog (UI et API). Il s'agirait d'une réunion du type "review avant implé" qui est à mon avis indispensable sur ce ticket. Si c'est toi qui va travailler sur l'implé tu me dis quand tu veux qu'on fasse ça ensemble @florimondmanca.

florimondmanca commented 1 month ago

Si je comprends bien on a un accès à l'intégralité des données de Littéralis (tout du moins celles qui sont pertinentes pour DiaLog) et pas seulement celles de la MEL ?

Non justement on n'a un accès qu'aux données auxquelles les identifiants dont on dispose permettent l'accès

Pour l'instant on n'a que des identifiants MEL donc on n'a accès qu'aux données de la MEL

MAIS si une autre collectivité / métropole nous configure des identifiants pour accéder à ses données, on pourra le faire via la même API

florimondmanca commented 1 month ago

réunion du type "review avant implé

Oui carrément

Pour la MEL j'ai pris 2h cet aprem pour explorer la faisabilité de l'intégration (je commence à prendre la main :sweat_smile: ) et il y a de la matière (j'ai chargé les polygônes pour l'instant)

Screenshot 2024-07-09 at 15-45-40 Carte - DiaLog

florimondmanca commented 1 month ago

@johanricher

quand tu veux qu'on fasse ça ensemble

En fonction de l'utilisation du temps demain, on peut le faire demain, ou bien jeudi

MathieuFV commented 1 month ago

C'est déjà super ! Ce sont des arrêtés temporaires pour travaux ou c'est mélangé ?

florimondmanca commented 1 month ago

J'ai pas regardé dans le détail mais il y a un seul permanent et tout le reste temporaire (une centaine). Je n'ai pas encore bien compris si la couche litteralis:litteralis contenait autre chose que des arrêtés travaux

florimondmanca commented 1 month ago

Exemple "d'emprise" avec plusieurs rues : la géométrie est un MultiPolygon et i y a autant de géométries que de libellé de voie séparé par des ";" dans le champs localisations

 {
            "type": "Feature",
            "id": "litteralis.358492",
            "geometry": {
                "type": "MultiPolygon",
                "coordinates": [
                    [
                        [
                            [
                                3.0509965579,
                                50.6879290973
                            ],
                            [
                                3.0507208116,
                                50.6880133701
                            ],
                            [
                                3.0507094549,
                                50.6880177183
                            ],
                            [
                                3.0505623331,
                                50.6880867848
                            ],
                            [
                                3.0505493727,
                                50.6880946698
                            ],
                            [
                                3.0502700415,
                                50.688314276
                            ],
                            [
                                3.0502663254,
                                50.6883174781
                            ],
                            [
                                3.0498345468,
                                50.6887263183
                            ],
                            [
                                3.0493698116,
                                50.6890040849
                            ],
                            [
                                3.0493698486,
                                50.6890041098
                            ],
                            [
                                3.0489771943,
                                50.6892280788
                            ],
                            [
                                3.0490715727,
                                50.6892948475
                            ],
                            [
                                3.0494091812,
                                50.6891022766
                            ],
                            [
                                3.0500110449,
                                50.6895912599
                            ],
                            [
                                3.0501223291,
                                50.6895359869
                            ],
                            [
                                3.0495135494,
                                50.6890413855
                            ],
                            [
                                3.0499371556,
                                50.6887882008
                            ],
                            [
                                3.0499474093,
                                50.6887805204
                            ],
                            [
                                3.0503818853,
                                50.6883691253
                            ],
                            [
                                3.0506535611,
                                50.6881555374
                            ],
                            [
                                3.0507880524,
                                50.6880924003
                            ],
                            [
                                3.0510651873,
                                50.688007703
                            ],
                            [
                                3.0510789547,
                                50.6880021711
                            ],
                            [
                                3.0512061621,
                                50.6879368811
                            ],
                            [
                                3.051117387,
                                50.687867081
                            ],
                            [
                                3.0509965579,
                                50.6879290973
                            ]
                        ],
                        [
                            [
                                3.0494178487,
                                50.6890365178
                            ],
                            [
                                3.0494182618,
                                50.6890367967
                            ],
                            [
                                3.0494182508,
                                50.6890368022
                            ],
                            [
                                3.0494178487,
                                50.6890365178
                            ]
                        ]
                    ],
                    [
                        [
                            [
                                3.0465900089,
                                50.6893778297
                            ],
                            [
                                3.0464493275,
                                50.6893859603
                            ],
                            [
                                3.0464616378,
                                50.6894719119
                            ],
                            [
                                3.0465319786,
                                50.6894678465
                            ],
                            [
                                3.0464701902,
                                50.6894895841
                            ],
                            [
                                3.0465142395,
                                50.689540109
                            ],
                            [
                                3.0465256242,
                                50.6895498028
                            ],
                            [
                                3.0468395447,
                                50.6897529386
                            ],
                            [
                                3.0464603014,
                                50.689979431
                            ],
                            [
                                3.0462834984,
                                50.6900438191
                            ],
                            [
                                3.0462491991,
                                50.6900744979
                            ],
                            [
                                3.0462254,
                                50.6901553582
                            ],
                            [
                                3.0462299009,
                                50.6901812677
                            ],
                            [
                                3.046418847,
                                50.6904615152
                            ],
                            [
                                3.0464382286,
                                50.6905296835
                            ],
                            [
                                3.0464452074,
                                50.6906432899
                            ],
                            [
                                3.0465863659,
                                50.690639791
                            ],
                            [
                                3.0465791942,
                                50.6905230483
                            ],
                            [
                                3.0465781233,
                                50.6905168233
                            ],
                            [
                                3.0465564389,
                                50.6904405566
                            ],
                            [
                                3.0465518593,
                                50.690430867
                            ],
                            [
                                3.0463681992,
                                50.6901584608
                            ],
                            [
                                3.0463820618,
                                50.6901113606
                            ],
                            [
                                3.0465377639,
                                50.6900546569
                            ],
                            [
                                3.0465510148,
                                50.6900484216
                            ],
                            [
                                3.0469888306,
                                50.689786948
                            ],
                            [
                                3.0469404563,
                                50.6897542635
                            ],
                            [
                                3.0469405232,
                                50.6897542126
                            ],
                            [
                                3.0469909106,
                                50.6897227912
                            ],
                            [
                                3.0466331618,
                                50.689491295
                            ],
                            [
                                3.0466009719,
                                50.6894543731
                            ],
                            [
                                3.0465900089,
                                50.6893778297
                            ]
                        ],
                        [
                            [
                                3.0469404492,
                                50.6897542587
                            ],
                            [
                                3.0469405068,
                                50.6897542228
                            ],
                            [
                                3.0469404547,
                                50.6897542625
                            ],
                            [
                                3.0469404492,
                                50.6897542587
                            ]
                        ]
                    ]
                ]
            },
            "geometry_name": "geometry",
            "properties": {
                "idemprise": 358492,
                "idarrete": 850384337,
                "shorturl": "https://dl.sogelink.fr/?P8csjNxH",
                "arretesrcid": "23/0575",
                "collectivitelibelle": "VILLE DE WAMBRECHIES",
                "collectiviteid": null,
                "collectiviteagencelibelle": "Mairie de Wambrechies",
                "collectiviteagenceid": 173214,
                "documenttype": "ARRETE TEMPORAIRE",
                "arretedebut": "2023-09-09T02:00:00Z",
                "arretefin": "2023-09-09T02:00:00Z",
                "empriseno": 4,
                "emprisetype": "CIRCULATION",
                "emprisedebut": "2023-09-09T02:00:00Z",
                "emprisefin": "2023-09-09T02:00:00Z",
                "mesures": "SOGELINK - Circulation interdite",
                "localisations": "AVENUE DES CHATEAUX, DE PARKING DE LA DISTILLERIE  JUSQU'À L'ALLEE DU CHATEAU DES ORMES; ALLEE DU CHATEAU DES ORMES (WAMBRECHIES)",
                "idagence": 173214,
                "fournisseur": "LIPRIME",
                "publicationinternet": true,
                "emetteurlibelle": "COMMUNE DE WAMBRECHIES",
                "emetteurid": null,
                "categoriesmodele": "Evenements",
                "nommodele": "SOGELINK - AC3 - Arrêté temporaire évènements",
                "parametresarrete": "Date de réception de la demande : 31/08/2023 00:00:00 ; Date de début de l'arrêté : 09/09/2023 00:00:00 ; Date de fin de l'arrêté : 09/09/2023 00:00:00 ; Description évènement : l'organisation d'une course sportive ; ajout annexe : N ; chargé de MEP de la signalisation : Le demandeur de l'acte",
                "parametresemprise": "jours et horaires : de 15h45 à 18h00 ; Dates de l'emprise : Du 09/09/2023 00:00:00 au 09/09/2023 00:00:00",
                "parametresmesures": "",
                "datecreation": "2023-09-01T08:36:52.174Z",
                "datemodification": "2023-09-01T08:36:52.831Z"
            },
            "bbox": [
                3.0462254,
                50.687867081,
                3.0512061621,
                50.6906432899
            ]
        }

Screenshot 2024-07-11 at 10-35-53 geojson io powered by Mapbox

johanricher commented 1 month ago

il y a autant de géométries que de libellé de voie séparé par des ";" dans le champs localisations

Est-ce que ça veut dire que tu proposes qu'on utilise ça pour que dans DiaLog les localisations apparaissent de façon distincte (dans l'UI comme dans les données exportées) ?

Est-ce qu'on est certain que la structure des données est assez solide pour que le nombre de géométrie corresponde toujours au nombre de libellés séparés par ; dans le champs localisations ?

Suite à la réunion d'hier la définition des différents termes (emprise, mesure, localisation...) et leur correspondance avec notre propre modèle ont commencé a être documenté dans la PR #874 : https://github.com/MTES-MCT/dialog/blob/feat/litteralis/docs/adr/010_litteralis.md#structure-des-donn%C3%A9es

Je vais commenter la PR pour contribuer à cette doc, n'hésitez pas à faire de même.

florimondmanca commented 2 weeks ago

J'ai lancé l'intégration sur l'app de branche, on peut voir la carte ici https://dialog-staging-pr874.osc-fr1.scalingo.io/carte

En l'état ma PR importe tout sauf critère de date, on se retrouve donc avec 715 arrêtés temporaires et 30 permanents... mais 95% c'est du passé (dans la liste, 34 pages sur 36 pages de 10 arrêtés)

Par soucis de sobriété numérique je propose d'appliquer ici aussi le filtre classique sur les daets : "arrêté permanent OU temporaire dont la date de fin est dans le futur"

On pourrait avoir un cas d'usage "inspection des archives" mais je pense que ça nécessiterait une infrastructure technique appropriée en traitant cette donnée comme "froide" (typiquement, read-only, ce qui permettrait un certain nombre de simplifications)