我在我的应用中使用Google地图。
用户可以在地图中的任何位置放置标记。
为此我编写了以下代码:
var marker;
function myMap() {
var mapCanvas = document.getElementById("map-canvas");
var myCenter=new google.maps.LatLng(50.833,-12.9167);
var mapOptions = {center: myCenter, zoom: 5};
var map = new google.maps.Map(mapCanvas, mapOptions);
google.maps.event.addListener(map, 'click', function(event) {
//marker.setMap(null); // this line does not work
placeMarker(map, event.latLng);
});
}
function placeMarker(map, location) {
marker = new google.maps.Marker({
position: location,
map: map
});
}
标记应始终移动到用户单击的位置。 这条线
marker.setMap(null);
应该删除旧标记(放置新标记之前)。 但是,在代码中使用此行我不能再放置任何标记。不包括此行意味着每个标记都保留在地图中并且不会被删除(即地图随着时间的推移填满标记)。
答案 0 :(得分:1)
问题是当setMap
变量没有此方法时,您在第一次单击后尝试使用方法marker
。因此,首先检查marker
是否包含该方法,然后调用它。
google.maps.event.addListener(map, 'click', function(event) {
// check if setMap is available and call it.
if(marker.hasOwnProperty('setMap')){
marker.setMap(null);
}
placeMarker(map, event.latLng);
});
答案 1 :(得分:1)
查看javascript控制台,您会看到Uncaught TypeError: Cannot read property 'setMap' of undefined
。第一次,标记为null
,您只需将其地图属性设置为null
(如果已存在)。
google.maps.event.addListener(map, 'click', function(event) {
if (marker) marker.setMap(null);
placeMarker(map, event.latLng);
});
代码段
var marker;
function myMap() {
var mapCanvas = document.getElementById("map-canvas");
var myCenter = new google.maps.LatLng(50.833, -12.9167);
var mapOptions = {
center: myCenter,
zoom: 5
};
var map = new google.maps.Map(mapCanvas, mapOptions);
google.maps.event.addListener(map, 'click', function(event) {
if (marker) marker.setMap(null);
placeMarker(map, event.latLng);
});
}
function placeMarker(map, location) {
marker = new google.maps.Marker({
position: location,
map: map
});
}
google.maps.event.addDomListener(window, "load", myMap);

html,
body,
#map-canvas {
height: 100%;
width: 100%;
margin: 0px;
padding: 0px
}

<script src="https://maps.googleapis.com/maps/api/js"></script>
<div id="map-canvas"></div>
&#13;