2012-11-29 74 views
0

我試圖通過Websockets實現Google Earth控制器。我有一個簡單的回聲websockets服務器在c#中,當我在文本框中鍵入一個值,它只是將其發送回頁面(我打算能夠直接從服務器發送數據)。與谷歌地球NPObject異常調用方法時出錯

我的腳本初始化谷歌地球是非常標準和工作原理:

<script type="text/javascript"> 

google.load("earth", "1"); 

function init() { 
    google.earth.createInstance('map3d', initCallback, failureCallback); 
    StartServer(); 
} 

function initCallback(instance) { 
    ge = instance; 
    ge.getWindow().setVisibility(true); 

    // add a navigation control 
    ge.getNavigationControl().setVisibility(ge.VISIBILITY_AUTO); 

    // add some layers 
    ge.getLayerRoot().enableLayerById(ge.LAYER_BORDERS, true); 
    ge.getLayerRoot().enableLayerById(ge.LAYER_ROADS, true); 
} 

function failureCallback(errorCode) 
{ 

} 
</script> 

(GE變量)就是谷歌地球實例。

現在在我的服務器代碼,如果我這樣做:

  ws.onmessage = function (evt) 
     { 
      inc.innerHTML += evt.data + '<br/>'; 
      var lookAt =    ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND); 
      lookAt.setLatitude(lookAt.getLatitude() + 10); 
      lookAt.setLongitude(lookAt.getLongitude() + 20); 
      ge.getView().setAbstractView(lookAt); 
     }; 

一切正常(地球繞一點點)。

現在,如果我做的:

  ws.onmessage = function (evt) 
     { 
      inc.innerHTML += evt.data + '<br/>'; 
      var lookAt = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND); 
      lookAt.setLatitude(lookAt.getLatitude() + evt.data); //Here i try to use the data received 
      lookAt.setLongitude(lookAt.getLongitude() + 20); 
      ge.getView().setAbstractView(lookAt); 
     }; 

我得到異常:在NPObject

錯誤調用方法我試圖拆串,並轉換爲數字,但總是得到同樣的錯誤。

inc.innerHTML += evt.data + '<br/>'; 

始終工作壽。

編輯:

我也嘗試: VAR I = parseInt函數(d); //作品 但是當我打電話時l lookAt.setLatitude(i); //異常

任何幫助表示讚賞

回答

0

好的排序,很愚蠢的事情,服務器發送額外的字符。

感覺有點不好,在解析時出現這種通用錯誤,像「字符串格式無效」會有點意義。

+0

這是JavaScript的你:) –

1

嘗試用(+evt.data)更換evt.data,一元加號運營商強制值的一個數字。

我不知道谷歌地球API,但如果getLongitude返回一個字符串出於某種奇怪的原因,那麼可能會產生你在那裏看到的行爲(字符串+數字是一個數字,但字符串+字符串是一個字符串) 。

+0

謝謝回答,我嘗試但仍然是相同的錯誤。我也嘗試使用Number(evt.data),但沒有運氣,不知道它是否是一個安全問題。 – catflier

+0

當你在第一個(工作)的例子中使用'+「20」'而不是'+ 20'時會發生什麼? –

+0

使用+「20」給我npobject錯誤。使用parseFloat(「20」)的作品,使用parseFloat(evt.data)仍然給出錯誤 – catflier

0

我有完全相同的問題,事實證明,緯度/長值太精確,所以我這樣做是爲了把它變成最大6小數精度相當於:

function Blah(lat, lon) { 
    //because the GPS is ridiculously accurate and 
    //google earth is not, we need to round to six decimals at most 
    lat = Math.round(lat * 1000000)/1000000; 
    lon = Math.round(lon * 1000000)/1000000;