MapObject控件使用之图层制作

本文介绍了使用MapObject控件制作图层的方法。将固定数据制作成图层可提高程序速度且使用方便。以经纬度坐标画点为例,说明了创建新图层的步骤,包括增加成员变量、编写创建函数等,最后设置点的颜色并加入地图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MapObject控件使用之图层制作

作者:张松伟

zswking@163.com

 

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

假设我们要将一些经纬度坐标用点的方式画在地图上,那么我们首先要有保存经纬度坐标的数组: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;

}

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值