Google карты с прослушивателем onclick - PullRequest
0 голосов
/ 13 марта 2019

У меня проблема с прослушивателем onclick на этой карте. Я хочу, чтобы, когда пользователь нажимал на карту, добавлялся новый маркер и записывался долгота и широта, а затем обновлялась информация. А пока что он делает, чтобы добавить новый маркер вместо замены существующего. Если бы кто-то мог помочь, я был бы признателен.

Спасибо. Код ниже:

<div id="map" style="height: 500px;"> </div>

<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=MyApiKey&callback=initMap"></script>
<script type="text/javascript">

var geocoder = new google.maps.Geocoder();
var map;  
var markers = [];

function geocodePosition(pos) {
  geocoder.geocode({
    latLng: pos
  }, function(responses) {
    if (responses && responses.length > 0) {
      updateMarkerAddress(responses[0].formatted_address);
    } else {
      updateMarkerAddress('Cannot determine address at this location.');
    }
  });
}

function updateMarkerStatus(str) {
  document.getElementById('markerStatus').innerHTML = str;
}

function updateMarkerPosition(latLng) {
  document.getElementById('pdb-longitude').value = latLng.lng();
  
  document.getElementById('pdb-latitude').value = latLng.lat();
}

function updateMarkerAddress(str) {
  document.getElementById('address').innerHTML = str;
}

function updateMarkerPosition(latLng) {
  document.getElementById('info').innerHTML = [
    latLng.lat(),
    latLng.lng()
  ].join(', ');
}

 function setMapOnAll(map) {  
  for (var i = 0; i < markers.length; i++) {  
    markers[i].setMap(map);  
  }  
} 
  
  function showMarkers() {  
  setMapOnAll(map); 
    addMarker(latLng);  
}  
  
  function clearMarkers() {  
  setMapOnAll(null);  
}  


function initialize() {
    
  var minZoomLevel = 13;
  
  var latLng = new google.maps.LatLng(49.691219873776326, -112.83338917980956);
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: minZoomLevel,
    center: latLng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  });
  
   var marker = new google.maps.Marker({  
    position: latLng,
     draggable: true,  
    map: map  
  });
  
  var strictBounds = new google.maps.LatLngBounds(
new google.maps.LatLng(49.63987509237867, -112.853138917980956),
 new google.maps.LatLng(49.731199873776326, -112.82058917980956));
 
 
function addMarker(location, map) {  
  var marker = new google.maps.Marker({  
    position: location,
     draggable: true,  
    map: map  
  });  
  markers.push(marker);
  geocodePosition(marker.getPosition());
  updateMarkerPosition(marker.getPosition());

}
  // Update current position info.
  updateMarkerPosition(latLng);
  geocodePosition(latLng);

  // Add dragging event listeners.
  google.maps.event.addListener(marker, 'dragstart', function() {
    updateMarkerAddress('Dragging...');
  });

  google.maps.event.addListener(marker, 'drag', function() {
    updateMarkerStatus('Dragging...');
    updateMarkerPosition(marker.getPosition());
  });

  google.maps.event.addListener(marker, 'dragend', function() {
    nupdateMarkerStatus('Location successfully Recorded ! Fill in the form below');
    geocodePosition(marker.getPosition());
 });
 
  // This event listener will call addMarker() when the map is clicked.  
  google.maps.event.addListener(map, 'click', function(event) { 
  //  showMarkers();  
    clearMarkers();
    addMarker(event.latLng, map);
	updateMarkerPosition(marker.getPosition());
    geocodePosition(marker.getPosition());
  });

 
 
 // Listen for the dragend event
 google.maps.event.addListener(map, 'dragend', function () {
  if (strictBounds.contains(map.getCenter())) return;

     // We're out of bounds - Move the map back within the bounds

     var c = map.getCenter(),
         x = c.lng(),
         y = c.lat(),
         maxX = strictBounds.getNorthEast().lng(),
         maxY = strictBounds.getNorthEast().lat(),
         minX = strictBounds.getSouthWest().lng(),
         minY = strictBounds.getSouthWest().lat();

     if (x < minX) x = minX;
     if (x > maxX) x = maxX;
     if (y < minY) y = minY;
     if (y > maxY) y = maxY;

     map.setCenter(new google.maps.LatLng(y, x));
     
 //    marker.setPosition(c);
     
    
 });
 
  // Limit the zoom level
 google.maps.event.addListener(map, 'zoom_changed', function () {
     if (map.getZoom() < minZoomLevel) map.setZoom(minZoomLevel);
 });
}

// Onload handler to fire off the app.
google.maps.event.addDomListener(window, 'load', initialize);
</script>

<div id="infoPanel">
    <b>Location status:</b>
    <div id="markerStatus"><i>Click and drag the marker.</i></div>
    <b>Current position:</b>
    <div id="info"></div>
    <b>Closest matching address:</b>
    <div id="address"></div>
</div>
<br>
...