三维模型加载后可以用model函数形成一个Model对象,绘图缩放时大小固定,可以设置位置、旋转角度、缩放比例等。下面的例子加载了一个飞机三维模型以及包括经纬度和高度数组的飞行路线,在循环中设置飞机的位置,根据当前点和下一个的坐标确定旋转角度(只旋转Z轴,飞机保持水平)。运行脚本可以看到飞机沿设定的路线飞行的三维动图。可以用鼠标旋转、缩放三维图形进行更多角度的观察。
import time
# Read airplane trajectory data
fn = 'D:/Temp/ascii/guiji.csv'
df = DataFrame.read_table(fn, delimiter=',', format='%i%{yyyy/M/dd H:mm}D%5f')
lon = df['Longitude'].values
lat = df['Latitude'].values
alt = df['Altitude'].values
n = len(lon)
# Read airplane model data
mfn = 'D:/Temp/3d/11805_airplane_v2_L2.obj'
T, x, y, z, normal = plt.load_obj_model(mfn)
# Plot
ax = axes3d(axes_zoom=True)
lighting(mat_specular=1)
#geoshow('cn_province', edgecolor='b')
ax.plot(lon, lat, alt, linewidth=2, color='r')
xlim(111, 113)
ylim(40, 41)
zlim(0, 5000)
xlabel('Longitude')
ylabel('Latitude')
zlabel('Altitude (m)')
antialias()
ap = model(T, x, y, z, facecolor='c', scale=0.3, location=[lon[0],lat[0],alt[0]])
n = len(lon)
for i in range(0, n-1, 20):
print(i)
ap.setLocation([lon<i>, lat<i>, alt<i>])
a = np.rad2deg(np.atan2(lat[i+1]-lat<i>, lon[i+1]-lon<i>))
ap.setRotation([0,0,a-90])
plt.draw()
time.sleep(0.05)
三维飞行路线动图