Как использовать значок SVG абсолютного пути с AdvancedMarker?

Работаю над переходом на AdvancedMarker, поскольку Marker устарел в Картах Google. Я пытаюсь перенести маркер, но они зря его усложнили...

Раньше у меня был простой маркер SVG

   new google.maps.Marker({
       position:loc,
       map:map,
       title: title,
       icon: '/img/marker.svg'
   }); 

Теперь, после миграции, я не могу хоть убей понять, как использовать тот же путь для абсолютного беспорядка PinElement.

    const pinElement = new google.maps.marker.PinElement({
        glyph: new URL('/img/marker.svg'),
    });

    new google.maps.marker.AdvancedMarkerElement({
        position: loc,
        map: map,
        title: title,
        content: pinElement
    }); 


    Failed to construct 'URL': Invalid URL

Как загрузить этот URL-адрес БЕЗ указания домена в глифе? Мы используем это в нескольких средах, поэтому домен может меняться, поэтому я хочу использовать абсолютный URL-адрес.

Поведение ключевого слова "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) для оценки ваших знаний,...
1
0
399
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Отвечу на свой вопрос, может кому-то помогу. Просмотрев документацию, полную опечаток и ошибок, я нашел это решение на случайной странице:

 let img = document.createElement("img");            
 img.src ='/img/marker.svg';

 new google.maps.marker.AdvancedMarkerElement({
      position: loc,
      map: map,
      title: title,
      content: img
 });

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

async function initMap() {

  // Request needed libraries.
  const { Map } = await google.maps.importLibrary("maps");
  const { AdvancedMarkerElement, PinElement } = await google.maps.importLibrary(
    "marker",
  );
  
  const center = { lat: 0, lng: 0 }

  const map = new Map(document.getElementById("map"), {
    center: center,
    zoom: 5,
    mapId: "4504f8b37365c3d0",
  });

  // A marker with a custom SVG glyph.
  const glyphImg = document.createElement("img");

  glyphImg.src =
    "https://dev.w3.org/SVG/tools/svgweb/samples/svg-files/check.svg";

  const glyphSvgPinElement = new PinElement({
   glyph: glyphImg,
   background: '#fff'
  });
  
  const glyphSvgMarkerView = new AdvancedMarkerElement({
    map,
    position: center,
    content: glyphSvgPinElement.element,
    title: "A marker using PinElement",
  });
}

initMap();
#map {
  height: 180px;
}
<div id = "map"></div>

<!-- prettier-ignore -->
<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: "beta"});</script>

Если вы используете SVG в качестве контента AdvancedMarker, графика составит весь маркер.

async function initMap() {

  // Request needed libraries.
  const { Map } = await google.maps.importLibrary("maps");
  const { AdvancedMarkerElement, PinElement } = await google.maps.importLibrary("marker");
  const center = { lat: 0, lng: 0 };

  const map = new Map(document.getElementById("map"), {
    center: center,
    zoom: 5,
    mapId: "4504f8b37365c3d0",
  });

  const parser = new DOMParser();
  // A marker with a custom inline SVG.
  const pinSvgString = '<svg xmlns = "http://www.w3.org/2000/svg" height = "50" width = "50" viewBox = "0 0 100 100"><path d = "M30,76q6-14,13-26q6-12,14-23q8-12,13-17q3-4,6-6q1-1,5-2q8-1,12-1q1,0,1,1q0,1-1,2q-13,11-27,33q-14,21-24,44q-4,9-5,11q-1,2-9,2q-5,0-6-1q-1-1-5-6q-5-8-12-15q-3-4-3-6q0-2,4-5q3-2,6-2q3,0,8,3q5,4,10,14z" fill = "green"/></svg>';
  
  const pinSvg = parser.parseFromString(
    pinSvgString,
    "image/svg+xml"
  ).documentElement;

  const pinSvgMarkerView = new AdvancedMarkerElement({
    map,
    position: center,
    content: pinSvg,
    title: "A marker using a custom SVG image.",
  });
}

initMap();
#map {
  height: 180px;
}
<div id = "map"></div>

<!-- prettier-ignore -->
<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: "beta"});</script>

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