MapObject控件使用之图层制作

类别:VC语言 点击:0 评论:0 推荐:

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;

}

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

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

本文地址:http://com.8s8s.com/it/it862.htm