2017-01-18 60 views
0

我尝试使用动态生成的svg创建一个svg图钉(example)。不幸的是,它不能在地图上正确显示引脚。我四处挖掘,发现bing地图API将src设置为base64编码图像。svg in data uri not rendered

所以我试图将图像源复制到js小提琴中,看看bing maps API或浏览器是否有问题。 它正在为简单的相似图片

<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50"> 
    <circle id="circle" cx="25" cy="25" r="25" /> 
</svg> 

但更复杂一点的图像不会呈现

<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50"> 
    <defs> 
     <circle id="circle" cx="25" cy="25" r="25" /> 
    </defs> 
    <clipPath id="clip"></clipPath> 
    <image xlink:href="https://www.gravatar.com/avatar/08b73d0a58fc120a8cc8dc561d83b3d6.jpg?s=50&d=mm" x="0" y="0" height="50" width="50" /> 
</svg> 

JS小提琴:https://jsfiddle.net/w1yn9Lo8/6/

两个图像得到渲染好的,如果我贴他们直接转换成HTML。这里有什么问题?

+0

SVG图像使用帆布标记在Bing地图中不受支持,因为地图控件需要使用SVG并立即在HTML画布上绘制它们。因为这样的图像没有机会加载。 – rbrundritt

回答

1

当您使用SVG文件作为数据URI时,您不能有任何外部引用,因此在将包装SVG文件编码为数据URI之前,您必须将jpg编码为数据uri。

+0

有没有一种很好的方式,而不需要手动通过http请求图像? –

+0

取决于gravatar是否支持CORS,如果它可以通过XMLHttpRequest在JavaScript中执行。 –

0

问题是pushpin的SVG内容无法绘制卸载的图像,即使您在SVG中使用内部foreignObject。

我会用画布代替SVG。您可以在其中使用所有画布基元。

我的解决办法是有:Bing Maps API v8 - pushpin SVG URI image

  • 预加载的图像到对象(对象的阵列)
  • 绘制图像和/或另一个基元在帆布和在图钉