Плагин Google Планета Земля: сначала загрузить статический .kmz, а затем воспроизвести тур .kmz?

Есть ли способ заставить подключаемый модуль Google Планета Земля выполнять следующие действия при загрузке веб-страницы?

  1. Отобразите статический файл .kmz, например http://www.ppacg.org/tours/logo.html
  2. Запустите проигрыватель туров .kmz, как на http://www.ppacg.org/tours/tabview.html?project=08-37

Я могу сделать либо № 1, либо № 2 выше отдельно, но я не могу понять, как заставить их оба происходить при загрузке веб-страницы.


person user1330498    schedule 25.02.2013    source источник


Ответы (1)


Вы можете просто загрузить оба файла, используя метод fetchKml в пространство имен google.earth. Затем вы можете предоставить логику для обработки отображения данных и ввода тура в параметре обратного вызова.

Чтобы воспроизвести тур, вам нужно пройтись по Kml DOM в поисках объекта KmlTour, поэтому что вы можете открыть его с помощью GETourPlayer. Для этого вы можете использовать библиотеку служебных программ Earth или можно использовать скрипт kmldomwalk.js.

Что-то вроде следующего java-скрипта должно работать (хотя он написан здесь и не проверен).

<script src="//www.google.com/jsapi/"></script>
<script src="//earth-api-samples.googlecode.com/svn/trunk/lib/kmldomwalk.js"></script>
<script>
google.load("earth", "1");

var ge = null;
var kml1= '//www.ppacg.org/tours/logo.html';
var kml2= '//www.ppacg.org/tours/tabview.html?project=08-37';
var tour = null; // so you can call pause, stop, etc globally...

function init() {
  // presumes you have a div with the id 'map3d'
  google.earth.createInstance("map3d", initCallback, function(e){alert(e);});
}

function initCallback(object) {
  ge = object;
  ge.getWindow().setVisibility(true);
  // load your data 
  google.earth.fetchKml(ge, kml1, fetchKmlCallback);
  google.earth.fetchKml(ge, kml2 , fetchKmlCallback);
}

function fetchKmlCallback(object) {
  if (object) {
    // add the features to the plugin
    ge.getFeatures().appendChild(object);
    // Walk the DOM looking for a KmlTour
    walkKmlDom(object, function() {
      if (this.getType() == 'KmlTour') {
        tour = this;
        ge.getTourPlayer().setTour(tour); // enter the tour
        return false; // stop the DOM walk here.
      }
    });
  } else {
    setTimeout(function() {
     alert('Bad or null KML.');
    }, 0);
  }
}

google.setOnLoadCallback(init);
</script>

Также взгляните на эти примеры использования fetchkml и играть в туры, если вы получаете застрявший.

person Fraser    schedule 26.02.2013
comment
Большое спасибо, Фрейзер, это сработало отлично! Вот обновленная веб-страница: ppacg.org/tours/tabview.html ?проект=08-37 - person user1330498; 27.02.2013