Пин-элемент Карт Google

Как и многие, я пытаюсь перейти на AdvancedMarkerElement в API Javascript Google Maps. Я следил за документацией и до сих пор:

<script defer src = "https://maps.googleapis.com/maps/api/js?key = {{env("GOOGLE_JAVASCRIPT_APIKEY")}}&loading=async&callback=gmapinit&v=weekly&libraries=marker"></script>

затем далее для обратного вызова:

async function gmapinit() {//used as callback,required by the api when loading it
      const {AdvancedMarkerElement} = await google.maps.importLibrary("marker");
      const {PinElement} = await google.maps.importLibrary("marker");
      GMap = new G_Map();//own wrapper class
}

Успешно работает базовый AdvancedMapMarker на карте с:

  let marker = new google.maps.marker.AdvancedMarkerElement({
        map: this.map, position: markerposition, title: title,
      });
      let iconImg = document.createElement("img");
      iconImg.src = optargs.icon;
      marker.content = iconImg;

Однако здесь нет масштабирования изображения, которое я хотел бы сделать программно. Итак, пытаясь изменить вышеизложенное на

  let iconImg = document.createElement("img");
  iconImg.src = optargs.icon;
  let pin = new PinElement({
    scale: 1.5,
    content: iconImg,

  });
  let marker = new google.maps.marker.AdvancedMarkerElement({
    map: this.map, position: markerposition, title: title,
    content: pin.element
  });

Где возникает ошибка:

ReferenceError: PinElement is not defined

Итак, мой вопрос: как загрузить PinElement в код согласно примерам - я явно где-то упускаю что-то простое.

Приведите минимальный воспроизводимый пример, демонстрирующий вашу проблему. Если вы используете изображение для своей иконки, я не думаю, что вы захотите использовать PinElement. Из документации: PinElement представляет собой элемент DOM, состоящий из фигуры и глифа. Фигура имеет тот же стиль выноски, что и в элементе AdvancedMarkerElement по умолчанию.

geocodezip 18.05.2024 20:01

Как я могу создать пример, когда PinElement не определен

Datadimension 18.05.2024 20:44

Я не вижу этой ошибки в опубликованных вами фрагментах. Как выглядит ваш код с этой ошибкой?

geocodezip 19.05.2024 00:54
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
3
1 582
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, я заметил небольшую ошибку наследования класса с исправлением, где в документации Google указано:

  let pin = new PinElement({

https://developers.google.com/maps/documentation/javascript/advanced-markers/basic-customization#hide-the-glyph

становится

  let pin = new google.maps.marker.PinElement({

Код изображения в пине:

  let iconImg = document.createElement("img");
  iconImg.src = optargs.icon;
  iconImg.style = "width:2em";
  let pin = new google.maps.marker.PinElement({
    scale: 1.25,
    background: "#F7D32F",
    glyph: iconImg,

  });
  let marker = new google.maps.marker.AdvancedMarkerElement({
    map: this.map, position: markerposition, title: title,
    content: pin.element,
    gmpClickable: true
  });

Ошибка явно заключалась в ссылке на класс google.maps.marker.PinElement и в части исходного вопроса.

Минимальный рабочий пример никогда не мог бы быть получен без исправления того, что было задано изначально, и без видимой ошибки.

Поправка:

Я также заметил состояние Google Docs

<script defer src = "https://maps.googleapis.com/maps/api/js?key = {{env("GOOGLE_JAVASCRIPT_APIKEY")}}&callback=gmapinit&v=weekly&libraries=marker"></script>

что вызвало у меня несколько дней недоумения относительно того, почему это работает на сервере разработки, но не работает вживую. Это произошло потому, что сервер разработки работает медленнее с инструментами отладки и API, загруженным вовремя, однако он не был доступен на более быстром работающем сервере. Поэтому я внес небольшую корректировку, чтобы API карты загружался в верхней части кода и делал его доступным сразу после загрузки, поэтому я перешел на

<script async src = "https://maps.googleapis.com/maps/api/js?key = {{env("GOOGLE_JAVASCRIPT_APIKEY")}}&callback=gmapinit&v=weekly&libraries=marker"></script>

Иногда возникают состояния гонки, но, как правило, лучше подождать времени, чтобы просмотреть мой класс-оболочку GMaps.

Другие вопросы по теме