POSTGIS obtém o comprimento máximo do polígono e a largura média

13

Eu tenho no postgis uma tabela do tipo polígono.

Preciso calcular automaticamente o comprimento máximo do polígono:

insira a descrição da imagem aqui

E o segundo é a largura média:

insira a descrição da imagem aqui

Agora estou duvidoso se isso é possível, pois, embora todos os meus polígonos sejam quase retangulares em outros casos, pode ser realmente ambíguo e é quase impossível distinguir entre largura e altura.

Vamos ver se alguém pode esclarecer isso.

Saudações,

Egidi
fonte
É uma pergunta interessante, e definitivamente é possível. No mínimo, você simplesmente desenha uma linha de cada vértice para outro, o tempo de execução polinomial, com certeza, mas uma solução. Para soluções mais elegantes, dê uma olhada em gis.stackexchange.com/questions/32552/…
John Powell
Sua ilustração de "comprimento máximo" parece clara, mas seu exemplo "largura média" não é perpendicular ao referido comprimento. Não deveria ser? Então você menciona "altura". Tudo um pouco confuso!
Martin F
Eu acho que mais detalhes são necessários sobre este conceito de largura média, em particular, com exemplos das geometrias reais que você está usando
raphael

Respostas:

13

Para a primeira parte da sua pergunta: E o ST_LongestLine usando a mesma geometria duas vezes como entrada?

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

Para a segunda parte da sua pergunta:

Em relação ao cálculo da largura média dos polígonos, algumas respostas interessantes podem ser encontradas aqui: Como posso calcular a largura média de um polígono?

Thomas B
fonte
Isso é inteligente, não conhecia essa função.
John Powell
Isso é super útil. Existe uma maneira de criar uma polilinha a partir dessa linha mais longa resultante?
user1655130
7

Para a primeira parte, use ST_MaxDistance

Retorna a distância máxima bidimensional entre duas cadeias de linhas em unidades projetadas. Se g1 e g2 forem a mesma geometria, a função retornará a distância entre os dois vértices mais distantes um do outro nessa geometria.

Exemplo:

SELECT
gid,
ST_MaxDistance(geom, geom) AS "Max Length"
FROM layer
raphael
fonte