#1 Wed 11 December 2013 15:25
- diouckk
- Juste Inscrit !
- Date d'inscription: 30 Apr 2012
- Messages: 5
Référencement dynamique Postgis
Bonjour
Je souhaite tracer des routes à partir de points en récupérant la distance dans un fichier csv
Voici les données:
1/-la liste des troncons ( id, pr_debut (ou on a l identifiant du point et sa distance ex 80+30) et pr_fin(pareil)) fichier csv
2/- les points (id, pr( ex le 80 dans pr_debut),the_geom)
3/- la ligne (route, the_geom)
voici ma requête
Code:
CREATE OR REPLACE VIEW v_test_lgn AS SELECT st_line_substring(rt.the_geom, 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), (length(rt.the_geom) * 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)) AS geom_line, rt.gid + 1 AS objectid FROM liste_troncons tr, "BORNAGE_ROUTES_DIRO_2012" bor, route_diro_2012 rt WHERE tr.id_arthur::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 UNION SELECT st_line_substring(rt.the_geom, 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), (length(rt.the_geom) * 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)) AS geom_line, rt.gid AS objectid FROM liste_troncons tr, "BORNAGE_ROUTES_DIRO_2012" bor, route_diro_2012 rt WHERE tr.id_arthur::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; ALTER TABLE v_test_lgn OWNER TO geotravaux; GRANT ALL ON TABLE v_test_lgn TO geotravaux; GRANT SELECT ON TABLE v_test_lgn TO sde;
Par exemple pour la route N136, je trace une ligne allant A' vers B' voir fichier avec comme debut le point A + 20m (A') et sa fin B+30m(B')
Au lieu de ça il me trace le début de la ligne à partir du point A' plus la distance à partir du fin de la ligne au point B' en ne prenant pas en compte la distance entre ces deux derniers points
Sivous avez deja fait rencontrer de probleme, toutes solutions seront les bienvenues
Dernière modification par diouckk (Thu 12 December 2013 11:19)
Hors ligne
#2 Wed 11 December 2013 16:21
- Fritsch
- Participant occasionnel
- Lieu: Paris
- Date d'inscription: 8 Nov 2006
- Messages: 32
Re: Référencement dynamique Postgis
Difficilement compréhensible.
Peux-tu nous mettre les CREATE TABLE ?
Hors ligne
#3 Thu 12 December 2013 11:19
- diouckk
- Juste Inscrit !
- Date d'inscription: 30 Apr 2012
- Messages: 5
Re: Référencement dynamique Postgis
voici les tables
Code:
Pour les points -- Table: "BORNAGE_ROUTES_DIRO_2012" -- DROP TABLE "BORNAGE_ROUTES_DIRO_2012"; CREATE TABLE "BORNAGE_ROUTES_DIRO_2012" ( gid serial NOT NULL, "ROUTE" character varying(11), "LIB_RTE" character varying(6), "PR" double precision, "INTER_PR" double precision, the_geom geometry, lat text, lng text, CONSTRAINT "BORNAGE_ROUTES_DIRO_2012_pkey" PRIMARY KEY (gid), CONSTRAINT enforce_dims_the_geom CHECK (st_ndims(the_geom) = 2), CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'POINT'::text OR the_geom IS NULL), CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 3948) ) WITH (OIDS=FALSE); ALTER TABLE "BORNAGE_ROUTES_DIRO_2012" OWNER TO geotravaux;
Les distances
Code:
-- Table: liste_troncons -- DROP TABLE liste_troncons; CREATE TABLE liste_troncons ( id_arthur character varying, -- identifiant arthur route character varying(50), pr character varying(50), pr_debut character varying(50), pr_fin character varying(50), longueur character varying(50), st_comptage character varying(50), v_max character varying(50), tps_parcours character varying(50) ) WITH (OIDS=TRUE) TABLESPACE pg_default; ALTER TABLE liste_troncons OWNER TO geotravaux; GRANT ALL ON TABLE liste_troncons TO geotravaux; GRANT SELECT ON TABLE liste_troncons TO intranet; COMMENT ON COLUMN liste_troncons.id_arthur IS 'identifiant arthur';
et la routesur laquelle je dois retracer une ligne a partir des tables liste des troncons et bornage diro
Code:
-- Table: route_diro_2012 -- DROP TABLE route_diro_2012; CREATE TABLE route_diro_2012 ( gid serial NOT NULL, "ROUTE" character varying(11), "LIB_RTE" character varying(8), "DISTRICT" character varying(12), "CEI" character varying(22), "CIGT" character varying(20), "POINT_SERV" character varying(20), "PRD" integer, "ABD" integer, "PRF" integer, "ABF" integer, "Longueur_V" integer, "Chaussée" character varying(5), "Profil_tra" character varying(20), the_geom geometry, CONSTRAINT route_diro_2012_pkey PRIMARY KEY (gid), CONSTRAINT enforce_dims_the_geom CHECK (st_ndims(the_geom) = 2), CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 3948) ) WITH (OIDS=FALSE); ALTER TABLE route_diro_2012 OWNER TO geotravaux; GRANT ALL ON TABLE route_diro_2012 TO geotravaux; GRANT SELECT ON TABLE route_diro_2012 TO sde;
L'objectif etant de recuperer le debut et la fin d'une route dans la table liste tronconset sa géometrie à partir de la table bornage diropour creer une ligne
Dernière modification par diouckk (Thu 12 December 2013 11:22)
Hors ligne