控制地图显示有几个重要参数:1,Zoom;2,Center;3,CurrentRange,下面我们详细介绍这几个参数的概念,关系以及如何控制地图显示的。
什么是Zoom?Zoom就是当前视窗显示的地理范围的宽度,也就是横向跨度。
什么是Center?顾名思义,Center就是当前视窗的地理中心点。
什么是CurrentRange?就是当前视窗显示的地理范围。
这三个概念之间有什么关系呢?下面通过一个题目,来说明这个问题。
已知中心点坐标(X,Y),Zoom,地图画布Size的大小,求CurrentRange.Xmin, CurrentRange.Ymin, CurrentRange.Xmax, CurrentRange.Ymax?
解:
CurrentRange.Width = Zoom;
CurrentRange.Xmin = X—Zoom/2;
CurrentRange.Xmax = X+Zoom/2;
CurrentRange.Ymin CurrentRange.Ymax该如何求呢?如果知道 CurrentRange.Height,即地理范围的纵向跨度,就可以求出CurrentRange.Ymin和CurrentRange.Ymax.
要求CurrentRange.Height,即要求每个象素在纵向上所代表的实际距离PixelHeight(为了保持图元不变形,设定象素在横向和纵向上代表实际距离是一样的,即PixelWidth=PixelHeight),因为
CurrentRange.Height = PixelHeight * Size.Height
而PixelHeight又该如何得到呢?
PixelHeight=PixelWidht=Zoom/Size.Width;
其实,在PixelWidth=PixelHeight前提下,
CurrentRange.Width/CurrentRange.Height = Size.Width/Size.Height;
这样就可以求得CurrentRange.Height,则
CurrentRange.Ymin = Y—CurrentRange.Height/2;
CurrentRange.Ymax = Y+ CurrentRange.Height/2
通过这道题目,使我们了解了这三个概念之间的关系,所以我们只要改变任意一个参数,就改变了其他两个参数,即改变了地图的视图范围。所以,我们在二次开发的时候经常需要设置中心点,来定位到某些图元等等。
我们在使用放大工具对地图进行放大的时候,如果放大矩形是一个很狭长的矩形时,以上参数发生了怎样的改变呢?
根据人的视觉和心理习惯:如果是横向狭长放大矩形,放大后的视图,横向跨度就是把刚才矩形横向所包含的,而纵向跨度,需要按照 CurrentRange.Width/CurrentRange.Height = Size.Width/Size.Height;来计算CurrentRange.Height;同理,纵向狭长放大矩形,放大后的视图,纵向跨度是刚才矩形纵向所包含的,而横向跨度,同样需要按照CurrentRange.Width/CurrentRange.Height = Size.Width/Size.Height;来计算得到。
以上都是在没有改变显示屏幕画布的情况下讨论的,如果我们改变一下显示屏幕的画布大小,地理范围又该如何变化呢?
也是分别从横向和纵向两个方向上来讨论,前提是屏幕画布的改变,始终不改变Zoom的值:1,横向上拉伸或者缩小,横向跨度Zoom依然没有变,而改变的是PixelWidth(每个象素所代表的实际距离的大小),拉伸Size.Width变大,则PixelWidth变小,纵向上,由于 Size.Height没变,又由于PixelHeight=PixelWidth,所以Size.Height*PixelHeight变小,纵向跨度变小,显示的内容也就少了;同理,横向缩小,PixelWidth变大,纵向上Size.Height没变,Size.Height*PixelHeight变大,纵向跨度变大,显示的内容也就多了。2,纵向上拉伸或者压扁,由于横向上Zoom的值没有改变,横向的Size.Width的值也没改变,横向上PixelWidth就不会改变,纵向上的拉伸,Size.Height*PixelHeight变大,导致纵向上显示内容变多,反之,变少。
以上分析了控制地图方面的几个参数,以及对画布显示的影响几种情况,在GIS二次开发中经常会遇到,这些考虑都是按照人的视觉和心理习惯来设计的,读者也可以完全不这样做,可以有自己的设计,这个主动权在您自己手里。