0

Websocketを介してGoogleEarthコントローラーを実装しようとしています。

私はc#に単純なecho websocketsサーバーを持っています。テキストボックスに値を入力すると、それがページに返送されます(後でサーバーから直接データを送信できるようにする予定です)。

グーグルアースを初期化する私のスクリプトはかなり標準的で機能します:

    <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); //例外

助けていただければ幸いです

4

3 に答える 3

1

に置き換えevt.dataてみてください(+evt.data)。単項プラス演算子は、値を数値に強制します。

Google Earth APIはわかりませんが、getLongitudeが何らかの奇妙な理由で文字列を返していた場合、そこに表示されている動作が発生する可能性があります(文字列+数値は数値ですが、文字列+文字列は文字列です)。

于 2012-11-29T21:17:54.783 に答える
0

ソートされた、かなりばかげたもので、サーバーは余分な文字を送信していました。

解析時にこの一般的なエラーが発生するのは少し気分が悪いです。「文字列形式が無効です」のようなものがあると、もう少し意味があります。

于 2012-12-01T17:53:19.487 に答える
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;
于 2014-04-16T10:50:16.030 に答える