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

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#1 Tue 25 July 2017 16:07

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

[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: 981

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: 981

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: 1534

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