2012-04-05 2 views
0

Я пытаюсь сделать дорожку постепенно, как анимацию над плагином GE. У меня есть набор координат (lat, long) в массиве, и я использую следующую функцию в цикле через небольшие промежутки времени, чтобы оживить всю дорогу в мелких деталях.Как удалить linestring, который добавляется частично по отдельности в GE за один раз?

var intFeatureCounter4Trace=0 
    function createPath(lat1,lng1,lat2,lng2,strToolType){ 
     lineStringPlacemark = ge.createPlacemark(''); 
     var lineString = ge.createLineString(''); 
     lineStringPlacemark.setGeometry(lineString); 
     lineString.setTessellate(true); 
     lineString.getCoordinates().pushLatLngAlt(lat1,lng1,0); 
     lineString.getCoordinates().pushLatLngAlt(lat2,lng2,0); 
     lineStringPlacemark.setStyleSelector(ge.createStyle('')); 
     var lineStyle=lineStringPlacemark.getStyleSelector().getLineStyle(); 
     lineStyle.setWidth(5); 
     lineStyle.getColor().set("9900FFFF"); //'aabbggrr' format 
     intFeatureCounter4Trace+=1; 
     ge.getFeatures().appendChild(lineStringPlacemark); 
    } 

Обращая дороги в мелких деталях я отслеживание количества мелких отрезков, которые добавляются в плагин GE и использовать эту функцию, рассчитывать, чтобы удалить все добавленные сегменты строки в цикле, используя следующие функция: -

function clearPath(){ 
    for(var i=0;i<intFeatureCounter4Trace;i++){ 
     ge.getFeatures().removeChild(ge.getFeatures().getLastChild()); 
    } 
} 

проблема заключается в большом количестве (лат, лонги) мотивируют 20000 или так, функция clearPath() вешает браузер, а иногда и некоторые функции, которые не должны быть удалены, также удаляются. Есть ли способ удалить все меньшие сегменты за один раз? i.e, есть ли способ добавить все мелкие сегменты по частям (как анимацию) к одной функции, а затем удалить их за один раз из DOM плагина GE вместо того, чтобы частично удалить часть?

С уважением, Шива

ответ

1

Есть несколько способов решить эту проблему.

Во-первых, используя существующий код, вы просто переносите любой вызов своего метода clearPath с использованием функции google.earth.executeBatch. Это должно прекратить вешать и выполнять вызовы api намного быстрее.

google.earth.executeBatch(ge, clearPath); 

Во-вторых, вы можете просто написать более чистую clearPath функцию, чтобы удалить все функции без необходимости глобального индекса.

function clearPath() { 
    var features = ge.getFeatures(); 
    while (features.getFirstChild()) { 
    features.removeChild(features.getFirstChild()); 
    } 
} 

В-третьих, как я бы подойти к нему, чтобы изменить ваш createPath просто создать единую LINESTRING метку. Затем я бы создал метод amendPath, который будет обновлять данные координат для этой метки. Наконец, я бы изменил метод clearPath, чтобы просто вызвать clear на линейном координатном массиве. Вы также можете добавить метод removePath ...

Хотя здесь написано и непроверено что-то по следующим строкам должно работать.

var path = null; // global reference to the placemark we will create 

// set up the path placemark 
function createPath() { 
    path = ge.createPlacemark(''); 
    path.setStyleSelector(ge.createStyle('')); 

    var line = ge.createLineString(''); 
    line.setTessellate(true); 

    var style = path.getStyleSelector().getLineStyle(); 
    style.setWidth(5); 
    style.getColor().set("9900FFFF"); 

    path.setGeometry(line); 
    ge.getFeatures().appendChild(path); 
} 

// update the path placemark's coordinate geometry 
function ammendPath(lat1,lng1,lat2,lng2) { 
    var line = path.getGeometry(); 
    line.getCoordinates().pushLatLngAlt(lat1,lng1,0); 
    line.getCoordinates().pushLatLngAlt(lat2,lng2,0); 
    path.setGeometry(line); 
} 

// clear the path placemark's coordinate geometry 
function clearPath() { 
    path.getGeometry().getCoordinates().clear(); 
} 

// remove the path placemark entirely (if required...) 
function removePath() { 
    ge.getFeatures().removeChild(path); 
} 
+0

Hello Fraser, Thanx для вышеуказанных предложений. Кулачное предложение, хотя и не помогло мне в этом вопросе, но узнало об этом и использовало его в других задачах. Последнее предложение сделало трюк, это было именно то, что я искал, и теперь я могу очистить всю метку линии, нарисованную частично по ходу. Тонкс еще раз. С уважением, Шива – Shiva

+0

Здравствуйте, Фрейзер, у меня есть еще один запрос относительно этого, создавая путь, который я должен сделать по частям, т. Е. У меня есть серия lat, longs, дифференцированная по номерам деталей. Когда я получаю новый номер детали, я должен начать рисовать путь с промежутком между предыдущим рисунком и текущей строкой/контуром и так далее до конца. Можно ли сделать это с последним предложением createPath & modifyPath, данным вами? С уважением, Шива – Shiva

+0

Конечно, просто измените функцию createPath, чтобы принять параметр id, а затем сгенерируйте уникальный путь для каждого сегмента. Вероятно, я бы сохранил эти сегменты в глобальном массиве. Затем вы можете изменить функцию modifyPath, чтобы принять идентификатор или индекс, чтобы вы могли изменить правильный путь. Если у вас возникли проблемы с этим, дайте мне знать, и я отредактирую свой ответ, чтобы показать пример. – Fraser

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

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