Message posté par : Nicolas Granier
----------------------------------------
Bonjour,
Même avec des index spatiaux ce genre de requête c'est l'enfer en temps de
traitement.
Il vous faut faire une sous requete pour appliquer un premier filtre avec l'opérateur
WITH
un exemple pour vous inspirer
-----------------
Code :
create table "decoupage_route" as (
with mpoint_by_line as (
select l.id as lgid, (st_collect(st_expand(p.the_geom, 0.1))) as cut,
st_collect(p.the_geom) as geom
from "routing_graphe_vertices_pgr" p, "routing_graphe" l
where st_dwithin(l.the_geom, p.the_geom, 0.2)
group by l.id
) select l.id, l.principal,(st_dump(st_snap(st_difference(l.the_geom, mp.cut), mp.geom,
0.1))).geom as the_geom
from mpoint_by_line mp, "routing_graphe" l
where mp.lgid = l.id)
-----------------
Vous créez une couche temporaire qui est un filtre sur les entités géographiques et qui va
pré-associer un élément de votre couche 1 avec les éléments à proximité de la couche 2
avec la requete ST_Dwithin (très rapide) et sur cette couche temporaire vous faite votre
traitement lourd avec ST_difference.
A+
Nicolas GRANIER
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=335217#p335217
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