Recuperar el polígono MBR más pequeño

8

Tengo una tabla postgis que contiene polígonos. Quiero transformar mis polígonos en polígonos de 4 puntos: recuperar el MBR más pequeño.

Aquí viene una ilustración de lo que quiero:

texto alternativo

Mi polígono original es de color rosa. Supongo que será bastante fácil obtener el MBR (con la función ST_Envelope y BBox) ¿Pero hay una manera fácil de obtener lo que quiero?

¿Algunas ideas? Muchas gracias

simo
fuente

Respuestas:

3

Para ese simple ejemplo que tiene allí, el ST_ConvexHull le daría esa respuesta. Para el caso más complejo, no lo he pensado mucho, pero supongo que puedes

1) Tome el ST_ConvexHull - http://www.postgis.org/documentation/manual-1.5SVN/ST_ConvexHull.html

Si está utilizando PostGIS 1.5+ 2) Luego obtenga el ST_LongestLine del convexhull ST_LongestLine (ST_ConvexHull (geom), ST_ConvexHull (geom)) Eso le dará dos esquinas del rectángulo (aunque hay otra parte, me falta) ya que esas dos esquinas pueden no ser la diagonal) http://www.postgis.org/documentation/manual-1.5SVN/ST_LongestLine.html

También es posible que desee echar un vistazo al código de ST_MinimumBoundingCircle, actualmente solo se implementa como una función plpgsql, pero creo que lo que está haciendo es una simplificación de eso.

http://www.postgis.org/documentation/manual-1.5SVN/ST_MinimumBoundingCircle.html

LR1234567
fuente
3

Puede encontrar una respuesta completa aquí, sin embargo, en resumen:

  • [S] gire el polígono para que coincida con uno de sus bordes con el eje X
  • cálculo minmaxde X e Y para vértices
  • esto le da un candidato para un área mínima de rectángulo (MAR) o MBR
  • almacenar el área de (x2-x1) * (y2-y1)
  • repetir desde [S] para todos los bordes
  • encontrar el área mínima que corresponde a MBR
  • rotar encontrado [[x1, y1], [x2, y2]] por ángulo aplicado en [S]

Hecho.

Desarrollador
fuente