众所周知,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)本身和数据库连接有关,有时候不能自动恢复,因此需要进行手动的恢复操作,即最后一句代码。

3S基础知识:MapInfo MapX中如何保存专题地图相关推荐

  1. SAP SD基础知识之交货中的控制元素

    SAP SD基础知识之交货中的控制元素 一,交货类型Delivery Type Delivery type控制整个的交货,我们可以在delivery header中看到delivery type: D ...

  2. java里面string什么意思_「Java基础知识」Java中的字符串是什么

    原标题:「Java基础知识」Java中的字符串是什么 字符串顾名思义就是一些字符组合在一起组成的一串数据,称作字符串,在Java中字符串用双引号包围起来,格式为String string = &quo ...

  3. SAP SD基础知识之订单中装运相关的功能 II

    SAP SD基础知识之订单中装运相关的功能 II 一,计划Scheduling 当业务人员创建一张订单时,系统能够决定基于客户要求的delivery date的物料可用日期:需要交货的货物必须在该时点 ...

  4. SAP SD基础知识之订单中装运相关的功能 I

    SAP SD基础知识之订单中装运相关的功能 I 一,装运点决定Shipping Point Determination 每个订单行项目都会决定一个shipping point:系统会自动带出一个shi ...

  5. SAP SD 基础知识之定价中的条件技术(Condition Technique in Pricing)

    SAP SD 基础知识之定价中的条件技术(Condition Technique in Pricing) 一,定价程序Pricing Procedure 所有定价中允许的条件类型都包含在定价程序中: ...

  6. [WPF 基础知识系列] —— 绑定中的数据校验Vaildation

    [WPF 基础知识系列] -- 绑定中的数据校验Vaildation 原文:[WPF 基础知识系列] -- 绑定中的数据校验Vaildation 前言: 只要是有表单存在,那么就有可能有对数据的校验需 ...

  7. java里面value_「Java基础知识」Java中包含哪些运算符

    原标题:「Java基础知识」Java中包含哪些运算符 在Java中包含的运算符有:算数运算符,逻辑运算符,关系运算符等. 算数运算符也就是我们平时的加减乘除余等操作:在Java中都是将右边的值赋值给左 ...

  8. 3S基础知识:VC6.0+MapX编程总结

    一.MapX的帮助 MapX的官方帮助文档是<MapX在线帮助>. 个人认为,这套文档过于简单,系统性偏差,与ArcEngine的帮助文档不可比.很多MapX的开发技巧在<MapX在 ...

  9. 3S基础知识:MapInfo自定义符号详解

    MapInfo的自定义符号无外乎有以下四种情况: 1.自定义MapInfo 3.0 Complition字符集 用户可以使用MapInfo Professional中提供的Symbol.mbx工具自定 ...

  10. 3S基础知识:MapInfo点符号的制作方法

    Mapinfo提供了多种点符号制作方法,通过不同的方法制作出来的点符号具有不同的特性;Mapinfo还支持以下三种点符号制作方法: 1.利用Mapinfo提供的"符号"工具,制作点 ...

最新文章

  1. xp系统安装oracle乱码,linux中安装Oracle汉字乱码完整解决方案
  2. SAP QM 采购订单收货时没有Vendor CoA就不让收货过账的实现
  3. 使用python创建自己的第一个神经网络模型吧!
  4. (转)一个vue路由参数传递的注意点
  5. LeetCode 1816. 截断句子
  6. 基于实战开发垂直搜索引擎_基于DDD的微服务设计和开发实战
  7. 调查显示超四成人“讨厌”大数据
  8. 读取文本节点_TextRank抽取型文本摘要
  9. 全美首个AI本科专业今秋开课,CMU每年最多招35名新生
  10. 【数学建模】基于matlab三维数据可视化(华为杯)【含Matlab源码 139期】
  11. 容器技术Docker K8s 30 容器服务ACK基础与进阶-弹性伸缩
  12. Centos7防火墙iptables安装及设置图文并茂【实现防火墙管理功能】
  13. Everything To Byte And To Tensor -- Welcome to age of AI
  14. B. Silly Mistake
  15. 免Root–获取WIFI密码
  16. python中idle什么意思_python的idle是什么
  17. mailru邮箱下载_Mail.Ru邮箱ios客户端下载|Mail.Ru邮箱iphone/ipad版下载 6.2 - 跑跑车苹果网...
  18. 如何提高逻辑思维能力
  19. Productivity Power Tools工具
  20. unity-大地图分块加载研究

热门文章

  1. python常见的错误类型_python中新手朋友常见的错误信息汇总
  2. type=file的未选择任何文件修改_Electron应用易“招黑”,轻松被修改并植入后门...
  3. 千牛取消机器人自动回复_拼多多回复率低怎么办?
  4. relative会脱离文档流吗_抖音投放你会吗?选Feed流还是Dou+?
  5. oracle通信通道的文件结尾_oracle里执行full join 报通信通道的文件结尾问题
  6. mysql分页下表_有关Mysql分表分页问题
  7. oracle 监听 开机启动命令,如何让oracle DB、监听和oem开机启动(dbstart)
  8. OSI与TCP/IP各层的结构与功能及协议
  9. 如果有一天不做程序员了,还能入什么行业?
  10. [CF559C]Gerald and Giant Chess