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