2012-03-13 58 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