请问在vc+mapx中创建永久图层时,每一句都是什么作用,帮忙注释一下,谢谢

请问在vc+mapx中创建永久图层时,每一句都是什么作用,帮忙注释一下,谢谢,第1张

CMapXLayerInfo LayerInfo //定义图层信息对象

CMapXFields MapFields // 定义属性管理对象

LayerInfo.CreateDispatch( LayerInfo.GetClsid() ) //创建图层对象

MapFields.CreateDispatch( MapFields.GetClsid() )//创建属性管理对象

MapFields.AddIntegerField( "C_ID" , TRUE ) //属性管理对象添加字段 C_ID 类型为TRUE

MapFields.AddStringField( "Name" , 32 ) //继续添加字符字段 NAME 长度大小为32

COleVariant vFields//定义ole变体 变量 为了将mapfields 关联到layerinfo上

vFields.vt = VT_DISPATCH //设置类型为DISPATCH

vFields.pdispVal = MapFields//管理对象为定义的属性管理对象

vFields.pdispVal->AddRef()//加1 com组件的特性

LayerInfo.SetType( miLayerInfoTypeNewTable )// 图层信息对象设置图层类型添加新的

LayerInfo.AddParameter("Filespec" , COleVariant("car") )// 图层信息对象添加Filespec字段数据

LayerInfo.AddParameter("Name" , COleVariant("DC Water") )//继续添加Name字段数据

LayerInfo.AddParameter("Fields", vFields )//继续添加Fields字段数据 此时将上面定义的属性管理对象与图层信息关联

m_ctrlMapX.GetLayers().Add( LayerInfo )// 现在就可以添加这个永久图层了

mapx的数据绑定。

项目要求:将一些数据,用专题图的方式在地图上显示出来。

1、首先创建一个临时图层(根据项目需求,没必要创建永久图层)

开始用creatLayer方法建的,

A、用MainMap.Layers.CreateLayer方法创建临时表。但这个临时表只有一个字段:GeoName(

Char 24)。程序运行过程中该表存放位置为系统临时文件夹下

B、使用LayerInfo对象创建临时表,可以指定字段。示例:

2、将要显示的数据添加到新建的图层上。

网上找到的资料都是和数据库进行绑定,然后吧啦吧啦就ok了,但我addData时报:Invalid Field specified. Name not found, or index out of range. 错误。

原因:因为我是用A方法创建的图层,这时只有一个默认的字段,Geoname

[c-sharp] view plain copy

MapXLib.Fields fields = new MapXLib.FieldsClass()

fields.AddFloatField("lon", Type.Missing)

fields.AddFloatField("lat", Type.Missing)

MapXLib.Dataset testDataSet = axMap.DataSets.Add(MapXLib.DatasetTypeConstants.miDataSetLayer, tempLayer, "", 0, 0, 0, fields , false)

Add时传进去的参数是fields,当然就报这个错误了,应该换用B方法创建图层。

假设MapX已经打开一个图层,图层名为"a",手头还有一个Access数据库a.mdb,数据库里面

有个表X想和a图层绑定。我们保证a层属性里面有一个字段ID1与表X的一个字段ID2是匹配

的!!

问题一:数据库中的某一字段要和表中的某一字段匹配,这句话什么意思?是字段名要一致,还是该列的数据完全一致?

问题二:我们用的数据不是从数据库取出来的,是随便设的一些数据,根据上面的意思,好像是指a层的一个字段名及类型,要和表

x的一个字段名和类型,完全一致。

//添加新的点

x = 100

y = 100

str = "节点"

pt.Set(x, y)

mystyle = lyr.AllFeatures[1].Style

fts = axMap1.FeatureFactory.CreateSymbol(pt, mystyle)

fts.KeyValue = str

lyr.AddFeature(fts, null)

lyr.Refresh()

我想把新的点添加到图层上,但是AddFeature()的第二个参数不能为空,呼唤哪位高手帮忙解决一下。

在线等啊!!!

第二个参数是RowValues:表示一行数据的属性数据的新值,RowValues集合中的每个值都相应于属性数据的一列,此参数只适用于miDatesetLayer类型的layer!

它是一个可选参数,C#却强制使用,没有办法的。要不你就声明一个Rowvalues的变量,然后放在第二个参数上!你试试看吧!

问题没有遇到过,不过既然是加载这个文件,那么首先需要这个文件存在(路径不能有错),然后就是在访问这个文件的时候这个文件需要关闭状态,其次就是你的程序要有打开这个文件的权限(每个程序运行都是在一定账户下执行的,所以需要你的文件具有这个权限,一般是IIS访问、everyone、你登录计算机的账户)。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/7964962.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-12
下一篇2023-04-12

发表评论

登录后才能评论

评论列表(0条)

    保存