У меня есть набор полигонов, представляющих большие площади, скажем, городские кварталы. Я хочу определить большие перекрывающиеся области между ними.
Но есть проблема: иногда эти многоугольники перекрываются по периметру (потому что они нарисованы с небольшой точностью). Это создаст длинные и узкие перекрытия, которые меня не волнуют.
Но в других случаях будут существенные перекрытия надежных многоугольников, то есть большие области, где многоугольник соседства перекрывает другой. Я хочу выбрать только эти.
Смотри картинку ниже только перекрытий. Представьте, что я хочу выделить только синий многоугольник в левом нижнем углу.
Я мог бы смотреть на области, но иногда узкие были такими длинными, что в итоге они имели такие же большие области, как синий многоугольник. Я пытался сделать соотношение площади / периметра, но это также дало смешанные результаты.
Я даже пытался использовать ST_MinimumClearance
, но иногда к большим областям прикрепляется узкая часть или две очень близкие вершины.
Есть идеи о других подходах?
В конце концов, для меня лучше всего было использовать отрицательный буфер, как предложили @Cyril и @FGreg ниже.
Я использовал что-то вроде:
ST_Area(ST_Buffer(geom, -10)) as neg_buffer_area
В моем случае единицы измерения были метрами, поэтому 10 м отрицательного буфера.
Для узких полигонов эта область вернула ноль (также геометрия была бы пустой). Затем я использовал этот столбец, чтобы отфильтровать узкие полигоны.