我想用一下代码添加一个矩形框,但失败了,添加后看不到图元。
代码如下:
// x1, y1, x2, y2为在地图中选定的两个点坐标
// 分别作为要绘制矩形框的左下角和右上角两个点
x1 = 20741.798;
x2 = 20739.798;
y1 = 3401.866;
y2 = 3409.866;
pt.Set(x1, y1);
pts.Add(pt);
pt.Set(x1, y2);
pts.Add(pt);
pt.Set(x2, y2);
pts.Add(pt);
pt.Set(x2, y1);
pts.Add(pt);
sty = m_MapXFeature.GetStyle(); // 获取Style
lyr = m_ctrlMapX.GetLayers().Item("TEMP1"); // 获取要添加的图层
DrawRect(lyr, pts, sty); // 调用DrawRect函数绘制矩形框// DrawRect函数,绘制矩形框
void DrawRect(CMapXLayer lyr, CMapXPoints pts, CMapXStyle sty)
{
try {
CMapXFeatureFactory fac;
CMapXFeature ftr, ftr2;
COleVariant vtPts, vtSty; fac = m_ctrlMapX.GetFeatureFactory();
// Points Variant
vtPts.vt = VT_DISPATCH;
vtPts.pdispVal = pts.m_lpDispatch;
vtPts.pdispVal->AddRef();
// Style Variant
vtSty.vt = VT_DISPATCH;
vtSty.pdispVal = sty.m_lpDispatch;
vtSty.pdispVal->AddRef();

ftr = fac.CreateRegion(vtPts, vtSty);
ftr2 = lyr.AddFeature(ftr);
ftr2.Update();
lyr.Refresh();
} catch (COleDispatchException *e) {
e->ReportError();
e->Delete();
} catch (COleException *e) {
e->ReportError();
e->Delete();
}
}运行完后打开图层TEMP1的浏览窗口可以看到已经增加了一个图元,但在地图窗口中看不到,显示全图也没有。很奇怪,不知道怎么回事。
不知道哪位高手能否指点一下,或者给一段可用代码,不胜感激!

解决方案 »

  1.   

    老早以前写过这方面的东西。好象记得一个地图可以分很多层,MAPX加载的时候是通过一个图层定义文件来加载的(这个文件的操作MAPX提供专门的工具,也可以在程序中实现)。要显示的图层好象必须在那个图层定义文件里注册过的,不然就不会显示。还有就是缩放比例的问题,每个图层都有缩放比例的阀值,当前地图比例要大于图层的阀值该图层才会显示。时间太长了都快忘记了,大概就这两个方面的问题。你试试
      

  2.   

    考虑下坐标系统是否一致,MapX里有平面坐标与地图坐标的转换接口