Доступ к информации ExtendedData через Google Maps API v3 - PullRequest
4 голосов
/ 02 января 2011

У меня есть файл 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 через Google Maps API v3?

Ответы [ 4 ]

2 голосов
/ 10 марта 2011

Я искал точно такую ​​же вещь. Я построил решение 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;
}

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

1 голос
/ 12 сентября 2012

Другое решение может передавать данные в описании метки и описании препроцесса, когда их необходимо использовать.

/*
<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 голосов
/ 03 мая 2013

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

0 голосов
/ 31 января 2011

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

alert(JSON.stringify(kmlEvent));    

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

...