VC语言

本类阅读TOP10

·VC++ 学习笔记(二)
·用Visual C++打造IE浏览器(1)
·每个开发人员现在应该下载的十种必备工具
·教你用VC6做QQ对对碰外挂程序
·Netmsg 局域网聊天程序
·Windows消息大全
·VC++下使用ADO编写数据库程序
·VC++学习笔记(四)
·非法探取密码的原理及其防范
·怎样在VC++中访问、修改注册表

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
MapObject控件使用之图层制作

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

MapObject控件使用之图层制作

作者:张松伟

[email protected]

 

有些时候将一些固定的数据制作成图层,可以提高程序的速度,而且使用方便。下面我就将对图层的制作方法进行一下简单的说明。

假设我们要将一些经纬度坐标用点的方式画在地图上,那么我们首先要有保存经纬度坐标的数组:m_LonArray, m_LatArray,均为CArray<float,float>型。然后我们在CMyView中增加一些成员变量:

 

              CmoDataConnection          pMoCon; 

                  CMoTableDesc                     desc;

                  CMoMapLayer                        layer;

                  CMoPoint                             m_point;

 

好了,是为创建新图层增加一个函数的时候了,在视图类中增加函数:CreateNewLayer()

BOOL CMyView:: CreateNewLayer ()

{

         if (!pMoCon.CreateDispatch(TEXT("MapObjects2.DataConnection")))

                   return FALSE;

         if(!desc.CreateDispatch("MapObjects2.TableDesc"))

                   return FALSE;

        

         VARIANT vt;

         vt.vt = VT_BOOL;

         vt.boolVal = VARIANT_FALSE;

        

         pMoCon.SetDatabase((LPCTSTR)"E:\\Demo\\经纬度层");        //设置图层保存目录

         if(!pMoCon.Connect())

                   return FALSE;

        

         //设置图层的字段个数及属性,这里设置两个,一个为Number,一个为Name。表示点的号码及名称。

         desc.SetFieldCount(2);

         desc.SetFieldType(0,moString);

         desc.SetFieldName(0,"Number");

         desc.SetFieldLength(0,10);

         desc.SetFieldType(1,moString);

         desc.SetFieldName(1, "Name");

         desc.SetFieldLength(1, 10);

 

        //创建新图层,设置名称、类型及字段。

         CmoGeoDataSet geoDataset(pMoCon.AddGeoDataset(“经纬度层”, moShapeTypePoint,

                  (LPDISPATCH)desc, vt, vt);

                  

         if (!layer.CreateDispatch(TEXT("MapObjects2.MapLayer")))

                   return FALSE;

 

         //设置图层的记录集

         layer.SetGeoDataset(geoDataset);                 

         CMoRecordset recs(layer.GetRecords());

         CMoFields fields(recs.GetFields());

        

         for(int i=0; i<m_LonArray.GetSize(); i++)

         {

                  recs.AddNew();

                  m_point.SetX(m_ LonArray.GetAt(i));

                  m_point.SetY(m_ LatArray.GetAt(i));

                  SetValue(fields, "Shape",m_point);

                  SetValue(fields, "Number",m_Number.GetAt(i));//需定义CStringArray m_Number

                  SetValue(fields, "Name", m_Chname.GetAt(i));//需定义CStrignArray m_Name

                  recs.Update();

         }

 

         //设置点的颜色,并加入地图。

         layer.GetSymbol().SetColor(moLightYellow);

         CMoLayers layers(m_map.GetLayers());

         layers.Add(layer);

 

return TRUE;

}

好了,调用一下试试效果吧。

本人水平用限,欢迎大家批评指正。




相关文章

相关软件