計算三維地理網格路徑。
語法
geomgrid[] ST_3DGridPath(geometry start, geometry end, box3d range, gridcost[] barriers, params text default '');
參數
參數名稱 | 描述 |
start | 起始點。 |
end | 終止點。 |
range | 路徑規劃范圍。 |
barriers | 所有障礙物的網格開銷。 |
params | 計算參數。 |
params支持的參數及取值為:
algorithm:尋路算法
dij:DIjkstra算法。
astar(默認):A*算法。
nb_astar:新雙向A*算法。
movement:移動方式
cross(默認):只允許向相鄰網格移動。
octothorpe:向相鄰網格及對角網格移動。
strict_octothorpe:在相鄰網格可通行時可向對角網格移動。
distance:距離估算方式
euclidean:歐幾里得距離。
manhattan(默認):曼哈頓距離。
chebyshev:切比雪夫距離。
例如:{"algorithm":"astar","movement":"strict_octothorpe"}
。
說明
params設置為空,或者部分參數未設置時,系統會自動使用默認值。
描述
根據給定的數據計算網格路徑。
起始點和終止點是3維點數據,其中的z值可以不精確,算法會自動找到合適的z值并進行路徑規劃。
range是路徑規劃的范圍,通常以dsm數據為基礎進行設定。
barriers綜合了所有的障礙物開銷,通常是采用ST_CostUnion的結果。
當params置為空時,默認采用aster、cross和manhattan設置。計算結果為按起止順序排列好的geomgrid數組。
示例
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}
三維路徑示意圖
文檔內容是否對您有幫助?