Я имел дело с обработкой 10000 меток и других объектов kml в плагине Земли, и лучший способ, который я нахожу, - это управление данными в объекте javascript. работа с ними в стандартном кмл часто приводит к краху.
перед синтаксическим анализом передайте что-то, что вы можете обработать как объект
начать с:
var myModels = {};
для добавления первого элемента, если идентификатор равен 'foo' или числовой, сделайте что-то вроде:
myModels['foo'] = {
description: 'some description for foo',
longitude: 100.12345,
latitude: 45.4567
linkUrl: 'http://mydomain.com/mymodels/foo.dae',
kmlObject: null};
сейчас смотрит на код из:
http://code.google.com/apis/ajax/playground/?exp=earth#creating_3d_models
у вас будет что-то похожее на:
var placemark = ge.createPlacemark('');
placemark.setName('model');
var model = ge.createModel('');
.......
placemark.setGeometry(model);
Теперь иди:
myModals['foo'].kmlObject = placemark;
это даст вам быструю ссылку на модель, если вам нужно изменить или удалить ее с помощью
myModels['foo'].kmlObject
нет необходимости пересекать дерево снова.
Одна вещь, которую я нашел быстрее, это определить клиентскую часть kml и использовать parseKml для ее загрузки, а не создавать отдельные объекты и добавлять их.
также вы можете встроить логику, чтобы добавить только те модели dae, которые находятся внутри области, которую просматривает пользователь
для просмотра всех элементов
var i, iModel;
for (i in myModels){
iModel = myModels[i];
if(myModels[m].kmlObject == null){
'add if statement to check if the models long/lats are in current view with
' iModel.longitude, iModel.latitude
}
}
также вместо того, чтобы добавлять все в одну операцию, добавьте модель 10-20 в один пакет и используйте setTimeout для запуска другой пакетной операции через секунду и используйте .executeBatch
https://developers.google.com/earth/documentation/reference/google_earth_namespace#ab26414915202d39cad12bcd5bd99e739