|
|
|
MapObject控件使用之图层制作
|
|
|
|
|
|
|
作者:张松伟 zswking@163.com
有些时候将一些固定的数据制作成图层,可以提高程序的速度,而且使用方便。下面我就将对图层的制作方法进行一下简单的说明。 假设我们要将一些经纬度坐标用点的方式画在地图上,那么我们首先要有保存经纬度坐标的数组:m_LonArray, m_LatArray,均为CArray型。然后我们在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 { 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_Name.GetAt(i));//需定义CStrignArray m_Name recs.Update(); } //设置点的颜色,并加入地图。 layer.GetSymbol().SetColor(moLightYellow); CMoLayers layers(m_map.GetLayers()); layers.Add(layer); return TRUE; } 好了,调用一下试试效果吧。 本人水平用限,欢迎大家批评指正。
|
|
|
|
|
|
|
|
|