POSTGIS получит максимальную длину многоугольника и среднюю ширину

13

У меня в postgis есть таблица типов полигонов.

Мне нужно автоматически рассчитать максимальную длину многоугольника:

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

И вторая - средняя ширина:

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

Сейчас я сомневаюсь в правильности, если это возможно, хотя все мои многоугольники будут почти прямоугольными, в других случаях это может быть очень неоднозначным, и почти невозможно различить ширину и высоту.

Посмотрим, сможет ли кто-нибудь пролить свет на это.

С Уважением,

Egidi
источник
Это интересный вопрос, и это определенно возможно. По крайней мере, вы просто рисуете линию от каждой вершины до любой другой, конечно, за полиномиальное время выполнения, но решение. Для более элегантных решений, посмотрите на gis.stackexchange.com/questions/32552/…
Джон Пауэлл
Ваша иллюстрация «максимальной длины» кажется ясной, но ваш пример «средней ширины» не перпендикулярен указанной длине. Не должно ли это быть? Тогда вы упоминаете «высота». Все немного сбивает с толку!
Мартин Ф
Я думаю, что нужно больше подробностей об этой концепции средней ширины, в частности, с примерами реальных геометрий, которые вы используете
Raphael

Ответы:

13

Для первой части вашего вопроса: как насчет ST_LongestLine, использующего одну и ту же геометрию дважды в качестве ввода?

SELECT 
  ST_Length(ST_LongestLine(
   (SELECT geom FROM mylayer WHERE gid=1),
   (SELECT geom FROM mylayer WHERE gid=1))
);

Для второй части вашего вопроса:

Что касается расчета средней ширины многоугольников, здесь можно найти несколько интересных ответов: Как рассчитать среднюю ширину многоугольника?

Томас Б
источник
Это умно, не знал эту функцию.
Джон Пауэлл
Это супер полезно. Есть ли способ создать полилинию из этой полученной самой длинной строки?
user1655130
7

Для первой части используйте ST_MaxDistance

Возвращает двумерное максимальное расстояние между двумя линейными строками в проецируемых единицах. Если g1 и g2 имеют одинаковую геометрию, функция вернет расстояние между двумя вершинами, наиболее удаленными друг от друга в этой геометрии.

Пример:

SELECT
gid,
ST_MaxDistance(geom, geom) AS "Max Length"
FROM layer
Рафаэль
источник