在使用Microcity进行仿真时,对于物体移动的轨迹的设计是至关重要的一点。
本文主要结合geojson文件的全球航线图,为船舶仿真移动设计行驶路线。
(注:这里用到的航线图对每条航线都标记的起点O和终点D)
大致思路:
获取航线上每个点的位置,然后在每两点之间构造函数,找到直线关系,然后让船舶按照这个直线关系行驶,这样反复循环便可以得到全程的路程设计。
数据收集:
for ... --遍历所有的航线
for ... --遍历point
if ('O' == point[i] and 'D' == point[i+1]) then
...
table.insert(route_location, 点的坐标)
上文中point代表收集到的船舶在行驶过程中经过的节点,当起点O和终点D都能够对应上时,就说明船舶会经过这段航线。所以此时要获取构成这段航线的每个点的坐标,然后将它们进行整合。
dx = route_location[i+3] - route_location[i]
dy = route_location[i+4] - route_location[i+1]
a = dy/dx
接着可以建立每两个位置(x、y)之间的函数表达式,求出其间的斜率a。
于是new_x 便可以以dt递增,new_y可以以a*dt递增,直到递增的new_x或new_y等于route_location中下一节点的位置,也就是等于route_location[i+3]或route_location[i+4]。
ship_model:setpos(new_x, new_y, 10)
此时便可以将船的位置设置为如上述代码所示。其中z轴坐标为10是因为防止地图图形对船模型的遮盖,故将其高度调高。
将上述步骤做for循环后便可以得到船舶按照设计的路线行驶的仿真模拟。
注:如果使用的是2D地图数据,还需要考虑经度180°至-180°跨越的问题。针对这种情况,只需要在原本x坐标的基础上加减360即可解决。