Google Maps API V3 — динамическая карта из XML, пользовательские атрибуты недоступны?

Я создаю элемент управления asp.net для создания карты Google на основе файла xml. У меня карта работает, а также всплывающие окна (infoWindows). К сожалению, по какой-то причине я не могу использовать настраиваемые атрибуты в файле XML для заполнения информационного окна для каждого маркера. При вызове возвращается нулевое значение: var name = markers[i].getAttribute("name");

Я переписал этот код несколькими способами, но до сих пор не могу получить доступ к значению. Я знаю, что он существует в xml, поэтому я надеялся, что здесь может быть кто-то, кто хорошо разбирается в google maps api v3 и анализирует xml через javascript, кто мог бы помочь мне разобраться в этом. Я включил представленный ниже HTML-код, а также содержимое XML-файла partnerLocations.xml.

ПРИМЕЧАНИЕ. Я использовал класс googleUtils.js, который предоставляется Google и доступен здесь: http://gmaps-samples-v3.googlecode.com/svn/trunk/xmlparsing/util.js.

testing.aspx (тестовая страница, на которой реализован элемент управления) отображал вывод:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false">    </script>
<script type="text/javascript" src="/includes/js/googleUtils.js"></script>
<script type="text/javascript">
    google.maps.event.addDomListener(window, 'load', function () {
        var map = new google.maps.Map(document.getElementById('map_canvas'), {
            zoom: 3,
            center: new google.maps.LatLng(52.5,-117.5),
            mapTypeId: google.maps.MapTypeId.ROADMAP
        });

        var infoWindow = new google.maps.InfoWindow;
        google.maps.event.addListener(map, 'click', function () {
            infoWindow.close();
        });

        downloadUrl("/includes/xml/partnerLocations.xml", function (data) {
            var markers = data.documentElement.getElementsByTagName("marker");
            for (var i = 0; i < markers.length; i++) {
                var latlng = new     google.maps.LatLng(parseFloat(markers[i].getAttribute("lat")),
                                    parseFloat(markers[i].getAttribute("lng")));
                var name = markers[i].getAttribute("name");
                var windowContents = "<h3>" + name + "</h3>";
                var marker = new google.maps.Marker({ position: latlng, map: map });
                bindInfoWindow(marker, map, infoWindow, windowContents);
            }
        });

        function bindInfoWindow(marker, map, infowindow, html) {
            google.maps.event.addListener(marker, 'click', function () {
                infowindow.setContent(html);
                infowindow.open(map, marker);
            });
        }
    });
</script>
<div id="map_canvas" style="width: 700px; height: 500px">
</div>

</html>

PartnerLocations.xml:

<?xml version="1.0" encoding="UTF-8"?>
<markers>
  <marker lat="37.401220" lng="-122.120604" name="PartnerB" address="StreetAddress" description="Thisisourpartner..."/>
  <marker lat="37.413320" lng="-122.125604" name="PartnerB" address="StreetAddress" description="Thisisourpartner..."/>
  <marker lat="37.433480" lng="-122.139062" name="PartnerC" address="StreetAddress" description="Thisisourpartner..."/>
  <marker lat="37.445427" lng="-122.162307" name="PartnerD" address="StreetAddress" description="Thisisourpartner..."/>
</markers>

person Lindsay Rose    schedule 06.08.2012    source источник
comment
У вас есть ссылка на живую версию вашей карты? Я подозреваю, что атрибуты xml доступны, но вы сталкиваетесь с проблемой отсутствия закрытия функции на ваших маркерах (когда вы нажимаете на маркер, переменная i выходит за конец вашего xml, поэтому имя, адрес и описание недействительны).   -  person geocodezip    schedule 06.08.2012
comment
Привет, Geocodezip, у меня еще нет живой версии, но я постараюсь опубликовать ее сегодня вечером в своем личном веб-пространстве для обзора. Спасибо, что посмотрели это!   -  person Lindsay Rose    schedule 06.08.2012


Ответы (2)


У меня есть карты Google, работающие на моем сайте, и я запустил ваш XML-файл и вижу все местоположения.

Вот код, который я использовал, где test.xml — ваш XML-файл. У меня также есть файл xml в том же каталоге, что и страница, отображающая его.

function load() {
var map = new google.maps.Map(document.getElementById("gmap"), {
    center: new google.maps.LatLng(50.734850, -3.536562),
    zoom: 7,
    mapTypeId: 'roadmap'
});

var infoWindow = new google.maps.InfoWindow;
var bounds = new google.maps.LatLngBounds();

// Change this depending on the name of your PHP file
downloadUrl("test.xml", function(data) {
    var xml = data.responseXML;
    var markers = xml.documentElement.getElementsByTagName("marker");
    for (var i = 0; i < markers.length; i++) {
        var name = markers[i].getAttribute("name");
        var address = markers[i].getAttribute("address");
        var type = markers[i].getAttribute("type");
        var point = new google.maps.LatLng(
            parseFloat(markers[i].getAttribute("lat")),
            parseFloat(markers[i].getAttribute("lng")));
        var html = "<b>" + name + "</b> <br/>" + address;
        var icon = customIcons[type] || {};
        var marker = new google.maps.Marker({
            map: map,
            position: point,
            icon: icon.icon,
            shadow: icon.shadow
        });
        bindInfoWindow(marker, map, infoWindow, html);
        bounds.extend(point);
    }

    map.fitBounds(bounds);
});
}

Ю может использовать или или при использовании jquery с помощью $(document).ready(function(){

Надеюсь, поможет

person AdRock    schedule 12.08.2012
comment
Привет AdRock, Большое спасибо за ваш пост. Это было очень странно, как только я выложил этот код на живой сайт, он заработал отлично. Я ценю, что вы предоставили этот код, хотя, очевидно, есть места, где я могу изменить свой код для повышения эффективности! - person Lindsay Rose; 15.08.2012

Спасибо всем, кто просматривал этот вопрос, особенно @Geocodezip и @AdRock, которые оставили комментарии с предложениями! Эта проблема, как оказалось, вообще не была проблемой, это было связано с тем, что я запускал этот код на локальном хосте. Как только я развернул это на живом сервере, все заработало, как и ожидалось.

person Lindsay Rose    schedule 15.08.2012