Recuperar o menor MBR do polígono

8

Eu tenho uma tabela postgis contendo polígonos. Quero transformar meus polígonos em polígonos de 4 pontos: recuperar o menor MBR.

Aqui vem uma ilustração do que eu quero:

texto alternativo

Meu polígono original é na cor rosa. Eu acho que será muito fácil obter o MBR (com as funções ST_Envelope e BBox). Mas existe uma maneira fácil de obter o que eu quero?

Alguma ideia? Muito Obrigado

simo
fonte

Respostas:

3

Para esse exemplo simples que você tem, o ST_ConvexHull forneceria essa resposta. Para o caso mais complexo, não pensei muito sobre isso, mas meu palpite é que você pode

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

Se você estiver usando o PostGIS 1.5+ 2), obtenha o ST_LongestLine do casco convexo ST_LongestLine (ST_ConvexHull (geom), ST_ConvexHull (geom)) Isso fornecerá dois cantos do retângulo (embora exista outra parte - estou ausente) como esses dois cantos podem não ser a diagonal) http://www.postgis.org/documentation/manual-1.5SVN/ST_LongestLine.html

Você também pode dar uma olhada no código do ST_MinimumBoundingCircle - atualmente implementado como uma função plpgsql - mas o que você está fazendo é uma simplificação disso.

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

LR1234567
fonte
3

Uma resposta completa pode ser encontrada aqui, no entanto, em resumo:

  • [S] gire o polígono para coincidir com uma de suas arestas com o eixo X
  • computação minmaxde X e Y para vértices
  • isso dá a você um candidato ao retângulo de área mínima (MAR) ou MBR
  • armazene a área de (x2-x1) * (y2-y1)
  • repita de [S] para todas as arestas
  • encontre a área mínima que corresponde ao MBR
  • rotação encontrada [[x1, y1], [x2, y2]] pelo retângulo aplicado em [S]

Feito.

Desenvolvedor
fonte