Système de référence linéaire

le

Le système de référence linéaire (LRS) est un système de référence qui permet de localiser les éléments à l’aide d’une mesure le long d’un élément linéaire. Chaque entité est localisée par un point connu sous le nom de « jalon » ou par un événement linéaire (« segment »). Le système est conçu de telle sorte que si un segment de route est modifié, seuls les jalons du segment modifié doivent être mis à jour.
Un LRS est approprié pour la gestion des données relatives aux entités linéaires comme les routes, les chemins de fer, les pipelines (de transport de pétrole et gaz), et des rivières.
Un LRS permet d’identifier l’emplacement des entités et des caractéristiques d’un pipeline par mesure de distance depuis le début de l’oléoduc. Un LRS est fourni par exemple par Arcgis, GRASS et PostGIS.
Objectif :
Dans le cadre de la mise en place d’une application web mapping destinée aux travaux et à la circulation dans Rennes Métropole, le service SIG en étroite collaboration avec la DIRO va produite un référentiel linéaire pour cartographier le trafic en temps réel. Après une étude approfondie de la bibliographie nous nous sommes orientés sur le référencement linéaire de Postgis.
Outils méthodologiques :
Les données :

Système de référence linéaire
Système de référence linéaire

Nous disposons les données référentielles de la DIRO :
Liste des tronçons : Un fichier qui nous donne une information permettant de tracer les tronçons à partir des points de références.( troncons_tab.csv)
Points de référence : Cette donnée contient 2773 points de références sur l’ensemble de la Bretagne.
(BORNAGE_ROUTES_DIRO_2012.shp)
Et les routes : Routes départementales et nationales sur l’ensemble de la Bretagne (route_diro_2012shp).
Fonctionnalité du référencement linéaire de Postgis :
ST_line_locate_point(LineString, Point): Opérateur qui permet de localiser en pourcentage un point sur une ligne avec en entrée la géométrie de la ligne et celle du point.
ST_line_interpolate_point(linestring, location) :Cet opérateur permet de créer projeter un point sur une ligne en créant un point
ST_line_substring(linestring, start, end): Permet de tracer une ligne à partir des points(début et fin) sur une ligne quelconque.
Exemple d’application : Tronçon= « 8005 » sur la N136
Nous allons localiser les points de références avant de les reprojeter sur les routes. Et enfin tracer le troncons.

-- DROP TABLE a84_8006lgn;
CREATE TABLE route_8005_lng as
SELECT tr.id,tr.route,sens,
st_line_substring(CASE
WHEN geometrytype(rt.the_geom) = 'MULTILINESTRING'::text THEN geometryn(rt.the_geom, 1)
ELSE rt.the_geom
END,m_pr_debut,m_pr_fin),
rt.gid + 1 AS objectid
FROM troncons_tab tr, "BORNAGE_ROUTES_DIRO_2012" bor, route_diro_2012 rt,

(select (((length(rt.the_geom)+ split_part(tr.pr_debut::text, ‘+’::text, 2)::double precision) * st_line_locate_point(
CASE
WHEN geometrytype(rt.the_geom) = ‘MULTILINESTRING’::text THEN geometryn(rt.the_geom, 1)
ELSE rt.the_geom
END, bor.the_geom) + split_part(tr.pr_debut::text, ‘+’::text, 2)::double precision) / (length(rt.the_geom)+ split_part(tr.pr_debut::text, ‘+’::text, 2)::double precision)) as m_pr_debut
from troncons_tab tr, pr_intersect_route bor, route_diro_2012 rt
WHERE tr.id::text = ‘8005’::text AND split_part(tr.pr_debut::text, ‘+’::text, 1) = bor.pr::text AND st_intersects(rt.the_geom, bor.the_geom) AND rt.gid = 15
) AS prdeb,
(select (((length(rt.the_geom)+ split_part(tr.pr_fin::text, ‘+’::text, 2)::double precision) * st_line_locate_point(
CASE
WHEN geometrytype(rt.the_geom) = ‘MULTILINESTRING’::text THEN geometryn(rt.the_geom, 1)
ELSE rt.the_geom
END, bor.the_geom) + split_part(tr.pr_fin::text, ‘+’::text, 2)::double precision) / (length(rt.the_geom)+ split_part(tr.pr_fin::text, ‘+’::text, 2)::double precision)) as m_pr_fin, tr.id
from troncons_tab tr,pr_intersect_route bor, route_diro_2012 rt
WHERE tr.id::text = ‘8005’::text AND split_part(tr.pr_fin::text, ‘+’::text, 1) = bor.pr::text AND st_intersects(rt.the_geom, bor.the_geom) AND rt.gid = 15
) AS prfin,
( select CASE
WHEN split_part(tr.pr_fin::text, ‘+’::text, 2)::double precision < split_part(tr.pr_fin::text, ‘+’::text, 2)::double precision THEN ‘PRcroissant’
ELSE ‘PRdecroissant’
END as sens
from troncons_tab tr
where tr.id::text = ‘8005’::text) as sens
WHERE tr.id::text = ‘8005’::text AND split_part(tr.pr_debut::text, ‘+’::text, 1) = bor. »PR »::text AND st_intersects(rt.the_geom, bor.the_geom) AND rt.gid = 15;
ALTER TABLE route_8005_lng OWNER TO geotravaux;
Resultat
Système de référence linéaire
Système de référence linéaire

Laisser un commentaire