Google 3D Earth如何从所有标记中找到中心点并设置中心视图

时间:2013-07-24 11:57:14

标签: google-maps google-earth-plugin

我是Google 3D Earth API的新手

我想在Google地球上添加多个palcemarkers?

这是我的示例代码,任何人都可以建议我在哪里添加多个标记?

var ge;
var placemaker = new Array();
var point = new Array();

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

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

  function initCB(instance) {

     ge = instance;
     ge.getWindow().setVisibility(true);
     ge.getNavigationControl().setVisibility(ge.VISIBILITY_HIDE);

    for(var i = 0; i < data.length; i++ ) 
    {
        // Set the placemark's location.  
     point[i] = ge.createPoint( data[i].content );
         point[i].setLatitude( data[i].lat );
         point[i].setLongitude( data[i].log );
         placemark[i].setGeometry(point[i]);

         // Add the placemark to Earth.
        ge.getFeatures().appendChild(placemark[i]);
    }
  }

  function failureCB(errorCode) {}

  google.setOnLoadCallback(init);

这里的数据是一个对象数组,包含lat,log和content。 我不会在地球上看到任何地标。 如果我按下一个单一的地方标记将工作正常,但如果我使用循环不工作。

在Google Map V中,有边界选项。 有没有可用于3D地球的选项?

1 个答案:

答案 0 :(得分:2)

您需要使用createPlacemark()创建地标对象。 您可能不需要创建地标数组,因为Google地球API会保留您可以使用ge.getFeatures().getChildNodes()进行迭代的地标列表。

for(var i = 0; i < data.length; i++ ) 
{
     // Create the Placemark
     var placemark = ge.createPlacemark('');

     // Set the placemark's location.  
     point[i] = ge.createPoint('');
     point[i].setLatitude( data[i].lat );
     point[i].setLongitude( data[i].lon );       
     placemark.setGeometry(point[i]);

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

此外,由于拥有数据数组,可能不需要点数组。 可以简化如下:

for(var i = 0; i < data.length; i++ ) 
{    
     // Create the Placemark
     var placemark = ge.createPlacemark('');

     // Set the placemark's location.  
     var point = ge.createPoint('');
     point.setLatitude( data[i].lat );
     point.setLongitude( data[i].lon );
     placemark.setGeometry(point);

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

如果您想计算一堆通用KML功能的中心范围,可以使用Google地球API扩展程序:https://code.google.com/p/earth-api-utility-library/wiki/GEarthExtensionsDomReference#computeBounds(object)

但是如果您只有一个点数组,那么您可以轻松地手动计算中心,然后将LookAt设置为计算出的中心视点。

最终的initCB()看起来像这样:

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

    var latSum = 0.0;
    var lonSum = 0.0;
    for(var i = 0; i < data.length; i++ ) 
    {
        // Set the placemark's location.  
        var point = ge.createPoint('');
        point.setLatitude( data[i].lat );
        point.setLongitude( data[i].lon );
        latSum += data[i].lat;
        lonSum += data[i].lon;

        var placemark = ge.createPlacemark(data[i].content);
        placemark.setGeometry(point);

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

    // Create LookAt at the center view point
    var lookAt = ge.createLookAt('');
    lookAt.set(latSum / data.length, lonSum / data.length, 0,
            ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 0, 20000);
    ge.getView().setAbstractView(lookAt);
  }