2012-03-13 60 views
0

我正在开发一个显示Google地球和kml对象的网页。将有两个框架,一个是地球+ kml对象,另一个是显示kml对象的信息,如高度,纬度,经度...用于存储kml模型对象的JavaScript全局变量

我完成了加载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; 
} 

当我fetchKml,我存储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完成后,我尝试访问快门.MODEL它始终是空,但是当我从函数内访问shutter.model 完成它不是空

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

感谢, 汉斯

回答

0

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

我用于变量“快门”的名称在我使用Firebug进行调试时未被列为此页面的成员。当我把它改成flying_obj那么一切都OK,我能到KML对象存储我flying_obj.model内

任何人都知道什么是错的名称为“快门”,请解释给我听。它会很棒!

Hans