Message posté par : Mathieu Denat
----------------------------------------
Bonjour,
Tout d'abord merci Nico et Preliator pour cet échange qui m'a servi un très grand
nombre de fois! Notamment pour découper des cours d'eau par tronçons de 500m.
L'idée est simple: découper un cours d'eau de l'aval vers l'amont selon
des tronçons de 500 m. Ensuite, je suis amené à compter les entités ou des linéaires ou
des surfaces d'espèces végétales par tronçon.
En général ce script fonctionne sans que je me pose trop de question, mais cette fois ci
c'est l'impasse.
Mon cours d'eau en entrée, fait ~ 25 km de long, je devrais donc obtenir 51 tronçons
(50 x 500m + 1 x moins de 500m à l'amont)
Mon problème est que le script ne génère pas de tronçon de 500 m, et je ne comprend pas
pourquoi...
À l'origine mon cours d'eau est composé de 79 portions (il est issu de la
BDTopage).
À la sortie j'ai toujours mes 79 tronçons, dont la longueur varie de 6 à 650m
environ.
J'uploade en PJ mes données, et voici mon script SQL (j'ai ajouté la longueur des
tronçons pour vérifier ce qui clochait).
Avez-vous une idée de ce qui ne va pas?
Merci d'avance! :)
-----------------
Code :
WITH
boyne AS (
SELECT
cdcourseau,
geom
from referentiel.cours_eau where topooh ilike '%boyne' -- sélection de la Boyne
)
,tmp AS (
SELECT cdcourseau, (st_dump(geom)).path[1] as idln, (st_dump(geom)).geom
from boyne )
-- from outils.cours_eau_simplifie ) --utilisé uniquement dans le cas de cours
d'eau contenant des plans d'eau
,tmp1 AS (
SELECT
cdcourseau,
idln,
floor(st_length(geom) / 500.0)::int as numcut,
(500/st_length(geom)) as frac_500m,
geom
FROM tmp)
,tmp2 as (
SELECT
t.*,
g.cutpos,
g.cutpos * frac_500m as startfraction,
least((g.cutpos * frac_500m) + frac_500m , 1) as endfraction
FROM tmp1 t
CROSS JOIN LATERAL (
SELECT cutpos
FROM generate_series(0, t.numcut) as cutpos
) g )
SELECT st_length(geom) longueur,
t.cdcourseau,
idln, numcut, frac_500m, startfraction, endfraction,
st_linesubstring(geom, startfraction, endfraction) as geom,
concat(cdcourseau,'-',to_char(row_number() over (),'FM000'))
id_troncon
FROM tmp2 t
order by 1 --id_troncon
-----------------
----------------------------------------
Ce message est accompagné de fichiers, pour les télécharger, suivre le lien ci-dessous.
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=346409#p346409
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net