0

GEプラグイン上のアニメーションとして道路を段階的に描画しようとしています。配列に一連の座標(lat、long)があり、次の関数を小さな時間間隔でループで使用して、道路全体を小さな部分にアニメーションで描画しています。

var intFeatureCounter4Trace=0  
  function createPath(lat1,lng1,lat2,lng2,strToolType){
        lineStringPlacemark = ge.createPlacemark('');
        var lineString = ge.createLineString('');
        lineStringPlacemark.setGeometry(lineString);
        lineString.setTessellate(true);
        lineString.getCoordinates().pushLatLngAlt(lat1,lng1,0);
        lineString.getCoordinates().pushLatLngAlt(lat2,lng2,0);
        lineStringPlacemark.setStyleSelector(ge.createStyle(''));
        var lineStyle=lineStringPlacemark.getStyleSelector().getLineStyle();
        lineStyle.setWidth(5);
        lineStyle.getColor().set("9900FFFF"); //'aabbggrr' format
        intFeatureCounter4Trace+=1;
        ge.getFeatures().appendChild(lineStringPlacemark);
    }

小さな部分で道路を描いている間、GEプラグインに追加された小さな線分の数を追跡し、この機能カウントを使用して、次の関数を使用してループ内の追加されたすべての線分を削除します:-

function clearPath(){
    for(var i=0;i<intFeatureCounter4Trace;i++){
       ge.getFeatures().removeChild(ge.getFeatures().getLastChild());
    }
}

問題は、20,000程度の多数の(lat、longs)の場合、clearPath()関数がブラウザをハングさせ、削除されない機能も削除されることがあります。すべての小さなセグメントを一度に削除する方法はありますか?つまり、すべての小さなセグメントを(アニメーションとして)1つの機能に部分的に追加し、それを部分的に削除するのではなく、GEプラグインDOMから一度に削除する方法はありますか?

よろしく、シヴァ

4

1 に答える 1

1

これを解決するにはいくつかの方法があります。

まず、既存のコードを使用して、 google.earth.executeBatch関数clearPathを使用してメソッドへの呼び出しを単純にラップします。これにより、ハングが停止し、API 呼び出しがはるかに高速に実行されるはずです。

google.earth.executeBatch(ge, clearPath);

clearPath第 2 に、グローバル インデックスを必要とせずに、すべての機能を削除する単純な関数を作成することができます。

function clearPath() {
  var features = ge.getFeatures();
  while (features.getFirstChild()) {
    features.removeChild(features.getFirstChild());
  }
}

第三に、私がアプローチする方法はcreatePath、単一のラインストリングの目印を作成するように変更することです。次にamendPath、その目印の座標データを更新するメソッドを作成します。最後にclearPath、ラインストリングの座標配列に対して単純に clear を呼び出すようにメソッドを変更します。必要に応じてメソッドを追加することもできremovePathます...

ここに書かれており、テストされていませんが、次の行に沿った何かが機能するはずです。

var path = null; // global reference to the placemark we will create

// set up the path placemark
function createPath() {
  path = ge.createPlacemark('');
  path.setStyleSelector(ge.createStyle(''));

  var line = ge.createLineString('');
  line.setTessellate(true);

  var style = path.getStyleSelector().getLineStyle();
  style.setWidth(5);
  style.getColor().set("9900FFFF");

  path.setGeometry(line);
  ge.getFeatures().appendChild(path);
}

// update the path placemark's coordinate geometry
function ammendPath(lat1,lng1,lat2,lng2) {
  var line = path.getGeometry();
  line.getCoordinates().pushLatLngAlt(lat1,lng1,0);
  line.getCoordinates().pushLatLngAlt(lat2,lng2,0);
  path.setGeometry(line);
}

// clear the path placemark's coordinate geometry 
function clearPath() {
  path.getGeometry().getCoordinates().clear();
}

// remove the path placemark entirely (if required...)
function removePath() {
  ge.getFeatures().removeChild(path);
}
于 2012-04-10T01:19:05.040 に答える