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 !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Sun 29 March 2015 14:40

apatride
Juste Inscrit !
Date d'inscription: 28 Mar 2015
Messages: 5

POSTGIS - Problème de différence

Bonjour,

Je cherche à construire un (des) polygone délimitant le domaine public.
Pour le construire, je "soustrais" les contours du domaine privé au contour de la commune.

Pour une commune test (arcachon), je fusionne les parcelles [BDparcellaire]:

CREATE table prive AS (
SELECT
  (ST_Dump(ST_Union(parcelle.geom))).geom AS geom
FROM parcelle);


puis :

create table toto WITH OIDS as (
SELECT
  (ST_Dump(ST_Difference(commune.geom, prive.geom))).geom as geom
FROM commune, prive);


J'utilise ST_Dump pour décomposer les multipolygones le cas échéant.

=> Quelque chose ne va pas car QGIS n'arrive pas à afficher le résultat; je suis obligé de le "tuer" car l'application est gelée.

Merci d'avance pour toute aide.
JL


Seuls ceux qui ont la mémoire longue sont capables de penser l'avenir.

Hors ligne

 

#2 Mon 30 March 2015 10:53

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1554

Re: POSTGIS - Problème de différence

Bonjour,

Il n'est pas nécessaire de fusionner les parcelles avant de faire la différence entre les couches.
Le probleme avec un seul gros polygone est qu'il ne permet pas l'usage des index spatiaux: il couvre toute la zone => les index ne servent a rien.

Essayez la différence en gardant les parcelles initiales.

Ensuite, la différence entre deux polygones peut renvoyer toute sorte de géometrie (point, ligne, pg, collection)
Si la couche cible doit contenir des polygones, il faut le forcer dans la requete de différence:

Code:

... st_multi(st_collectionExtract(st_makeValid((ST_Dump(ST_Difference(commune.geom, prive.geom)).geom)), 3) as geom

Correction (st_makeValid) des surface, extraction (collectionExtract), forcage en multipolygone pour avoir un seul type geo dans la colonne

Suivant la configuration des données, a faire avant ou après le dump.

Nicolas

Hors ligne

 

#3 Mon 30 March 2015 12:18

apatride
Juste Inscrit !
Date d'inscription: 28 Mar 2015
Messages: 5

Re: POSTGIS - Problème de différence

Bonjour,

La requête suggérée (que je n'aurais jamais imaginée) me retourne plus de 7000 lignes.
J'en attendrais une poignée (environ le nombre de voies non connectées).
Cette solution n'est pas exploitable dans QGIS, le chargement est très long.

Une autre suggestion ?
Merci.

A.


Seuls ceux qui ont la mémoire longue sont capables de penser l'avenir.

Hors ligne

 

#4 Mon 30 March 2015 13:29

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1233
Site web

Re: POSTGIS - Problème de différence

Bonjour,

dans votre requête il ne faut demander la différence que si vos objets sont en intersection ;-)

Code:

WHERE ST_Interscects(commune.geom, prive.geom)

Parc cntre ce ne sont pas 7000 ligne qui font peur à QGis. Peut-être plutôt la complexité des objets retournés ?

Dernière modification par MathieuB (Mon 30 March 2015 13:31)


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

Pied de page des forums

Powered by FluxBB