javascript - 使用 svg 对象作为谷歌地图的容器

标签 javascript jquery html css svg

正如标题所说,我有一个 svg 对象,我希望该对象包含一个 Google map 实例。我试图以与通常使用 div 或简单元素相同的方式来执行此操作,使用 Javascript 和 getElementByID并将 map 放在元素内。然而,这似乎在这里不起作用。我做了很多搜索,但由于谷歌使用 svg 作为自定义图标并覆盖所有响应都与此相关。关于将 id="map_canvas 放在哪里,我主要尝试了不同的方法但没有任何效果。

我的 HTML 以 svg 作为对象:

<div class="row map">

 <div class="span12">

    <object type="image/svg+xml" id="map_canvas" data="assets/map/MA_map.svg"></object>

 </div>

</div>

我的 JavaScript(目前位于 <head> 标签中,但我想将其移至 .js 文档):

<script>
    function initialize() {
        var mapCanvas = document.getElementById('map_canvas');
        var mapOptions = {
            center: new google.maps.LatLng(44.5403, -78.5463),
            zoom: 8,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        }
        var map = new google.maps.Map(mapCanvas, mapOptions)
    }
    google.maps.event.addDomListener(window, 'load', initialize);
</script>

最后这就是我的 svg文件看起来像(在 Illustrator 中创建):

<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<svg version="1.1" 
 id="map_canvas" 
 xmlns="http://www.w3.org/2000/svg" 
 xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"

 viewBox="-79.892 94.942 960 599.864" 
 enable-background="new -79.892 94.942 960 599.864"
 xml:space="preserve">

<filter id="dropshadow" height="130%">
<feGaussianBlur in="SourceAlpha" stdDeviation="3"/> <!-- stdDeviation is how much to blur -->
<feOffset dx="2" dy="2" result="offsetblur"/> <!-- how much to offset -->
<feMerge> 
<feMergeNode/> <!-- this contains the offset blurred image -->
<feMergeNode in="SourceGraphic"/> <!-- this contains the element that the filter is applied to -->
</feMerge>
</filter>

<path  
 id="map_canvas" 
 style="filter:url(#dropshadow)" 

 <path //lots of lines of code for the path />

 </svg>

最佳答案

您可以尝试的可能解决方案:

  1. 使用 SVG <foreignObject><clipPath><mask> .不过,我不确定它的效果如何。

  2. 使用 CSS 掩码 ( http://caniuse.com/#feat=css-masks )。

  3. 创建 map Polygon与背景颜色相同,大小与 map 相同,并且有一个形状与面具形状相同的孔。

  4. <img> 覆盖 map (例如 PNG)与背景具有相同的颜色或纹理,并且有一个与您的面具形状相同的孔。

关于javascript - 使用 svg 对象作为谷歌地图的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26064490/

相关文章:

javascript - 如何用我要编辑的html表中行的数据填充表单中的输入字段

javascript - 在 html 中显示任一下拉列表

javascript - 在浏览器中禁用 PDF 中嵌入的 JavaScript(XSS 攻击)

javascript - 将事件监听器添加到 html 绘图

javascript - 单击后禁用 `<h:commandButton>`,但应触发操作

javascript - axios删除调用返回405,我尝试使用id删除节点,但它没有删除

java - 更新动态 JSP 内容

javascript - 在类加载时删除图像

javascript - 读取外部 HTTPS 站点的 JSON 提要

asp.net - 设置单选按钮列表的样式