用VC实现GIS系统基本功能

本文档介绍了如何使用VC++结合MapX控件实现GIS系统的基本功能,包括预设置、属性操作、工具应用等。通过设置MapX控件,创建数据库,设计编辑和查询功能,以及处理地图投影,展示了GIS二次开发的过程。示例代码详细解释了全图、信息显示和测距工具的实现,强调了在非地球地图中使用Distance函数的注意事项。此外,还涵盖了图层控制、地图投影设置和打开图形文件的方法。
摘要由CSDN通过智能技术生成

VC实现GIS系统基本功能

文档说明:

此文档适合VC++的初学者,高手也可参考(希望能提出宝贵意见)。

开发前准备:

前提:必须在你的电脑上安装了MapX控件,并且准备好需要用到的电子地图(Mapinfo格式的)

VC++嵌入MapX进行二次开发可分为以下几个步骤来实现:

  对应用工程的预设置

  在创建MapX控件之前,必须将MapX.hMapX.cpp文件加入到工程中。对于Visual C++5.0及以上版本,从Project菜单中选择Add To Project -> Files命令,打开InsertFiles into Project对话框,选择MapX.cppMapX.h文件加入到工程中(在MapX自带的C++例子中有这两个文件)。

  注意:不要选择Project菜单中的Add TO Project->Components And Controls命令。如果选择该命令加入MapX控件,将创建一新的.cpp文件,但是该文本没有包括所有的MapX对象。

  MapX属性的操作

  对于C++程序来说,每个MapX对象(Objects)都在MapX.h 和 MapX.cpp中用一个类来实现,类的名字和MapX对象的名字相同,且已经在CmapX中定义了。

  例如,DataSet对象用类CmapXDataset实现。这和C++类的定义相一致。而每个MapX对象的属性(Properties)是用类的成员函数来实现的。比如DataSet对象的名字(Name),就是用Name()函数来实现的,不过,Name()有两种使用方法,即GetSet。如:

  CString GetName();//获取对象名字

  void SetNameLPCTSTR);//设置对象名字

  部分MapX工具的应用

  (1) 全图工具的改进

  一般全图工具的代码为:

  m_ctrlMapX.SetZoomm_ctrlMapX.GetGeoSetWidth());

  此方法的缺点是重新显示全图后,实际上是以上一个视图的中心作为屏幕中心进行显示,如果上一个视图在全图中的边缘位置,点击全图工具后实际上不是初始设置的全图。因此可以用如下代码实现:

  CString mapname=m_ctrlMapX.GetGeoSet();//取得当前地图的名字

  m_ctrlMapX.SetGeoSetmapname);//设置该地图为主视区显示图

  (2) 创建信息工具

  MapX没有提供信息工具,该工具是自定制工具。有两种实现方法,其基本思想是:

  (1) 创建工具的鼠标指针类型(一般为“+”),当在工具栏上选择此工具后,设置为当前工具,然后跟踪鼠标在地图上点击的位置,触发ToolUsed事件,根据位置信息确定相应的对象,然后读取对象属性或绑定的数据库,弹出对话框,实现信息显示。此种方法只适用于显示地图的最上层对象(在MapX自带的C++例子“Buffer”中有具体实现代码)。

  (2) 用选择工具选中地图上所要显示信息的对象,然后再点击工具栏上的信息工具,弹出对话框,实现信息显示。此信息工具的实现代码与(1)不同,没有鼠标指针,实际上就是读取选中对象的属性或绑定的数据库的操作。此方法适合显示地图上的任意图层。

  两种方法各有特点,第一种方法直接,但在实际应用中容易出现异常,第二种方法要多点击一次,但应用稳定,而且适用地图上的任意图层。

  (3) 测距工具的使用注意事项

  MapXDistance()函数是针对地球地图的,在非地球地图中使用要注意数值转换。否则测出的数据与实际相差甚远。

  MapX进行GIS二次开发

  (1) 创建数据库

  空间数据库可以通过两种方法创建,一种是通过MapX的图层生成功能创建。MapX生成的每一图层都对应一张表(table),该表中除了存有地理对象的位置坐标以外,还可以包含其他属性字段;另一种方法是通过导入带有地理位置信息的其他数据库生成。MapX可以通过数据绑定把这些数据库中的地理信息映射到地图图层上,MapX支持对多种常用数据库的访问。

  (2) 设置图层控制和地图投影

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
如果您在此处下载压缩包,还要请您联系作者邮箱:cnaulee@gmail.com =========================== 综述: VC++通用GIS功能开发解决方案》源代码是基于VC++6.0 MFC 类,在Win2000平台上开发的。界面部分用到了较低版本的 CJ60Lib 开放源码,用户可自行替换高版本或其他界面,它不作为本方案的商业部分。 《VC++通用GIS功能开发解决方案》源代码是迄今为止公开提供的最全面、最完善的开发GIS产品的一套基础解决方案。它的界面十分友好和具人性化,它传承了“VC++界面一揽子解决方案”(http://summerplq.51.net)最具经典的界面个性,并融合了该产品自身特有的亮点。它的功能部分解决了GIS开发的诸多普遍问题和关键技术(如数据结构,地图显示,基于DEM的地形分析等),可适用于城市规划、地质勘探、土地丈量、水利枢纽、农田建设,乃至其他构建于城市图和地形图之上的GIS类软件开发。可以说,它的基本功能方面已相当成熟。 《VC++通用GIS功能开发解决方案》是一套内容十分丰富的“教科书”,相对应于各个编程段的程序员来说都有合适的学习内容。源程序条理清晰,模块化设计,普遍采用注释,对于入门和初级程序员来说,可以拆分支解开来学习;对于开发级程序员来说,它提供了丰富的功能实现,省却了您金钱和时间的浪费;作为专业级的程序员来说,或许你可以从中找到另一条安全、快捷的编程思路,从而解决你在诸如方案设计,数据构建,分析实现上的困惑。 目前1.0版本:不带数据库,不带查询功能,不带投影变换功能。 方案内容: ============================================ 一、用户界面和控制 ------------------------------------ 1、实现全彩启动画面,令你程序增色不少; 2、实现软件启动口令设置。积作者多年经验完善而成,口令加密技术先进; 3、实现全屏功能,通过TAB键方便地互相切换; 4、实现人性菜单按钮,有工具栏纹理、文字、菜单图标,以及右键菜单功能; 5、实现视图窗口位图背景; 6、实现状态栏信息功能,显示坐标和高程; 7、实现对话框按钮个性化,平面加图标,自己琢磨还有更多效果; 8、实现发送邮件和访问主页功能; 9、实现真彩位图,图标,光标大应用,你可以在软件中发现大量真彩技术的应用; 10、实现树目录复选图标,彻底解放图层控制。 ! 更多细节请参考“VC++界面一揽子解决方案”3.0v(http://summerplq.51.net) 二、功能实现部分 -------------------------------- 1、数据格式公开透明,这在源代码中是显而易见的。数据源还可以通过Mapinfo中间格式转换过来!一旦你有了源代码,自己就可以编写出该转换软件,当然也可以购买我们提供的该软件。 2、地图显示(显示、漫游、放大、缩小)。 # 地图显示方式采用了图层控制技术,让你点击树目录中的“小眼睛”就可以方便地实现图层的开关显示。操作时图形不闪烁,结合“存档”功能,你还能保存你的设置! # 漫游采用无边际方式,任意漫游!同时结合“存档”功能,保存地图显示位置! # “放大”和“缩小”都同时采用两种方式:定点缩放和拉框缩放!拉框缩放采用了光栅绘图模式,效果自然漂亮! 3、九大GIS分析功能(基于DEM) #量算多点距离#计算线段最大坡度#计算区域面积#计算区域高程#两点通视#中心通视# #区域坡度图#断面图#区域通行分析 全部分析采用实时数据显示(操作同时显示结果)技术,配以最后结果显示。 几点说明: ============================================= 1、考虑到数据量大小问题,本方案只带了一幅示例数据,但已经足够用!又由于该样图来自于原来四幅图中,而本方案所用到的引擎文件也没有作相应改变,所以点程序中的“全图”功能后,该幅图只占了客户区的一角,而不是将该幅图放满客户区。这不影响其它任何操作,不是程序有问题。 2、本程序不提供更多数据!但我们提供将Mapinfo中间格式数据(即.mif格式)转换到本程序数据格式的软件。所以说,您做的城市图也可以放进来用。 3、本程序所用符号(所谓符号,即指地图中的点、线、面符号;如高程点,道路,植被等。)采用了封装的动态链接DLL_study4R.dll,主要是因为该符号是商业符号(欲知其详细内容,请留意本人主页日后将刊登的介绍,大体上它包括了所有地形图符号以及城市图符号(如教育机构符号等))。 4、本程序由于CJ60Lib版本问题而不适合.NET平台,但不是本程序自身问题!用户可以替换掉CJ60Lib改用支持.NET的版本或其他界面,或者索性弃用!这不影响程序其他实质部分。 5、补充:今后将推出基于DEM数据生成三维图功能(将作为单独模块提供)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蔷薇理想人生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值