Openlayers: Update scale from resolution in cached features? The 2019 Stack Overflow Developer Survey Results Are InOpenLayers 3 function resolution?OpenLayers 3: Refreshing OSM layer upon resolution changeRemove All Features from Vector Layer in OpenLayers 3OpenLayers 3 scale past nativeZoom like Leaflet?Hide/filter features from Openlayers 3Zoom Scale in OpenLayers 3GeoJSON external file reloading - caching issuesOpenLayers 3 geolocation updateOpenLayers 4 styling draw featuresOpenlayers with Cached Bing Maps?

Why “相同意思的词” is called “同义词” instead of "同意词"?

Is it possible for absolutely everyone to attain enlightenment?

Deal with toxic manager when you can't quit

Did the UK government pay "millions and millions of dollars" to try to snag Julian Assange?

Is it ok to offer lower paid work as a trial period before negotiating for a full-time job?

What to do when moving next to a bird sanctuary with a loosely-domesticated cat?

Why doesn't UInt have a toDouble()?

Cooking pasta in a water boiler

Dropping list elements from nested list after evaluation

What is the motivation for a law requiring 2 parties to consent for recording a conversation

Merge two greps into single one

Falsification in Math vs Science

How to notate time signature switching consistently every measure

Loose spokes after only a few rides

Inverse Relationship Between Precision and Recall

Getting crown tickets for Statue of Liberty

What is this sharp, curved notch on my knife for?

How to support a colleague who finds meetings extremely tiring?

How can I add encounters in the Lost Mine of Phandelver campaign without giving PCs too much XP?

How much of the clove should I use when using big garlic heads?

Can a flute soloist sit?

Why are there uneven bright areas in this photo of black hole?

Correct punctuation for showing a character's confusion

Does adding complexity mean a more secure cipher?



Openlayers: Update scale from resolution in cached features?



The 2019 Stack Overflow Developer Survey Results Are InOpenLayers 3 function resolution?OpenLayers 3: Refreshing OSM layer upon resolution changeRemove All Features from Vector Layer in OpenLayers 3OpenLayers 3 scale past nativeZoom like Leaflet?Hide/filter features from Openlayers 3Zoom Scale in OpenLayers 3GeoJSON external file reloading - caching issuesOpenLayers 3 geolocation updateOpenLayers 4 styling draw featuresOpenlayers with Cached Bing Maps?



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








0















I have a large number of cached vector features which I am caching for speed. However, as they need to change size depending on view resolution, I have to do various updates on them with each increment, which sort of defeats the purpose of caching.



Is there a way for cached styles to update their scale (and other options, like offSet) when resolution changes?



Here's the basic code:



const imageVectorStyle = function(image, resolution)
// Caching both the style and the icon, fyi.
let style = styleCache[image.getProperties().name];
if (style)
//The style exists in the cache, but since the resolution has changed
//since caching, I have to update the scale.
style.getImage().setScale(1 / resolution);
return style

else
const imageProperties = image.getProperties();
let imageIcon = iconcache[imageProperties.src];
if (!imageIcon)
imageIcon = new Icon(
offset: imageProperties.offset,
size: imageProperties.size,
stroke: new Stroke(color: '#dee2e6', width: 1 ),
// Here scale is set based on resolution when the style is first created.
scale: 1 / resolution,
crossOrigin: 'anonymous',
src: imageProperties.src
);












share|improve this question
























  • I don't get how why would you have to change size of vector feature based on resolution, that is what OL does automatically for you, is it not? You need to generalize the vectors or what? How do you cache the vectors? For some dynamic styling you can use style function

    – Catch
    May 15 '18 at 9:39











  • Once they are cached, they keep the map resolution at the moment they were cached. So for example, if I set icon scale = 1/resolution, that resolution value does not update when the map resolution changes.

    – Ben Upham
    May 16 '18 at 14:32











  • Do you change geometry after zoom or are you changing just style?

    – Catch
    May 17 '18 at 9:21











  • I change style, specifically the image scale -- style.getImage().setScale(1/resolution).

    – Ben Upham
    May 17 '18 at 21:59

















0















I have a large number of cached vector features which I am caching for speed. However, as they need to change size depending on view resolution, I have to do various updates on them with each increment, which sort of defeats the purpose of caching.



Is there a way for cached styles to update their scale (and other options, like offSet) when resolution changes?



Here's the basic code:



const imageVectorStyle = function(image, resolution)
// Caching both the style and the icon, fyi.
let style = styleCache[image.getProperties().name];
if (style)
//The style exists in the cache, but since the resolution has changed
//since caching, I have to update the scale.
style.getImage().setScale(1 / resolution);
return style

else
const imageProperties = image.getProperties();
let imageIcon = iconcache[imageProperties.src];
if (!imageIcon)
imageIcon = new Icon(
offset: imageProperties.offset,
size: imageProperties.size,
stroke: new Stroke(color: '#dee2e6', width: 1 ),
// Here scale is set based on resolution when the style is first created.
scale: 1 / resolution,
crossOrigin: 'anonymous',
src: imageProperties.src
);












share|improve this question
























  • I don't get how why would you have to change size of vector feature based on resolution, that is what OL does automatically for you, is it not? You need to generalize the vectors or what? How do you cache the vectors? For some dynamic styling you can use style function

    – Catch
    May 15 '18 at 9:39











  • Once they are cached, they keep the map resolution at the moment they were cached. So for example, if I set icon scale = 1/resolution, that resolution value does not update when the map resolution changes.

    – Ben Upham
    May 16 '18 at 14:32











  • Do you change geometry after zoom or are you changing just style?

    – Catch
    May 17 '18 at 9:21











  • I change style, specifically the image scale -- style.getImage().setScale(1/resolution).

    – Ben Upham
    May 17 '18 at 21:59













0












0








0








I have a large number of cached vector features which I am caching for speed. However, as they need to change size depending on view resolution, I have to do various updates on them with each increment, which sort of defeats the purpose of caching.



Is there a way for cached styles to update their scale (and other options, like offSet) when resolution changes?



Here's the basic code:



const imageVectorStyle = function(image, resolution)
// Caching both the style and the icon, fyi.
let style = styleCache[image.getProperties().name];
if (style)
//The style exists in the cache, but since the resolution has changed
//since caching, I have to update the scale.
style.getImage().setScale(1 / resolution);
return style

else
const imageProperties = image.getProperties();
let imageIcon = iconcache[imageProperties.src];
if (!imageIcon)
imageIcon = new Icon(
offset: imageProperties.offset,
size: imageProperties.size,
stroke: new Stroke(color: '#dee2e6', width: 1 ),
// Here scale is set based on resolution when the style is first created.
scale: 1 / resolution,
crossOrigin: 'anonymous',
src: imageProperties.src
);












share|improve this question
















I have a large number of cached vector features which I am caching for speed. However, as they need to change size depending on view resolution, I have to do various updates on them with each increment, which sort of defeats the purpose of caching.



Is there a way for cached styles to update their scale (and other options, like offSet) when resolution changes?



Here's the basic code:



const imageVectorStyle = function(image, resolution)
// Caching both the style and the icon, fyi.
let style = styleCache[image.getProperties().name];
if (style)
//The style exists in the cache, but since the resolution has changed
//since caching, I have to update the scale.
style.getImage().setScale(1 / resolution);
return style

else
const imageProperties = image.getProperties();
let imageIcon = iconcache[imageProperties.src];
if (!imageIcon)
imageIcon = new Icon(
offset: imageProperties.offset,
size: imageProperties.size,
stroke: new Stroke(color: '#dee2e6', width: 1 ),
// Here scale is set based on resolution when the style is first created.
scale: 1 / resolution,
crossOrigin: 'anonymous',
src: imageProperties.src
);









openlayers






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited May 23 '18 at 17:52







Ben Upham

















asked May 11 '18 at 20:26









Ben UphamBen Upham

32




32












  • I don't get how why would you have to change size of vector feature based on resolution, that is what OL does automatically for you, is it not? You need to generalize the vectors or what? How do you cache the vectors? For some dynamic styling you can use style function

    – Catch
    May 15 '18 at 9:39











  • Once they are cached, they keep the map resolution at the moment they were cached. So for example, if I set icon scale = 1/resolution, that resolution value does not update when the map resolution changes.

    – Ben Upham
    May 16 '18 at 14:32











  • Do you change geometry after zoom or are you changing just style?

    – Catch
    May 17 '18 at 9:21











  • I change style, specifically the image scale -- style.getImage().setScale(1/resolution).

    – Ben Upham
    May 17 '18 at 21:59

















  • I don't get how why would you have to change size of vector feature based on resolution, that is what OL does automatically for you, is it not? You need to generalize the vectors or what? How do you cache the vectors? For some dynamic styling you can use style function

    – Catch
    May 15 '18 at 9:39











  • Once they are cached, they keep the map resolution at the moment they were cached. So for example, if I set icon scale = 1/resolution, that resolution value does not update when the map resolution changes.

    – Ben Upham
    May 16 '18 at 14:32











  • Do you change geometry after zoom or are you changing just style?

    – Catch
    May 17 '18 at 9:21











  • I change style, specifically the image scale -- style.getImage().setScale(1/resolution).

    – Ben Upham
    May 17 '18 at 21:59
















I don't get how why would you have to change size of vector feature based on resolution, that is what OL does automatically for you, is it not? You need to generalize the vectors or what? How do you cache the vectors? For some dynamic styling you can use style function

– Catch
May 15 '18 at 9:39





I don't get how why would you have to change size of vector feature based on resolution, that is what OL does automatically for you, is it not? You need to generalize the vectors or what? How do you cache the vectors? For some dynamic styling you can use style function

– Catch
May 15 '18 at 9:39













Once they are cached, they keep the map resolution at the moment they were cached. So for example, if I set icon scale = 1/resolution, that resolution value does not update when the map resolution changes.

– Ben Upham
May 16 '18 at 14:32





Once they are cached, they keep the map resolution at the moment they were cached. So for example, if I set icon scale = 1/resolution, that resolution value does not update when the map resolution changes.

– Ben Upham
May 16 '18 at 14:32













Do you change geometry after zoom or are you changing just style?

– Catch
May 17 '18 at 9:21





Do you change geometry after zoom or are you changing just style?

– Catch
May 17 '18 at 9:21













I change style, specifically the image scale -- style.getImage().setScale(1/resolution).

– Ben Upham
May 17 '18 at 21:59





I change style, specifically the image scale -- style.getImage().setScale(1/resolution).

– Ben Upham
May 17 '18 at 21:59










1 Answer
1






active

oldest

votes


















0














If you want to style features based on resolution, you can use style function. It is used in this example. It is a function which takes feature and resolution as parameters and has to return instance of ol.Style, or array of styles.






share|improve this answer























  • I'm using style functions. The style function looks up the feature's icon in the cache first thing, to see if it can use the cached icon. However, because the resolution has changed since it was cached, I have to update the scale of the icon when I pull it from the cache.

    – Ben Upham
    May 19 '18 at 22:41











  • Can you please provide the styleFunction code? Very usefull would be also images of what you want to achieve...

    – Catch
    May 21 '18 at 5:35











  • Added code to question.

    – Ben Upham
    May 23 '18 at 17:53











  • Ok, I don't know if this is just the basics or the real code (because you don't have any return statement in the else section) but I assume it's just a scheme and you have it syntactically and logically correct. Have you tried not to cache the styles? Just make a function that creates and returns new ol.Style? Would it work? I don't think that it will be too much slower...

    – Catch
    May 24 '18 at 11:54











  • It's edited down. I will try, but I believe I needed to cache both the style and the icon to achieve good performance without flickering. I've got several thousand features...

    – Ben Upham
    May 24 '18 at 19:34











Your Answer








StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "79"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgis.stackexchange.com%2fquestions%2f282633%2fopenlayers-update-scale-from-resolution-in-cached-features%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









0














If you want to style features based on resolution, you can use style function. It is used in this example. It is a function which takes feature and resolution as parameters and has to return instance of ol.Style, or array of styles.






share|improve this answer























  • I'm using style functions. The style function looks up the feature's icon in the cache first thing, to see if it can use the cached icon. However, because the resolution has changed since it was cached, I have to update the scale of the icon when I pull it from the cache.

    – Ben Upham
    May 19 '18 at 22:41











  • Can you please provide the styleFunction code? Very usefull would be also images of what you want to achieve...

    – Catch
    May 21 '18 at 5:35











  • Added code to question.

    – Ben Upham
    May 23 '18 at 17:53











  • Ok, I don't know if this is just the basics or the real code (because you don't have any return statement in the else section) but I assume it's just a scheme and you have it syntactically and logically correct. Have you tried not to cache the styles? Just make a function that creates and returns new ol.Style? Would it work? I don't think that it will be too much slower...

    – Catch
    May 24 '18 at 11:54











  • It's edited down. I will try, but I believe I needed to cache both the style and the icon to achieve good performance without flickering. I've got several thousand features...

    – Ben Upham
    May 24 '18 at 19:34















0














If you want to style features based on resolution, you can use style function. It is used in this example. It is a function which takes feature and resolution as parameters and has to return instance of ol.Style, or array of styles.






share|improve this answer























  • I'm using style functions. The style function looks up the feature's icon in the cache first thing, to see if it can use the cached icon. However, because the resolution has changed since it was cached, I have to update the scale of the icon when I pull it from the cache.

    – Ben Upham
    May 19 '18 at 22:41











  • Can you please provide the styleFunction code? Very usefull would be also images of what you want to achieve...

    – Catch
    May 21 '18 at 5:35











  • Added code to question.

    – Ben Upham
    May 23 '18 at 17:53











  • Ok, I don't know if this is just the basics or the real code (because you don't have any return statement in the else section) but I assume it's just a scheme and you have it syntactically and logically correct. Have you tried not to cache the styles? Just make a function that creates and returns new ol.Style? Would it work? I don't think that it will be too much slower...

    – Catch
    May 24 '18 at 11:54











  • It's edited down. I will try, but I believe I needed to cache both the style and the icon to achieve good performance without flickering. I've got several thousand features...

    – Ben Upham
    May 24 '18 at 19:34













0












0








0







If you want to style features based on resolution, you can use style function. It is used in this example. It is a function which takes feature and resolution as parameters and has to return instance of ol.Style, or array of styles.






share|improve this answer













If you want to style features based on resolution, you can use style function. It is used in this example. It is a function which takes feature and resolution as parameters and has to return instance of ol.Style, or array of styles.







share|improve this answer












share|improve this answer



share|improve this answer










answered May 18 '18 at 6:40









CatchCatch

1836




1836












  • I'm using style functions. The style function looks up the feature's icon in the cache first thing, to see if it can use the cached icon. However, because the resolution has changed since it was cached, I have to update the scale of the icon when I pull it from the cache.

    – Ben Upham
    May 19 '18 at 22:41











  • Can you please provide the styleFunction code? Very usefull would be also images of what you want to achieve...

    – Catch
    May 21 '18 at 5:35











  • Added code to question.

    – Ben Upham
    May 23 '18 at 17:53











  • Ok, I don't know if this is just the basics or the real code (because you don't have any return statement in the else section) but I assume it's just a scheme and you have it syntactically and logically correct. Have you tried not to cache the styles? Just make a function that creates and returns new ol.Style? Would it work? I don't think that it will be too much slower...

    – Catch
    May 24 '18 at 11:54











  • It's edited down. I will try, but I believe I needed to cache both the style and the icon to achieve good performance without flickering. I've got several thousand features...

    – Ben Upham
    May 24 '18 at 19:34

















  • I'm using style functions. The style function looks up the feature's icon in the cache first thing, to see if it can use the cached icon. However, because the resolution has changed since it was cached, I have to update the scale of the icon when I pull it from the cache.

    – Ben Upham
    May 19 '18 at 22:41











  • Can you please provide the styleFunction code? Very usefull would be also images of what you want to achieve...

    – Catch
    May 21 '18 at 5:35











  • Added code to question.

    – Ben Upham
    May 23 '18 at 17:53











  • Ok, I don't know if this is just the basics or the real code (because you don't have any return statement in the else section) but I assume it's just a scheme and you have it syntactically and logically correct. Have you tried not to cache the styles? Just make a function that creates and returns new ol.Style? Would it work? I don't think that it will be too much slower...

    – Catch
    May 24 '18 at 11:54











  • It's edited down. I will try, but I believe I needed to cache both the style and the icon to achieve good performance without flickering. I've got several thousand features...

    – Ben Upham
    May 24 '18 at 19:34
















I'm using style functions. The style function looks up the feature's icon in the cache first thing, to see if it can use the cached icon. However, because the resolution has changed since it was cached, I have to update the scale of the icon when I pull it from the cache.

– Ben Upham
May 19 '18 at 22:41





I'm using style functions. The style function looks up the feature's icon in the cache first thing, to see if it can use the cached icon. However, because the resolution has changed since it was cached, I have to update the scale of the icon when I pull it from the cache.

– Ben Upham
May 19 '18 at 22:41













Can you please provide the styleFunction code? Very usefull would be also images of what you want to achieve...

– Catch
May 21 '18 at 5:35





Can you please provide the styleFunction code? Very usefull would be also images of what you want to achieve...

– Catch
May 21 '18 at 5:35













Added code to question.

– Ben Upham
May 23 '18 at 17:53





Added code to question.

– Ben Upham
May 23 '18 at 17:53













Ok, I don't know if this is just the basics or the real code (because you don't have any return statement in the else section) but I assume it's just a scheme and you have it syntactically and logically correct. Have you tried not to cache the styles? Just make a function that creates and returns new ol.Style? Would it work? I don't think that it will be too much slower...

– Catch
May 24 '18 at 11:54





Ok, I don't know if this is just the basics or the real code (because you don't have any return statement in the else section) but I assume it's just a scheme and you have it syntactically and logically correct. Have you tried not to cache the styles? Just make a function that creates and returns new ol.Style? Would it work? I don't think that it will be too much slower...

– Catch
May 24 '18 at 11:54













It's edited down. I will try, but I believe I needed to cache both the style and the icon to achieve good performance without flickering. I've got several thousand features...

– Ben Upham
May 24 '18 at 19:34





It's edited down. I will try, but I believe I needed to cache both the style and the icon to achieve good performance without flickering. I've got several thousand features...

– Ben Upham
May 24 '18 at 19:34

















draft saved

draft discarded
















































Thanks for contributing an answer to Geographic Information Systems Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgis.stackexchange.com%2fquestions%2f282633%2fopenlayers-update-scale-from-resolution-in-cached-features%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

រឿង រ៉ូមេអូ និង ហ្ស៊ុយលីយេ សង្ខេបរឿង តួអង្គ បញ្ជីណែនាំ

QGIS export composer to PDF scale the map [closed] Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?Print Composer QGIS 2.6, how to export image?QGIS 2.8.1 print composer won't export all OpenCycleMap base layer tilesSave Print/Map QGIS composer view as PNG/PDF using Python (without changing anything in visible layout)?Export QGIS Print Composer PDF with searchable text labelsQGIS Print Composer does not change from landscape to portrait orientation?How can I avoid map size and scale changes in print composer?Fuzzy PDF export in QGIS running on macSierra OSExport the legend into its 100% size using Print ComposerScale-dependent rendering in QGIS PDF output

PDF-ში გადმოწერა სანავიგაციო მენიუproject page