Доступ и изменение объектов в загруженном файле KML (подключаемый модуль Google Earth)

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

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

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

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

Любые идеи?


person user379468    schedule 08.02.2011    source источник


Ответы (1)


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; 
      } 
    } 
  } 
} 
person Fraser    schedule 24.02.2011