7.7.3 地图放大、缩小的实现(1)
首先介绍MapObjects的使用方法。使用MapObjects同其他的ActiveX控件没有什么两样,先安装MapObjects控件。安装成功后MapObjects就已经注册成功了。MapObjects的安装包在本书附带的光盘中会提供给读者。
选择【Project】|【Add To Project】|【Components and Controls...】命令,打开【Components and Controls Gallery】对话框。从其【Registered ActiveX Controls】文件夹下的已登记控件列表中选择【MapObjects 2.3 Map Control】选项,然后单击【Insert】按钮,系统将生成该控件及其自动化对象的一系列包裹类(Wrapper Class)。这样在控制条中会增加一个地图控件图标,把该图标插入到所应用的窗口中就可以了。可以在相应的头文件中创建该类型的对象,利用它就可以操作地图了。
当然,还要添加矢量的图层数据,添加适量数据需要用到CMap、CMoDataConnection、CMoLayers、CMoMapLayer和CMoGeoDataset这5个对象。5个对象间的关系如图7-27所示。
|
| 图7-27 对象间的关系 |
创建数据的连接,可以定义CMoDataConnection类的一个对象conn,通过conn.CreateDispatch("MapObjects2.DataConnection")函数来进行身份的匹配,而且需要设置连接的目录,conn.SetDatabase(path)函数的path参数代表了目录的路径。调用conn.Connect()函数对数据库进行连接。创建好数据库连接对象后,连接相应的矢量数据集,具体步骤如下。
获得Map控件对应的要素层集合对象(CmoLayers)。
- CMoLayers layers=m_map.Getlayers();
然后创建矢量数据层对象(CmomapLayer)的对象,并对所创建的矢量数据层对象进行身份匹配; - CMoMapLayer layer;
- if(!layer.CreateDisatch("MapObjects2.MapLayer"))
- return "";
创建一个空间数据集对象。
- CString LayerName=FileName;FileName表示数据的名称
- CmoGeoDataset GeoDataset=conn.FindGeoDataset(LayerName);
- if(!GeoDataset)
- return "";
把矢量数据与空间数据集对象进行连接,即给矢量数据层挂上相应的空间数据集。 - Layer.SetGeoDataset(GeoDataset);
对新添加的矢量数据进行符号化。 - CMoSymbol layerSymbol(layer.GetSymbol())
- If(color!=-1)
- layerSynbol.SetColor(color);
- layerSymbol.SetSize(symbolSize);
- layerSymbol.Setstyle(symbolStyle);
向要素层集合中添加矢量数据。- Layers.Add(layer);