Changes between Version 27 and Version 28 of import layers postgis


Ignore:
Timestamp:
Jul 11, 2018 1:10:41 PM (7 years ago)
Author:
cedric
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • import layers postgis

    v27 v28  
    197197{{{#!sql 
    198198CREATE EXTENSION ltree; 
    199 }}} 
     199ALTER TABLE spain.oria_a_rios_v2 ADD COLUMN chemin ltree; 
     200CREATE INDEX chemin_gist_oria_idx ON spain.oria_a_rios_v2 USING GIST(chemin); 
     201CREATE INDEX chemin_oria_idx ON spain.oria_a_rios_v2 USING btree(chemin); 
     202 
     203 
     204 
     205-- WHAT IS THE MOST DOWNSTREAM SEGMENT ? 
     206 
     207-- reprojection of the wise layer 
     208-- still a bit far 
     209create view european_wise2008.coastal_waters_25830 as select gid, code, name, st_transform(the_geom,25830) as geom from 
     210european_wise2008.costal_waters 
     211where cty_id='ES'; 
     212 
     213st_distance(c.geom, r.geom) 
     214 
     215 
     216-- renvoit l'id du point le plus proche de la mer 
     217select id from ( 
     218select v.id, st_distance(c.geom, v.the_geom) as dist  from  
     219european_wise2008.coastal_waters_25830 c JOIN 
     220spain.oria_a_rios_v2_vertices_pgr v ON 
     221ST_DWithin(c.geom, v.the_geom, 1000)) jointure 
     222order by dist limit 1 
     223 
     224 
     225--calcule le nombre de lignes de la table 
     226Select count(*) from spain.oria_a_rios_v2 ; 
     227select * from spain.oria_a_rios_v2 limit 10; 
     228select * from spain.oria_a_rios_v2 where target=6 
     229 
     230-- this query returns the ltree  
     231"1003714113.1003714115.1003714117(...)" 
     232 
     233SELECT text2ltree(string_agg(pfafcuen, '.')) AS pfafcuenlist   
     234FROM (SELECT pfafcuen FROM pgr_dijkstra( 
     235   'SELECT gid as id, source, target, st_length(geom) as cost FROM spain.oria_a_rios_v2', 
     236   5, 
     237   540, 
     238  FALSE 
     239)  pt 
     240JOIN spain.oria_a_rios_v2 r ON pt.edge = r.gid order by seq) sub 
     241 
     242 
     243-- function to create ltree from two nodes from and to 
     244DROP function get_path(integer,integer); 
     245CREATE OR REPLACE FUNCTION spain.get_path(_from integer, _to integer) 
     246RETURNS SETOF ltree AS 
     247$$ 
     248BEGIN 
     249RETURN QUERY  
     250SELECT text2ltree(string_agg(pfafcuen, '.')) AS pfafcuenlist   
     251FROM (SELECT pfafcuen FROM pgr_dijkstra( 
     252   'SELECT gid as id, source, target, st_length(geom) as cost FROM spain.oria_a_rios_v2', 
     253   _from, 
     254   _to, 
     255  FALSE 
     256)  pt 
     257JOIN spain.oria_a_rios_v2 r ON pt.edge = r.gid order by seq) sub; 
     258 
     259END 
     260$$ 
     261LANGUAGE plpgsql VOLATILE; 
     262 
     263select spain.get_path(5,540); 
     264 
     265 
     266 
     267 
     268SELECT seq, node, edge, agg_cost, gid, pfafcuen 
     269FROM pgr_dijkstra( 
     270   'SELECT gid as id, source, target, st_length(geom) as cost FROM spain.oria_a_rios_v2', 
     271   5, 
     272   540, 
     273  FALSE 
     274)  pt 
     275JOIN spain.oria_a_rios_v2 r ON pt.edge = r.gid order by seq; 
     276 
     277UPDATE spain.oria_a_rios_v2 set chemin=get_path(6,540) where source=540 
     278 
     279 
     280/* 
     281didn't work but keep it for later checking 
     282-- rio the most downstream 
     283with pfaf_length as ( 
     284select length(pfafrio) l,pfafrio from spain.oria_a_rios_v2) 
     285select pfafrio from pfaf_length order by l limit 1 
     286-- removing the rio 
     287 
     288with shortened_pfaf as ( 
     289select regexp_replace(pfafcuen,'1003714','') pfaf_short from spain.oria_a_rios_v2) 
     290select substring(pfaf_short,1,3) from shortened_pfaf 
     291 
     292select substring (1,2, 
     293*/ 
     294select format('Select count(*) FROM %1$I','toto')  
     295/* 
     296TODO test that the routing algorythm always set the most downstream point as a target ... 
     297If so develop a formal testing within the function 
     298*/ 
     299 
     300CREATE TYPE resum AS (source int, pfafcuen character varying(254)); 
     301 
     302drop if exists function spain.create_path(regclass,integer); 
     303CREATE OR REPLACE FUNCTION spain.create_path(_nametable regclass, downstream_point integer)  
     304RETURNS integer AS 
     305$$ 
     306DECLARE 
     307nrow int; 
     308row resum%rowtype; 
     309BEGIN 
     310EXECUTE 'Select count(*) FROM '|| _nametable INTO nrow; 
     311 for row in EXECUTE 'select source, pfafcuen from '|| _nametable  
     312   LOOP   
     313                EXECUTE 'UPDATE '||_nametable||' t set chemin= 
     314                spain.get_path('||downstream_point||',source) where t.source=source'; 
     315                RAISE NOTICE 'Calculation for %', row.pfafcuen;                 
     316                end loop; 
     317return nrow; 
     318 
     319END 
     320$$ 
     321LANGUAGE plpgsql VOLATILE; 
     322 
     323 
     324select spain.create_path('spain.oria_a_rios_v2',6); 
     325select source from spain.oria_a_rios_v2 where pfafcuen='10037141142' 
     326select spain.get_path(6,40) 
     327Select count(*) FROM spain.oria_a_rios_v2 
     328 
     329select * from downstream_segments('10037146457'); 
     330 
     331Select * FROM spain.oria_a_rios_v2 limit 10 
     332 
     333}}}