1.问题描述

使用MAPX在地图上显示几个点,其中点的坐标(经度和纬度)存放在ACCESS数据库中,点的属性信息也存放在ACCESS数据中。实现“点图层”和属性数据的绑定。注意,在图层和外部数据库绑定之前,图层中必须要有图元(这里就是各个点)。如果图层中是空的,是没有办法和外部数据进行绑定的,而且图层中图元的数量和数据库中的记录数量应该保持一致。(在一开始进行数据绑定实验时,由于图层中图元是空的,因此绑定失败。而且有一次图层中图元的数量和数据库中的记录数不同,也绑定失败)

2.ACCESS数据库

这里新建一个pos.mdb ACCESS数据库,其中有两个表,一个是pointbiao,另一个是posbiao。在pointbiao中有三个字段,ID(点的标识,字符类型),corX(点的经度,数值类型),corY(点的纬度,数值类型),pointbiao中记录了点的空间信息(经纬度),等会要用这个表来生成点图层。posbiao中有两个字段,其中一个是ID(点的标识),另一个字段是position(点的地址,字符类型)。如图1为两个数据库的内容

图1

这里以六个城市中的某个坐标点为例。

3.点图层的生成

用VB编程,gst地图采用mapx自带的china.gst地图。由于china.gst地图中不包含点图层,因此要用pos.mdb中的pointbiao中的数据生成点图层。方法如下:
1.使用mapinfo新建一个图层(保存为point.tab),其中的字段有三个:ID,corX,corY,和pointbiao表中的字段保持一致,如图2所示

图2

2.使用geoset manager工具把point图层插入到china.gst中,并保存
3.使用pointbiao中的坐标数据,在point图层中增加并显示这六个点。在VB工程中添加一个mapx对象,名字为map1,VB代码如下:

在这Private Sub Form_Load()Map1.GeoSet = "C:\myproj\proj07162\china.gst"Map1.CenterX = 118.506309Map1.CenterY = 36.341393Map1.Zoom = 900
End SubPrivate Sub Command1_Click()Dim conn As New ADODB.ConnectionDim rs As New ADODB.RecordsetDim str As String'使用ADO方式连接数据库conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\pos.mdb"If conn.State <> adStateOpen ThenMsgBox "数据库打开错误"End Ifstr = "select * from pointbiao"With rs.ActiveConnection = conn.CursorLocation = adUseClient.LockType = adLockBatchOptimistic.Open strEnd WithDim ptdatas As New MapXLib.DatasetDim rvsdata As New MapXLib.RowValuesDim lyr As New MapXLib.LayerDim ftrefact As New MapXLib.FeatureFactoryDim fiedmdb As ADODB.FieldDim i%Dim apoint As New MapXLib.PointDim aptftre As New MapXLib.FeatureSet lyr = Map1.Layers(1) '这里lyr为MAP1的第一个图层,也就是point图层Set ptdatas = Map1.DataSets.Add(miDataSetLayer, lyr) '把point图层和其属性数据绑定(数据绑定的mapinfo表方式)Set rvsdata = ptdatas.RowValues(0)rs.MoveFirstSet ftrefact = Map1.FeatureFactoryDim checkftre As New MapXLib.FeaturesDo Until rs.EOFi = 0'查看图层中是否有ID为rs.Fields(i).Value的图元Set checkftre = lyr.Search("ID=" & """" & rs.Fields(i).Value & """")If checkftre.Count = 0 Then '如果图层中没有该图元,则添加For Each fiedmdb In rs.Fields'把pointbiao中的数据(ID,corX,corY)复制到point图层绑定的数据集中rvsdata.Item(fiedmdb.Name).Value = rs.Fields(i).Valuei = i + 1Next fiedmdb'在point图层中增加一个点图元apoint.Set rs.Fields("corX"), rs.Fields("corY")Set aptftre = ftrefact.CreateSymbol(apoint)Debug.Print apoint.X, apoint.YSet aptftre = lyr.AddFeature(aptftre, rvsdata)End Ifrs.MoveNextLooprs.Closeconn.CloseSet rs = NothingSet conn = NothingSet ftrefact = Nothing
End Sub里插入代码片

执行该段代码之后,就会把pointbiao中的六个点在地图中显示出来。这样point图层中就已经有了6个点,接下来就可以实现图层和属性数据的绑定了。

4.图层和数据的绑定

接下来我们把point图层中的六个点和pos.mdb数据库中的posbiao表中的六个数据进行绑定(posbiao中的数据为这六个点的属性数据),绑定时,使用ADO方式,索引字段为“ID”,以下为VB代码

Private Sub Command3_Click()Dim conn As New ADODB.ConnectionDim rs As New ADODB.RecordsetDim str As Stringconn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\pos.mdb"If conn.State <> adStateOpen ThenMsgBox "数据库打开错误"End Ifstr = "select * from posbiao"With rs.ActiveConnection = conn.CursorLocation = adUseClient.LockType = adLockBatchOptimistic.Open strEnd WithDim ds As New MapXLib.DatasetDim lyr As New MapXLib.LayerSet lyr = Map1.Layers(1) 'point图层Dim fs As New MapXLib.FeaturesDim i As Integer'把point图层和posbiao中的数据绑定,索引字段为IDSet ds = Map1.DataSets.Add(miDataSetADO, rs, "mydataset", "ID", , lyr)'读取数据集中的内容If Map1.DataSets.Count > 0 ThenFor i = 1 To ds.RowCount'输出数据集ds中第i行的第2个字段的值'ds.RowValues(1)为posbiao中的第1行;'ds.RowValues(1).Item(2)为posbiao中第1行的第2列'ds.RowValues(i).Item(2).Value为posbiao中第1行第2列的值(青岛)Debug.Print ds.RowValues(i).Item(2).ValueNext iEnd If
End Sub
5.总结

1.先把采集的坐标数据存放在ACCESS数据库中,然后使用这些数据库中的坐标数据生成mapx中的图层;
2.图层中要先有图元,才能和属性数据库绑定;
3.图层中的图元数量和属性数据库中的记录数保持一致才行,否则就算进行数据绑定,也不会得到正确的结果。

本博客最早发表在CHINAUNIX
2018-07-17 18:17:12
http://blog.chinaunix.net/uid-11829250-id-5787609.html

MAPX中的数据绑定问题相关推荐

  1. Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定)

    原文:Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定) ------------------------------ ...

  2. 深入剖析微软ASP.NET Ajax中的数据绑定构架下篇之二

    四.例2-数据库绑定 现在,我们来讨论更为复杂的数据库绑定的例子.根据我们前面的讨论,我们找到了使用DataSource的典型场所:在前面的例1中,我们使用了一种内存数据来模拟有状态的web服务.但是 ...

  3. ASP.NET 2.0 中实现模板中的数据绑定系列(2)

    双向数据绑定       FormView可以通过相关的数据源控件支持自动地更新.插入和删除操作(与DetailsView类似).如果要定义编辑或插入的UI,那么除了定义数据项模板(ItemTempl ...

  4. WPF入门教程系列十五——WPF中的数据绑定(一)

    使用Windows Presentation Foundation (WPF) 可以很方便的设计出强大的用户界面,同时 WPF提供了数据绑定功能.WPF的数据绑定跟Winform与ASP.NET中的数 ...

  5. ASP.NET 2.0中实现模板中的数据绑定

    模板化的数据绑定控件为我们在页面上显示数据提供了根本的灵活性.你可能还记得ASP.NET v1.x中的几个模板化控件(例如DataList和Repeater控件).ASP.NET 2.0仍然支持这些控 ...

  6. js 取得input绑定的datalist中的值_javascript基础修炼(9)——MVVM中双向数据绑定的基本原理...

    [小宅按] 开发者的javascript造诣取决于对[动态]和[异步]这两个词的理解水平. 一. 概述 1.1 MVVM模型 MVVM模型是前端单页面应用中非常重要的模型之一,也是Single Pag ...

  7. uni-app中的数据绑定

    uni-app中的数据绑定 在页面中需要定义数据,和我们之前的vue一模一样,直接在data中定义数据即可 export default {data () {return {msg: 'hello-u ...

  8. 【值转换器】 WPF中Image数据绑定Icon对象

    原文:[值转换器] WPF中Image数据绑定Icon对象 这是原来的代码: <Image Source="{Binding MenuIcon}"  /> 这里的Men ...

  9. 如何在填报场景中使用数据绑定获取数据源

    背景 在公司的日常业务中,存在不少数据的收集提取需求,大部分公司会采取Excel来完成数据的收集和汇总,但这项工作会让负责信息收集的业务人员相当头大.虽然提前做好了数据收集模板,但最终提交上来的模板会 ...

  10. 聊聊 Spring 核心特性中的数据绑定 (DataBinder)

    前面的话 Spring 的核心特性包括 IOC 容器.事件.资源管理.国际化.校验.数据绑定.类型转换.EL 表达式.AOP.其他特性可以轻易的在网络上找到很多资料,而数据绑定这个特性即便在 Spri ...

最新文章

  1. 明文存密码成惯例?Facebook 6 亿用户密码可被 2 万员工直接看
  2. 用了这么久的 Python,居然没注意到这个操作
  3. java whois_Java如何实现简单的whois查询
  4. WebP图片格式,压缩提高28%
  5. PHP 两个页面跳转,session会失效?
  6. ASP.NET Core 2.0利用MassTransit集成RabbitMQ
  7. Mysql的数据库和客户端环境搭建(三)
  8. 京东物流首架全货机首航 久未露面的刘强东还发声推广
  9. centos后台登录ftp_安卓TikTok无限制版、手游扫码登录更新
  10. KMP算法计算next数组 匹配字符串
  11. Apache Flink 零基础入门(七):Table API 编程
  12. visio2019安装教程
  13. OOP的核心思想是什么?
  14. EXCEL自定义功能区Ribbon
  15. BIOS int 10H中断介绍
  16. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明)(热身赛) C-Statues
  17. Fibonacci数列Linux程序,使用fork()调用计算Fibonacci数列
  18. matlab 将矩阵变为一列,MATLAB中把一个矩阵转换为一列
  19. 一句话马密码暴力破解篇(黑吃黑)
  20. 用citespace对知网文献的关键词分析结果很少如何解决?

热门文章

  1. winform界面控件丢失的问题
  2. java更新_java怎么更新
  3. Next主题美化博客
  4. Java编写斗地主的游戏源码
  5. 计算机网络——网络层
  6. java小游戏源码_分享几款java小游戏源码
  7. PHP简单留言板代码
  8. VC知识库的离线包整合
  9. CSDN搜索可以搜博客代码了
  10. 【读书笔记《Android游戏编程之从零开始》】17.游戏开发基础(游戏适屏的简述和作用、让游戏主角动起来)