关于mapx中的数据绑定?(高分求答)

hmt 2003-08-19 05:01:24
mapx中空间数据与数据库中的属性绑定后,我如何来访问这些
属性数据,如我如何通过feature来访问与这个feature绑定的
数据。总觉得,mapx中的数据绑定除了用BindLayer能生成新的
与数据库相关的layer外,没别的用处了?
还有就是在专题图中,如果要与*.tab中的2个属性绑定,怎么
做,我看到的所有samples都是一个属性的绑定。如 “小班”是
按村编号的,a村有小班号1,2,3等,b村也有1,2,3等小班号,
如何通过数据库中的“村”,“小班号”与也包含这2个属性的
layer绑定。我试过很多次方法都不行。
不知道大家有没有遇到过这种问题,如果知道,请帮忙告知,
非常感谢。
分不够,我会再加
...全文
108 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jedy 2003-08-26
  • 打赏
  • 举报
回复
"小班号","乡村代码"这两个字段必须你的tab文件里有该两个字段,必须是索引,而且有数据,与access里的作为geofield一致的,我直接用例子
Private Sub Command1_Click()
On Error GoTo MapXErr
Dim ds As Dataset
Dim flds As New MapXLib.Fields
' Adodc1 is a Microsoft ADO Data Control, which must be
' placed on the VB form.
' Change the "Data Source=" line if MapX was installed in
' a different location.
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;" & _
"Data Source=C:\Program Files\MapInfo\MapX 4.0\Data\MapStats.mdb"
Adodc1.RecordSource = "Select * from USA"
Adodc1.Refresh ' Bring in the data from the database

' Add a dataset to the map and create a simple theme from it.
Set ds = Map1.DataSets.Add(miDataSetADO, Adodc1.Recordset, "ADOset", "GEOABBR")
'这里你可以根据自己改写一下,不过他是如何匹配大概是通过索引吧。具体我不大清楚
Debug.Print ds.Fields(3).Name
flds.Add ds.Fields(3)
ds.Themes.Add miThemeRanged, ds.Fields(3)
Exit Sub
MapXErr:
Debug.Print "Error #" & Err.Number & ": " & Err.Description
End Sub
hmt 2003-08-26
  • 打赏
  • 举报
回复
to flysharker:
你可能也没有理解我的意思,我指的是包含2个属性的索引的数据库表和
也包含2个属性作为索引的*.tab文件的绑定,不是你认为的,显示2个属性在
专题图上。主要问题是如何通过2个属性来使数据库中的记录绑定到地图的feature
中去。
flysharker 2003-08-26
  • 打赏
  • 举报
回复
邦定的时候所有的属性都邦定,在作专题图的时候把需要的字段选出来就可以了,下面是我写给你的代码,用的就是mapx带着的那个access数据库,用ado做的连接,再delphi下写的,你关键看一下cols.add你就明白了。其中数据类型是这样的 ds: CmapXdataset;cols: CMapXFields;

Map1.Datasets.RemoveAll;
showmessage('所有数据集清空');
ds:=map1.datasets.add(midatasetado,adoquery2.Recordset ,'asia'
,EmptyParam,EmptyParam,map1.Layers.Item('asia'),EmptyParam,EmptyParam);
showmessage('成功绑定');
ds.Themes.RemoveAll;
showmessage('所有专题层清空');
cols := CoFields.Create;
cols.Add('pop_0_14', 'pop_0_14', EmptyParam, EmptyParam);
cols.Add('pop_15_64', 'pop_15_64', EmptyParam, EmptyParam);
cols.Add('pop_65_plus', 'pop_65_plus', EmptyParam, EmptyParam);
ds.Themes.Add(miThemePieChart , cols, 'My Bar Theme', EmptyParam);
ds.Themes.Add(miThemeRanged,'totpop','Myranges Theme',EmptyParam);
jedy 2003-08-25
  • 打赏
  • 举报
回复
Set ds = Map1.Datasets.Add(miDataSetLayer, lyr)'这里你可以帮定sql的表
我写得很清楚了,我的意思是我是偷懒,直接用本层绑定了,那么你可以很简单的改写成sql,还有匹配只要fields参数就可以乐,不要考虑你说的。
flds.Add ds.Fields(4), ds.Fields(4).Name'这里没有变化,我帮定了第4,5个字段
flds.Add ds.Fields(5), ds.Fields(5).Name'字段名字和tab中的字段名必须一致,否则出错
hmt 2003-08-25
  • 打赏
  • 举报
回复
to jedy:
你可能还没有理解我的意思,可能我表达的不清楚,我所说的绑定2个字段,指的是
在dataset.add()函数里的帮定,不是你所说的:

flds.Add ds.Fields(4), ds.Fields(4).Name'这里没有变化,我帮定了第4,5个字段
flds.Add ds.Fields(5), ds.Fields(5).Name'字段名字和tab中的字段名必须一致,否则出错


即在地图上同时显示2个数据。我只要显示一个数据就行了。
我的意思是数据库的某一条记录,通过2个字段的索引,绑定到某个feature中,然后
通过feature就可以访问这些从数据库里读出来的数据了。但实际我帮定数据的时候,
由于mapx只认一个属性,很多feature都没有帮定到数据。

你自己有没有试过从sql server 读的数据啊。你这样的无论几个关键字,它都行的
我也早试过的,我的问题是绑定啊,2个关键字,它就不知道如何帮定的,从实际的运行结果
来看,也只是帮定了一个字段,所以结果,很多的区域没有着色。
我的代码如下:
dim flds as new MapXLib.Fields;
flds.Add "乡村代码
flds.Add "小班号"
flds.Add "小班面积"
MapXLib.Dataset ds=axMap1.DataSets.Add(miDataSetADO,rs,"小班号","乡村代码","长征乡小班边界",flds,false)
'主要是这里"小班号"和"乡村代码"做为数据库的索引与"长征乡小班边界.tab"地图的
"小班编号",和"村代码"对应
flds.RemoveAll
flds.Add s.Fields[3],ds.Fields[3].Name
if(ds!=null)
ds.Themes.Add miThemeRanged,flds
我想你肯定没有试过从数据苦读的数据与地图绑定2个属性,你以为从表里读数据与
从sql读数据是一样的,差别就在这里。
jedy 2003-08-22
  • 打赏
  • 举报
回复
给个简单例子
Dim lyr As MapXLib.Layer
Dim ds As MapXLib.Dataset
Dim fld As MapXLib.Field
Dim flds As New MapXLib.Fields
Dim rv As MapXLib.RowValue
Dim rvs As MapXLib.RowValues
Dim tm As MapXLib.Theme
Dim i As Integer
Private Sub Form_Load()
Set lyr = Map1.Layers.Item(1) '美国的capital.tab
Set ds = Map1.Datasets.Add(miDataSetLayer, lyr)'这里你可以帮定sql的表
Debug.Print ds.Fields(4).Name
flds.Add ds.Fields(4), ds.Fields(4).Name'这里没有变化,我帮定了第4,5个字段
flds.Add ds.Fields(5), ds.Fields(5).Name'字段名字和tab中的字段名必须一致,否则出错
'只能显示人口比例
Debug.Print flds.Item(1).Name
Set tm = ds.Themes.Add(miThemePieChart, flds)'显示专题图,我是饼图
End Sub
hmt 2003-08-22
  • 打赏
  • 举报
回复
to jedy:
你的数据是本来就和capital.tab绑定的,如果你的数据是来自sql server 或access
的话,就不一样了。
我的问题是主要在Set ds = Map1.Datasets.Add(miDataSetLayer, lyr)
的后面几个参数,主要是GeoField和SecondaryGeoField.而且我也很奇怪,GeoField
和SecondaryGeofield如何与map中的关键字匹配,我这里,并没有把所有的属性数据
放到map中,在map中,只有关键数据,我的问题,我那2个关键字(是map中的)如何分别与GeoField和SecondaryGeofield对应。有可能map中的第一个属性与SecondaryGeoField
对应,也有可能与GeoFeild对应,到底mapx是如何对应这些属性的??????
我不知道有有没有理解我的意思,还是很感谢你的回复。
jedy 2003-08-22
  • 打赏
  • 举报
回复
用dataset绑定你sql数据库的表,然后添加到新的fields集合中,集合中有两个,班和村号,然后添加theme。
hmt 2003-08-21
  • 打赏
  • 举报
回复
难道大家都没碰到过这个问题吗,或可能mapx5.0的bug太多了。
alan1698 2003-08-20
  • 打赏
  • 举报
回复
你是用VB,Dephi还是用其它语言编写的?
hmt 2003-08-20
  • 打赏
  • 举报
回复
语言到是没关系的,我是用VB的。
hmt 2003-08-19
  • 打赏
  • 举报
回复
第一个问题已经解决,谢谢dangle

第2个问题还没解决。主要是在做专题图中,mapx的函数,没有让我
指定在*.tab文件中要哪几个属性来与数据库中属性的对应,mapx只是让我
指定数据库中的。这样的话,mapx根本不会知道,哪个*.tab中的属性与
数据库里的属性对应。比如上面所举的例子,数据库的小班号有可能与
*.tab中的村号对上了,而不是与*.tab中的小班号对应。
谁知道的话,请帮忙,十分感谢。
dangle 2003-08-19
  • 打赏
  • 举报
回复
可以通过rowvalues返回属性数据

2,141

社区成员

发帖
与我相关
我的任务
社区描述
它是一种特定的十分重要的空间信息系统。它是在计算机硬、软件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术系统。
社区管理员
  • 地理信息系统
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧