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;
|
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 ;
|
DROP TABLE IF EXISTS osm_roads ;
|
||||||
CREATE TABLE 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_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)
|
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 ;
|
DROP TABLE IF EXISTS osm_roads_pgr ;
|
||||||
CREATE TABLE 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_source_idx ON osm_roads_pgr (source);
|
||||||
CREATE INDEX osm_roads_pgr_target_idx ON osm_roads_pgr (target);
|
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
|
-- dans la base redadeg on chargera la couche osm_roads qui a été calculée
|
||||||
-- à partir de données OSM
|
-- à 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 ;
|
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
|
curl -sS http://umap.openstreetmap.fr/fr/datalayer/817221/ > data/phase_2_umap_pk_technique.geojson
|
||||||
# PK manuels
|
# PK manuels
|
||||||
curl -sS http://umap.openstreetmap.fr/fr/datalayer/817222/ > data/phase_2_umap_pk_manuel.geojson
|
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 " fait"
|
||||||
echo ""
|
echo ""
|
||||||
|
@ -36,10 +37,16 @@ echo ""
|
||||||
# note : les coordonnées sont en 3857 mais la déclaration de la table = 4326
|
# note : les coordonnées sont en 3857 mais la déclaration de la table = 4326
|
||||||
|
|
||||||
echo " chargement des fichiers dans la BD"
|
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;"
|
$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
|
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 " fait"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
|
@ -68,7 +75,15 @@ echo " Calcul des itinéraires (pgrouting)"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# on commence par vider la table qui contiendra les calculs d'itinéraires
|
# 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
|
# on fait la requête qui va donner une liste de PK de secteurs
|
||||||
|
|
Loading…
Reference in a new issue