中国地图
GIS探索者
地图网
GIS论坛
网站首页| GIS论坛 |新闻动态 | 技术专栏 | GIS书籍 | 资源下载 | 求职招聘 | 研究生考试 | GIS博客 | GIS空间站
欢迎光临GIS空间站!   网站地图
  专栏导航:| ArcGIS | MapInfo | TopMap | 地理信息 | 遥感 | GPS | 测绘 | WebGIS | LBS | 前沿 | 数据库 | 开发 | 行业应用
  推荐栏目:| AO开发 | 业界动态 | GIS资源 | 招聘信息 | 求职简历 | 共享软件 | 电子书籍 | 研究生考题 | 电子期刊 | GIS论文
您现在的位置: GIS空间站 >> 技术专栏 >> MapInfo >> 文章正文

MapInfo MapX中如何保存专题地图

作者:rodger    文章来源:3snews.net    点击数:    更新时间:2006-11-18
TopMap活动
众所周知,MapInfo MapX是一个灵活的控件。尽管功能不是面面俱到,但凭借入门简单、易学易用的特性广受青睐,即使微软的DotNet大军压境,MapInfo也推出了基于DotNet的桌面开发组件,这却丝毫没有对MapX广泛的群众基础产生动摇。说这么多广告词的意思无非是告诉大家,我这篇文章不是老古董,因为很多东西有人还不了解。
MapX采用GST(GeoSet)组织地图数据,但作为一个直观的控件,需要避免前期掌握很多专业概念的障碍,因此MapX直接采用以地图为中心的概念体系,将地图直接放到控件中,从而绕开了复杂的数据加载和组织过程。但由此造成了很多问题,当入门用户正在为自己的程序中出现了地图而沾沾自喜的时候,他们不曾知道,后面还有一堆事情等着他们呢。数据绑定是一个在地图为中心概念中一个绕不过去的东西,也是MapX的一个难点,其实这样设计是把所有的数据看作一个来源来对待,整体结构简化了很多。只是,在多数时候,人们以为MapX实在是太简单了,简单到心想事成的地步,忘了自己所扮演的仍然是个开发者。
说得多了,GST文件本身采用一种自定义的文本格式来说明数据,这种文件中可以存很多内容,但由于没有数据源作为支持,以至于很多原先设计的内容无法实现。不过,这在后来的版本中得到了弥补。下面就是说我要说的如何进行弥补了。
其实,这个方法也不是针对GST文件来的,而是为了在Web上扩展应用得来的。Web服务器端运行控件用于导入数据导出图片的过程中,维护地图状态是非常重要的。因此,MapInfo 在MapX中提供了一个对象叫state的对象,这个对象的作用就是来缓存MapX中的对象和数据的。同时这个对象可以通过序列化和反序列化将对象导入到文件、流或者字符串中,实现地图状态的保存。
地图状态有很多,对于单一地图的最简单就是保存三要素:中心点坐标和视野。其他如图层集合、数据集合、专题图样式等等复杂对象虽然也需要保存,一般都是动态生成的,不需要永久保留(仅对MapX程序而言)。各种内容说得有点多,先来看看state对象的基本情况吧。
方法
 
  State.Save 保存对象
 State.Reset 重置对象
  State.Restore 恢复对象
  
 State.WriteToFile 将对象写入文件 
 State.ReadFromFile 从文件中读取对象
  
属性

  State.Stream  对象的序列化字符串(非明码)

可以看到这个对象非常简单,它可以存储各种类型包括简单类型的整型、字符串等,也可以是地图对象、数据集、图元、样式等等。来看下面一段代码,实现了专题地图的保存过程。
Private Sub Command1_Click()
Dim slayers As New MapXStateLib.State

Map1.GeoSet = "worldcap.gst"
Map1.DataSets.Add miDataSetLayer, Map1.Layers(1)
Map1.DataSets(1).Themes.Add miThemeIndividualValue, "Place_Name"

slayers.Save Map1.DataSets
slayers.Save Map1.Object
slayers.WriteToFile "test"

Map1.GeoSet = "ASIA.GST"

slayers.ReadFromFile "test"
slayers.Restore Map1.DataSets
slayers.Restore Map1.Object

Map1.DataSets.Restore "DataSet1", Map1.Layers(1)

End Sub
代码简单明了,不需要做太多说明,需要注意的有两点:
第一、state对象采用堆保存所有对象,提取对象无需严格按照保存的顺序恢复对象,但是不能多次恢复,否则会出错
第二、由于数据集(dataset)本身和数据库连接有关,有时候不能自动恢复,因此需要进行手动的恢复操作,即最后一句代码。

文章录入:gissky    责任编辑:gissky  发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
■■相 关 图 书:
■■相 关 文 章:
  • 调整Oracle,优化ArcSDE空间数据库

  • eCognition--变量函数应用案例

  • 如何实现ArcSDE的集群功能

  • 国产GIS软件辉煌的背后

  • GIS空间概念模型

  • 植被变化检测应用案例

  • 动态土地利用变化检测中的应用

  • 上一篇文章:

  • 下一篇文章:
  •  
    GIS博客精华
    热点文章
    热门资源
     
    关于我们 | 联系我们 | 广告服务 | 友情链接 | 申请链接 | 合作联盟 | 诚聘英才
      GIS空间站(GISSky.Net)版权所有 站长:兔八哥