Message posté par : Nicolas Ribot
----------------------------------------
Bonsoir,
Perso, pour ce genre de décomposition spatiale, si les couches à croiser sont
conséquentes, je passe en linestring (st_boundary(geom)), puis je fais l'union pour
produire un set nodé, puis st_polygonize pour reconstruire les surfaces.
En jouant avec pointOnSurface des deux couches on peut identifier quel bout du resultat
provient de quelle geometrie source.
Si la ou les couches sont énormes, je découpe en lot pour traiter ces lots, puis une
requete pour identifier les éventuels cas particuliers aux frontieres des zones traitées
par lot.
Je me permets une remarque concernant st_union dans Postgis: je vous pleins de gens, en
formation ou chez des clients, qui veulent faire l'union d'une couche polygone
pour avoir un seule géométrie (ou plusieurs très grosses avec un st_union() group by ...
Pitié, ne faites JAMAIS ca, dans 99% des cas, ca ne sert a rien a part faire planter
postgis ou faire tourner une requete pdt des heures:
postgis ADORE avoir pleins de petites geometries et deteste travailler avec peu de grosses
geom.
Par ex, une couche occupation du sol dans laquelle on voudrait faire une geom par type
d'occupation est une hérésie dans postgis: il faut au contraire utiliser st_subdivide
pour découper tout gros polygone en pleins de petits bouts.
En terme de topologie, c'est pareil: avoir un pg de 100km2 ou 1millions de petits
polygones de 100m2 represente la meme surface. Par contre, si on veut utiliser ce gros pg
dans une requete, postgis rame un max pour deux raisons:
1) pleins de coordonnées en mémoire à gérer
2) l'index spatial n'a plus d'interet, puisque le test entre ce gros polygones
et d'autres géométries n'est pas selectif du tout et renvoie pleins de candidats
qui doivent etre traités
Un exemple concret de cette stratégie de découpage en petits bouts (et qui nous a bien
fait halluciner en vrai): un croisement d'une belle grosse couche occupation du sol
sur un dept ou region (me rappelle plus) vs une autre couche avec pleins de polygones:
la requete avec la couche occsol initiale: plus de 6h
subdivide sur la couche occsol (1-2min) + requete lancée sur cette nouvelle table
occsol_sub: 30s !
Nicolas
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=373499#p373499
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net