Pages: 1
- Sujet précédent - [PostGis] Résultats étranges de "ST_SimplifyPreserveTopology" - Sujet suivant
#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
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
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 !
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
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
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
Pages: 1
- Sujet précédent - [PostGis] Résultats étranges de "ST_SimplifyPreserveTopology" - Sujet suivant