用于存储kml模型对象的JavaScript全局变量

时间:2012-03-13 16:22:25

标签: kml google-earth-plugin

我正在开发一个显示Google地球和kml对象的网页。将有两个框架,一个是地球+ kml对象,另一个是显示kml对象的信息,如高度,纬度,经度...

我已经完成加载kml对象并在页面上显示其信息。现在,我想添加一些事件来控制带键盘的kml对象,移动它并将协调中的所有变化反映到显示帧上。

为了做到这一点,我创建了自己的对象:

    //Constructor for object ModelInfo
function ModelInfo(name) {
    var me = this;
    me.model = null;
    me.name = name;
    me.lon = 120.89250214028388;
    me.lat = 22.17480037801846;
    me.alt = 15.00;
    me.heading = 0.0;
    me.tilt = 0.0;
    me.roll = 0.0;
    me.kmlUrl = "";
    me.ALTITUDE_MODE = ge.ALTITUDE_RELATIVE_TO_GROUND;
    me.scaleX = 0.3;
    me.scaleY = 0.3;
    me.scaleZ = 0.3;
}

当我获取Kml时,我将kml模型存储到我的objectInfo.model中:

    // Fetch a  KML file and show it
function finished(object, objInfo) {
    if (!object) {
        // wrap alerts in API callbacks and event handlers
        // in a setTimeout to prevent deadlock in some browsers
        setTimeout(function() {
            alert('Bad or null KML.');
        }, 0);
        return;
    }

    var modelPlacemark;
    walkKmlDom(object, function() {
        if (this.getType() == 'KmlPlacemark' && this.getGeometry()
                && this.getGeometry().getType() == 'KmlModel') {
            modelPlacemark = this;
        }
    });

    var model = modelPlacemark.getGeometry();

    objInfo.model = model;

这就是我调用fetchKml

的方式
    shutter = new ModelInfo("Shutter"); //shutter is global variable

    shutter.kmlUrl = 'http://120.125.80.113/kml/student/space_shuttle_23_20110812a/space_shuttle_23_20110812a_SP.kmz';
    google.earth.fetchKml(ge, shutter.kmlUrl, function(obj) {
        finished(obj, shutter);
    });

但问题是,在fetchKml完成后,我尝试访问 shutter.model 它始终为null ,但是当我从中访问shutter.model 时在功能完成它不是空

所以我的问题是它是如何发生的?无论如何将kml对象存储在全局变量中以便稍后修改其属性吗?

谢谢, 汉斯

1 个答案:

答案 0 :(得分:0)

几个小时后试图找出原因,我决定使用Firebug调试代码并找出原因。我仍然不知道为什么。

当我使用Firebug进行调试时,我用于变量“快门”的名称在某种程度上未被列为此页面的成员。当我将其更改为 flying_obj 时,一切正常,我能够将kml对象存储在我的 flying_obj.model

任何人都知道名称“快门”有什么问题,请向我解释一下。真棒!

汉斯