You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

嵌入SVG标记的图片作为Google Maps图标无法显示,如何解决?

解决Google Maps Marker SVG图标中嵌入图片无法显示的问题

我懂你遇到的麻烦了——把SVG作为Marker的图标URL时,里面嵌入的外部图片总是显示成损坏状态,其实这是浏览器安全策略和Google Maps对Marker图标的加载限制在搞鬼。

问题根源

当你把SVG以data:image/svg+xml;utf-8的形式作为Marker的icon.url时,这个SVG属于"data URI"独立源,而你引用的外部图片(比如示例里的WebP图)属于另一个域名的资源。浏览器的同源安全策略会阻止跨源资源在这种场景下加载,所以图片自然无法正常显示。

可行解决方案

把外部图片转换成Base64编码,直接嵌入到SVG的<image>元素中,这样就不需要依赖外部资源加载,完美避开跨域限制。

修改后的完整代码示例

<div id="map_canvas"></div>
<script>
var geocoder;
var map;
function initialize() {
  var map = new google.maps.Map(
    document.getElementById("map_canvas"), {
      center: new google.maps.LatLng(37.4419, -122.1419),
      zoom: 13,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    });
  var time = "00:15:30";
  // 把目标图片转换为Base64编码(可通过在线工具完成转换)
  var base64Image = "data:image/webp;base64,UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAABBxAR/Q9ERP8DAABWUDggGAAAADABAJ0BKgEAAQADADQlpAADcAD++/1QAA==";
  var testIcon = {
    anchor: new google.maps.Point(10, 10),
    url: 'data:image/svg+xml;utf-8,<svg width="100" height="100" class="crop-shapes" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <line x1="28" y1="40" x2="32" y2="60" style="stroke:#666; stroke-width:1"/><line x1="32" y1="60" x2="50" y2="50" style="stroke:#666; stroke-width:1"/><circle cx="45" cy="30" r="20" fill="#2ECC71" style="stroke:#000; stroke-width:1"/><text id="timer_text" class="timer" x="30" y="32" fill="#000000" font-size="9" font-weight="bold">00:10:30</text> <circle id="svg_circle" cx="20" cy="70" r="15" fill="#ffffff" style="stroke:#000; stroke-width:1"/><image xlink:href="' + base64Image + '" x="0" y="45" height="50" width="50"/></svg>'
  }
  marker = new google.maps.Marker({
    position: map.getCenter(),
    map: map,
    icon: testIcon,
    title: 'Hello World!'
  });
}
google.maps.event.addDomListener(window, "load", initialize);
</script>

额外注意点

  • 你可以用在线Base64转换工具把自己的目标图片转成编码,替换代码里的base64Image内容即可。
  • SVG的<image>元素的height和width属性不需要加px单位,加了反而可能导致显示异常。

内容的提问来源于stack exchange,提问作者Siddu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:47:30