découpage du tracé par des points
This commit is contained in:
parent
2ddb83f145
commit
67e8c6a36e
|
@ -195,7 +195,7 @@ CREATE VIEW phase_2_pk_secteur_4326 AS
|
|||
ALTER TABLE phase_2_pk_secteur_4326 OWNER to redadeg;
|
||||
|
||||
|
||||
-- la table qui contient les lignes des routes venant de OSM
|
||||
-- la couche qui contient les lignes des routes venant de OSM
|
||||
DROP TABLE IF EXISTS osm_roads ;
|
||||
CREATE TABLE osm_roads
|
||||
(
|
||||
|
@ -212,9 +212,10 @@ CREATE TABLE osm_roads
|
|||
CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'LINESTRING'::text OR geometrytype(the_geom) = 'MULTILINESTRING'::text),
|
||||
CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 2154)
|
||||
);
|
||||
ALTER TABLE osm_roads OWNER to redadeg;
|
||||
|
||||
|
||||
-- la table en version routable
|
||||
-- la couche en version routable
|
||||
DROP TABLE IF EXISTS osm_roads_pgr ;
|
||||
CREATE TABLE osm_roads_pgr
|
||||
(
|
||||
|
@ -237,8 +238,24 @@ CREATE TABLE osm_roads_pgr
|
|||
);
|
||||
CREATE INDEX osm_roads_pgr_source_idx ON osm_roads_pgr (source);
|
||||
CREATE INDEX osm_roads_pgr_target_idx ON osm_roads_pgr (target);
|
||||
ALTER TABLE osm_roads_pgr OWNER to redadeg;
|
||||
|
||||
|
||||
-- la couche des points pour nettoyer la couche de routage
|
||||
DROP TABLE IF EXISTS phase_2_point_nettoyage ;
|
||||
CREATE TABLE phase_2_point_nettoyage
|
||||
(
|
||||
id serial,
|
||||
pt_id bigint,
|
||||
edge_id bigint,
|
||||
distance numeric,
|
||||
the_geom geometry,
|
||||
CONSTRAINT phase_2_point_nettoyage_pkey PRIMARY KEY (id),
|
||||
CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'POINT'::text),
|
||||
CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 2154)
|
||||
);
|
||||
ALTER TABLE phase_2_point_nettoyage OWNER to redadeg;
|
||||
|
||||
|
||||
-- dans la base redadeg on chargera la couche osm_roads qui a été calculée
|
||||
-- à partir de données OSM
|
||||
|
|
|
@ -64,3 +64,41 @@ GROUP BY a.pk_id, a.name, a.secteur_id, b.node_id, b.the_geom
|
|||
ORDER BY a.pk_id ;
|
||||
|
||||
|
||||
|
||||
-- on recale également les points de nettoyage sur le tracé
|
||||
TRUNCATE TABLE phase_2_point_nettoyage ;
|
||||
|
||||
WITH candidates AS
|
||||
(
|
||||
SELECT
|
||||
pt_org.ogc_fid AS pt_id,
|
||||
edge.id AS edge_id,
|
||||
ST_Distance(pt_org.the_geom, ST_ClosestPoint(edge.the_geom, pt_org.the_geom)) AS distance,
|
||||
ST_Snap(
|
||||
pt_org.the_geom, -- le point d'origine à recaler
|
||||
ST_ClosestPoint(edge.the_geom, pt_org.the_geom), -- le point le plus près dans la couche de nœuds
|
||||
ST_Distance(pt_org.the_geom, ST_ClosestPoint(edge.the_geom, pt_org.the_geom))* 1.01 -- dans la distance de ce plus proche point
|
||||
) AS the_geom
|
||||
FROM
|
||||
(SELECT ogc_fid::integer, ST_Transform(the_geom,2154) AS the_geom FROM phase_2_point_nettoyage_3857) AS pt_org,
|
||||
(SELECT id, the_geom FROM osm_roads_pgr) AS edge
|
||||
WHERE
|
||||
ST_INTERSECTS(edge.the_geom, ST_BUFFER(ST_Transform(pt_org.the_geom,2154) ,2) )
|
||||
ORDER BY pt_org.ogc_fid, ST_Distance(pt_org.the_geom, ST_ClosestPoint(edge.the_geom, pt_org.the_geom))
|
||||
)
|
||||
INSERT INTO phase_2_point_nettoyage
|
||||
SELECT
|
||||
nextval('phase_2_point_nettoyage_id_seq'::regclass),
|
||||
pt_id,
|
||||
edge_id,
|
||||
distance,
|
||||
the_geom
|
||||
FROM candidates ;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -24,7 +24,8 @@ curl -sS http://umap.openstreetmap.fr/fr/datalayer/817220/ > data/phase_2_umap_
|
|||
curl -sS http://umap.openstreetmap.fr/fr/datalayer/817221/ > data/phase_2_umap_pk_technique.geojson
|
||||
# PK manuels
|
||||
curl -sS http://umap.openstreetmap.fr/fr/datalayer/817222/ > data/phase_2_umap_pk_manuel.geojson
|
||||
|
||||
# couche de points de nettoyage
|
||||
curl -sS http://umap.openstreetmap.fr/fr/datalayer/861810/ > data/phase_2_umap_point_nettoyage.geojson
|
||||
|
||||
echo " fait"
|
||||
echo ""
|
||||
|
@ -36,10 +37,16 @@ echo ""
|
|||
# note : les coordonnées sont en 3857 mais la déclaration de la table = 4326
|
||||
|
||||
echo " chargement des fichiers dans la BD"
|
||||
echo ""
|
||||
|
||||
echo "phase_2_pk_secteur_3857"
|
||||
$PSQL -U $DB_USER -d $DB_NAME -c "DROP TABLE IF EXISTS phase_2_pk_secteur_3857 CASCADE;"
|
||||
ogr2ogr -f "PostgreSQL" PG:"host=localhost user=redadeg password=redadeg dbname=redadeg" data/phase_2_umap_pk_secteur.geojson -nln phase_2_pk_secteur_3857 -lco GEOMETRY_NAME=the_geom -explodecollections -overwrite
|
||||
|
||||
echo "phase_2_point_nettoyage_3857"
|
||||
$PSQL -U $DB_USER -d $DB_NAME -c "DROP TABLE IF EXISTS phase_2_point_nettoyage_3857 CASCADE;"
|
||||
ogr2ogr -f "PostgreSQL" PG:"host=localhost user=redadeg password=redadeg dbname=redadeg" data/phase_2_umap_point_nettoyage.geojson -nln phase_2_point_nettoyage_3857 -lco GEOMETRY_NAME=the_geom -explodecollections -overwrite
|
||||
|
||||
echo " fait"
|
||||
echo ""
|
||||
|
||||
|
@ -68,7 +75,15 @@ echo " Calcul des itinéraires (pgrouting)"
|
|||
echo ""
|
||||
|
||||
# on commence par vider la table qui contiendra les calculs d'itinéraires
|
||||
$PSQL -h $DB_HOST -U $DB_USER -c "TRUNCATE TABLE phase_2_trace_pgr ;"
|
||||
echo "vidage de la couche de routage"
|
||||
$PSQL -h $DB_HOST -U $DB_USER -d $DB_NAME -c "TRUNCATE TABLE phase_2_trace_pgr ;"
|
||||
echo " fait"
|
||||
|
||||
# ensuite : on supprime les tronçons ciblés par la couche de points de nettoyage
|
||||
# AVANT de calculer les itinéraires
|
||||
echo "nettoyage de la couche de routage par les points ciblés"
|
||||
$PSQL -h $DB_HOST -U $DB_USER -d $DB_NAME -c "DELETE FROM osm_roads_pgr WHERE id IN (SELECT r.id FROM osm_roads_pgr r JOIN phase_2_point_nettoyage p ON r.id = p.edge_id);"
|
||||
echo " fait"
|
||||
|
||||
|
||||
# on fait la requête qui va donner une liste de PK de secteurs
|
||||
|
|
Loading…
Reference in a new issue