【问题标题】:Google maps marker as SVG (with image png tag inside)谷歌地图标记为 SVG(内部带有图像 png 标签)
【发布时间】:2017-04-24 10:18:44
【问题描述】:

是否可以在 SVG 块内使用 .png 图像作为谷歌地图标记?我想要一张图片并使用 SVG 过滤器以不同的颜色绘制它,然后用作谷歌标记。

至少现在我正在尝试使用不带过滤器的图片:

var svg = '<?xml version="1.0"?>' +
          '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="200px" width="200px" viewBox="0 0 200 200">' +
          '<image width="200" height="200" preserveAspectRatio="xMinYMin slice" xlink:href="{link.to.png.image}"/>' +
          '</svg>';

var icon = {
  url: 'data:image/svg+xml;charset=UTF-8,' + svg,
  scaledSize: iconSize // scaled size
};

如果我将采用 svg 代码并尝试仅通过浏览器使用它,它会呈现 ok

<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="200px" width="200px" viewBox="0 0 200 200">
<image width="200" height="200" preserveAspectRatio="xMinYMin slice" xlink:href="{link.to.png.image}"/>
</svg>

但是在尝试使用谷歌地图时它什么也没显示

【问题讨论】:

    标签: javascript google-maps svg


    【解决方案1】:

    我没有成功使用它的 URL 直接嵌入 PNG,在谷歌地图的 SVG 标记中。我尝试了 http 和 https。

    但是,如果您将二进制文件编码为 data-uri ,它就可以工作:

    var svg = '<?xml version="1.0"?>' +
              '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="200px" width="200px" viewBox="0 0 200 200">' +
              '<image width="200" height="200" preserveAspectRatio="xMinYMin slice" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="/>' +
              '</svg>';
    

    【讨论】:

    • 这种转换为数据 uri 是否可以通过盒子中的某个工具(Javascript 或类似的东西)完成?
    • @A.Khvorov :是的,但这是另一个问题。您可以查看 there 并尝试接受 Kaiido 的代码,如已接受的答案中所建议的那样,或者如果您的 html 中不需要此图像的“img”标签,则可以尝试 MuniR 的答案。
    • 非常感谢!
    【解决方案2】:

    我发现了一个可能对您有帮助的旧问题。

    Here

    var markercolor = "#fff";
    var icon = {
       path: "M-20,0a20,20 0 1,0 40,0a20,20 0 1,0 -40,0",
       fillColor: markercolor,
       fillOpacity: .6,
       anchor: new google.maps.Point(0,0),
       strokeWeight: 0,
       scale: 1
    }
    
    var marker = new google.maps.Marker({
        position: event.latLng,
        map: map,
        draggable: false,
        icon: icon
    });
    

    我认为最好的方法是将您的 .png 转换为带有 online converter 或类似名称的 .svg。 有什么理由需要 .png?

    【讨论】:

    • 在这些答案中,ppl 使用的是坐标而不是 png 文件。我的图片的路径存储在 db 中(以及所有其他图片),所以我需要获取存储在文件系统下的 png 文件,然后显示为 google 标记,但关键是我需要为这些 png 文件着色不同颜色取决于“类别”,我决定使用 SVG 的过滤标签
    • 我向您展示的转换网站有一个 API。您可以使用它直接在您的代码中进行转换。
    • 我找到了这 2 个也许对你有帮助:github.com/jankovicsandras/imagetracerjs
    猜你喜欢
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    相关资源
    最近更新 更多