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 Wed 01 June 2016 15:20

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3199
Site web

st_clusterwithin

Bonjour,

J'ai une table qui comporte plusieurs milliers de polygones,

Je fais une requête comme suit, sous pgadmin 2.22 et

"POSTGIS="2.2.0 r14208" GEOS="3.5.0-CAPI-1.9.0 r4090" PROJ="Rel. 4.9.1, 04 March 2015" GDAL="GDAL 2.0.1, released 2015/09/15" LIBXML="2.7.8" LIBJSON="0.12" TOPOLOGY RASTER"


Code:

SELECT st_extractcollection(unnest(st_clusterwithin(st_accum(geom),50)),3)
FROM matable WHERE gid>0 AND gid<100

Au bout de quelques seconde j'ai mon résultat.

Si je passe la condition à gid<10000 la requête fait planter le serveur pg, arrêt du service!!!! (j'ai lancé juste clusterwithin sur ma table totale et il a planté aussi au bout de 10 mm)

C'est le st_clusterwithin qui plante mais pourquoi ?

Question subsidiaire comment je fais l'upgrade vers postgis 2.2 à chaud, quand je charge le fichier d'install postgis 2.2.2 je ne vois pas comment faire après ...


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#2 Wed 01 June 2016 16:37

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

Re: st_clusterwithin

Bonjour,

Il me semble avoir vu passer qqch sur la liste postgis a ce sujet: plantage avec clusterWithin.
Il me semble aussi que ce sujet a ete abordé au dernier code sprint OSGEO a Paris (Merci Oslandia smile ): la personne responsable de cette fonction été présente. La toute derniere version de Postgis (trunk peut etre) comporte peut etre des améliorations.

Pour la MAJ de Postgis, si l'installation a été faite par extension, tu peux faire ca:

Code:

ALTER EXTENSION postgis 
 UPDATE TO "2.2.2";

Nicolas

Hors ligne

 

#3 Wed 01 June 2016 17:38

VianneyD
Participant assidu
Date d'inscription: 30 May 2011
Messages: 153

Re: st_clusterwithin

Bonjour,

Une autre suggestion...
As-tu essayé de changer la distance du ST_ClusterWithin ?
Peut-être que le temps de calcul en dépend : plus la distance est faible, plus le nombre de grappes à calculer est élevé...

(Au passage, c'est ST_CollectionExtract et non ST_ExtractCollection... smile )


Vianney Dugrain

Hors ligne

 

#4 Wed 01 June 2016 19:15

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3199
Site web

Re: st_clusterwithin

Bonsoir

Au passage, c'est ST_CollectionExtract et non ST_ExtractCollection... smile )


Preuve que c'est pas du copier coller smile

Non j'ai mis une distance en mètre sans prendre en compte ce paramètre sous l'aspect temps de calcul. En fait ma problématique est la suivante ces n polygones sont de tailles et de formes différentes parfois complexes, ils représentent 30 % d'un territoire en se répartissant uniquement sur les deux tiers. L'idée est de créer des grappes de polygones semblables adjacents. Une approche clusterwithin couplée à une répartition dans des tables distinctes des classes de polygones en fonction des surfaces.Je veux préserver certaines caractéristiques en fonction des zones. J'ai aussi abordé la chose avec une carte de chaleur mais le rendu régional n'est pas bon, il faut là aussi définir un maillage plus fin et cela oblige à travaillé avec le centroïde des polygones rendu moins "parlant". La méthode précédentes est une première approche l'ajout d'un zonage à main levée pour appliquer une intersection préalable réduira encore les temps de calcul et permettra de moduler la distance.

Nicolas le problème c'est qu'une fois chargé et dézipé le fichier d'install j'en fais quoi des fichiers pour que pg comprenne où charger l'extension.

Merci à tous les deux.


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#5 Wed 01 June 2016 19:51

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

Re: st_clusterwithin

Bonsoir,

Tu es sous win ou *nix ?

Normalement, une fois l'installation de postgis effectuée, les fichiers sont copiés dans les répertoires d'installation de PG utilisé pour installer PostGIS.

Sous mac par exemple, si je compile à la main Postgis dans un repertoire quelconque (en disant que je veux le compiler pour mon PG 9.5), puis que j'installe postgis, les fichiers postgis sont copiés dans les différents répertoires pg:

Note que je n'ai pas mis tous les fichiers dans cet exemple: dans le répertoire "extension" de pg, il y a un fichier d'extension pour chaque version gérée par l'extension en question: le fichier principal (postgis-2.2.2.sql) et tous les fichiers permettant de mettre à jour l'extension, c'est à dire de passer d'une version à une autre.

Sous windows c'est pareil: l'installeur .exe copie les fichiers postgis dans le répertoire postgresql. En revanche, si tu as l'archive avec les fichiers binaires, il faut les copier à la main dans les répertoires PG (le readme doit indiquer cela je pense)

Code:

pgsql-9.5/lib/postgis-2.2.so
pgsql-9.5/lib/postgis_topology-2.2.so
pgsql-9.5/lib/rtpostgis-2.2.so
pgsql-9.5/share/contrib/postgis-2.2/legacy_gist.sql
pgsql-9.5/share/contrib/postgis-2.2/postgis.sql
pgsql-9.5/share/contrib/postgis-2.2/postgis_comments.sql
pgsql-9.5/share/contrib/postgis-2.2/postgis_restore.pl
pgsql-9.5/share/contrib/postgis-2.2/postgis_upgrade.sql
pgsql-9.5/share/contrib/postgis-2.2/rtpostgis.sql
pgsql-9.5/share/contrib/postgis-2.2/rtpostgis_legacy.sql
pgsql-9.5/share/contrib/postgis-2.2/rtpostgis_upgrade.sql
pgsql-9.5/share/contrib/postgis-2.2/uninstall_postgis.sql
pgsql-9.5/share/contrib/postgis-2.2/uninstall_rtpostgis.sql
pgsql-9.5/share/extension/postgis--2.1.9--2.2.1.sql
pgsql-9.5/share/extension/postgis--2.2.0--2.2.0next.sql
pgsql-9.5/share/extension/postgis--2.2.0--2.2.1.sql
pgsql-9.5/share/extension/postgis--2.2.0.sql
pgsql-9.5/share/extension/postgis--2.2.0next--2.2.0.sql
pgsql-9.5/share/extension/postgis--2.2.0rc1--2.2.0.sql
pgsql-9.5/share/extension/postgis--2.2.1--2.2.1next.sql
pgsql-9.5/share/extension/postgis--2.2.1.sql
pgsql-9.5/share/extension/postgis--2.2.1next--2.2.1.sql
pgsql-9.5/share/extension/postgis--unpackaged--2.2.0.sql
pgsql-9.5/share/extension/postgis--unpackaged--2.2.1.sql
pgsql-9.5/share/extension/postgis.control
pgsql-9.5/share/extension/postgis_sfcgal--2.2.0--2.2.1.sql
pgsql-9.5/share/extension/postgis_sfcgal--2.2.0.sql
pgsql-9.5/share/extension/postgis_sfcgal--2.2.0next--2.2.0.sql
pgsql-9.5/share/extension/postgis_sfcgal--2.2.0rc1--2.2.0.sql
pgsql-9.5/share/extension/postgis_sfcgal--2.2.1--2.2.1next.sql
pgsql-9.5/share/extension/postgis_sfcgal--2.2.1.sql
pgsql-9.5/share/extension/postgis_sfcgal--2.2.1next--2.2.1.sql
pgsql-9.5/share/extension/postgis_sfcgal--unpackaged--2.2.0.sql
pgsql-9.5/share/extension/postgis_sfcgal--unpackaged--2.2.1.sql
pgsql-9.5/share/extension/postgis_sfcgal.control
pgsql-9.5/share/extension/postgis_tiger_geocoder--2.2.1.sql
pgsql-9.5/share/extension/postgis_tiger_geocoder--2.2.1next--2.2.1.sql
pgsql-9.5/share/extension/postgis_tiger_geocoder--unpackaged--2.2.0.sql
pgsql-9.5/share/extension/postgis_tiger_geocoder--unpackaged--2.2.1.sql
pgsql-9.5/share/extension/postgis_tiger_geocoder.control
pgsql-9.5/share/extension/postgis_tiger_geocoder.sql
pgsql-9.5/share/extension/postgis_topology--2.2.0--2.2.1.sql
pgsql-9.5/share/extension/postgis_topology--2.2.0.sql
pgsql-9.5/share/extension/postgis_topology--2.2.0next--2.2.0.sql
pgsql-9.5/share/extension/postgis_topology--2.2.0rc1--2.2.0.sql
pgsql-9.5/share/extension/postgis_topology--2.2.1--2.2.1next.sql
pgsql-9.5/share/extension/postgis_topology--2.2.1.sql
pgsql-9.5/share/extension/postgis_topology--2.2.1next--2.2.1.sql
pgsql-9.5/share/extension/postgis_topology--unpackaged--2.2.0.sql
pgsql-9.5/share/extension/postgis_topology--unpackaged--2.2.1.sql
pgsql-9.5/share/extension/postgis_topology.control

Nico

Hors ligne

 

#6 Fri 03 June 2016 15:37

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3199
Site web

Re: st_clusterwithin

Bonjour,

Merci Nicolas § Tumasgiu m'a réglé le problème à son retour de congés.

Pour revenir sur mon problème. J'ai classé les polygones par ordre de surface. 5 tables avec les polygones <500 m², entre 500 et 2000 etc ...
utilisation de st_clusterwithin sur la table des plus grande surfaces (>50 ha). Puis génération des enveloppes avec concavhull(). Suppression dans les autres tables des polygones de plus petites surface contenus dans les enveloppe. Puis application des mêmes principes pour les tables suivantes.
Cela permet de limiter les temps de calcul et de faire varier la distance pour la création des grappes en fonction des surfaces.
Il m'a juste fallu intervenir manuellement avec QGis pour modifier le contour de quelques enveloppes.

Dès que j'ai fini je posterai la carto initiale et la carto résultante.

Merci à vous deux.


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#7 Fri 03 June 2016 21:14

dbaston
Juste Inscrit !
Lieu: Montpelier
Date d'inscription: 3 Jun 2016
Messages: 7
Site web

Re: st_clusterwithin

Bonjour,

Nicolas Ribot a écrit:

Il me semble avoir vu passer qqch sur la liste postgis a ce sujet: plantage avec clusterWithin.
Il me semble aussi que ce sujet a ete abordé au dernier code sprint OSGEO a Paris (Merci Oslandia smile ): la personne responsable de cette fonction été présente. La toute derniere version de Postgis (trunk peut etre) comporte peut etre des améliorations.


C'est moi le coupable...

Si possible, je vous conseille fortement d'installer la version 2.2.2.  Non seulement pour que ça évite de planter votre serveur, mais aussi parce qu'il y a une très importante amélioration de performance.  En fait la version 2.2.0 n'utilise pas d'index, ce qui explique le temps de calcul excessif quand le nombre de grappes s'augmente.

Daniel

Dernière modification par dbaston (Fri 03 June 2016 22:14)

Hors ligne

 

#8 Sat 04 June 2016 01:42

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3199
Site web

Re: st_clusterwithin

Bonsoir,

Merci à vous

En fait la version 2.2.0 n'utilise pas d'index, ce qui explique le temps de calcul excessif quand le nombre de grappes s'augmente.


C'est fait smile
En plus cela corrige quelques soucis sur la topologie.


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#9 Mon 06 June 2016 15:44

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3199
Site web

Re: st_clusterwithin

Bonjour,

Ci-joint deux cartes.

La carte 1 représente l'ensemble des polygones définissant une catégorie de parcelles.

La carte 2 représente ces mêmes parcelles en trois classes.

Superficie 1 à 5000 m², 5001 à 50 000 et sup 50 000 m².

Résumé des opérations

A partir de la classe 3 (sup 50 000) génération de grappes avec st_clusterwithin distance 100 m.
Génération d'enveloppes avec st_concavhull (0.99)
Suppression des polygones de classe 2 et 1 qui sont géométriquement inclus dans les enveloppes.
Génération de grappes pour classe 2 avec distance 100 m
etc ...
Génération grappes classe 1 distance 30 m

etc ...


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

Pied de page des forums

Powered by FluxBB