2011-01-02 5 views
3

<Placemark> 노드 내에 <ExtendedData> 노드와 키/값 쌍이있는 <Data> 노드가 포함 된 KML 파일이 있습니다. 예제를 다음에 따라 왔습니다. http://code.google.com/apis/kml/documentation/extendeddata.htmlcode.google.com/apis/kml/documentation/kmlelementsinmaps.html에서지도가 제안합니다. (부분적 임에도 불구하고) KML ExtendedData 노드를 지원하지만 javascript를 통해 ExtendedData 객체에 액세스하는 방법을 찾을 수 없습니다. 내가 사용하고 있습니다 :Google Maps API v3을 통해 ExtendedData 정보에 액세스

google.maps.event.addListener(agency_layer, 'click', function(kmlEvent) { 
    console.debug(kmlEvent); 
} 

(여기서 agency_layer는 KML 객체 임). kmlEvent에는 extendedData가 아닌 모든 KML 기능 데이터가 포함되어 있으며 머리를 긁적니다. 설명에 더 많은 데이터를로드하고 나중에 자바 스크립트로 구문 분석하지 않고 의미 상으로 KML을 의미있게 만들고 싶습니다.

누구나 비슷한 경험을했거나 Google Maps API v3를 통해 ExtendedData 노드에 액세스하는 방법을 알고 있습니까?

답변

0

나는 똑같은 것을 찾고있다. 당신은 kmlEvent 개체의 JSON.stringify() 기능을 사용하여 반환되는 데이터 볼 수 있습니다

alert(JSON.stringify(kmlEvent));  

ExtendedData 노드가 부분적으로 KML Elements Supported in Google Maps 페이지에 따라 지원하지만 제대로 사용하는 방법을 알아 내려고 아직.

+0

예, "untyped 만"ExtendedData에 대해 지원되지만 개체에서 찾을 수없는 것 같습니다. –

2

나는 똑같은 것을 찾고 있었다. 내가 찾은 정보로부터 jQuery 솔루션을 만들었습니다 here.

jQuery는 xml을 쉽게 파싱 할 수 있고 kml은 xml이므로 매우 잘 작동합니다. 여기에 내가 쓴 기능이있다.

function extendedDataToArray(feature) 
{ 
    var returnArray = new Array(); 
    $(feature.getKml()).find("Data").each(function() 
    { 
     returnArray[$(this).attr("name")] = $(this).find("value").text(); 
    } 
    ); 
    return returnArray; 
} 

이 함수는 데이터 요소의 이름과 같은 키와 값을 값 태그의 내용으로 갖는 연관 배열을 반환합니다. 희망이 도움이!

+0

JQuery를 사용하여 KML을 파싱 해 주신 덕분에 문제는 ExtendedData 노드가 Google Maps API를 통해로드 할 때 데이터가 제거되어 데이터가 표시되지 않는다는 것입니다. Google Maps API에서 KML 기능을 사용하는 대신 직접 KML에 액세스하고 (이와 유사하게) 각 핀을 수동으로 삭제했습니다. ( –

+0

정말 불행합니다.// Google Earth API에서 작업 중입니다. 지금까지는 각 장소 표시에 대해 kml을 그대로 유지했습니다. – Alkix

+0

+1 JavaScript에서는 연관 배열이 없으므로 'returnArray'를 '{}'객체로 선언해야합니다. –

0

또 다른 해결 방법은 사용해야 할 때 장소 표시 설명 및 사전 처리 설명에서 데이터를 전달하는 것입니다.

/* 
<Placemark> 
    <name></name> 
    <description><![CDATA[ 
    Lorem Ipsum [data]{"datakey":524}[/data] 
    ]]> 
    </description> 
    <Point> 
     <coordinates>COORDINATES</coordinates> 
    </Point> 
</Placemark> 
*/ 
    var map_overlay = new google.maps.KmlLayer(
     'URL_TO_KML_FILE', 
     { 
      'suppressInfoWindows': true 
     } 
    ); 
    map_overlay.setMap(gmap); 

    var placemarkInfo = new google.maps.InfoWindow(); 
    google.maps.event.addListener(map_overlay, 'click', function (kmlEvent) { 

     var text_to_process = kmlEvent.featureData.description, 
     matches = text_to_process.match(/\[data\](.*)\[\/data\]/), 
     json_data_string = matches[1], 
     json_data = JSON.parse(json_data_string), 
     real_description = text_to_process.split('[data]')[0]; 

     alert(json_data.datakey); 

     placemarkInfo.setContent(real_description); 
     placemarkInfo.setPosition(kmlEvent.latLng); 
     placemarkInfo.open(gmap); 

    }); 
관련 문제