1

ページが最初にロードされたときとその後のリロードの間でレンダリングの違いが見られます (ブラウザの更新ボタンを押したことが原因です)。後者の場合、多くの場合、フィーチャ (目印やポリゴンなど) は、フィーチャのレンダリング時点では最新の地形標高データに基づいた標高であるかのようにレンダリングされますが、後でより詳細な標高データが到着すると更新されますが、レンダリングは/フィーチャの高度は更新されません。

これは、最初のページの読み込み時ではなく、リロード時に発生するようです。この影響は起伏の多い地形で最も顕著であり、その後に到着する標高データは初期のデータとはかなり異なる可能性があります。

デモンストレーションは次のとおりです: http://jsfiddle.net/x4PEM/1/ 初期ロード時のポリゴンの形状に注意してから、「実行」を押してリフレッシュします。レンダリングの違いに注意してください。

地物が最終的な地形標高よりも低い高度になった場合、地物はまったくレンダリングされない可能性があります (ユーザーが傾斜などによって再レンダリングを引き起こすまで)。

私のコード (Google のサンプルに基づいています) に何か問題がありますか? これが起こらないようにする方法はありますか (標高データが受信されるまで機能のレンダリングを遅らせるためにキャッチする必要があるイベントかもしれません)? Google に報告すべきバグですか?

(これは、テキスト エディターでコードを記述し、ブラウザーで更新を押して結果を確認したためです。jsFiddle で「実行」を押すのと同様です。エンド ユーザーは集中的に更新を行うことはありませんが、それでも、更新を押すことがあります。)

コードは次のとおりです。

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

function init() {
    google.earth.createInstance('map3d', initCB, failureCB);
}

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

    var lat = 37.204193;
    var lon = -112.934429;
    var dlat = 0.005;
    var dlon = 0.005;
    var alt = 100;

    var la = ge.createLookAt('');
    la.set(lat, lon, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 45, 2000);
    ge.getView().setAbstractView(la);

    var polygonPlacemark = ge.createPlacemark('');
    var polygon = ge.createPolygon('');
    polygon.setAltitudeMode(ge.ALTITUDE_RELATIVE_TO_GROUND);
    polygonPlacemark.setGeometry(polygon);

    var outer = ge.createLinearRing('');
    outer.setAltitudeMode(ge.ALTITUDE_RELATIVE_TO_GROUND);
    outer.getCoordinates().pushLatLngAlt(lat + dlat, lon - dlon, alt);
    outer.getCoordinates().pushLatLngAlt(lat + dlat, lon + dlon, alt);
    outer.getCoordinates().pushLatLngAlt(lat - dlat, lon + dlon, alt);
    outer.getCoordinates().pushLatLngAlt(lat - dlat, lon - dlon, alt);
    polygon.setOuterBoundary(outer);

    polygonPlacemark.setStyleSelector(ge.createStyle(''));
    polygonPlacemark.getStyleSelector().getPolyStyle().getColor().set('ff008000');
    ge.getFeatures().appendChild(polygonPlacemark);
}

function failureCB(errorCode) {
    alert("GE init failed");
}

google.setOnLoadCallback(init);
4

1 に答える 1

0

私のコードに何か問題がありますか?

いいえ、コードは正しいです。

あなたの例では、ポリゴンALTITUDE_RELATIVE_TO_GROUNDを 100m に設定していますが、要素が描画されたときに地上高度データのストリーミングが終了していないことがあります。これが、表示されているレンダリングの違いの原因です。

Google に報告すべきバグですか?

はい、相対的に配置された要素がストリーミングされた標高データでどのように機能するかのバグだと思います。

モデルの相対位置への飛行で同様の問題が発生しました。次のレポートを参照してください: https://code.google.com/p/earth-api-samples/issues/detail?id=263

新しいバグ レポートを提出し、そのレポートを参照します。

これを防ぐ方法はありますか?

そのバグレポートに記載されている回避策は、ここでも適用できると思います。ポリゴンの高度を既知の値に設定し、モードを に設定するだけALTITUDE_ABSOLUTEです。

次のようなものを呼び出して、地形を強制的に再描画することもできます。

function redrawTerrain() {
  var current = ge.getOptions().getTerrainExaggeration();
  ge.getOptions().setTerrainExaggeration(0);
  ge.getOptions().setTerrainExaggeration(current);
}
于 2013-07-31T12:28:24.877 に答える