Message posté par : Brindavoine
----------------------------------------
Aloha
Je souhaite calculer une propagation depuis des sources en utilisant mon graphe. In
extenso, où se situent les limites d'un isochrone pour chacune des sources. Les
sources ne sont pas sur le graphe, mais en dehors.
Je crée mon graphe sans problème.
Je crée une table contenant les données de rattachement de mes sources au graphe
-----------------
Code :
create table exo.psource as
(with poi as (
select p.gid as gid_pt,
p."q (m3/h)" as debit,
p.volume as volume,
p.geom
from exo.epi p
)
SELECT
poi.gid_pt::int4,
poi.volume::int8,
poi.debit::int4,
closest_tr.gid::int4,
closest_tr.dist::double precision,
st_linelocatepoint(closest_tr.geom, poi.geom)::double precision as fraction
FROM poi
LEFT JOIN LATERAL
(SELECT
t.gid,
ST_Distance(t.geom, poi.geom) as dist,
t.geom
FROM exo.troncon t
ORDER BY poi.geom <-> t.geom
LIMIT 1
) AS closest_tr
ON TRUE
)
-----------------
Après j'exécute la requête suivante pour récupérer les sommets situés à moins de 200m
de mes sources :
(Je me suis inspiré de ces articles :
présentation foss4g
(
https://osgeo-fr.github.io/presentations_foss4gfr/2016/J1/20160511_FOSS4G_F…)
une question sur gis stackeexchange
(
https://gis.stackexchange.com/questions/136403/postgis-nearest-points-with-…)
un post de bostongis
(
https://www.bostongis.com/blog/index.php?/categories/7-nearest-neighbor)
article sur geoafrica (
https://geoafrica.fr/laccessibilite-multimodale-en-isochrones/)
)
-----------------
Code :
select
pgr.*,
t vp.the_geom
from
pgr_withPointsDD(
'select gid AS id, nsource::int4 AS source, ncible::int4 AS target,
st_length(geom)::float8 AS cost, st_length(geom)::float8 as reverse_cost
from exo.troncon'::text, 'select gid_pt as pid, gid as edge_id, fraction from
exo.source'::text,
(
select
array_agg(exo.source.gid_pt order by gid_pt asc) from exo.source
) , -- un array de tous les id de mes sources
200
,
details := true
) pgr
left join exo.troncon_vertices_pgr tvp on tvp.id = pgr.node
-----------------
Le résultat semble correct lorsque je l'affiche dans mon sig (préféré) (cf capture).
Sauf que pour quelques sources, je vois bien que le tronçon le plus proche n'a pas été
parcouru dans les deux sens et que des sommets qui devraient ressortir en résultat n'y
sont pas.
Qu'ai-je loupé ?
Aucun sommet n'étant situé pile à la distance demandée, comment ajouter les parties de
tronçons supplémentaires pour arriver à la distance exacte ?
Mes sources sont elles même à une certaine distance des tronçons, comment exploiter
l'information dist de la table pour réduire d'autant la distance parcourue sur les
tronçons ?
Je suis sûr que la solution à ce problème pourrait bénéficier à plein de personnes qui ont
à résoudre ce type de problème.
D'avance, merci pour vos conseils
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=336756#p336756
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