Topik ini menjelaskan fungsi ST_3DGridPath, yang menghitung jalur menggunakan sistem grid 3D.
Sintaksis
geomgrid[] ST_3DGridPath(geometry start, geometry end, box3d range, gridcost[] barriers, params text default '');Parameter
Parameter | Deskripsi |
start | Titik awal. |
end | Titik akhir. |
range | Ruang lingkup perencanaan jalur. |
barriers | Biaya semua grid dengan hambatan. |
params | Parameter yang digunakan untuk perhitungan. |
Berikut adalah deskripsi bidang dari parameter params:
algorithm: algoritma pencarian jalur
dij: Algoritma Dijkstra
astar (default): Algoritma A*
nb_astar: Algoritma A* dua arah
movement: mode pergerakan
cross (default): hanya bergerak ke grid yang berdekatan
octothorpe: bergerak ke grid yang berdekatan dan diagonal
strict_octothorpe: bergerak ke grid diagonal ketika grid yang berdekatan dapat dilewati
distance: metode estimasi jarak
euclidean: Jarak Euclidean
manhattan (default): Jarak Manhattan
chebyshev: Jarak Chebyshev
Contoh: {"algorithm":"astar","movement":"strict_octothorpe"}.
Jika parameter params dibiarkan kosong atau beberapa bidang tidak dikonfigurasi, sistem akan menggunakan nilai default.
Deskripsi
Fungsi ini menghitung jalur grid berdasarkan data yang ditentukan.
Titik awal dan titik akhir adalah titik 3D, di mana nilai pada sumbu-z bisa tidak akurat. Algoritma secara otomatis menemukan nilai yang sesuai pada sumbu-z untuk titik 3D dan merencanakan jalur.
Parameter range menentukan ruang lingkup perencanaan jalur, yang dikonfigurasi berdasarkan data model permukaan digital (DSM).
Parameter barriers menggabungkan biaya semua grid dengan hambatan. Anda dapat memanggil operasi ST_CostUnion untuk menanyakan nilai parameter ini.
Jika parameter params dibiarkan kosong, sistem secara default menggunakan astar, cross, dan manhattan. Hasil perhitungan adalah array dari grid geometri yang disusun secara berurutan.
Contoh
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)])));
--------------------------------------------------------------------------------
{GZ0000000006,GZ0000000042,GZ0000000046,GZ0000000064,GZ0000000420,GZ0000000422,
GZ0000000426,GZ0000000604,GZ0000000640,GZ0000000644,GZ0000004200,GZ0000004240,
GZ0000004244,GZ0000004600,GZ0000004602,GZ0000004620,GZ0000004622,GZ0000006400,
GZ0000006420}
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"}');
--------------------------------------------------------------------------------
{GZ0000000006,GZ0000000060,GZ0000000066,GZ0000000600,GZ0000000606,GZ0000000660,
GZ0000000666,GZ0000006000,GZ0000006040,GZ0000006044,GZ0000006420}Sistem grid 3D
