User:Mga geo/Transports publics/ligne route

From OpenStreetMap Wiki
Jump to: navigation, search

Présentation

Problème : comment convertir une ligne en une succession de ways pour mettre à jour la relation route

Liens

Essai n°1

L'idée est de rechercher l'ensemble des ways qui ont une intersection avec l'itinéraire ligne.

Afin de faciliter les traitements, la ligne est décomposée en segments.


La ligne de bus est représentée sous format kml, shp comme une MULTILINESTRING, composée de 10 LINESTRINGs et de 2072 segments.

La ligne de test est : la ligne 10 Pipriac - Guichen - Rennes (illenoo)

La base spatiale est spatialite.

highways de la zone

  • récupération avec l'overpass
  • chargement de l'osm
  • constitution du LineString de la way
  • ajout de la valeur du tag highway

itinéraires des lignes

  • récupération avec ogr2ogr sur le service wfs en format shapefile
  • chargement du shapefile

décomposition en segments

  • extraction dans une nouvelle table ligne_illenoo_segments avec ST_DissolveSegments
  • recovery de la géometrie
  • création d'une nouvelle table ligne_illenoo avec une ligne par segment
  • création d'une nouvelle table ligne_illenoo_xx avec ajout d'un buffer de xx mètres sur la géométrie

recherche des ways voisines des segments

  • création d'une nouvelle table ligne_illenoo_way avec intersection les ways (highway d'osm)
    • cette opération est très longue ~ 30 minutes, mais après optimisation (merci Sandro) quelques secondes
    • 2072 segments * 96281 ways
  • création d'une nouvelle table ligne_illenoo_way_ko pour les segments sans way
  • création du kml associé à la précédente table

La valeur du buffer est importante :

  • 5 : trop petite, de nombreux segments sans way
  • 50 : trop grande, 6 segments d'une bretelle d'accès
  • 10 : trop petite, 35 segments, rond-point
  • 20 : pas mal, 2 segments place de la Gare

Pour chaque segment, on recherche les ways voisins.

calculs sur les couples segment way

On calcule :

  • la longueur du segment
  • la longueur de la way
  • le pourcentage du segment compris dans la way (buffer de 20 mètres)
  • la distance de Hausdorff (non significative)

création d'une relation

Un script perl produit le fichier osm de création de la relation.

À partir des couples segment way, il recherche pour un segment la way comportant le plus de segments consécutifs (avec une petite marge d'erreur).

https://www.openstreetmap.org/relation/4267909

limites de la méthode

La grande hypothèse est que généralement un segment est plus petit qu'une way !

Si la way se prolonge hors de l'itinéraire, c'est pas top :

  • il faudrait découper cette way

Si le segment recouvre plusieurs ways :

  • cas ligne 1, rue de Châteaugiron, au niveau nord de la rocade, segment 244
  • si cette way est globalement recouverte, alors elle est ajoutée