Плагин Google Планета Земля: сначала загрузите статический файл.kmz, а затем начните тур.kmz?
Есть ли способ заставить плагин Google Планета Земля делать следующее при загрузке веб-страницы?
- Отобразите статический файл.kmz, как в http://www.ppacg.org/tours/logo.html
- Запустите тур игрока.kmz, как в http://www.ppacg.org/tours/tabview.html?project=08-37
Я могу сделать #1 или #2 выше отдельно, но я не могу понять, как заставить их обоих происходить, когда веб-страница загружается.
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 и участия в турах, если вы застряли.