Google 地图 (Javascript API):标记在图标和标签之间切换?
Google Maps (Javascript API): Markers toggle between Icon and Label?
我知道我们可以根据某些事件在标记上做一些事情,例如:
// var markers: stored somewhere above
map.addListener('zoom_changed', function() {
/**
* After if/else checking zoom_level , etc
* then:
*/
markers.forEach(function(marker){
marker.setOptions({
label: {
text: 'Something else',
color: '#ff0000',
}
}); //Change label text/color etc
marker.setIcon(url); //Change Icon
});
});
但是如何才能真正正确地 "hide" 标记图标(它只是 "Icon",而不是整个标记) 好吗?以至于我只能单独展示Label。 (根据情况在标记 图标与标签 之间切换)
我尝试了下面的所有方法,但都不起作用:
marker.setIcon(null);
marker.setIcon('');
marker.setIcon(' ');
您可以使用自定义标记图标来实现,因为您可以缩放图标,但不会缩放标签。
放大和缩小下面的代码片段以查看行为。
var marker;
function initialize() {
var myLatLng = new google.maps.LatLng(0, 0);
var mapOptions = {
zoom: 5,
center: myLatLng,
mapTypeId: google.maps.MapTypeId.ROADMAP,
zoomControl: true
};
var map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
marker = new google.maps.Marker({
position: myLatLng,
map: map,
label: 'HELLO WORLD',
});
setIconWithScale(marker, 0);
google.maps.event.addListener(map, 'zoom_changed', function() {
if (map.getZoom() >= 6) {
setIconWithScale(marker, 1);
} else {
setIconWithScale(marker, 0);
}
});
}
function setIconWithScale(marker, scale) {
marker.setIcon({
path: "M-20,0a20,20 0 1,0 40,0a20,20 0 1,0 -40,0",
fillColor: '#FF0000',
fillOpacity: .6,
anchor: new google.maps.Point(0, 0),
strokeWeight: 0,
labelOrigin: new google.maps.Point(0, 30),
scale: scale
});
}
#map-canvas {
height: 180px;
}
<div id="map-canvas"></div>
<!-- Replace the value of the key parameter with your own API key. -->
<script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&callback=initialize">
</script>
另一个选择是更改图标 fillOpacity
如果您需要使用 labelOrigin
并且不希望在更改图标比例时看到标签跳跃。
这应该有效:
marker.setIcon({
scale: <int>
});
我知道我们可以根据某些事件在标记上做一些事情,例如:
// var markers: stored somewhere above
map.addListener('zoom_changed', function() {
/**
* After if/else checking zoom_level , etc
* then:
*/
markers.forEach(function(marker){
marker.setOptions({
label: {
text: 'Something else',
color: '#ff0000',
}
}); //Change label text/color etc
marker.setIcon(url); //Change Icon
});
});
但是如何才能真正正确地 "hide" 标记图标(它只是 "Icon",而不是整个标记) 好吗?以至于我只能单独展示Label。 (根据情况在标记 图标与标签 之间切换)
我尝试了下面的所有方法,但都不起作用:
marker.setIcon(null);
marker.setIcon('');
marker.setIcon(' ');
您可以使用自定义标记图标来实现,因为您可以缩放图标,但不会缩放标签。
放大和缩小下面的代码片段以查看行为。
var marker;
function initialize() {
var myLatLng = new google.maps.LatLng(0, 0);
var mapOptions = {
zoom: 5,
center: myLatLng,
mapTypeId: google.maps.MapTypeId.ROADMAP,
zoomControl: true
};
var map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
marker = new google.maps.Marker({
position: myLatLng,
map: map,
label: 'HELLO WORLD',
});
setIconWithScale(marker, 0);
google.maps.event.addListener(map, 'zoom_changed', function() {
if (map.getZoom() >= 6) {
setIconWithScale(marker, 1);
} else {
setIconWithScale(marker, 0);
}
});
}
function setIconWithScale(marker, scale) {
marker.setIcon({
path: "M-20,0a20,20 0 1,0 40,0a20,20 0 1,0 -40,0",
fillColor: '#FF0000',
fillOpacity: .6,
anchor: new google.maps.Point(0, 0),
strokeWeight: 0,
labelOrigin: new google.maps.Point(0, 30),
scale: scale
});
}
#map-canvas {
height: 180px;
}
<div id="map-canvas"></div>
<!-- Replace the value of the key parameter with your own API key. -->
<script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&callback=initialize">
</script>
另一个选择是更改图标 fillOpacity
如果您需要使用 labelOrigin
并且不希望在更改图标比例时看到标签跳跃。
这应该有效:
marker.setIcon({
scale: <int>
});