EDIT: Мне удалось получить эту работу, а последний фрагмент кода - это решение для моего кода.Google Maps редактирует несколько маркеров из массива
Невероятно новый здесь, и я сожалею, если мой вопрос не совершенен.
Я создаю сайт с картой Google.
Пользователь вводит свой собственный адрес или Geolocate, чтобы найти свою позицию, тогда сценарий вычисляет расстояние между пользователем и всеми филиалами офисов. Выбираются 3 самых близких ответвления.
Пользователь может изменить свой адрес на лету или переключиться на геолокацию, наоборот, в фиксированном меню.
Мне нужно будет направлять пользователя в ближайший офис и делиться содержимым div с кнопками для вызова функций JS, поэтому маркеры должны быть полностью отредактированы. Вы, ребята, говорите мне, если лучше просто удалить все маркеры и возродить их, или лучше изменить маркеры на месте.
После геолокации или геокодирования, он вызывает эту функцию:
Edit: предупреждение BAD CODE!
function successCall(position) {
//Gets data from both getLocation & codeAddress !
// Branch_id and distance for all branches
// Resets the arrays.
var branches_distance = [];
var branches_closest = [];
var userlat = position.coords.latitude;
var userlng = position.coords.longitude;
//Store ID and Distance of branch in array
for (i = 0; i < branches_array.length; i++){
var branch_distance = {
id: branches_array[i].branch_id,
distance: calculateDistance(userlat, userlng, branches_array[i].branch_lat, branches_array[i].branch_lng)
}
branches_distance.push(branch_distance);
}
//Sort branches_distance from closest to farthest
for (i = 0; i < branches_distance.length; i++){
sortByKey(branches_distance, 'distance');
}
//Populate branches_closest with branch IDs
for (i = 0; i < branchesToShow; i++){ // SETTING
branches_closest.push(branches_distance[i].id);
}
//TIME TO MAKE MARKERS AND ROUTE MOTHERFUCKERS
createMarkers(branches_closest, userlat, userlng);
}
и функция createMarkers:
Edit: предупреждение BAD CODE!
var markers = [];
zero = 0;
function createMarkers(closest_items, ulat, ulng) {
//If markers array is empty, create markers
if(zero == markers.length){
//Create User Loc marker and push in the array
var userLatLng = new google.maps.LatLng(ulat, ulng);
var uMarker = new google.maps.Marker({
position: userLatLng,
id: 'user'
});
markers.push(uMarker);
//Create branches markers
for (i = 0; i < closest_items.length; i++){
var result = $.grep(branches_array, function(e){ return e.branch_id == closest_items[i]; });
var latLng = new google.maps.LatLng(result[0].branch_lat, result[0].branch_lng);
var marker = new google.maps.Marker({
position: latLng,
id: closest_items[i]
});
markers.push(marker);
}
for (index in markers) {
addMarker(markers[index]);
}
console.log(markers);
} else {
console.log('I just want to update my markers :\'(');
}
}
Я в точке, где, когда вы вводите второй адрес, он console.log строку. Я много пробовал, но не могу редактировать маркеры или удалять их.
Если вы, ребята, можете просто указать, где искать, любая помощь будет оценена по достоинству.
Большое спасибо и имейте в виду, что я здесь довольно новый, поэтому, если мой вопрос неуместен/неполный, пожалуйста, оставьте положительную информацию об этом, чтобы я мог стать лучше!
Edit: Теперь я получил это работает, главные в том, что вам нужно вызвать эту функцию для каждого маркера:
google.maps.event.добавления слушателя (маркер, "нажмите", функция() {});
Я удалил всю функцию addMarker и поместил код непосредственно в createMarkers();
var markers = []; // хранящие маркеры
функция createMarkers (closest_items, ulat, ulng) {
clearOverlays(); var infowindow = new google.maps.InfoWindow(); //Markers have been cleared, hurray, lets pop some new var uLatLng = new google.maps.LatLng(ulat, ulng); umarker = new google.maps.Marker({ position: uLatLng, map: map, title: 'user' }); markers.push(umarker); google.maps.event.addListener(umarker,"click",function(){ infowindow.setContent(umarker.title); infowindow.open(map, umarker); }); for (i = 0; i < closest_items.length; i++) { var result = $.grep(branches_array, function(e){ return e.branch_id == closest_items[i]; }); var latLng = new google.maps.LatLng(result[0].branch_lat, result[0].branch_lng); marker = new google.maps.Marker({ position: latLng, map: map, title: closest_items[i].toString() }); markers.push(marker); google.maps.event.addListener(marker,"click",function(){ infowindow.setContent(this.title); infowindow.open(map, this); }); } makeRoute(); }
Очистка текущие маркеры:
function clearOverlays() {
for (var i = 0; i < markers.length; i++){
markers[i].setMap(null);
}
markers.length = 0;
}
Он не удаляет текущие маркеры! Это то, над чем я работал целый день! А для цикла и setPosition, setMap, setTitle и т. Д. Я пробовал много вещей и читал учебники, и ничего не работает: \ –