Полилинейные массивы Google Map из XML

В моем коде javascript каждые x секунд я получаю переменную 'polys' из XML с неопределенным количеством пар координат, как это (я пропустил некоторые переменные): echo.php

<markers>
<marker iph="ce987" polys="[40.66645296,-0.22793904],[39.66973274,0.21806265]"/>
</markers>

Javascript-код:

        function processXML(data) {
        var xml = data.responseXML;
        var markers = xml.documentElement.getElementsByTagName("marker");
        //clear markers before you start drawing new ones
        resetMarkers(markersArray)
        for (var i = 0; i < markers.length; i++) {
            var idp = markers[i].getAttribute("idp");
            var polys = markers[i].getAttribute("polys");

            var genpolys = [];

            var flightPath = new google.maps.Polyline({
              path: genpolys,
              geodesic: true,
              strokeColor: '#FF0000',
              strokeOpacity: 1.0,
              strokeWeight: 2,
              map: map
            });

            markersArray.push(marker);
        }
        setTimeout(function() {
            downloadUrl("echo.php", processXML);
        }, 19000);
    }

И мне нужно сгенерировать массив? с координатами, например:

var genpolys = [
    new google.maps.LatLng(40.66645296,-0.22793904),
    new google.maps.LatLng(39.66973274,0.21806265)
  ];

Мой уровень javascript слишком низок, поэтому я не знаю, генерировать ли эту переменную автоматически неопределенное количество пар координат. Затем использовать в «пути» внутри «полилинии».

Может ли кто-нибудь помочь мне здесь? Мы ценим любые предложения! Благодарю вас!


person Victor Cormano    schedule 07.11.2014    source источник


Ответы (1)


Попробуйте что-нибудь вроде этого. (Я знаю, что это не совсем правильно, но может дать вам идею. Я постараюсь отредактировать позже.)

function processXML(data) {
    var xml = data.responseXML;
    var markers = xml.documentElement.getElementsByTagName("marker");

    //clear markers before you start drawing new ones
    resetMarkers(markersArray);

    for (var i = 0; i < markers.length; i++) {
        var idp = markers[i].getAttribute("idp");
        var polys = markers[i].getAttribute("polys");

        var genpolys = [];
        var json = JSON.parse('{"polys":['+polys+']}');
        for(var coord in json.polys){
            genpolys[coord] = new google.maps.LatLng(json.polys[coord][0],json.polys[coord][1]);    
        }

        var flightPath = new google.maps.Polyline({
        path: genpolys,
        geodesic: true,
        strokeColor: '#FF0000',
        strokeOpacity: 1.0,
        strokeWeight: 2,
        map: map
        });

        markersArray.push(marker);
    }

    setTimeout(function() {
        downloadUrl("echo.php", processXML);
    }, 19000);
}

Надеюсь, это поможет вам разобраться. Я адаптировал ответ с этой страницы: как динамически рисовать полилинии на картах Google.

person Jordan Powell    schedule 07.11.2014
comment
Спасибо @JordanPowell за быстрый ответ !!, все еще не работает. Я ставлю предупреждение (точка); и оповещение(геополис); и я получаю "NaN" - person Victor Cormano; 08.11.2014
comment
В написанном мной коде есть ошибка, которая не позволяет создавать объекты LatLng. Я постараюсь сделать это лучше, когда буду свободен. А пока посмотрите, получится ли у вас что-нибудь с этим: jsfiddle.net/4a87k/263 @VictorCormano - person Jordan Powell; 08.11.2014
comment
Это должно сделать это, если я неправильно понимаю ваше намерение. Я понял, что вы имеете в виду, что для каждого XML-тега ‹marker /› может быть любое количество пар координат в атрибуте polys. См. здесь: jsfiddle.net/4a87k/265 При запуске используются четыре пары координат. - person Jordan Powell; 08.11.2014
comment
Да, @JordanPowell, работает, но теперь я обнаружил, что «скрипт» не обновляется автоматически (без функции setTimeout). Мне нужно вручную нажать F5, чтобы обновить положение объекта и трассу ¿? - person Victor Cormano; 08.11.2014
comment
@VictorCormano, вам нужно добавить тайм-аут (фактически изменить его на интервал) с downloadUrl обратно. См. правки здесь: jsfiddle .net/4a87k/266 - person Clint Powell; 08.11.2014
comment
@VictorCormano Похоже, ваша первоначальная проблема решена. Пожалуйста, проголосуйте и выберите мой ответ. Вы можете создать новый вопрос для оставшейся проблемы, чтобы его могли увидеть пользователи с большим опытом. - person Jordan Powell; 08.11.2014