I've tried to set the URL from an icon but without success. In fact, I've been searching in OpenLayers API but I haven't seen any method to set it. In OpenLayers 2 I've seen that It's possible.
I want to be able to change the URL at any time.
Do you have any idea?
Answer
To answer your question, now that I understand it, there is no way to set the src
of an icon after instantiation. My guess would be because the creation of a style.Icon
object is tied in to the image cache somehow. The developers obviously thought not to duplicate that logic: https://github.com/openlayers/ol3/blob/v3.7.0/src/ol/style/iconstyle.js#L589
This example here shows you how to create an icon by referencing an image file. Note the data/icon.png
specified in the icon configuration is relative and resolves to http://openlayers.org/en/v3.7.0/examples/data/icon.png
. You could either use an absolute or relative url depending on what you need.
var iconStyle = new ol.style.Style({
image: new ol.style.Icon(/** @type {olx.style.IconOptions} */ ({
anchor: [0.5, 46],
anchorXUnits: 'fraction',
anchorYUnits: 'pixels',
opacity: 0.75,
src: 'data/icon.png'
}))
});
As with all other style types in OpenLayers, it is better to create a cache of styles instead of one style per feature. An example on how to do this would be roughly as follows:
var styleCache = [];
for (var i = 0; i < dataSet.length; i++) {
var data = dataSet[i];
var style;
if (styleCache[data.styleAttribute]) {
styleCache[data.styleAttribute] = new ol.style.Style({
image: new ol.style.Icon({ etc.. })
});
}
style = styleCache[data.styleAttribute];
var feature = new ol.Feature({ etc.. });
feature.setStyle(feature);
}
If you need to change the style on the fly, you would just reference one of the styles in the style cache, or add a new style to the cache, then reference it. On an existing feature you can change the style using feature.setStyle(iconStyle)
.
I hope this helps.
No comments:
Post a Comment