2015-01-09 7 views
0

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; 
} 

ответ

0

Я предлагаю вам удалить все маркера и вызовите снова:

...... 
} else { 
     for (var i = 0; i < markers.length; i++) { 
      markers[i].setMap(null); // remove marker 
     } 

     // Reset the array 
     markers = []; 

     // Call the function again. The markers size will be zero and 
     // everything will work fine! 
     createMarkers(closest_items, ulat, ulng); 
} 
+0

Он не удаляет текущие маркеры! Это то, над чем я работал целый день! А для цикла и setPosition, setMap, setTitle и т. Д. Я пробовал много вещей и читал учебники, и ничего не работает: \ –

0

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

DEMO http://jsfiddle.net/cmd932z3/20/

function clearMarkers() { 
    setAllMap(null); 
} 

function showMarkers() { 
    setAllMap(map); 
} 

function updateMarkers() { 
    clearMarkers(); 
    markers = []; 
} 
+0

Маркеры не удаляются, и все дублируется: \ Было бы это потому, что маркеры создаются в другой функции ? Может быть, маркеры не хранятся в маркерах [x]? –

Смежные вопросы