Существует несколько проблем - в основном, количество прослушивателей событий и количество вызовов в tickAnimation ().
Вы создаете 62 прослушивателя событий, каждый из которых вызывается при каждом кадреперерисован!Нет необходимости иметь более одного прослушивателя событий, так как все, что нам нужно знать, это когда обновлять анимацию.
Кроме того, структура функции tickAnimation действительно неэффективна - так как вы каждый раз вызываете различные массивы координат при каждом вызове.
Наконец, когда вы добавляете прослушиватель событий, вам нужно только передать ссылку на метод делегата (или использовать анонимную функцию) - вы на самом деле вызываете метод timertick.например,
google.earth.addEventListener(ge,'frameend',tickAnimation(i));
должно быть
google.earth.addEventListener(ge,'frameend', tickAnimation);
или
google.earth.addEventListener(ge,'frameend', function() { //something });
Во всяком случае, я вычистил эти проблемы и привел в порядок код, и, кажется, работает AOK дляя ...
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Tranal//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<head>
<title>Google Earth Plug-in</title>
<script type="text/javascript" src="http://www.google.com/jsapi?key=ABQIAAAASCAedFja1cLViBwu5vZBhhS5GayC4xe98VdZPgzqVN2-dFqZ9BQEClMgNeXYIQ2dDJ_adQGmjS2n6A"></script>
<script type="text/javascript">
google.load('earth', '1');
var ge = null;
var camera = null;
var current = 0;
var coordinates = [
[48.4231230, 10.9224935, 469.7156861],
[48.4231230, 10.9224935, 469.7156861],
[48.4231230, 10.9224935, 469.7156861],
[48.4231230, 10.9224935, 469.7156861],
[48.4231230, 10.9224935, 469.7156861],
[48.4231230, 10.9224935, 469.7156861],
[48.4231230, 10.9224935, 469.7156861],
[48.4231230, 10.9224935, 469.7156861],
[48.4231230, 10.9224935, 469.7156861],
[48.4231230, 10.9224935, 469.7156861],
[48.4231231, 10.9224940, 469.7156861],
[48.4231240, 10.9224976, 469.7156861],
[48.4231257, 10.9225046, 469.7156861],
[48.4231274, 10.9225116, 469.7156861],
[48.4231294, 10.9225202, 469.7156862],
[48.4231319, 10.9225302, 469.7156905],
[48.4231361, 10.9225478, 469.7157626],
[48.4231412, 10.9225688, 469.7161530],
[48.4231471, 10.9225932, 469.7174401],
[48.4231538, 10.9226210, 469.7206267],
[48.4231613, 10.9226521, 469.7271233],
[48.4231696, 10.9226864, 469.7386814],
[48.4231720, 10.9226966, 469.7430900],
[48.4231720, 10.9226966, 469.7430900],
[48.4231813, 10.9227349, 469.7775961],
[48.4231844, 10.9227478, 469.8040693],
[48.4231844, 10.9227478, 469.8040693],
[48.4231946, 10.9227900, 469.9629946],
[48.4232055, 10.9228349, 470.2419820],
[48.4232169, 10.9228824, 470.6433960],
[48.4232290, 10.9229324, 471.1695609],
[48.4232417, 10.9229848, 471.8227121],
[48.4232548, 10.9230392, 472.6049562],
[48.4232685, 10.9230957, 473.5182390],
[48.4232826, 10.9231541, 474.5643230],
[48.4232971, 10.9232142, 475.7447726],
[48.4233120, 10.9232758, 477.0609471],
[48.4233272, 10.9233389, 478.5140003],
[48.4233428, 10.9234034, 480.1048861],
[48.4233586, 10.9234690, 481.8343669],
[48.4233748, 10.9235359, 483.7030243],
[48.4233912, 10.9236038, 485.7112688],
[48.4234079, 10.9236729, 487.8593510],
[48.4234248, 10.9237429, 490.1473934],
[48.4234420, 10.9238140, 492.5754379],
[48.4234594, 10.9238862, 495.1434911],
[48.4234771, 10.9239594, 497.8515542],
[48.4234950, 10.9240336, 500.6996282],
[48.4235132, 10.9241089, 503.6877141],
[48.4235316, 10.9241852, 506.8158129],
[48.4235503, 10.9242625, 510.0839256],
[48.4235692, 10.9243409, 513.4920533],
[48.4235884, 10.9244203, 517.0401970],
[48.4236078, 10.9245008, 520.7283578],
[48.4236275, 10.9245823, 524.5565365],
[48.4236474, 10.9246648, 528.5247343],
[48.4236676, 10.9247484, 532.6329522],
[48.4236880, 10.9248330, 536.8811912],
[48.4237087, 10.9249186, 541.2694524],
[48.4237297, 10.9250053, 545.7977366],
[48.4237508, 10.9250930, 550.4660451],
[48.4237723, 10.9251818, 555.2743787],
[48.4237940, 10.9252715, 560.2227385],
[48.4238159, 10.9253624, 565.3111256]
];
function init() {
google.earth.createInstance('map3d', initCallback, failureCallback);
}
function initCallback(pluginInstance) {
ge = pluginInstance;
ge.getWindow().setVisibility(true);
ge.getOptions().setMouseNavigationEnabled(false);
ge.getOptions().setFlyToSpeed(ge.SPEED_TELEPORT);
camera = ge.getView().copyAsCamera(ge.ALTITUDE_ABSOLUTE);
camera.setLatitude(48.423123)
camera.setLongitude(10.922494)
camera.setAltitude(469.715686)
camera.setHeading(70);
camera.setTilt(90);
ge.getView().setAbstractView(camera);
}
function failureCallback(error) {}
function startAnimationClick() {
google.earth.addEventListener(ge, 'frameend', tickAnimation);
tickAnimation();
}
function tickAnimation() {
camera.setLatitude(coordinates[current][0]);
camera.setLongitude(coordinates[current][1]);
camera.setAltitude(coordinates[current][2]);
ge.getView().setAbstractView(camera);
current++;
}
</script>
<style type="text/css">
html, body {
margin: 0;
width: 100%;
height: 100%;
}
</style>
</head>
<body onload="init()">
<div id="map3d" style="width: 100%; height: 80%;"></div>
<center>
<a onClick=startAnimationClick() href=#>Fly!</a>
</body>
</html>