J'ai un ensemble de polygones représentant de grandes zones, disent les quartiers de la ville. Je veux identifier les grandes zones qui se chevauchent entre elles.
Mais il y a un problème: parfois ces polygones se chevauchent le long de leur périmètre (car ils ont été dessinés avec peu de précision). Cela va générer des chevauchements longs et étroits dont je ne me soucie pas.
Mais d'autres fois, il y aura de grands chevauchements de polygones robustes, ce qui signifie de grandes zones où le polygone d'un quartier en chevauche un autre. Je souhaite sélectionner uniquement ceux-ci.
Voir l'image ci-dessous de juste les chevauchements. Imaginez que je voulais sélectionner uniquement le polygone bleu dans le coin inférieur gauche.
Je pourrais regarder des zones, mais parfois les zones étroites sont si longues qu'elles finissent par avoir des zones aussi grandes que le polygone bleu. J'ai essayé de faire un rapport surface / périmètre, mais cela a également donné des résultats mitigés.
J'ai même essayé de l'utiliser ST_MinimumClearance
, mais parfois les grandes zones auront une partie étroite attachée, ou deux sommets très proches.
Des idées d'autres approches?
En fin de compte, ce qui a le mieux fonctionné pour moi, c'était d'utiliser un tampon négatif, comme suggéré par @Cyril et @FGreg ci-dessous.
J'ai utilisé quelque chose comme:
ST_Area(ST_Buffer(geom, -10)) as neg_buffer_area
Dans mon cas, les unités étaient en mètres, donc 10 m de tampon négatif.
Pour les polygones étroits, cette zone a renvoyé zéro (également, la géométrie serait vide). Ensuite, j'ai utilisé cette colonne pour filtrer les polygones étroits.