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 |
|
|
Ponto inicial. Deve ser um ponto 3D ( |
|
|
Ponto final. Deve ser um ponto 3D ( |
|
|
Volume delimitador para planejamento do caminho, definido como |
|
|
Array |
|
|
(Opcional) String JSON para configurar o algoritmo de busca de caminho. O valor padrão é |
Campos de params
|
Campo |
Descrição |
Padrão |
|
|
Algoritmo de busca de caminho. Valores válidos: |
|
|
|
Modo de movimento. Valores válidos: |
|
|
|
Método de estimativa de distância. Valores válidos: |
|
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
starteendaceitam 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
rangedefine 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
barriersagrega os custos de travessia de todas as grades de barreira. Chame ST_CostUnion para calcular esse valor.Algoritmo padrão: Caso
paramsseja omitido, a função usa o algoritmo A* (astar), movimento cruzado (cross) e distância de Manhattan (manhattan).
Sistema de grades 3D

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}