2013-07-24 2 views
2

Я новичок в Google 3D Earth APIGoogle Earth 3D Как найти точку центра из всех маркеров и установить центральный вид

Я хотел бы добавить несколько palcemarkers на Google Earth?

Это мой пример кода, может ли кто-нибудь предложить мне, где я собираюсь ошибаться, чтобы добавить несколько маркеров?

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); 

Здесь данные представляют собой массив объектов, имеющих лат, журнал и контент. Я не увижу ни одного померанца на земле. Если я нажму один один placemarker будет работать нормально, но не работает, если я иду с циклом.

В Google Map V есть варианты ограничений. Есть ли какие-либо опции для 3D-земли?

+0

Можно ли добавить анимацию Когда Маркер добавлен один за другим на Google землю, как Google Map v3? –

ответ

2

Вам необходимо создать объект Placemark, используя createPlacemark(). Вам, вероятно, не нужно создавать массив меток, поскольку API-интерфейс google Earth хранит список меток, из которых вы можете выполнять итерацию с помощью 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 функции вы можете использовать расширение API Google Earth: 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); 
    } 
+0

Спасибо, что это мне больше всего помогает. –

 Смежные вопросы

  • Нет связанных вопросов^_^