ページが最初にロードされたときとその後のリロードの間でレンダリングの違いが見られます (ブラウザの更新ボタンを押したことが原因です)。後者の場合、多くの場合、フィーチャ (目印やポリゴンなど) は、フィーチャのレンダリング時点では最新の地形標高データに基づいた標高であるかのようにレンダリングされますが、後でより詳細な標高データが到着すると更新されますが、レンダリングは/フィーチャの高度は更新されません。
これは、最初のページの読み込み時ではなく、リロード時に発生するようです。この影響は起伏の多い地形で最も顕著であり、その後に到着する標高データは初期のデータとはかなり異なる可能性があります。
デモンストレーションは次のとおりです: 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);