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 Tue 25 July 2017 16:07

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 995

[PostGis] Résultats étranges de "ST_SimplifyPreserveTopology"

Bonjour à tous,

Afin d'avoir un affichage web fluide d'une couche de communes (polygones) exportée en GeoJson (ST_AsGeoJSON*), je souhaite simplifier les géométries avec "ST_SimplifyPreserveTopology()" : http://www.postgis.org/docs/ST_Simplify … ology.html
Malheureusement, le résultat n'est pas du tout "topologique", loin de là (cf. capture d'écran QGis en pièce jointe).
Voila la requête pour cet exemple :

Code:

SELECT    c.insee,
          ST_SimplifyPreserveTopology(c.the_geom,100)
FROM      communes c

Mais j'ai essayé avec plusieurs tolérances de simplification, et même très faible, ce n'est pas topologique...

Une idée de la cause du problème ?

Merci à vous !

Sylvain M.


* au final, via cette requête :

Code:

ST_AsGeoJSON(ST_Transform(ST_SimplifyPreserveTopology(c.the_geom,100),4326),6) as geojson

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

Sylvain M.

Hors ligne

 

#2 Tue 25 July 2017 16:12

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 995

Re: [PostGis] Résultats étranges de "ST_SimplifyPreserveTopology"

En poursuivant mes recherches, je découvre ce sujet que je vais lire en détail : https://trac.osgeo.org/postgis/wiki/Use … opologyExt
Pas si simple la topologie wink


Sylvain M.

Hors ligne

 

#3 Tue 25 July 2017 16:46

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 995

Re: [PostGis] Résultats étranges de "ST_SimplifyPreserveTopology"

N'ayant pas la possibilité d'ajouter le module Topologie de PostGis (je ne veux pas mettre le bazar dans une base de donnée dont je ne suis pas le créateur), je m'en suis sorti avec cette requête :

Code:

CREATE TABLE communes_simpli AS
with poly as (
        select insee, (st_dump(the_geom)).* 
        from communes
) select d.insee, baz.geom 
 from ( 
        select (st_dump(st_polygonize(distinct geom))).geom as geom
        from (
                select (st_dump(st_simplifyPreserveTopology(st_linemerge(st_union(geom)), 100))).geom as geom
                from (
                        select st_exteriorRing((st_dumpRings(geom)).geom) as geom
                        from poly
                ) as foo
        ) as bar
) as baz,
poly d
where st_intersects(d.geom, baz.geom)
and st_area(st_intersection(d.geom, baz.geom))/st_area(baz.geom) > 0.5;

Expliquée ici dans le détail : https://trac.osgeo.org/postgis/wiki/Use … veTopology

Trop fort PostGis, même si je dois bien admettre que je n'ai pas encore tout compris de la méthode ! wink


Sylvain M.

Hors ligne

 

#4 Tue 25 July 2017 18:12

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

Re: [PostGis] Résultats étranges de "ST_SimplifyPreserveTopology"

Bonjour,

Le principe est de créer une seule grosse géométrie de type linestring, sur laquelle un st_simplifiy gardera les contours communs, en les simplifiant, puis de reconstruire les polygones à partir de cet ensemble et de leur ré attribuer les bons identifiants.

La méthode marche bien pour des petits volumes de données. Après, ca prend un temps fou smile
st_dumprings explose les multipolygones en objets simples, trous compris, sous forme de linestrings
st_union avec des linestrings les nodes aux intersections, ce qui est bien pratique wink
st_linemerge reconstruits de vrais lignes, au cas ou il y ait des morceaux pas dans l'ordre.
st_polygonize reconstruit des polygones à partir d'un réseau de lignes.
st_dump final extrait chaque polygone indépendant, avant de faire un reconstruction éventuelles des multipolygones.

Nicolas

Hors ligne

 

Pied de page des forums

Powered by FluxBB