С помощью маркеров можно показывать на карте отдельные местоположения. В этой статье показано, как добавить маркер на карту программно или с помощью пользовательских элементов HTML.
Как загрузить библиотеку расширенных маркеров
Чтобы добавить на карту расширенный маркер, код карты должен загружать библиотеку marker, которая предоставляет классы AdvancedMarkerElement и PinElement. Это необходимо независимо от того, как приложение загружает маркеры: программно или с помощью HTML. А чтобы это происходило, приложение должно сначала загружать Maps JavaScript API.
Метод загрузки библиотек зависит от того, как на ваших страницах загружается Maps JavaScript API.
Если скрипт загружается динамически, добавьте библиотеку маркеров и импортируйте элемент
AdvancedMarkerElement(и, если нужно,PinElement) при выполнении, как показано ниже.const { AdvancedMarkerElement, PinElement } = await google.maps.importLibrary("marker");
Если на ваших страницах используется тег для прямой загрузки скрипта, добавьте в загрузочный скрипт параметр
libraries=marker, как показано во фрагменте кода ниже. В результате будут импортированы какAdvancedMarkerElement, так иPinElement.<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap&v=weekly&libraries=marker" defer ></script>
Как задать идентификатор карты
Чтобы использовать расширенные маркеры, потребуется идентификатор карты (подойдет DEMO_MAP_ID).
Задайте идентификатор карты в ее параметрах, как показано ниже.
const map = new Map(document.getElementById('map') as HTMLElement, { center: { lat: 37.4239163, lng: -122.0947209 }, zoom: 14, mapId: 'DEMO_MAP_ID', });
Если вы используете веб-компоненты, то можете задать идентификатор карты непосредственно в элементе gmp-map:
<gmp-map center="37.4239163,-122.0947209" zoom="14" map-id="DEMO_MAP_ID"></gmp-map>
Подробнее об идентификаторах карт…
Как добавить маркер с помощью пользовательских элементов HTML
Чтобы поместить на карту расширенный маркер с помощью пользовательских элементов HTML, добавьте в элемент gmp-map дочерний элемент gmp-advanced-marker. Во фрагменте кода ниже показано, как добавить маркеры на веб-страницу:
<gmp-map
center="41.027748173921374, -92.41852445367961"
zoom="13"
map-id="DEMO_MAP_ID">
<gmp-advanced-marker
position="41.027748173921374, -92.41852445367961"
title="Ottumwa, IA"></gmp-advanced-marker>
</gmp-map>Посмотреть полный пример исходного кода
В этом примере показано, как создать карту с маркерами с помощью HTML.
TypeScript
// This example adds a map with markers, using web components.JavaScript
// This example adds a map with markers, using web components.CSS
/* Note: This CSS file is intentionally blank. */
HTML
<html>
<head>
<title>Add a Map with Markers using HTML</title>
<style>
gmp-map {
height: 100%;
}
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
</style>
<script type="module" src="./index.js"></script>
<script
async
src="https://maps.googleapis.com/maps/api/js?loading=async&key=GOOGLE_MAPS_API_KEY&libraries=maps,marker"></script>
</head>
<body>
<gmp-map
center="41.027748173921374, -92.41852445367961"
zoom="13"
map-id="DEMO_MAP_ID">
<gmp-advanced-marker
position="41.027748173921374, -92.41852445367961"
title="Ottumwa, IA"></gmp-advanced-marker>
</gmp-map>
</body>
</html>Как добавить маркер программным способом
Чтобы добавить расширенный маркер на карту программно, создайте новый элемент AdvancedMarkerElement и добавьте его на карту, как показано в примере:
TypeScript
const mapElement = document.querySelector('gmp-map')!; async function init() { // Request needed libraries. const [{ AdvancedMarkerElement }] = await Promise.all([ google.maps.importLibrary('marker'), google.maps.importLibrary('maps'), ]); const marker = new AdvancedMarkerElement({ position: { lat: 37.4239163, lng: -122.0947209 }, }); mapElement.append(marker); }
JavaScript
const mapElement = document.querySelector('gmp-map'); async function init() { // Request needed libraries. const [{ AdvancedMarkerElement }] = await Promise.all([ google.maps.importLibrary('marker'), google.maps.importLibrary('maps'), ]); const marker = new AdvancedMarkerElement({ position: { lat: 37.4239163, lng: -122.0947209 }, }); mapElement.append(marker); }
Добавлять элементы можно только при использовании веб-компонентов. Если карта загружается с помощью элемента div, используйте свойство map, чтобы связать маркер с экземпляром карты, как показано ниже:
myMap = new google.maps.Map(document.getElementById("map"), {
center: { lat: -34.397, lng: 150.644 },
zoom: 8,
});
const marker = new AdvancedMarkerElement({
map: myMap,
position: { lat: -34.397, lng: 150.644 },
});Как удалить маркер
Чтобы удалить маркер с карты, установите для marker.map или marker.position значение null.
// Set the map to null. marker.map = null; // Set the position to null. marker.position = null;
Посмотреть полный пример исходного кода
В этом примере показано, как добавить маркер на карту.
TypeScript
const mapElement = document.querySelector('gmp-map')!; async function init() { // Request needed libraries. const [{ AdvancedMarkerElement }] = await Promise.all([ google.maps.importLibrary('marker'), google.maps.importLibrary('maps'), ]); const marker = new AdvancedMarkerElement({ position: { lat: 37.4239163, lng: -122.0947209 }, }); mapElement.append(marker); } void init();
JavaScript
const mapElement = document.querySelector('gmp-map'); async function init() { // Request needed libraries. const [{ AdvancedMarkerElement }] = await Promise.all([ google.maps.importLibrary('marker'), google.maps.importLibrary('maps'), ]); const marker = new AdvancedMarkerElement({ position: { lat: 37.4239163, lng: -122.0947209 }, }); mapElement.append(marker); } void init();
CSS
/* * Always set the map height explicitly to define the size of the div element * that contains the map. */ gmp-map { height: 100%; } /* * Optional: Makes the sample page fill the window. */ html, body { height: 100%; margin: 0; padding: 0; }
HTML
<html>
<head>
<title>Default Advanced Marker</title>
<link rel="stylesheet" type="text/css" href="./style.css" />
<script type="module" src="./index.js"></script>
<script>
// prettier-ignore
(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: "GOOGLE_MAPS_API_KEY"
});
</script>
</head>
<body>
<gmp-map
center="37.4239163,-122.0947209"
zoom="14"
map-id="4504f8b37365c3d0"></gmp-map>
</body>
</html>Дальнейшие действия
- Узнайте, как выполнить базовую настройку маркера.