YC#MapScript中对于zoomPoint( )API的详解

1.背景介绍
1.1 MapServer概述 ( http://mapserver.gis.umn.edu/)
      地理信息系统对地表信息建立数学模型,利用计算机技术对数据进行存储,处理,分析。 其中采用Web技术的地理信息系统即WebGIS。在服务器端通过Web应用程序连接Web Server和GIS数据源,客户端仅须使用浏览器就可以对空间数据进行查询分析。美国的明尼苏达大学(University of Minnesota),提供的WebGIS解决方案:MapServer,就是利用CGI技术。
      MapServer是使用C语言编写的开源软件,它本身又依赖一些开源的或免费的库,如Shapelib,Proj.4, GDAL/OGR。
      MapServer使用自己定义的独特的Mapfile对地图进行配置,所有地图上的元素都可以通过Mapfile来配置。
      MapServer可以看作是两个独立模块的统称:MapServer CGI模块和MapScript模块。在服务器端可以使用任一模块,编写WebGIS程序。
      利用MapServerCGI模块进行开发,只需编写WEB显示页面,向CGI程序传递特定的参数,从而得到相应的渲染好的地图数据。
      而MapScript就是一系列功能完善的可以对Mapfile进行各种操作的API,开发人员可以利用这些API编写自己的WEB服务器程序,从而取代MapServerCGI模块。
 
2.MapScript中对于zoom相关API
      对地图进行操作的时候,我们使用最多的恐怕就是zoom相关的API,地图的放大,地图的缩小,以及视窗的移动,都是通过调用一系列zoom相关API来实现的,视窗移动其实就是比例尺不变的缩放。
      MapScript中的zoom相关API封装在mapObj类中
      这些API包括zoomPoint,zoomScale等,现在通过以zoomPoint为例,讲解zoomPoint的具体用法,每个参数的具体含义,使大家对zoom相关API有准确的了解。
      其实我也是因为项目中要用到,才刚刚开始研究MapScript的,下面的这些也是我通过编写程序摸索出来的。见笑。
     
3.详解zoomPoint()API
      API原型:zoomPoint( int zoomfactor, pointObj imgpoint, int width, int height, rectObj extent, rectObj maxextent ) : int

      概述:Zoom by zoomfactor to imgpoint in pixel units within the image of height and width dimensions and georeferenced extent. Zooming can be constrained to a maximum maxextent. Returns MS_SUCCESS or MS_FAILURE.

      参数详解

              int zoomfactor:指缩放的倍数,正值为缩小,负值为放大。

              pointObj imgpoint:指像素位置,新的extent将以该点为中心

              int width:指所传入extent的像素宽度

              int height:指所传入extent的像素高度

              rectObj extent:传入的extent,缩放的工作以该extent为标准

              rectObj maxextent:缩放后的最大extent,可以不传入

      关键字:用户观察区域
      我们应该了解:对地图的缩放并不改变地图本身,只是改变用户观察地图的区域大小即改  变用户所观察地图区域的extent,在调用map.Draw后,当前用户所观察的区域将被画到一张  图片上,而这张图片的大小由map文件中的相关参数决定,也可以通过调用map.setSize来更改输出图片的width和height。调用任何zoom方法后,用户观察区域extent的width 和height的比例与输出图片的width和height的比例相同,以确保这个extent可以完整的被输出到图片中。
      zoomPoint函数根据传入的参数,对用户观察区域进行缩放。zoomPoint总是根据传入的参数计算出一个点,再以这个点为extent矩形的中心,得到新的用户观察区域。新的用户观察区域是根据输出图片的大小,scale(比例尺)以及resolution(分辨率)计算出来的。
      新的观察区域的width = 输出图片的width / resolution × scale ;  
      新的观察区域的height= 输出图片的height/ resolution × scale ;
      其中观察区域的单位为map文件中设定的单位,可能为米,千米等,输出图片的单位为像素
      通过这个公式也可以看出用户观察区域extent的width 和height的比例与输出图片的width和height的比例相同,以确保这个extent可以完整的被输出到图片中。

      新的用户观察区域的中心点是这样计算的:
      首先根据传入的extent的确定地图上的相应区域,再根据传入的width和height将extent的长和宽等分。例如,传入的width和height分别为400和300,那么就将extent的长和宽分别等分为400份和300份。根据等分的结果建立坐标系,坐标系的原点在传入extent区域的左上角,x轴坐标向右增大,y轴向下增大。
      再根据传入的imgpoint最终确定中心点,imgpoint指定了点的x坐标和y坐标。
      如下图所示

       

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值