Я хотел бы выводить несколько маршрутов Google Map на одну карту Google. Данные берутся из XML-файла с несколькими маркерами. Каждый маркер имеет начальную точку и конечную точку (в виде значений широты и долготы). Эти маркеры затем добавляются на карту, и вызов в службу Google Maps Directions Service делается для маршрутизации между начальной и конечной точками каждого маркера.Отображение нескольких маркеров и направлений карты Google на одной карте
Проблема, с которой я сталкиваюсь, заключается в том, что нарисован только один маршрут (если я обновляю страницу, она, кажется, просто выбирает один из маркеров наугад и рисует направления между этими двумя маркерами). Другие маркеры вообще не отображаются.
У меня есть console.logged цикл for, чтобы проверить, что он запущен для каждого маркера в XML (это). Я предполагаю, что это что-то делать с этими двумя линиями здесь, но это предположение ...
directionsDisplay = new google.maps.DirectionsRenderer();
directionsService = new google.maps.DirectionsService();
Я прочитал этот вопрос - Using Google Maps 3 API to get multiple routes on a Map, но на самом деле не понимаю, ответ/знаю, как это касается моей ситуации. Благодарю.
jQuery(document).ready(function($) {
var map = new google.maps.Map(document.getElementById("map_canvas"), {
zoom: 13,
mapTypeId: 'roadmap'
});
// Try HTML5 geolocation
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
var pos = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
map.setCenter(pos);
map.setZoom(13);
}, function() {
handleNoGeolocation(true);
});
} else {
// Browser doesn't support Geolocation
handleNoGeolocation(false);
}
directionsDisplay = new google.maps.DirectionsRenderer();
directionsService = new google.maps.DirectionsService();
// Change this depending on the name of your PHP file
downloadUrl("xml.php", function(data) {
var xml = data.responseXML;
var markers = xml.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
var title = markers[i].getAttribute("title");
mode = markers[i].getAttribute("mode");
startpoint = new google.maps.LatLng(
parseFloat(markers[i].getAttribute("startlat")),
parseFloat(markers[i].getAttribute("startlng")));
endpoint = new google.maps.LatLng(
parseFloat(markers[i].getAttribute("endlat")),
parseFloat(markers[i].getAttribute("endlng")));
calcRoute();
console.log('marker');
}
});
directionsDisplay.setMap(map);
});
function calcRoute() {
var request = {
origin: startpoint,
destination: endpoint,
//waypoints: waypts,
travelMode: google.maps.DirectionsTravelMode[mode]
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(response);
}
});
}
function downloadUrl(url, callback) {
var request = window.ActiveXObject ?
new ActiveXObject('Microsoft.XMLHTTP') :
new XMLHttpRequest;
request.onreadystatechange = function() {
if (request.readyState == 4) {
request.onreadystatechange = doNothing;
callback(request, request.status);
}
};
request.open('GET', url, true);
request.send(null);
}
function doNothing() {}
Спасибо за ответ Майкл. Я пробовал свой код, но получил «Uncaught TypeError: Не могу прочитать свойство« documentElement »неопределенного в этой строке - var markers = xml.documentElement.getElementsByTagName (« marker »); Есть идеи? – GuerillaRadio
Простите, что я плохо, я забыл дважды проверить код, когда я изменил его, чтобы использовать '$ .get()' вместо 'downloadUrl()'. Я обновил код, чтобы удалить «var xml = data.responseXML;», поскольку он больше не нужен, и добавить явный тип данных '' xml'' в вызов '$ .get()' (последний параметр, после обратного вызова).Это может не понадобиться, если ваш сервер устанавливает правильный заголовок типа MIME для XML-файла, но добавление этого параметра гарантирует, что jQuery анализирует XML для вас. –
Отлично, спасибо большое Майклу. – GuerillaRadio