Доступ и изменение объектов в загруженном файле KML (плагин Google Earth) - PullRequest
2 голосов
/ 08 февраля 2011

Я создаю пример с помощью плагина браузера Google Earth и API. Я пытаюсь загрузить файл kml, используя метод fetchKml

function addKmlFromUrl(kmlUrl) {
  google.earth.fetchKml(ge, kmlUrl, kmlFinishedLoading);
}

function kmlFinishedLoading(kmlObject) 
{
  if (kmlObject) {
    ge.getFeatures().appendChild(kmlObject);
  }
}

Я успешно загружаю объект, но как только он загружен, я хочу иметь возможность изменять некоторые параметры на лету. Я также хочу иметь возможность анализировать пункты в нем и делать несколько дополнительных вещей. Я просмотрел документацию и примеры кода, но не могу найти способ сделать это.

Есть идеи?

1 Ответ

1 голос
/ 24 февраля 2011

У kmlObject есть DOM, похожий на XML (или любой язык SGML), который вам потребуется рекурсивно перебирать по элементам в DOM, а затем изменять те, которые применимы к вам. К сожалению, в API нет прямых методов для этого, поэтому вам нужно будет либо готовить самостоятельно, либо использовать библиотеку, имеющую нужные вам функции.

Что-то вроде следующего может работать для вас.

function addKmlFromUrl(kmlUrl) {
  google.earth.fetchKml(ge, kmlUrl, kmlFinishedLoading);
}

function kmlFinishedLoading(kmlObject) 
{
  if (kmlObject) {
    ge.getFeatures().appendChild(kmlObject);
    traverseKml(kmlObject);
  }
}

function traverseKml(node) { 
  if(node.getFeatures().hasChildNodes()) { 

    var subNodes = node.getFeatures().getChildNodes(); 
    var length = subNodes.getLength(); 

    for(var i = 0; i < length; i++) { 

      var eachSubNode = subNodes.item(i); 
      var nodeType = eachSubNode.getType(); 

      switch(nodeType) { 
        // kml containers 
        case 'KmlFolder' : 
        case 'KmlDocument' :
          traverseKml(eachSubNode); 
        break; 
        // do something with all placemarks...
        case 'KmlPlacemark' : 
          alert(eachSubNode.getName()); 
        break; 
      } 
    } 
  } 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...