ThinkGeo.com    |     Documentation    |     Premium Support

Understanding ZoomLevelSet and ApplyUntilZoomLevel

Hi,


I've been playing around with rendering zoom levels differently.


My understanding was that zoom level 1 is the "world view" and zoom level 20 is the "detailed view". I use customized zoom levels, but I assume that this won't change the overall workings of zoom levels.


Is this correct ?


When I set styles on a particular zoom level, and use ApplyUntilZoomLevel, it seems that none of the "applied-to" zoom levels have any styles attached to them.


E.g., if I first add styles to zoom level 10, and apply it until level 20, I would except all zoom levels 11-20 to have a copy of the styles in 10. So when I later add one additional style to zoom level 15, and apply that level until level 20, I would expect zoom levels 16-20 to contain the sum of styles from zoom levels 10 and 15 (or rather just a copy of 15's, but the net effect is the same).


But it doesn't work that way, apparently. So I assume that you just let "applied-to" zoom levels somehow refer back to source zoom level.


Is this also correct ?


If so, multiple ApplyUntilZoomLevel assignments will produce unexpected results, as I assume a single level can only refer back to one other zoom level.


Correct ?


 



Anyone ? 


Hello Lars I, 
  
 Thanks for your post and sorry for wait, as far as I know, both of your questions’ answer are correct. 
  
 Everytime ApplyToZoomLevel, it will replace the new style to the zoomlevel not add the style to the style collection, like your example, after two times apply, now the 16-20 zoomlevels only have the style of 15. 
  
 Sorry this is the way it designed, I will discuss with product team and reconsider this, if I get any news, I will post here and let you know. 
  
 Regards, 
  
 Gary

Hi Gary, 
  
 No worries, I just needed to get this right, as I was experiencing some unexpected behaviour due to my faulty expectation. 
  
 I assume there’s no problems in fully populating the style collections for each zoom level, i.e. not use “ApplyUntil”, except perhaps for performance ? 
  
 Cheers. 


Oh, and another related question: 
  
 When applying styles to features in custom style classes (i.e. in their DrawCore routine), are the features bundled according to unique style, or are each feature’s assigned style class invoked individually regardless of multiple features using identical styles ? 
  
 Cheers. 
  


Hello Lars I, 
  
 For your first question, yes, there’s no problems in fully populating the style collections for each zoom level, the reason we have the ApplyUntil is because it’s too boring to set the style to every zoomlevels one by one. 
  
 For second question, “each feature’s assigned style class” this is wrong, not feature has the styles, when we enter a new zoomlevel, we will check any available styles and draw these styles to all features in this layer. 
  
 Regards, 
  
 Gary

Hi Gary,


Ok wrt. the first question.


As for the second question - how styles are applied - you're right of course.


However, the style I'm setting (on zoom levels) is dynamic in content. It reads an encoded "style command" from a database table column (names of which are passed), decodes this value (in DrawCore), and draws a specific style according to what the "style command" contains.


I was wondering about how this played out internally in Map Suite.


From your post, I assume that features are sent to the top style class in any order, making the specific rendering of each feature independent of the rendering of all other features. I.e., no grouping of any kind is - or can be - done. Correct ?


I think that what I'm trying to do is wrap my mind around the "reverse logic" used. I.e. not 'feature->draw(style)', but 'style->draw(feature)'. Which way the logic works makes a difference if a specific style is very performance heavy in its rendering (as some of mine are).


Is there any way to group features together based on (final) style assignment ?


 



 Lars,


I take over this post and just feel free to let me know if you have more questions.


I have read the whole conversation, but still not very clear your requirement, could you use some fake code to describe that maybe more easy.


Our MapSuite is very flexible, you can use any sub system to finish your task, such as Style, you can only use it to draw features on a bitmap according to the settings of it, below is the sample code:


 GdiPlusGeoCanvas canvas = new GdiPlusGeoCanvas();


            Bitmap bitmap = new Bitmap(800,600);


            canvas.BeginDrawing(bitmap, new RectangleShape(-100,100,100,-100), GeographyUnit.DecimalDegree);


            style.Draw(features, canvas, new Collection<SimpleCandidate>(), new Collection<SimpleCandidate>());


            canvas.EndDrawing();


Thanks,


James