Calcule le chemin le plus court entre deux points 3D dans un volume englobant donné et renvoie le trajet sous forme de séquence de grilles géométriques.
Syntaxe
geomgrid[] ST_3DGridPath(geometry start, geometry end, box3d range, gridcost[] barriers, params text default '');
Paramètres
| Paramètre | Description |
|---|---|
start |
Point de départ. Doit être un point 3D (type geometry). Les valeurs imprécises sur l'axe Z sont acceptées : l'algorithme identifie automatiquement la position valide la plus proche sur cet axe. |
end |
Point d'arrivée. Doit être un point 3D (type geometry). Les valeurs imprécises sur l'axe Z sont acceptées : l'algorithme identifie automatiquement la position valide la plus proche sur cet axe. |
range |
Volume englobant utilisé pour la planification du trajet, spécifié sous la forme d'un objet box3d. Configurez ce paramètre en fonction des données de votre modèle numérique de surface (MNS). |
barriers |
Tableau gridcost[] regroupant les coûts de traversée de toutes les grilles contenant des obstacles. Pour construire ce tableau, appelez la fonction ST_CostUnion. |
params |
(Facultatif) Chaîne JSON configurant l'algorithme de recherche de chemin. La valeur par défaut est ''. Les champs non définis utilisent leurs valeurs par défaut. |
Champs de params
| Champ | Description | Valeur par défaut |
|---|---|---|
algorithm |
Algorithme de recherche de chemin. Valeurs valides : dij (algorithme de Dijkstra), astar (algorithme A*), nb_astar (algorithme A* bidirectionnel). |
astar |
movement |
Mode de déplacement. Valeurs valides : cross (grilles adjacentes uniquement, horizontalement et verticalement), octothorpe (grilles adjacentes et diagonales), strict_octothorpe (déplacements vers les grilles diagonales autorisés uniquement si les grilles adjacentes sont praticables). |
cross |
distance |
Méthode d'estimation de la distance. Valeurs valides : euclidean (distance euclidienne), manhattan (distance de Manhattan), chebyshev (distance de Tchebychev). |
manhattan |
Exemple de valeur pour params :
{"algorithm":"astar","movement":"strict_octothorpe"}
Si le paramètre params est laissé vide ou si un champ est omis, le système utilise la valeur par défaut correspondante.
Valeur de retour
Renvoie un tableau geomgrid[] de grilles géométriques, ordonnées selon le trajet du point de départ au point d'arrivée.
Description
La fonction ST_3DGridPath détermine le chemin au coût le plus faible à travers un système de grille 3D entre deux points. Le trajet est contraint par le volume englobant défini par le paramètre range et respecte les coûts de traversée des grilles spécifiés dans barriers.
Comportements clés :
Entrée approximative sur l'axe Z : Les paramètres
startetendacceptent des points 3D dont les coordonnées Z sont imprécises. L'algorithme aligne chaque point sur la position valide la plus proche de l'axe Z au sein de la grille.Volume basé sur le MNS : Le paramètre
rangedéfinit le volume de planification du trajet. Définissez-le en fonction des données de votre modèle numérique de surface (MNS).Routage conscient des coûts : Le paramètre
barriersagrège les coûts de traversée pour toutes les grilles comportant des obstacles. Appelez la fonction ST_CostUnion pour calculer cette valeur.Algorithme par défaut : Lorsque le paramètre
paramsest omis, la fonction utilise l'algorithme A* (astar), le déplacement croisé (cross) et la distance de Manhattan (manhattan).
Système de grille 3D

Exemples
Exemple 1 : Paramètres d'algorithme par défaut
Cet exemple calcule un trajet en utilisant les paramètres d'algorithme par défaut (A*, déplacement croisé, distance 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)
])
)
);
Résultat :
{GZ0000000006,GZ0000000042,GZ0000000046,GZ0000000064,GZ0000000420,GZ0000000422,
GZ0000000426,GZ0000000604,GZ0000000640,GZ0000000644,GZ0000004200,GZ0000004240,
GZ0000004244,GZ0000004600,GZ0000004602,GZ0000004620,GZ0000004622,GZ0000006400,
GZ0000006420}
Exemple 2 : Paramètres d'algorithme personnalisés
Cet exemple utilise l'algorithme A* avec un déplacement « strict octothorpe » et une estimation de distance euclidienne, ce qui autorise les déplacements en diagonale uniquement lorsque les grilles adjacentes sont praticables.
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"}'
);
Résultat :
{GZ0000000006,GZ0000000060,GZ0000000066,GZ0000000600,GZ0000000606,GZ0000000660,
GZ0000000666,GZ0000006000,GZ0000006040,GZ0000006044,GZ0000006420}