我有一张地图,它根据搜索填充标记。我正在尝试使用较新的谷歌地图功能
AdvancedMarkerView
,这样我就可以用自定义 HTML 填充它 - 但是,随着我的搜索更新,我想刷新旧标记并在需要时放置新标记......并且我我一生都无法弄清楚如何做吗? https://developers.google.com/maps/documentation/javascript/reference/advanced-markers
下面放置自定义标记。它有效。
const content = document.createElement('div');
content.className = 'marker-title';
content.textContent = item.title;
const marker = new google.maps.marker.AdvancedMarkerView({
map,
position: item.position,
content
});
通常对于标记,就像在旧标记中一样,我已经使用以下代码删除了它们,
markers.forEach((marker) => marker.setMap(null))
但这似乎不适用于高级标记。由于创建高级标记时返回的标记指向该元素,因此我还尝试执行 marker.remove()
,认为 HTML 元素将成为目标,但没有雪茄。
当涉及到高级标记时,我无法在 Google API 文档中找到任何具体示例,对于其他提出相同问题的人来说也是如此。
没有
setMap()
或其他方法可以调用AdvancedMarkerView
类来切换其可见性或将其从地图中删除。
虽然不是很清楚,但文档说:
要从地图上删除标记,请将
属性设置为markerView.map
。null
工作示例如下:
async function initMap() {
const { Map } = await google.maps.importLibrary("maps");
const { AdvancedMarkerElement } = await google.maps.importLibrary("marker");
const map = new Map(document.getElementById("map"), {
center: { lat: 37.39094933041195, lng: -122.02503913145092 },
zoom: 14,
mapId: "4504f8b37365c3d0",
});
const draggableMarker = new AdvancedMarkerElement({
map,
position: { lat: 37.39094933041195, lng: -122.02503913145092 },
draggable: true,
title: "This marker is draggable. Click to remove.",
});
draggableMarker.addListener("click", (event) => {
// Remove AdvancedMarkerElement from Map
draggableMarker.map = null;
});
map.addListener("click", (event) => {
// Set AdvancedMarkerView position and add to Map
draggableMarker.position = event.latLng;
draggableMarker.map = map;
});
}
initMap();
#map {
height: 160px;
}
<div id="map"></div>
<script>
(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
key: "AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk",
v: "weekly",
});
</script>