2012-03-15 2 views
1

私はHTMLページでGoogle Earthプラグインを使用しています。この文脈では、あなたは私が今https://developers.google.com/earth/documentation/geometriesGoogle Earthでは、lineString/LinearRingの高度をプログラムによって変更できますか?

からサンプルを得た。この

// Create the placemark 
var lineStringPlacemark = ge.createPlacemark(''); 

// Create the LineString 
var lineString = ge.createLineString(''); 
lineStringPlacemark.setGeometry(lineString); 

// Add LineString points 
lineString.getCoordinates().pushLatLngAlt(48.754, -121.835, 0); 
lineString.getCoordinates().pushLatLngAlt(48.764, -121.828, 0); 

// Add the feature to Earth 
ge.getFeatures().appendChild(lineStringPlacemark); 

、あなたが追加した後、プログラムで高度(高さ)を変化させるためにたいと言うような行の文字列や多角形を持っていると言いますlineString、どうやってやるの?

ge.getFeatures()でフィーチャーを取得できることが分かりました。しかし、返されたオブジェクトを検査することはできません。高度を変更する構文には苦労しています。

私はオブジェクト全体を削除して再描画することができますが、それはハッキーであり、ユーザーは再描画を見ることができます。これは私が

誰かが右の構文を知っていhttps://developers.google.com/earth/documentation/containersからコードを持っ

var features = ge.getFeatures(); 
while (features.getFirstChild()) 
    features.removeChild(features.getFirstChild()); 

除去するためのコードですか?

答えて

0

あなたは(あなたがそれを保持、またはKML DOMを歩くと、再びそれを得ることができます)LineStringへの参照を持っている場合は、あなたの場合は、

lineString.setAltitudeOffset(offsetFromCurrentAltitude); 

を経由して、全体ラインストリングの標高を変更することができます座標ベースで高度を変更したい場合は、基本的に上記のように高度にアクセスできます。 lineString.getCoordinates()はKmlCoordArrayを返し、そこから個々の座標から値を読み取ることができます。 KmlCoordArrayについての厄介なことの1つは、子孫ではなくKmlCoord子のコピーを返します。したがって、lineString.getCoordinates()。get(0)を実行してから返されるKmlCoordからlat/lng/altの値を読み取ることはできますが、その座標にこれらの値を設定するとに自動的に反映されませんLineString。代わりに、KmlCoordをKmlCoordArrayに読み込む必要があります。やや厄介ですが、使えます。

あなたは通常、一度に一つの高度を変えているのであれば、あなたは、このような何かを行う可能性があります:

function setNewAltitude(lineString, coordIndex, altitude) { 
    var coords = lineString.getCoordinates(); 
    if (coordIndex >= 0 && coordIndex < coords.getLength()) { 
    var coord = coords.get(coordIndex); 
    coord.setAltitude(altitude); 
    coords.set(coordIndex, coord); 
    } 
} 

彼らはより多くの参考になるかどうかを確認するために、そのほかの方法のためにKmlCoordArrayリファレンスページをご覧くださいあなたが覚えている正確なユースケースです

0

答えが見つかりました。私の洞察は、オブジェクトをナビゲートするときにタイプを要求していました。下記を参照

// read the number of features in GE 
    var length = ge.getFeatures().getChildNodes().getLength(); 

    // get the first feature 
    var feature = ge.getFeatures().getFirstChild(); 

    // for debugging get type - expecting KmlPlacemark  
    var featureType = feature.getType(); 
    console.log(featureType); 

    // get KmlPlacemark geometry 
    var geometry = feature.getGeometry(); 

    // for debugging get type - expecting KmlLineString  
    var geometryType = geometry.getType(); 
    console.log(geometryType); 

    // get KmlLineString coordinates 
    var coordinates = geometry.getCoordinates(); 

    // for debugging get type - expecting KmlCoordArray   
    var coordinatesType = coordinates.getType(); 
    console.log(coordinatesType); 

    var altitude = Math.random()*10000; 

    var coordinatesLength = coordinates.getLength(); 
    for(var i=0; i< coordinatesLength; i++){ 
     var coordinate = coordinates.get(i); 
     console.log(coordinate.getType()); 
     coordinate.setAltitude(altitude); 
     coordinates.set(i,coordinate) 
    } 

    for(var i=0; i< coordinatesLength; i++){ 
     var coordinate = coordinates.get(i); 
     console.log(coordinate.getAltitude()); 
    } 
関連する問題