是的,可以通过 COM 调度事件“触发”,但您不需要这样做。如果您在 matlab 中托管 html 文档,只需使用 execScript() 来调用您需要的方法...例如
% Open Plugin
h = actxcontrol('Shell.Explorer', [0 0 800 600]);
invoke(h,'Navigate2','host.html');
// trigger the behavior, rather than dispatching an event...
// arguments are: latitude, longitude, altitude, altitudeMode, heading, tilt, roll
h.Document.parentWindow.execScript(['UpdateCamera(34, 23, 10, 0, 90, 0, 0)'], 'JavaScript');
UpdateCamera 将是“host.html”中的 COM 可见方法 - 类似于...
var UpdateCamera = function() {
var a = arguments; // the values from matlab
var c = ge.getView().copyAsCamera(ge.ALTITUDE_ABSOLUTE);
var oldspeed = ge.getOptions().getFlyToSpeed();
ge.getOptions().setFlyToSpeed(ge.SPEED_TELEPORT);
// KmlCamera.set
// see http://code.google.com/apis/earth/documentation/reference/interface_kml_camera.html#a716205eab6f634b558fcde6be9c58b50
c.set(a[0], a[1], a[2], a[3], a[4], a[5], a[6]);
ge.getView().setAbstractView(c);
ge.getOptions().setFlyToSpeed(oldspeed);
}
关于“之字形运动”评论 - 问题是 Google 地球插件中动画的飞速。要解决,只需将以下行添加到您的主机 html。
function initCB(instance) {
ge = instance;
// Set the FlyTo speed
ge.getOptions().setFlyToSpeed(ge.SPEED_TELEPORT);
...
}
此外,为了进一步平滑动画,最好通过 api 的 frameend 事件触发动画。请参阅:http ://earth-api-samples.googlecode.com/svn/trunk/examples/event-frameend.html