Помощь с массивами и API Карт Google - PullRequest
0 голосов
/ 17 марта 2011

У меня есть маркеры мест для функций API Google Maps, которые я использую из учебника, найденного здесь: API Карт Google с JQuery

В любом случае мне пришлось изменить javascript для учета моего приложения. Я извлекаю маркеры из файла XML, как и раньше, хотя на этот раз я получаю несколько запросов и несколько стандартных отклонений, время обслуживания и средства для этих запросов. Я настроил XML, чтобы они добавлялись к тегу со счетчиком, но похоже, что он не рендерится в массив правильно.

К сведению, я никогда не использовал Javascript, и в основном я летаю за штанами, так что, если это зверство Javascript, не стесняйтесь, дайте мне знать, что все поколение XML написано на Python ,

Пример XML: (Я извиняюсь, я не знаю, как показать <или> при переполнении стека без простого его скрытия в качестве тега. Вокруг каждого "маркера" "маркера" "имени" "запроса X" " timetoserveX "и т. д. - это теги <и> для XML.

маркеры
маркер
имя Simpletown, CA / имя
request0 / resource / / request0
timetoserve0 .001 секунды для обслуживания запроса / timetoserve0
среднее значение0 .5309 среднее значение в секундах / среднее значение0
std_dev0 .552 Стандартное отклонение в секундах / std_dev0
request1 / resource2 // / request1
timetoserve1 0,015626 секунд для обслуживания запроса / timetoserve1
среднее1 0,0011 среднее в секундах / среднее1
std_dev1 0,004465 Стандартное отклонение в секундах / std_dev1
/ Маркер
/ Маркеры

MYMAP.placeMarkers = function(filename) {
$.get(filename, function(xml){
    $(xml).find("marker").each(function(){
        var name = $(this).find('name').text();
        var count = 0;
        var requeststring = 'request' + Integer.toString(count)
        var request = new Array();
        var timetoserve = new Array();
        var mean = new Array();
        var std_dev = new Array();
        var timetoservestring = 'timetoserve' + Integer.toString(count);
            var meanstring = 'mean' + Integer.toString(count);
        var std_devstring = 'std_dev' + Integer.toString(count);
        while ($(this).find(requeststring).text()){
            timetoservestring = 'timetoserve' + Integer.toString(count);
            meanstring = 'mean' + Integer.toString(count);
            std_devstring = 'std_dev' + Integer.toString(count);
            request[count] = $(this).find(requeststring).text();
            timetoserve[count] = $(this).find(timetoservestring).text();
            mean[count] = $(this).find(meanstring).text();
            std_dev[count] = $(this).find(std_devstring).text();
            count++;
            requeststring = 'request' + Integer.toString(count)
        }
        // create a new LatLng point for the marker
        var lat = $(this).find('lat').text();
        var lng = $(this).find('lng').text();
        var point = new google.maps.LatLng(parseFloat(lat),parseFloat(lng));

        // extend the bounds to include the new point
        MYMAP.bounds.extend(point);

        var marker = new google.maps.Marker({
            position: point,
            map: MYMAP.map
        });

        var infoWindow = new google.maps.InfoWindow();
        var html = ""
        for (i=0;i<count;i++){
            html=html+'<strong>'+name+'</strong.><br />'+request[i]+'<br />'+timetoserve[i]+'<br />'+mean[i]+'<br />'+std_dev[i]+<br />;
            //var html='<strong>'+name+'</strong.><br />'+request+'</strong.><br />'+timetoserve+'</strong.><br />'+mean+'</strong.><br />'+std_dev;
        }
        google.maps.event.addListener(marker, 'click', function() {
            infoWindow.setContent(html);
            infoWindow.open(MYMAP.map, marker);
        });
        MYMAP.map.fitBounds(MYMAP.bounds);
    });
});
}

С обновлениями больше не возникают проблемы с массивами, как это выглядит, даже если я получаю карту для рендеринга на этом этапе. Кнопка «Показать маркеры» не заполняет карту маркерами. Запуск FireBug с этим, по-видимому, только издает бесконечное количество попаданий «Break on error» и предупреждений для jQuery.

1 Ответ

0 голосов
/ 17 марта 2011
        var request[count] = $(this).find(requeststring).text();
        var timetoserve[count] = $(this).find(timetoservestring).text();
        var mean[count] = $(this).find(meanstring).text();
        var std_dev[count] = $(this).find(std_devstring).text();

до

        request[count] = $(this).find(requeststring).text();
        timetoserve[count] = $(this).find(timetoservestring).text();
        mean[count] = $(this).find(meanstring).text();
        std_dev[count] = $(this).find(std_devstring).text();

- при условии, что эти массивы не работают для вас корректно.

Если я могу сделать предложение (RE ваш комментарий сегодня утром):

    while ($(this).find(requeststring).text()){
        //...omitted 
    }

если бы вы переименовали все свои теги в одно и то же и дали им атрибут id (который действителен в xml), вы можете сделать это:

    var requests = $(this).find('request');
    var timetoserves = $(this).find('timetoserve');
    // etc...
    for (var i=0; i<requests.length; i++) {
        request[i] = requests.eq(i).text();
        timetoserve[count] = timetoserves.eq(i).text();
        //etc...
    }

, чтовероятно, обеспечит лучшую производительность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...