Message posté par : Tonio
----------------------------------------
Bonjour,
J'avais oublié de créer un index spatial sur la nouvelle table.... effectivement ça va beaucoup mieux maintenant ! :)
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=322463#p322463
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
Message posté par : Nicolas Ribot
----------------------------------------
Bonjour,
Avez-vous créé des index spatiaux sur les tables que vous utilisez ?
Nicolas
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=322451#p322451
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
Message posté par : Tonio
----------------------------------------
Bonsoir à tous,
Je manie de nombreux polygones dans une table disposant des colonnes id, surface et geometry. Je souhaiterais réaliser des opérations d'intersection dans le but de classer mes polygones par département.
Le problème c'est que lorsque j'exécute cette requête:
-----------------
Code :
SELECT
region.nom AS region,
sum(data.surface) AS surface_polygone,
count(data.id) AS nb_polygone
FROM departement
JOIN data
ON ST_intersects(data.geom, departement.geom)
GROUP BY departement
-----------------
Postgis se lance dans un calcul de requête interminable. J'ai donc supposé que classer 9 millions de polygones dans des départements pourrait se simplifier.
Je suis parti de l'hypothèse suivante: Si je symbolise tous mes polygones par des points issus de la fonction ST_PointOnSurface, alors je disposerais d'une table qui me permettra de réaliser une requête rapide pour faire une intersection de ces points avec mes départements.
-----------------
Code :
SELECT AddGeometryColumn ('public','data','point_on_surface',2154,'POINT',2);
-----------------
J’obtiens bien une nouvelle table avec un point pour représenter chacun de mes polygones, cependant surprise lorsque je tente à nouveau ma requête pour intersecter mes points avec mes départements je n’ai pas l’impression d’avoir gagné en temps, on est toujours sur un calcul interminable, et pire encore je m’aperçois que projeter mes points sur qgis prend un temps plus long que charger mes polygones.
Je tourne un peu en rond et je dois passer à côté de quelque chose j'imagine.
Est-ce que quelqu’un pourrait me conseiller ?
Je vous remercie d’avance pour votre aide
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=322445#p322445
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
Message posté par : Tonio
----------------------------------------
Bonsoir!
Je vous remercie de vos réponses Christophe et Nicolas!
@ Christophe effectivement dans mon énoncé je n'ai pas placé "FROM" au bon endroit ;)
super pour la requete "select st_unaryunion(unnest(st_clusterintersecting(geom))) as geom
from testpg;"
ça marche nickel!
Bonne soirée
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=322431#p322431
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
Message posté par : Christophe Vergon
----------------------------------------
On en apprend tous les jours !!! Je savais pas que si tu écris SELECT st_clusterintersecting(geom) FROM p il groupait automatiquement les géométries.
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=322421#p322421
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
Message posté par : T. Rossini
----------------------------------------
st_accum n'est en effet pas nécessaire, mais valide,
st_clusterintersectings possèdent deux signatures,
l'une acceptant un setof geometry et l'autre un geometry[].
La seconde est manquante sur la doc...
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=322418#p322418
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
Message posté par : Nicolas Ribot
----------------------------------------
@Christophe: ok ;) Non pas besoin du st_accum je pense: clusterIntersecting renvoie un array de geometryCollection, chaque element du tableau étant l'ensemble des geom en intersection. unnest explose le tableau en geom (geocol) et unaryUnion fait l'union des geom de la collection (dans mon exemple, la couche ne contenait que des polygones)
Nico
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=322416#p322416
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
Message posté par : Christophe Vergon
----------------------------------------
Bonjour,
@Nicolas : je voulais commencer par du simple ;) car la clause FROM était pas vraiment comprise.
NB : un petit st_accum(geom) avant la fonction de cluster c'est mieux non ?
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=322404#p322404
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
Message posté par : Nicolas Ribot
----------------------------------------
Bonjour,
Les "nouvelles" fonctions de postgis de clustering marchent bien dans ce cas. Ici st_clusterIntersecting:
-----------------
Code :
select st_unaryunion(unnest(st_clusterintersecting(geom))) as geom
from testpg;
-----------------
Pas de self-join a faire sur la table, écriture en une seule requête, mais on perd les id (qu'on peut retrouver par assoc spatiale (pointOnSurface) si on le désire).
Nicolas
----------------------------------------
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=322400#p322400
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
Message posté par : Christophe Vergon
----------------------------------------
Bonjour,
Plusieurs points :
st_intersectS(geoma, geomb)
Ensuite il faut un ensemble A : data et un ensemble B : data donc
FROM data as a, data as b et pour éviter de comparer deux géométries équivalentes : WHERE a.id<>b.id
Sachant qu'en l'état vous aurez des doublons car SI geoma intersects geomb ALORS geomb intersects geoma
Résultat :
-----------------
Code :
WITH p as (SELECT a.id,a.geom FROM data a, data b WHERE st_intersects(a.geom,b.geom) AND a.id<>b.id )
SELECT arrayagg(id), st_union(geom) as geom FROM p
-----------------
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=322396#p322396
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