Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

GeoRezo vous rend service, faites un don!

Merci à tous pour votre fidélité.

L'équipe GeoRezo

#1 mer. 15 mars 2017 12:28

MonsieurJ
Membre
Lieu: Montpellier
Date d'inscription: 8 déc. 2016
Messages: 22

[PostgreSQL/PostGIS] Optimisation d'une requête SQL

Bonjour tout le monde,

Je vous explique mon problème, je dois réaliser un découpage d'un résultat de classification spectrale par un ensemble de polygone. Pour réaliser ça, j'avais en amont découpé l'image à classifié selon l'emprise de ces polygones (couche vecteur rassembler en un seul multipolygo pour réaliser le découpage) mais ils sont parfois (souvent) sous-découpé (ou alors plusieurs polygone sont collé, selon la manière dont vous voulez le voir).
En gros une zone découpé de mon image ressemblant à un carré est généralement faite à partir de plusieurs polygones quelconques rassemblés. Mon but étant de découper le résultat (vectoriser) de ma classification selon ces polygones quelconques et non pas selon les rassemblement (comme le résultat de la classification l'est)

Vous me suivez toujours ?

Tout ceci ce trouve dans une base postgreSQL/PostGIS, et j'aimerai faire ça en SQL et non pas avec un logiciel de SIG.
Les tables sont :
- polygone_de_decoupage (2171 tuples)
- resultat_de_scp (1.073.930 tuples)
(J'ai fais une validation de topologie en amont.)

Pour réaliser ce découpage j'ai créé ce script :

Code:

CREATE TABLE resultat_de_scp_decoupe AS (
    SELECT
        a.e_id,
        b.c_id,
        ST_CollectionExtract(ST_INTERSECTION (a.geom, b.geom), 3) AS geom
    FROM
        polygone_de_decoupage AS a,
        resultat_de_scp AS b
);

La requête me permet bien d'avoir le résultat escompté,quand je la test sur un nombre de tuple plus réduit, mais quand c'est sur l’échantillon total, elle s’arrête après plus de 24h d’exécution pour cause de surcharge du disque dur, alors que celui-ci à un peu plus de 700Go d'espace libre.

Je cherche donc un peu d'aide concernant l'optimisation de cette requête.

Merci d'avance pour les réponse.

Hors ligne

 

#2 mer. 15 mars 2017 13:57

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 janv. 2006
Messages: 1028
Site web

Re: [PostgreSQL/PostGIS] Optimisation d'une requête SQL

Bonjour,

une clause

Code:

WHERE ST_INTERSECTS (a.geom, b.geom)

accélérera grandement la calcul (penser à indexer les colonnes géométriques)

Dans votre calcul, PostgreSQL calcule  2171 x 1073930 intersections, même si celles-ci n'ont pas lieu d'être calculées.

J'en profite pour déplacer ce message dans le forum GeoBD.


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#3 mer. 15 mars 2017 14:40

MonsieurJ
Membre
Lieu: Montpellier
Date d'inscription: 8 déc. 2016
Messages: 22

Re: [PostgreSQL/PostGIS] Optimisation d'une requête SQL

Merci Mathieu,

Merci pour l'aide sur la requête, quatre mots vienne de me sauver. Merci pour le déplacement en bonne section aussi, désolé je n'ai pas encore incorporer toutes les section du forum.

Hors ligne

 

#4 mer. 15 mars 2017 16:17

JP LLORENS
Membre
Lieu: Villeneuve-sur-Lot
Date d'inscription: 12 nov. 2008
Messages: 168

Re: [PostgreSQL/PostGIS] Optimisation d'une requête SQL

Bonjour.
Je suppose que l''ajout de l'opérateur && pour tester les bounding box avant le st_intersects devrait permettre de gagner du temps

Code:

WHERE a.geom&&b.geom and ST_INTERSECTS (a.geom, b.geom)

Cordialement
JP

Hors ligne

 

#5 mer. 15 mars 2017 16:33

JP LLORENS
Membre
Lieu: Villeneuve-sur-Lot
Date d'inscription: 12 nov. 2008
Messages: 168

Re: [PostgreSQL/PostGIS] Optimisation d'une requête SQL

Correction :
le st_intersects teste déjà les bounding box.
L'opérateur && n'apporte donc rien !
J'aurais du relire la doc avant de répondre. Désolé !
JP

Hors ligne

 

Pied de page des forums

Powered by FluxBB

Partagez  |