Работаю над переходом на 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-адрес.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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