1

私はGoogle Earth APIで遊んでいます。相対的な 3D 視点から、場所と場所の間に線を引くとうまくいくと思いました。GEのドキュメントを検索し、Googleで回答を検索しましたが、正しい道にたどり着くものは何も見つからなかったので、コードを投稿して、おそらく洞察を得たいと思いました.

次のコードは、2 つの場所をプロットし、それらの場所の間に線を引きます。残念ながら、描かれた線は地球をつなぎ合わせています。このように3Dで描いたときに地球の輪郭に沿うようにする方法はありますか?線の高さの配置を変えてみましたが、成功の度合いはさまざまですが、線が場所を接続していないように見える場合、精度と全体的な視覚的魅力が犠牲になります.

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

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


    //---------------------------------PLACES   

    // Create the placemark.
    var placemark = ge.createPlacemark('');
    placemark.setName("Location 1");

    // Set the placemark's location.  
    var point = ge.createPoint('');
    point.setLatitude(39.96028);
    point.setLongitude(-82.979736);
    placemark.setGeometry(point);

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


    // Create the placemark.
    var placemark2 = ge.createPlacemark('');
    placemark2.setName("Hop #2");

    // Set the placemark's location.  
    var point2 = ge.createPoint('');
    point2.setLatitude(25.7615);
    point2.setLongitude(-80.2939);
    placemark2.setGeometry(point2);

    // Add the placemark to Earth.
    ge.getFeatures().appendChild(placemark2);

    //---------------------------------FOCUS

    var lookAt = ge.createLookAt('');
    lookAt.setLatitude(39.96028);
    lookAt.setLongitude(-82.979736);
    lookAt.setRange(1000000.0);
    lookAt.setAltitude(0);
    lookAt.setTilt(45);
    ge.getView().setAbstractView(lookAt);


    //---------------------------------LINES

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

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

    // Add LineString points
    lineString.getCoordinates().pushLatLngAlt(39.96028, -82.979736, 0);
    lineString.getCoordinates().pushLatLngAlt(25.7615, -80.2939, 0);
    //lineString.setAltitudeMode(ge.ALTITUDE_CLAMP_TO_GROUND);
    //lineString.setAltitudeMode(ge.ALTITUDE_RELATIVE_TO_GROUND);
    lineString.setAltitudeMode(ge.absolute);

    // Create a style and set width and color of line
    lineStringPlacemark.setStyleSelector(ge.createStyle(''));
    var lineStyle = lineStringPlacemark.getStyleSelector().getLineStyle();
    lineStyle.setWidth(2);
    lineStyle.getColor().set('9900ffff');  // aabbggrr format

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

}

function failureCB(errorCode) {
}

google.setOnLoadCallback(init);
4

1 に答える 1

3

ラインストリングのテッセレーション、およびオプションで押し出しをtrueに設定する必要があります。

詳細については、https ://developers.google.com/kml/documentation/kmlreference#tessellateおよびhttps://developers.google.com/kml/documentation/kmlreference#extrudeをご覧ください。

APIの場合、構文は次のようになります。

lineStringPlacemark.setTessellate(true);
lineStringPlacemark.setExtrude(true);

https://developers.google.com/earth/documentation/geometriesにこれに関するいくつかの追加のAPIの例があります

于 2012-04-09T20:26:43.813 に答える