openlayers加载svg,如何在OpenLayers-3中将SVG图像用作地图标记?

I am trying to create map "pin-drops" (ie. map markers) in OpenLayers-3 (OL3) using SVG images.

Currently, I am using PNG images as the pindrops that reference the ol.style.Icon source (“src”) property attribute just fine. However, this fails using an SVG image. Is there some other way to use an SVG in the same manner? Maybe by using a reference besides ol.style.Icon even? There is already a lot of built-in SVG in Open Layers so this should be possible, but I haven't found a way to get this working in OL3. Is there some other way to do this in OL3 that I should consider?

Please note: we already tried using an ol.Vector layer, however when the user zooms in/out, the size of the SVG image grows/shrinks which is an inadequate workaround.

OL3 (fails):

var createMapMarkerImage = function() {

return function(feature, resolution) {

var iconStyle = new ol.style.Style({

image: new ol.style.Icon( ({

src: 'img/map_pindrop.svg' // OL3 doesn’t like this, but accepts a .PNG just fine

}))

});

return [iconStyle];

};

};

Very similar functionality, is the below example I found online, is almost perfect if it weren’t for the fact that the example uses OpenLayers-2 (OL2) functionality which calls openlayers.js library (instead of OL3’s ol.js library). Sadly, swapping these javascript files out fails.

OL2 (works -but is the old OL library):

Searching online for a solution to this seems to produce only other confused people searching for a solution.

Please help,

FreeBeer

解决方案

Based on @ahocevar answer, you can use data URIs for SVG:

new ol.style.Style({

image: new ol.style.Icon({

anchor: [0, 0],

src: 'data:image/svg+xml;utf8,/* SVG DATA */'

})

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值