How to delete Markers from Google Maps

Asked

Viewed 69 times

1

Hi, I’m creating a map that reads the data from Google Places and returns to the nearest stores within a 50,000-meter radius. It works perfectly, however, when I search another location in the search, the markers don’t fade. I created a function to delete the previous markers, but unfortunately it didn’t work. Any help is welcome! And thank you for your attention! Follow the code:

var map;
var cont = 0;

function initMap() {
  // Create the map.

  map = new google.maps.Map(document.getElementById('map'), {
    center: {
      lat: -14.5,
      lng: -70
    },
    zoom: 4
  });

  var input = document.getElementById('pac-input');

  var autocomplete = new google.maps.places.Autocomplete(input);

  autocomplete.bindTo('bounds', map);

  // Specify just the place data fields that you need.
  autocomplete.setFields(['place_id', 'geometry', 'name', 'formatted_address', 'formatted_phone_number']);

  map.controls[google.maps.ControlPosition.TOP_LEFT].push(input);

  var infowindow = new google.maps.InfoWindow();
  var infowindowContent = document.getElementById('infowindow-content');
  infowindow.setContent(infowindowContent);

  var geocoder = new google.maps.Geocoder;



  var marker = new google.maps.Marker({
    map: map
  });
  marker.addListener('click', function() {
    infowindow.open(map, marker);
  });

  autocomplete.addListener('place_changed', function() {
    infowindow.close();
    var ul = document.getElementById("places");
    while (ul.firstChild) {
      ul.removeChild(ul.firstChild);
    }

    //DeleteMarker(places);
    var place = autocomplete.getPlace();
    var pyrmont = place.geometry.location;
    console.log(place.geometry.location);
    // Create the places service.
    var service = new google.maps.places.PlacesService(map);
    var getNextPage = null;
    var moreButton = document.getElementById('more');
    moreButton.onclick = function() {
      moreButton.disabled = true;
      if (getNextPage) getNextPage();
    };

    if (!place.place_id) {
      return;
    }
    console.log(place.geometry.location);
    geocoder.geocode({
      'placeId': place.place_id
    }, function(results, status) {
      if (status !== 'OK') {
        window.alert('Geocoder failed due to: ' + status);
        return;
      }

      map.setZoom(11);
      map.setCenter(results[0].geometry.location);

      // Set the position of the marker using the place ID and location.
      marker.setPlace({
        placeId: place.place_id,
        location: results[0].geometry.location
      });

      // Perform a nearby search.
      service.nearbySearch({
          location: pyrmont,
          rankBy: google.maps.places.RankBy.DISTANCE,
          /*radius: 10000,*/
          name: ['lojas']

        },

        function(results, status, pagination) {
          if (status !== 'OK') return;

          createMarkers(results);
          moreButton.disabled = !pagination.hasNextPage;
          getNextPage = pagination.hasNextPage && function() {
            pagination.nextPage();
          };
        });

      marker.setVisible(true);

      function createMarkers(places) {
        var bounds = new google.maps.LatLngBounds();
        var placesList = document.getElementById('places');
        cont = 1;
        for (var i = 0, place; place = places[i]; i++) {
          var image = {
            url: place.icon,
            size: new google.maps.Size(71, 71),
            origin: new google.maps.Point(0, 0),
            anchor: new google.maps.Point(17, 34),
            scaledSize: new google.maps.Size(25, 25)
          };

          var marker = new google.maps.Marker({
            map: map,
            icon: image,
            label: cont.toString(),
            title: place.name,
            position: place.geometry.location,
          });
          console.log(place.formatted_phone_number);
          var li = document.createElement('li');
          var proc = "<span class='modal-store-number'>" + cont + "</span>";
          li.innerHTML = proc + " " + place.vicinity;
          /* li.textContent =  proc + " " + place.vicinity; */
          console.log(place);
          placesList.appendChild(li);
          bounds.extend(place.geometry.location);
          cont++;


        }

        map.fitBounds(bounds);

        function DeleteMarker(places) {
          if (cont >= 1) {
            for (i = 0; i < cont; i++) {
              places[i].setMap(null);
            }
          }
        }

      }


      infowindowContent.children['place-name'].textContent = place.name;
      infowindowContent.children['place-id'].textContent = place.place_id;
      infowindowContent.children['place-address'].textContent =
        results[0].formatted_address;

      infowindow.open(map, marker);


    });
  });

}
#map {
  height: 100%;
}


/* Optional: Makes the sample page fill the window. */

html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}

#right-panel {
  font-family: 'Roboto', 'sans-serif';
  line-height: 30px;
  padding-left: 10px;
}

#right-panel select,
#right-panel input {
  font-size: 15px;
}

#right-panel select {
  width: 100%;
}

#right-panel i {
  font-size: 12px;
}

#right-panel {
  font-family: Arial, Helvetica, sans-serif;
  position: absolute;
  left: 11%;
  top: 36%;
  /* margin-top: -195px; */
  height: 260px;
  width: 300px;
  padding: 5px;
  z-index: 5;
  border: 1px solid #999;
  background: #fff;
}

h2 {
  font-size: 22px;
  margin: 0 0 5px 0;
}

ul {
  list-style-type: none;
  padding: 0;
  margin: 0;
  height: 226px;
  width: 300px;
  overflow-y: scroll;
}

li {
  background-color: #f1f1f1;
  padding: 10px;
  text-overflow: ellipsis;
  white-space: inherit;
  overflow: hidden;
  display: flex;
  align-items: flex-start;
}

li:nth-child(odd) {
  background-color: #fcfcfc;
}

#more {
  width: 100%;
  margin: 5px 0 0 0;
}

#pac-input {
  z-index: 0;
  position: absolute;
  left: 1.2% !important;
  top: 20% !important;
  width: 288px;
  padding: 10px;
}

.modal-store-number {
  font-family: Calibri;
  font-size: 18px;
  font-weight: 900;
  padding: 8px 16px;
  background-color: #e2e2e2;
  flex-shrink: 0;
  margin-right: 16px;
}


/* Fim Padrão */


/* Novo */

.modal-box {
  position: fixed;
  top: 0px;
  left: 0px;
  height: 100vh;
  width: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
  background-color: rgba(0, 0, 0, .5);
  font-family: arial;
  font-size: 16px;
}

.modal {
  width: 80%;
  height: 70%;
}
<div class="modal-box">
  <div class="modal">
    <div id="map"></div>
    <div id="infowindow-content">
      <span id="place-name" class="title"></span>
      <strong style="display: none;">Place ID</strong> <span id="place-id" style="display: none;"></span><br>
      <span id="place-address"></span>
    </div>
    <div class="grp">
      <div style="display: none">
        <input id="pac-input" class="controls" type="text" placeholder="Digite seu Endereço">
      </div>
      <div id="right-panel">
        <h2>Lojas:</h2>
        <ul id="places"></ul>
        <button id="more" style="display:none;">More results</button>
      </div>
    </div>
  </div>
</div>
<script src="https://maps.googleapis.com/maps/api/js?key=SUA_CHAVE
&libraries=places&callback=initMap" async defer></script>

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.