2016-05-18 16 views
1

私はセシウム系のディスプレイを持っていて、地図上のアイテムの表示をコントロールしたいチェックボックス(クラス.checkbox)があります。 :セシウムディスプレイからGeoJSONをロード&アンロード

 var loadedGeometries = {}; 

     // We want to load/unload geometries when clicking on the checkboxes 
     $('.checkbox').on('click', function (event) { 
      var geometryID = id; // some unique database ID for the object to be displayed 
      if ($(this).prop('checked')) { 
       // it's checked, load it onto the map 
       $.get('/geometry/' + geometryID, function (data) { 
        var myDataSource = Cesium.GeoJsonDataSource.load(data['points'], { 
         markerSize: 24, 
         markerColor: Cesium.Color.RED, 
         markerSymbol: 't' 
        }); // data['points'] is GeoJSON 
        // Add it to the viewer 
        viewer.dataSources.add(myDataSource); 
        // Remember the data source by ID so we can delete later 
        loadedGeometries[geometryID] = myDataSource; 
       }, 'json'); 
       // SUCCESS! THIS PART WORKS!! 
      } else { 
       // unchecked, unload it from the map 
       viewer.dataSources.remove(loadedGeometries[geometryID], true); 
       delete loadedGeometries[geometryID]; 
       // FAILURE: OBJECT STILL ON THE MAP?! 
      } 
     }); 

ジオメトリがロードされ、予想どおりに表示されますが、チェックボックスをオフにすると、データはマップ上に残ります。 dataSourceremove機能が、私が期待していることを実行しているかどうかは不明です。これはディスプレイからDataSourceを削除する正しい方法ですか?

答えて

2

ここで根本的な問題は、Cesium.GeoJsonDataSource.loadが実際のデータソースではなく約束を返すことです。つまり、.removeにデータソースのリストから約束しようとしていますが、それは動作しません。興味深いことに、約束をデータソースのリストに追加すると、が機能しますが、非同期で追加されます。とにかくこれを試してみてください:

Cesium.GeoJsonDataSource.load(data['points'], { 
    markerSize: 24, 
    markerColor: Cesium.Color.RED, 
    markerSymbol: 't' 
}).then(function(myDataSource) { 
    // Add it to the viewer 
    viewer.dataSources.add(myDataSource); 
    // Remember the data source by ID so we can delete later 
    loadedGeometries[geometryID] = myDataSource; 
}); 

もう1つのコメントは、dataSource.showフラグをチェックしてください。ユーザーがソースの電源を入れ直したと思われる場合は、ソースをアンロードして最初から再ロードしたくない場合があります。 showをオフにしている間にfalseに設定するだけで、はるかに迅速に復帰します。もちろん、メモリを消費し続けますが、データの半ギガバイト以上でない限り、これは大きな問題ではありません。ショーが間違っている場合、不必要にCPUやGPUに課税されません。

+0

ありがとうございました!私は一からロード/アンロードについて同意します。現時点では、基本的な機能をいくつか試しています。再度、感謝します! – fiveclubs

関連する問題