ThinkGeo.com    |     Documentation    |     Premium Support

Scale of the DefaultZoom ; ScaleBar

 Hi, 


 
I have few questions about the definition of the DefaultZoom and th scaleBar.
 
So far, I used the zoom by default with the associated scale.
The scalebar is displayed.
When the zoomlevel equals to ZoomLevel01, the scaleBar displayed is 0 as in the screenShot


 
When the zoomlevel equals to ZoomLevel20, the scaleBar displayed is 100 meters.

 
I would like to increase the scale minimum and the scale maximum.
So the code is  : 
 
  double d = map.CurrentScale;
 map.ZoomLevelSet.ZoomLevel01.Scale = Math.Round(d, 10);
 map.ZoomLevelSet.ZoomLevel02.Scale = Math.Round(map.ZoomLevelSet.ZoomLevel01.Scale / 2, 10);
 map.ZoomLevelSet.ZoomLevel03.Scale = Math.Round(map.ZoomLevelSet.ZoomLevel02.Scale / 2, 10);
 map.ZoomLevelSet.ZoomLevel04.Scale = Math.Round(map.ZoomLevelSet.ZoomLevel03.Scale / 2, 10);
map.ZoomLevelSet.ZoomLevel05.Scale = Math.Round(map.ZoomLevelSet.ZoomLevel04.Scale / 2, 10);
 map.ZoomLevelSet.ZoomLevel06.Scale = Math.Round(map.ZoomLevelSet.ZoomLevel05.Scale / 2, 10);
map.ZoomLevelSet.ZoomLevel07.Scale = Math.Round(map.ZoomLevelSet.ZoomLevel06.Scale / 2, 10);
 map.ZoomLevelSet.ZoomLevel08.Scale = Math.Round(map.ZoomLevelSet.ZoomLevel07.Scale / 2, 10);
 map.ZoomLevelSet.ZoomLevel09.Scale = Math.Round(map.ZoomLevelSet.ZoomLevel08.Scale / 2, 10);
 map.ZoomLevelSet.ZoomLevel10.Scale = Math.Round(map.ZoomLevelSet.ZoomLevel09.Scale / 2, 10);
 map.ZoomLevelSet.ZoomLevel11.Scale = Math.Round(map.ZoomLevelSet.ZoomLevel10.Scale / 2, 10);
  map.ZoomLevelSet.ZoomLevel12.Scale = Math.Round(map.ZoomLevelSet.ZoomLevel11.Scale / 2, 10);
 map.ZoomLevelSet.ZoomLevel13.Scale = Math.Round(map.ZoomLevelSet.ZoomLevel12.Scale / 2, 10);
map.ZoomLevelSet.ZoomLevel14.Scale = Math.Round(map.ZoomLevelSet.ZoomLevel13.Scale / 2, 10);
 map.ZoomLevelSet.ZoomLevel15.Scale = Math.Round(map.ZoomLevelSet.ZoomLevel14.Scale / 2, 10);
 map.ZoomLevelSet.ZoomLevel16.Scale = Math.Round(map.ZoomLevelSet.ZoomLevel15.Scale / 2, 10);
 map.ZoomLevelSet.ZoomLevel17.Scale = Math.Round(map.ZoomLevelSet.ZoomLevel16.Scale / 2, 10);
 map.ZoomLevelSet.ZoomLevel18.Scale = Math.Round(map.ZoomLevelSet.ZoomLevel17.Scale / 2, 10);
 map.ZoomLevelSet.ZoomLevel19.Scale = Math.Round(map.ZoomLevelSet.ZoomLevel18.Scale / 2, 10);
 map.ZoomLevelSet.ZoomLevel20.Scale = Math.Round(map.ZoomLevelSet.ZoomLevel19.Scale / 2, 10);
 
 map.MinimumScale = Math.Round(map.ZoomLevelSet.ZoomLevel19.Scale / 2, 10);
 map.MaximumScale = Math.Round(d, 10);
 
Display when the ZoomLevel is 01 ;

 
Display when the zoomLevel is 17 : 

 
 
Display when the ZoomLevel is upper to 17

 
When the LevelZoom is upper than the ZoomLevel17 then the scalebar disapear.
Is it Normal ? I have this case because the ZoomLevel is too hight (upper than 10 meters) ?
 
 
2) The meaning of the scaleBar : 


I believed that the scale bar represented  a distance. 
Thus if I draw a line similar to the scaleBar then the calculation of the distance should be the same. 
As you can see in the screen shot, the scalebar represents a distance of 20 meters but the calculation of the distance is equal to 42 meters.
IS there normal ? Or I misunderstand the meaning of the scaleBar ?
 
Thanks a lot for your help
 
Regards.
 
Steph.

 
 

Hi Steph, 
  
 Currently the scaleline does not support the small scales, the minimum value is 10 meters, we may support the small values in the near future, and for your second question, the scaleline represents the value in the middle of the map cause the length is different in different latitude. if you pan the line to the middle of the map, I think the length is the value you want, 
  
 Regards, 
 Edgar

Hi Edgar, 


Thanks for your help.


For the 1st question => OK.


For the 2nd one, I did differents tests and every time the distance of the first line of the polygon was exactly the double of the distance represented by the scalebar. 


I understood why, it 's because i use GetPerimeter() and not GetLength().I did the test with GetLegnth and the scaleBar is OK.


Sorry ;-(


Thanks again.


Regards.


Steph.



Glad to hear that your second has been solved, if you have any questions please let us know. 
  
 Regards, 
 Edgar

Hi 



I have questions about the link between the scale (zoomtoscale), currentscale and the scalebar / scaline.


I joined one zip with 4 screenshots.
The value in pink textbox is the scale desired 

Code  : mapSiane.ZoomToScale(Double.Parse(Scale.Text));



The value in blue textbox is the value of currentScale.
Code : Currentscale.Text = mapSiane.CurrentScale.ToString();


Question 1 :
I don’t understand the difference between the 2 values. 

Because if i said zoom to the scale 500000, the current scale should be 500000 … No ?



Question 2 : 
How do you calculate the value in scalebar (50 km) when I set scale equals to 500000.



Question 3 : 

How do you calculate the width of the scalebar when I set scale equals to 500000.





Thanks for your help.
Regards.
Steph.

20141218.zip (72.9 KB)

Hi Steph, 
  
 For your first question, I think that’s should because our map will auto snap to nearest zoomlevel, so you cannot zoom to a specified scale unless it’s the scale of one zoomlevel. Like your screen capture shows, the 1128 should be the scale of zoomlevel20. 
  
 So you should want to use custom zoomlevelset if you need zoom to a exactly scale value. 
  
 For the second and third questions, I tried to read the logic but it looks it’s not implemented by a simple formula, so could I know what’s your target for the question 2 and 3, so that I can decide whether I need look into it or we can find some other solution. 
  
 Regards, 
  
 Don




Hi Don, 



Thanks for your answer.
I asked the question 2 and 3 because I test the printing of wpfmap
When I define a scale in the application (ex  : 1:50000), the width of the control wpfmap is 7 inches and height equals to 10 inches for example.



If I want the scale for the printing equals to 1:50000, I have to set a width equals to 7 inches and height equals to 10 for the MapPrinterLayer.
But in my case, the width and the height of the mapprinter are smaller (or larger ) so the scale of the printing is  different … no ?
How to resolve this problem ? (ie have the same scale displayed in the map control and printing)



Thanks.
Regards

Steph.

Hi Steph, 
  
 For WPF Desktop edition, I am sorry we cannot close snapping mode for zoomlevel.  
  
 If you want to zoom to the scale for the printing equals to 1:50000, what you want to do is create custom zoomlevel by your scale, then put all the zoomlevels to wpfMap1.ZoomLevelSet.CustomZoomLevels. You can zoom to the scale you want now. 
  
 Regards, 
  
 Don