关于GIS的图形绘制方法的分析

来源 :科技风 | 被引量 : 0次 | 上传用户:lcb225
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:地理信息系统是空间信息系统的一种特定形式,本文通过介绍地理信息系统(GIS)、函数转换、绘图、封装地图等基本知识,详细的分析了GIS的图形绘制方法。
  关键词:地理信息系统(GIS);地图绘制
  地理信息系统(Geographic Information System或 Geo-Information system,GIS)称为“地理学信息系统”,是空间信息系统的一种特定形式。需要在计算机硬、软件系统的支持下,对整个或部分地球表层空间中的有关地理分布的数据进行采集、储存、运算、分析、管理、描述、显示的技术系统。
  地理位置中的经纬度坐标只能在地理信息中代表为某个地点、标志或方位,对于用户理解和认识周边信息有一定的局限;在通过相关技术获取到位置之后,了解了所处的地理环境,通过查询和分析环境信息,为用户的活动提供信息支持与服务,更注重用户的需求,满足用户的各种体验。
  一、地图是通过函数的调用绘制出来的
  地图的绘制是对函数的基本操作,即使用绘图语句画出来的。从基础的底层地图绘制,就是使用绘图函数绘制点、线、面、标准、栅格等组合起来,就形成了一张地图。
  二、地图绘制中的关键——坐标转换
  .NET提供了大量绘图方法,基本上都是以Graphics类的函数形式提供,包括各类几何形状、图像、文字的绘制,通过这些方法可以画出各种图形。但是图形的绘制和坐标方位有着赞扬联系,使我们绘制的地图可以转换为地图元素,即地理坐标的经纬度,需要解决坐标转换问题。
  首先了解一下转换函数:
  /// 经纬度
  /// 屏幕坐标
  public Point WorldToScreen(PointF xy)
  再一个,有时,还需要根据屏幕上点位置反算出它的经纬度,如在需要显示鼠标指针处的经纬度,所以还需要这么一个函数:
  /// 屏幕坐标
  /// 经纬度
  public PointF ScreenToWorld(Point xy)
  有了这两个函数,就可以将以经纬度表示的地理坐标转换为屏幕坐标,然后再屏幕绘图了。
  三、绘图
  有了坐标转换类Coordinator,就可以用经纬度数据来绘图了,如得到了经纬度坐标数据,就可以将经纬度数据转换为屏幕坐标,然后用Graphics的方法来画出来了,Graphics对象又从哪里来呢?可以从一个Image对象创建,也可以从一个控件的Paint事件中取得。
  为了使用方便,FreeMicaps把符号绘制功能封装到三个符号类中,以静态方法提供。
  .NET的绘图是对GDI+的封装,包括了对点、线、面等各种图形元素的封装,图形图像的绘制、坐标旋转,各种反走样和平滑等功能,功能十分强大,利用它可以绘出各种图形。
  四、图层
  为了使绘图过程便于管理,可将绘图过程分为组,如可以将一张地图的绘制分为:交通地图、建筑地图、管道地图、区域地图等几个过程,每次绘图好像就是在一张玻璃上绘制,叠加起来就形成了一张地图,这里把每次绘图过程形象地称为一个图层。地图分层后,图层可以增删,每个图层可以单独进行隐藏、设置属性等,更重要的是可以将利用面向对象技术把每个图层当做一个对象进行管理。
  对图层进行抽象,需要调用图层绘制方法(Render),图层标题(LayerName)和用于表示数据源的字符串(DataSource)。用于表示绘图样式的设置的LayerStyle,加上一些辅助方法属性,最终形成如下抽象图层类(CustomLayer)。
  FreeMicaps中,每种数据对应一种图层类,为了使图层类编写方便,使用了设计模式中的模板方法,定义绘制流程,主程序在调用图层的Render()方法时,会自动判断是否已经读入数据,根据需要分析数据绘图。
  对于同一种类型数据,需要从CustomLayer继承新建一个图层类。各种类型数据图层的工作方式一样,仅在数据读取和绘制方面不同。所以,写新图层类时,仅需实现DoLoad()和DoRender()两个抽象方法,完成读取数据和绘制图层代码即可。FreeMicaps里使用了字符串作为数据源标识,通用GIS系统对数据源进行了抽象。
  一张地图有多个图层,所以还需要将图层放入一个列表,用于绘制地图时遍历图层。调用每个图层的Render()方法,形成一张完整的地图。
  图层绘制是需要有顺序的,在图层的样式(LayerStyle)中放了一个ZOrder属性,通过它来控制图层顺序。但由于List本身的排序方法是一种“非稳固排序”,也就是说当两个图层的ZOrder相等时,它们的顺序是不确定的,为了避免这个问题,FreeMicaps从CollectionBase继承了一个类LayerList,实现对图层的管理,并实现了IXmlSerializable接口,完成图层序列化功能。
  FreeMicaps中,每种数据对应一种图层类,为了使图层类编写方便,使用了设计模式中的模板方法,定义绘制流程,主程序在调用图层的Render()方法时,会自动判断是否已经读入数据,根据需要读数据绘图。
  五、封装地图
  有了坐标转换类、图层类、图层列表类,就可以利用它们做出一个具有缩放平移、图层管理等功能的地图了,但为了更方便地对地图进行操作,还需要对这些类进行组合封装。
  新建一个类WeatherMap,添加Coordinator和LayerList类的实例作为它的属性,将Coordinator类的实例作为私有成员,将地图坐标转换等方法加入WeatherMap类,调用WeatherMap类的方法。   再回到抽象图层类CustomLayer,它有一个成员Map,即为WeatherMap对象,在将图层加入图层列表时会自动赋值。在编写CustomLayer的子类时,可调用它来进行坐标转换和地图操作。
  为了使地图在绘制复杂图形过程中不至于BUG,需要在绘图过程中能随时中断绘图,如快速缩放平移地图中,可终止前次绘图过程直接绘制最后一次,就实现了地图绘制的多线程,特别是多线程操作UI,对程序流程造成了一定混乱。
  六、再次封装-增加UI
  上面已完成了地图绘制的核心代码,为了使代码编写更加容易,需要对WeatherMap类再次进行封装(MapView类),加入UI部分,即给地图加一个具有界面的壳,并在上面实现地图的操作如缩放、拖动功能。
  MapView从PictureBox类继承,内建了WeatherMap类的实例,在MapView的Refresh()方法中调用WeatherMap.Render()对地图进行绘制。
  为了完成对地图的操作,FreeMicaps定义一个IMapTool接口,包含了鼠标和键盘操作方法,MapView类内建一个IMapTool接口成员,MapView的鼠标和键盘操作,将被IMapTool接口的实例接管,在实现IMapTool接口的类中,可对地图做各种操作,如平移、缩放等操作,这个对象可随时替换以实现不同方式的地图操作。
  在FreeMicaps中,已完成一个实现IMapTool接口的类ZoomTool,此类为默认的地图缩放和平移工具。
  另外,在MapView中,还引入了一个当前图层的概念CurrentLayer,用它来表示当前操作的图层,后面用它来实现图层元素拾取、图层工具条等功能。
  通过以上论述的方法,可以对地图的开发有了全面、透彻的了解,便于开发人员对地图系统的优化和升级。文章对GIS系统的论述仅限于基础应用和开发,不妥之处请批评指正。
  参考文献:
  [1] 朱洪军.基于GIS的移动终端LBS系统建设与实现[D].华东师范大学,2008.
  [2] 李海艳.移动GIS的概念体系研究[D].长安大学,2006.
  作者简介:
  王盼(1985-),男,汉族,北京人,本科,工程师,单位:国家新闻出版广电总局北京广播电视维护中心,研究方向:广电系统节目传输和调度。
其他文献
为适应化学驱多层分注、套损后完井、低渗透油田分层注水中出现的问题和外围不压井作业的需要,针对常规封隔器内通径小、耐温、耐压、耐腐蚀性能差等问题,进行了金属封隔器的研
伏播西瓜,一般在9月中旬10月下旬上市,使人们在中秋节、国庆节前后吃上清甜可口的西瓜。大面积实践证明,伏播西瓜从播种到采摘仅需60—70天,只要栽培得法。亩产可达2500—300
摘 要:发电机是电厂的重要设备,其运行可靠性与安全性对整个电厂供电效率影响较大,因此我们要就发电机的常见故障进行探讨,分析这些故障产生的原因,并在工作中对发电机故障进行预防。  关键词:发电机;常见故障原因;预防  在我国经济社会迅猛发展的今天,全国各地用电量不断攀升,而对于电力系统的建设需求也越来越高,但发电厂的主要供电设备——发电机在运行中常会出现一些故障,这些故障的出现会影响发电机的工作效率
CYJSQ14—5—73HY前置型双驴头游梁式抽油机,支架为分腿式结构,支架前、后腿之间采用螺栓连接。前、后腿组对尺寸的准确度决定了抽油机支架的稳定性,以及和底座的配套问题。经过
在本文中,我们针对计算机多媒体技术专业,依据高等职业教育培养目标和多媒体行业对专业人才的要求,从基于职业属性的专业观出发,提出了该专业的建设思路。
新疆和静县巴润哈尔莫墩乡哈尔乌苏村党支部带领群众"闯"市场、奔小康,走活致富"五步棋"。哈尔乌苏村是一个少数民族占47%的民汉杂居村,耕地面积8165亩、人口2932人,人均占有
全球化肥价格继续上涨全球化肥需求量将由于欧洲耕地面积扩大而增加,价格也将继续上涨。据美国《化学市场报》最新一期报道,欧洲联盟为增加粮食产量,不久前决定把休耕土地面
文章就薪酬设计中员工能力因素进行了分析,探讨了能力、绩效和薪酬三者之间的关系,提出了解决问题的途径和相应模式,并对三种模式的优缺点进行了评价,为企业薪酬设计和经营者决策
作为农业大省的河南,到本世纪末,如何使粮食再上一个新台阶,前不久,省政协农业委员会组织部分委员,分赴扶沟、太康和唐河、方城四县进行了调查研究。总的感到,这四个县的县委
当年羔羊经过放牧与适当补饲相结台的方式进行肥育后,当年屠宰产肉。这种当年羔的肥育就叫肥羔生产。