199 | | }}} |
| 199 | ALTER TABLE spain.oria_a_rios_v2 ADD COLUMN chemin ltree; |
| 200 | CREATE INDEX chemin_gist_oria_idx ON spain.oria_a_rios_v2 USING GIST(chemin); |
| 201 | CREATE 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 |
| 209 | create view european_wise2008.coastal_waters_25830 as select gid, code, name, st_transform(the_geom,25830) as geom from |
| 210 | european_wise2008.costal_waters |
| 211 | where cty_id='ES'; |
| 212 | |
| 213 | st_distance(c.geom, r.geom) |
| 214 | |
| 215 | |
| 216 | -- renvoit l'id du point le plus proche de la mer |
| 217 | select id from ( |
| 218 | select v.id, st_distance(c.geom, v.the_geom) as dist from |
| 219 | european_wise2008.coastal_waters_25830 c JOIN |
| 220 | spain.oria_a_rios_v2_vertices_pgr v ON |
| 221 | ST_DWithin(c.geom, v.the_geom, 1000)) jointure |
| 222 | order by dist limit 1 |
| 223 | |
| 224 | |
| 225 | --calcule le nombre de lignes de la table |
| 226 | Select count(*) from spain.oria_a_rios_v2 ; |
| 227 | select * from spain.oria_a_rios_v2 limit 10; |
| 228 | select * from spain.oria_a_rios_v2 where target=6 |
| 229 | |
| 230 | -- this query returns the ltree |
| 231 | "1003714113.1003714115.1003714117(...)" |
| 232 | |
| 233 | SELECT text2ltree(string_agg(pfafcuen, '.')) AS pfafcuenlist |
| 234 | FROM (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 |
| 240 | JOIN 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 |
| 244 | DROP function get_path(integer,integer); |
| 245 | CREATE OR REPLACE FUNCTION spain.get_path(_from integer, _to integer) |
| 246 | RETURNS SETOF ltree AS |
| 247 | $$ |
| 248 | BEGIN |
| 249 | RETURN QUERY |
| 250 | SELECT text2ltree(string_agg(pfafcuen, '.')) AS pfafcuenlist |
| 251 | FROM (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 |
| 257 | JOIN spain.oria_a_rios_v2 r ON pt.edge = r.gid order by seq) sub; |
| 258 | |
| 259 | END |
| 260 | $$ |
| 261 | LANGUAGE plpgsql VOLATILE; |
| 262 | |
| 263 | select spain.get_path(5,540); |
| 264 | |
| 265 | |
| 266 | |
| 267 | |
| 268 | SELECT seq, node, edge, agg_cost, gid, pfafcuen |
| 269 | FROM 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 |
| 275 | JOIN spain.oria_a_rios_v2 r ON pt.edge = r.gid order by seq; |
| 276 | |
| 277 | UPDATE spain.oria_a_rios_v2 set chemin=get_path(6,540) where source=540 |
| 278 | |
| 279 | |
| 280 | /* |
| 281 | didn't work but keep it for later checking |
| 282 | -- rio the most downstream |
| 283 | with pfaf_length as ( |
| 284 | select length(pfafrio) l,pfafrio from spain.oria_a_rios_v2) |
| 285 | select pfafrio from pfaf_length order by l limit 1 |
| 286 | -- removing the rio |
| 287 | |
| 288 | with shortened_pfaf as ( |
| 289 | select regexp_replace(pfafcuen,'1003714','') pfaf_short from spain.oria_a_rios_v2) |
| 290 | select substring(pfaf_short,1,3) from shortened_pfaf |
| 291 | |
| 292 | select substring (1,2, |
| 293 | */ |
| 294 | select format('Select count(*) FROM %1$I','toto') |
| 295 | /* |
| 296 | TODO test that the routing algorythm always set the most downstream point as a target ... |
| 297 | If so develop a formal testing within the function |
| 298 | */ |
| 299 | |
| 300 | CREATE TYPE resum AS (source int, pfafcuen character varying(254)); |
| 301 | |
| 302 | drop if exists function spain.create_path(regclass,integer); |
| 303 | CREATE OR REPLACE FUNCTION spain.create_path(_nametable regclass, downstream_point integer) |
| 304 | RETURNS integer AS |
| 305 | $$ |
| 306 | DECLARE |
| 307 | nrow int; |
| 308 | row resum%rowtype; |
| 309 | BEGIN |
| 310 | EXECUTE '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; |
| 317 | return nrow; |
| 318 | |
| 319 | END |
| 320 | $$ |
| 321 | LANGUAGE plpgsql VOLATILE; |
| 322 | |
| 323 | |
| 324 | select spain.create_path('spain.oria_a_rios_v2',6); |
| 325 | select source from spain.oria_a_rios_v2 where pfafcuen='10037141142' |
| 326 | select spain.get_path(6,40) |
| 327 | Select count(*) FROM spain.oria_a_rios_v2 |
| 328 | |
| 329 | select * from downstream_segments('10037146457'); |
| 330 | |
| 331 | Select * FROM spain.oria_a_rios_v2 limit 10 |
| 332 | |
| 333 | }}} |