Todos os produtos
Search
Central de documentação

:ST_3DGridPath

Última atualização: Jul 05, 2026

Calcula o caminho mais curto entre dois pontos 3D em um volume delimitador especificado e retorna o trajeto como uma sequência de grades geométricas.

Sintaxe

geomgrid[] ST_3DGridPath(geometry start, geometry end, box3d range, gridcost[] barriers, params text default '');

Parâmetros

Parâmetro

Descrição

start

Ponto inicial. Deve ser um ponto 3D (geometry). Aceita valores imprecisos no eixo z; o algoritmo localiza automaticamente a posição válida mais próxima nesse eixo.

end

Ponto final. Deve ser um ponto 3D (geometry). Aceita valores imprecisos no eixo z; o algoritmo localiza automaticamente a posição válida mais próxima nesse eixo.

range

Volume delimitador para planejamento do caminho, definido como box3d. Configure este parâmetro conforme os dados do modelo digital de superfície (DSM).

barriers

Array gridcost[] que combina os custos de travessia de todas as grades com barreiras. Para criar esse array, chame ST_CostUnion.

params

(Opcional) String JSON para configurar o algoritmo de busca de caminho. O valor padrão é ''. Campos não definidos assumem seus valores padrão.

Campos de params

Campo

Descrição

Padrão

algorithm

Algoritmo de busca de caminho. Valores válidos: dij (algoritmo de Dijkstra), astar (algoritmo A*), nb_astar (algoritmo A* bidirecional).

astar

movement

Modo de movimento. Valores válidos: cross (apenas grades adjacentes horizontal e verticalmente), octothorpe (grades adjacentes e diagonais), strict_octothorpe (permite movimento diagonal quando as grades adjacentes são transitáveis).

cross

distance

Método de estimativa de distância. Valores válidos: euclidean (distância euclidiana), manhattan (distância de Manhattan), chebyshev (distância de Chebyshev).

manhattan

Exemplo de valor para params:

{"algorithm":"astar","movement":"strict_octothorpe"}
Se params estiver em branco ou se algum campo for omitido, o sistema usará o valor padrão correspondente.

Valor retornado

Retorna um array geomgrid[] de grades geométricas organizadas na ordem do trajeto, do início ao fim.

Descrição

A função ST_3DGridPath encontra o caminho de menor custo entre dois pontos em um sistema de grades 3D. O trajeto restringe-se ao volume delimitador definido por range e respeita os custos de travessia das grades especificados em barriers.

Comportamentos principais:

  • Entrada aproximada no eixo z: Os parâmetros start e end aceitam pontos 3D com valores imprecisos no eixo z. O algoritmo ajusta cada ponto à posição válida mais próxima dentro da grade.

  • Intervalo baseado em DSM: O parâmetro range define o volume de planejamento do caminho. Defina-o conforme os dados do modelo digital de superfície (DSM).

  • Roteamento ciente de custos: O parâmetro barriers agrega os custos de travessia de todas as grades de barreira. Chame ST_CostUnion para calcular esse valor.

  • Algoritmo padrão: Caso params seja omitido, a função usa o algoritmo A* (astar), movimento cruzado (cross) e distância de Manhattan (manhattan).

Sistema de grades 3D

image

Exemplos

Exemplo 1: Configurações padrão do algoritmo

Este exemplo calcula um caminho com as configurações padrão do algoritmo (A*, movimento cruzado, distância de Manhattan).

SELECT st_astext(
  ST_3DGridPath(
    st_geomfromewkt('srid=4490;POINT Z (1 1 1)'),
    st_geomfromewkt('srid=4490;POINT Z (5 6 3)'),
    'BOX3D(0 0 0,10 10 10)'::box3d,
    st_costunion(array[
      st_setcost(array[st_gridfromtext('GZ0000000001')], 1),
      st_setcost(array[st_gridfromtext('GZ0000000000')], 5)
    ])
  )
);

Resultado:

{GZ0000000006,GZ0000000042,GZ0000000046,GZ0000000064,GZ0000000420,GZ0000000422,
GZ0000000426,GZ0000000604,GZ0000000640,GZ0000000644,GZ0000004200,GZ0000004240,
GZ0000004244,GZ0000004600,GZ0000004602,GZ0000004620,GZ0000004622,GZ0000006400,
GZ0000006420}

Exemplo 2: Configurações personalizadas do algoritmo

Este exemplo utiliza o algoritmo A* com movimento octothorpe estrito e estimativa de distância euclidiana, permitindo movimento diagonal apenas por grades adjacentes transitáveis.

SELECT ST_3DGridPath(
  st_geomfromewkt('srid=4490;POINT Z (1 1 1)'),
  st_geomfromewkt('srid=4490;POINT Z (5 6 3)'),
  'BOX3D(0 0 0,10 10 10)'::box3d,
  st_costunion(array[
    st_setcost(array[st_gridfromtext('GZ0000000001')], 1),
    st_setcost(array[st_gridfromtext('GZ0000000000')], 5)
  ]),
  '{"algorithm":"astar","movement":"strict_octothorpe","distance":"euclidean"}'
);

Resultado:

{GZ0000000006,GZ0000000060,GZ0000000066,GZ0000000600,GZ0000000606,GZ0000000660,
GZ0000000666,GZ0000006000,GZ0000006040,GZ0000006044,GZ0000006420}