Вопрос: Доступ к информации ExtendedData с помощью API Карт Google v3


У меня есть файл KML, который содержится в каждом <Placemark> узел <ExtendedData> узел, а затем ряд <Data> узлы с парами ключ / значение. Я следил за примерами: http://code.google.com/apis/kml/documentation/extendeddata.html  а также code.google.com/apis/kml/documentation/kmlelementsinmaps.html  подсказывает, что карты поддерживают узлы KML ExtendedData (хотя и частично), но я не могу найти способ доступа к объекту ExtendedData с помощью javascript. Я использую:

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

(где agency_layer - объект KML). kmlEvent содержит все данные функции KML, но не extendedData, и я царапаю голову. Я хочу сделать свой KML семантически разумным, а не загружать больше данных в описание и анализировать его позже с помощью javascript.

кто-нибудь имел аналогичный опыт или знает, как получить доступ к узлам ExtendedData через API Карт Google v3?


4


источник


Ответы:


Я искал то же самое. Я построил решение jQuery из информации, которую я нашел Вот ,

Поскольку 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;
}

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


2



Я ищу то же самое. Вы можете видеть, какие данные возвращаются с помощью JSON.stringify() функции на kmlEvent объект:

alert(JSON.stringify(kmlEvent));    

ExtendedData узлы частично поддерживаются в соответствии с Элементы KML, поддерживаемые в Картах Google  но мне еще предстоит выяснить, как правильно их использовать.


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);

    });

0



Некоторые данные удаляются из ExtendedData, но вы можете использовать getBalloonHtml() или же getBalloonHtmlUnsafe() если вы доверяете источнику KML. Увидеть ' https://developers.google.com/kml/documentation/extendeddata 'для справки.


0