#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 ): 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... )
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
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
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 ): 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
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 ...
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne