recalage des PK secteurs sur les noeuds de routage
This commit is contained in:
parent
3710b42f75
commit
352198454d
|
@ -166,6 +166,22 @@ CREATE VIEW phase_1_tdb AS
|
||||||
==========================================================================
|
==========================================================================
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
-- les couches PK venant de umap
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS phase_2_pk_secteur CASCADE ;
|
||||||
|
CREATE TABLE phase_2_pk_secteur
|
||||||
|
(
|
||||||
|
id integer,
|
||||||
|
name text,
|
||||||
|
pgr_node_id integer,
|
||||||
|
the_geom geometry(Point,2154),
|
||||||
|
CONSTRAINT phase_2_pk_secteur_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)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- la table qui contient les lignes des routes venant de OSM
|
-- la table qui contient les lignes des routes venant de OSM
|
||||||
DROP TABLE IF EXISTS osm_roads ;
|
DROP TABLE IF EXISTS osm_roads ;
|
||||||
|
|
64
scripts/traitements_phase_2.1.sql
Normal file
64
scripts/traitements_phase_2.1.sql
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
/*
|
||||||
|
==========================================================================
|
||||||
|
|
||||||
|
phase 2 : préparation des données
|
||||||
|
|
||||||
|
==========================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
-- dans la base redadeg on a chargé des données provenant de umap
|
||||||
|
-- ces données sont en 3857. On va les passer en 2154 (Lambert 93).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- ici on fait une grosse requête qui va recaler les PK secteurs sur les nœuds routables
|
||||||
|
-- ça insère les points de secteurs dans la table en 2154
|
||||||
|
|
||||||
|
TRUNCATE TABLE phase_2_pk_secteur ;
|
||||||
|
|
||||||
|
-- on fait une table de base qui contient les relations entre le point à recaler et les poins de référence
|
||||||
|
-- on limite à un buffer de 25
|
||||||
|
WITH candidates AS
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
pk_org.id AS pk_id,
|
||||||
|
pk_org.name AS name,
|
||||||
|
node.id AS node_id,
|
||||||
|
ST_Distance(pk_org.the_geom, ST_ClosestPoint(node.the_geom, pk_org.the_geom)) AS distance,
|
||||||
|
ST_Snap(
|
||||||
|
pk_org.the_geom, -- le point d'origine à recaler
|
||||||
|
ST_ClosestPoint(node.the_geom, pk_org.the_geom), -- le point le plus près dans la couche de nœuds
|
||||||
|
ST_Distance(pk_org.the_geom, ST_ClosestPoint(node.the_geom, pk_org.the_geom))* 1.01 -- dans la distance de ce plus proche point
|
||||||
|
) AS the_geom
|
||||||
|
FROM
|
||||||
|
(SELECT id::integer, name, ST_Transform(the_geom,2154) AS the_geom FROM phase_2_pk_secteur_3857) AS pk_org,
|
||||||
|
(SELECT id, the_geom FROM osm_roads_pgr_vertices_pgr) AS node
|
||||||
|
WHERE
|
||||||
|
ST_INTERSECTS(node.the_geom, ST_BUFFER(ST_Transform(pk_org.the_geom,2154) ,25) )
|
||||||
|
ORDER BY pk_org.id, ST_Distance(pk_org.the_geom, ST_ClosestPoint(node.the_geom, pk_org.the_geom))
|
||||||
|
)
|
||||||
|
-- à partir de cette table on va faire une jointure entre les PK org et les nœuds ramenés par la sous-requête
|
||||||
|
INSERT INTO phase_2_pk_secteur
|
||||||
|
SELECT
|
||||||
|
a.pk_id AS id,
|
||||||
|
a.name,
|
||||||
|
b.node_id AS pgr_node_id,
|
||||||
|
b.the_geom
|
||||||
|
FROM candidates a JOIN
|
||||||
|
(
|
||||||
|
-- on fait une table qui ordonne les points d'accroche
|
||||||
|
SELECT
|
||||||
|
pk_id, node_id,
|
||||||
|
-- le rang va permettre de donner le rang de chaque rapprochement et d'en faire un critère
|
||||||
|
row_number() over (partition by pk_id order by min(distance)) AS rang,
|
||||||
|
min(distance) AS min_distance,
|
||||||
|
the_geom
|
||||||
|
FROM candidates
|
||||||
|
GROUP BY pk_id, node_id, the_geom
|
||||||
|
) b ON a.pk_id = b.pk_id
|
||||||
|
WHERE b.rang = 1
|
||||||
|
GROUP BY a.pk_id, a.name, b.node_id, b.the_geom
|
||||||
|
ORDER BY a.pk_id
|
||||||
|
|
||||||
|
|
32
scripts/traitements_phase_2.sh
Executable file
32
scripts/traitements_phase_2.sh
Executable file
|
@ -0,0 +1,32 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
cd /data/www/vhosts/ar-redadeg_openstreetmap_bzh/htdocs/scripts/
|
||||||
|
|
||||||
|
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
# on récupère les couches geojson depuis umap
|
||||||
|
|
||||||
|
# les couches PK
|
||||||
|
# PK début - fin de secteur
|
||||||
|
curl -sS http://umap.openstreetmap.fr/fr/datalayer/817220/ > data/phase_2_umap_pk_secteur.geojson
|
||||||
|
# PK techniques
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
# on les charge dans postgis
|
||||||
|
# après avoir supprimé les tables
|
||||||
|
|
||||||
|
# note : les coordonnées sont en 3857 mais la déclaration de la table = 4326
|
||||||
|
|
||||||
|
psql -U redadeg -d redadeg -c "DROP TABLE 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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# on crée les tables en 3948 et on fait bien d'autres choses :
|
||||||
|
psql -U redadeg -d redadeg < traitements_phase_2.1.sql
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue