Створення "косої рамки" з максимальним співвідношенням ширини / висоти?


13

Я хотів би створити навколишній прямокутник із співвідношенням ширини / висоти maxiumum ("косо обмежувальне поле") з набору вхідних функцій, як показано на зображенні нижче:

введіть тут опис зображення

Наприклад , функції PostGIS ST_Envelopeі ST_Box2Dяк FME Трансформатори BoundingBoxReplacerі BoundingBoxAccumulatorгенерувати паралельно осі обмежує коробки.

Будь-які пропозиції щодо використання підходів із PostGIS, QGIS або FME дуже вітаємо!


Не точний дублікат, бо хлопець не просить рішення, застосовного в FME або PostGIS. Тим не менш, скрипт python, згаданий у відповіді на вищезазначене питання, досить корисний для розміщення в трансформаторі FME PythonCaller. Якщо у мене працює робоча область, я опублікую рішення з трохи зміненим сценарієм.
Jochen Schwarze

Мало того, що це не дублікат, але посилане питання не було прийнято, і виникають питання без відповіді щодо того, який алгоритм він використовує, і точний він чи ні.
Джон Пауелл

Дивіться мою відповідь нижче. Ви повинні зробити це в FME. Яку версію ви використовуєте?
Фестер

Відповіді:


9

Це, ймовірно, надмірність на фронті обробки, і, ймовірно, буде краще математичне рішення, але як приклад способу, що це можна зробити досить просто як запит

SELECT 
   id, rotated_by, oblique_bound
  FROM 
     (
     SELECT 
        m.id,
        r rotated_by, 
        ST_Rotate(ST_Envelope(ST_Rotate(m.geom, r)),-r) oblique_bound,
        row_number OVER (PARTITION BY id) 
                   ORDER BY ST_Area(ST_Rotate(ST_Envelope(ST_Rotate(m.geom, r)),-r))) N
       FROM 
          generate_series(0, 90, 0.1) N(r), my_table m
    ) s
WHERE N = 1;

Це обертає геометрію, створює межі, обертає обертання на кожну десяту частину градуса між 0 і 90. В результаті виходить обмежувальний ящик з найменшою площею. Звичайно, це не зовсім точний спосіб зробити це, і може знадобитися налаштування значення приросту в серії залежно від ваших вимог.


Власне, я думаю, що це чудове рішення. Точні рішення надзвичайно дорогі. Ви можете легко розширити його в plpgsql для запису кращих x обмежувальних полів, і якщо два дуже близькі, ви можете збільшити масштаб і зробити кілька менших обертів, щоб наблизитися до точного рішення. Завжди були б крайові випадки, але приємний підхід.
Джон Пауелл

І в якості додаткової переваги він зберігає кут повороту :-)
Jochen Schwarze

6

QGIS має алгоритм "мінімально орієнтованого обмежувального поля", який робить саме це.


Він називається "Орієнтований мінімальний обмежувальний ящик". Ви можете зателефонувати за цим набором інструментів Processing> QGIS geoalgorithms> Vector general tools.
Стефан

Я припускаю, що це перевищує QGIS 2.14, тому що я не міг знайти його в 2.14.15LTR, який ми все ще використовуємо тут?
Jochen Schwarze

@JochenSchwarze він існує в QGIS 2.14.19. Вам потрібно здійснити пошук у панелі інструментів "Обробка". Безпосередньо, ви можете знайти його підProcessing toolbox -> QGIS geoalgorithms -> Vector General tools -> Oriented minimum bounding box
ahmadhanb

4

Замінник обмежує вікна трансформатор, який ви згадали , повинен бути в змозі зробити це. Відповідно до документації,

Замінює геометрію функції або двовимірною обмежувальною коробкою, або двовимірною мінімально орієнтованою рамкою обмеження.

Параметр дозволяє вибрати поле з обмеженням по осі або прямолінійне обмеження.

Мабуть, пропонується доповнення, щоб включити кут довшої сторони орієнтованого обмежувального вікна. Це безпечний номер PR # 53924.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.