vc+mapx 添加图元属性,只能添加一个,第二个以后的图元属性添加不了

hymtyler 2009-09-25 05:09:35
void drawelement(double lon,double lat,int ang)
{
CMapXPoints Pnts; //点集对象
CMapXFeatureFactory FeaFac;
CMapXLayer oLayer;
CMapXFeature Feature,ftr;
CMapXFeatures Ftrs;
CMapXStyle Style;
CMapXDataset ods;
double pi = 3.1415926535;

double centerX,centerY; //得到地图的中心
//centerX=m_pnMapX.GetCenterX();
//centerY=m_pnMapX.GetCenterY();
centerX=lon;
centerY=lat;

Pnts.CreateDispatch(Pnts.GetClsid());

FeaFac=m_pnMapX.GetFeatureFactory();
oLayer = m_pnMapX.GetLayers().Item("temp");//获取图层

//加点
Pnts.AddXY(centerX,centerY);
Pnts.AddXY(centerX+0.00119*sin((ang-30)*pi/180),centerY+0.001*cos((ang-30)*pi/180));
Pnts.AddXY(centerX+0.00119*sin((ang+30)*pi/180),centerY+0.001*cos((ang+30)*pi/180));
Pnts.AddXY(centerX,centerY);

COleVariant vtPoints;
vtPoints.vt=VT_DISPATCH;
vtPoints.pdispVal=Pnts.m_lpDispatch;
vtPoints.pdispVal->AddRef();
Feature=FeaFac.CreateLine(vtPoints); //按照点集画区域
Style=Feature.GetStyle();
Style.SetRegionColor(miColorGreen);
Feature.SetStyle(Style.m_lpDispatch);
oLayer.SetKeyField("first");
Feature.SetKeyValue("123456");//可设置鼠标放上去后显示的值
oLayer.AddFeature(Feature);

// AfxMessageBox(a);
//添加图元属性

COleVariant layerVt;
layerVt.vt = VT_DISPATCH;
layerVt.pdispVal = oLayer.m_lpDispatch;
layerVt.pdispVal->AddRef(); //Dispatch的调用规范
//ods = m_pnMapX.GetDatasets().Add(miDataSetLayer, layerVt);
ods = m_pnMapX.GetDatasets().Add(miDataSetLayer, layerVt,oLayer.GetName());//oLayer.GetName()="temp"

Ftrs = m_pnMapX.GetLayers().Item(oLayer.GetName()).AllFeatures();
ftr=Ftrs.Item(1);

CMapXRowValues rvs;
CMapXRowValue rv;
CString str="你好";


COleVariant vF;
vF.vt = VT_DISPATCH;
vF.pdispVal = ftr.m_lpDispatch;
rvs = ods.GetRowValues(vF);

COleVariant var("123");
rv = rvs.Item("first");
rv.SetValue(var);

COleVariant var2=(long)234;
rv = rvs.Item("second");
rv.SetValue(var2);

COleVariant var3=str;
rv = rvs.Item("third");
rv.SetValue(var3);

ftr.Update(true,rvs);
ods.Refresh();

}

我创建一个图元的时候,可以添加属性,创建第二个图元的时候,添加属性失败,在网上找了好多资料,都找不到什么原因,人大侠知道什么原因吗?
...全文
316 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
磊000000 2011-10-24
  • 打赏
  • 举报
回复
oLayer.SetKeyField("first");
Feature.SetKeyValue("123456");//可设置鼠标放上去后显示的值
oLayer.AddFeature(Feature);

这里不应该硬编码。。
“说是name in use by another object”这句就是说图元已经在使用了。。
_捕风捉影_ 2009-12-24
  • 打赏
  • 举报
回复
name in use by another object
不是说的很清楚么,你创建第二个图元跟第一个图元的name是一样的,所以不行,至于什么name你自己看看
jefferyyangkai 2009-12-21
  • 打赏
  • 举报
回复
我也是初学者,不过有些小见解。你在第二次添加的时候,调试的时候会报错(不是运行,是调试)。你设个断点看一下是哪句话,说明你这个语句里第二次是不能用的,原来在地图上存在的图元是不能被再添加的(可能涉及命名)。最好的办法是你把代码放在try里面,catch(...){里面修改你出错的代码,实现剩余的功能}。
希望我的回答能对你有所帮助。
hymtyler 2009-10-15
  • 打赏
  • 举报
回复
我这个就是从例子里弄过来的呢
gisyellow 2009-10-10
  • 打赏
  • 举报
回复
MapX应该有很多例子吧?
hymtyler 2009-09-30
  • 打赏
  • 举报
回复
真的没有人会吗?会的人请帮帮忙哦
hymtyler 2009-09-27
  • 打赏
  • 举报
回复
没有人知道吗?不可能啊?
上面的代码添加图元没有问题,添加属性的时候,到第二个就出错了,说是name in use by another object
hymtyler 2009-09-25
  • 打赏
  • 举报
回复
有谁帮帮我啊!!!

2,158

社区成员

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

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