|
阅读:2426回复:2
[求助]VC+MAPX创建永久图层
<P>我的目的是当用户往地图上加入图层后,用户在这个图层上做的加点,线,标注等能保留下来,由于加入的是栅格图层,不能编辑,所以我想在加入栅格图层的同时,创建一个永久的图层,用来保留用户的点线和标注等,创建新图层的代码如下: <BR>CMapXFields Flds; <BR> Flds.CreateDispatch(Flds.GetClsid()); <BR> <BR> //Create the field definitions for the new layer. For example: <BR> //First field is a string, second is an integer, last is a date <BR>/* Flds.AddStringField("My String Column", 50); <BR> Flds.AddIntegerField("My Integer Field"); <BR> Flds.AddDateField("My Date Field");*/ 这一段编译报错,说没有这三个函数,于是我用了下面这个函数 <BR> Flds.Add(COleVariant("IDField"),COleVariant("IDField"),COleVariant((long)miAggregationIndividual),COleVariant((long)miTypeString)); <BR><BR> <BR> //Create a variant that points to the fields collection just created <BR> VARIANT vFlds; <BR> vFlds.vt = VT_DISPATCH; <BR> vFlds.pdispVal = Flds.m_lpDispatch; <BR> <BR> //Create a new LayerInfo Object <BR> CMapXLayerInfo Linfo; <BR> Linfo.CreateDispatch(Linfo.GetClsid()); <BR> <BR> //Set the Layer Info type to type: New Table <BR> Linfo.SetType(miLayerInfoTypeNewTable); <BR> <BR> //Add the parameters for the new table <BR> Linfo.AddParameter("FileSpec", COleVariant("MyTab.tab")); //Tab file <BR> Linfo.AddParameter("Name", COleVariant("MyNewLayer")); //Layer name <BR> Linfo.AddParameter("Fields", vFlds); //Fields <BR> <BR> //Add the new layer to the map <BR> m_MapX.GetLayers().Add(Linfo.m_lpDispatch); //运行到这句就运行不过去,产生异常错误,也没有提示什么错误 <BR><BR> //查看相关的目录下面只产生了.ID和.MAP文件,没有.TAB等其他文件 <BR>注明:由于我的应用程序主框架是基于单文档的,所以我加MAPX时是加入MAP.H 和MAPX.CPP。另外由于需要,在一个弹出对话框中为了方便画控件我又将mapx以Conponents and Contral形式添加到工程。Flds.AddStringField("My String Column", 50);这几句出错,我的理解是他调用的是前一种方式下加入的MAPX类里面的函数,我找了在这种方式下FIELDS对象的没有AddStringField这一方法,所以我用了它包含的Flds.Add(...)方法,不知道字段有没有加进去?希望各位大侠帮我分析,谢谢!</P>
|
|
|
1楼#
发布于:2007-11-30 20:37
我是用createlayer直接创建了一个图层,每次通过图层控制把它加载进来,然后进行各种点,线标注,最后通过保存按钮把图层保存一下就可以了,不过就是比较麻烦。我还不会标注各种线条呢,会的话告诉我,可以的话直接发到我得邮箱<a href="mailtniukangwei@163.com" target="_blank" >niukangwei@163.com</A>
|
|
|
2楼#
发布于:2007-12-03 14:10
没有人知道吗?
|
|