2011-02-08 2 views
2

Google 어스 브라우저 플러그인 및 API를 사용하여 예제를 만듭니다. 나는 성공적으로 객체를로드하고있는 fetchKml는 방법로드 된 KML 파일 (Google 어스 플러그인)의 개체 액세스 및 변경

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

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

를 사용하여 KML 파일을로드하려고하지만,이로드되면, 나는 즉석에서 매개 변수의 일부를 변경 할 수 있어야합니다. 나는 또한 그 안에 포인트를 쓰레기를 파싱하고 몇 가지 추가 작업을 할 수 있기를 바랍니다. 설명서와 코드 샘플을 살펴 보았지만이 작업을 수행 할 수있는 방법을 찾지 못했습니다.

아이디어가 있으십니까?

답변

1

kmlObject에는 XML (또는 임의의 SGML 언어)과 같은 DOM이 있습니다. DOM의 요소를 반복적으로 반복 한 다음 적용 할 수있는 것을 반복해야합니다. 불행히도 api에는 직접적인 메소드가 없으므로 yor 자신을 요리하거나 필요한 기능을 가진 라이브러리를 사용해야합니다.

다음과 같은 내용이 도움이 될 수 있습니다.

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; 
     } 
    } 
    } 
} 
관련 문제