POSTGIS obtiene la longitud máxima del polígono y el ancho promedio

13

Tengo en postgis una tabla de tipo polígono.

Necesito calcular automáticamente la longitud máxima del polígono:

ingrese la descripción de la imagen aquí

Y el segundo es el ancho promedio:

ingrese la descripción de la imagen aquí

Ahora dudo mucho si esto es posible, ya que aunque todos mis polígonos serán casi rectangulares, en otros casos puede ser realmente ambiguo y es casi imposible distinguir entre ancho y alto.

Veamos si alguien puede arrojar luz sobre esto.

Saludos,

Egidi
fuente
Es una pregunta interesante, y definitivamente es posible. Por lo menos, simplemente dibuja una línea desde cada vértice a cualquier otro, tiempo de ejecución polinomial seguro, pero una solución. Para soluciones más elegantes, eche un vistazo a gis.stackexchange.com/questions/32552/…
John Powell
Su ilustración de "longitud máxima" parece clara, pero su ejemplo de "ancho promedio" no es perpendicular a dicha longitud. ¿No debería ser? Entonces mencionas "altura". Todo un poco confuso!
Martin F
Creo que se necesitan más detalles sobre este concepto de ancho promedio, en particular con ejemplos de las geometrías reales que está utilizando
Rafael

Respuestas:

13

Para la primera parte de su pregunta: ¿Qué pasa con ST_LongestLine usando la misma geometría dos veces como entrada?

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

Para la segunda parte de tu pregunta:

En cuanto al cálculo del ancho promedio de los polígonos, se pueden encontrar algunas respuestas interesantes aquí: ¿Cómo puedo calcular el ancho promedio de un polígono?

Thomas B
fuente
Eso es inteligente, no conocía esa función.
John Powell
Eso es super útil. ¿Hay alguna forma de crear una polilínea a partir de esta línea más larga resultante?
user1655130
7

Para la primera parte, use ST_MaxDistance

Devuelve la distancia máxima bidimensional entre dos cadenas lineales en unidades proyectadas. Si g1 y g2 tienen la misma geometría, la función devolverá la distancia entre los dos vértices más alejados entre sí en esa geometría.

Ejemplo:

SELECT
gid,
ST_MaxDistance(geom, geom) AS "Max Length"
FROM layer
Rafael
fuente