cpyjzhen
路人甲
路人甲
  • 注册日期2006-02-10
  • 发帖数5
  • QQ
  • 铜币126枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1022回复:0

一个新手的问题

楼主#
更多 发布于:2006-03-03 23:09
<P>这段文字大虾们应该看过吧?可是我照着做不行啊,各位路过的大虾可指点一下么?</P>
<P>急呀!!</P>
<P>使用Map对象增加图层<BR>这时编译程序,应该不会出错,但在运行时,发现除了在表单视图中增加了一个空白的代表地图控件的小图标外,应用程序与刚生成时的情况并没有什么太大的区别。为了增加图层数据,首先要把地图控件的尺寸放大到与表单视图一样大,然后把图层数据加入到地图对象中。 <BR><BR>第一步、找到CMmapView的OnInitialUpdate()方法,作如下操作:<BR>(1)如果原来有“ResizeParentToFit();”语句,注释掉或删除它;<BR>(2)在返回语句之前增加如下语句:<BR><BR>// 将显示尺寸调整到整个客户区<BR>CRect client;<BR>GetClientRect(;client);<BR>int cx=client.Width();<BR>int cy=client.Height();<BR>m_map.SetWindowPos(0, 0, 0, cx, cy, SWP_NOZORDER); <BR><BR>第二步、找到CChildFrame,重载其OnClientCreate()方法,该方法将在创建表单客户区时被调用,在其返回语句之前增加语句:“MDIMaximine();”。 <BR><BR>完成上面两步后,再次编译程序并运行,在原来表单客户区应该出现一个空白的地图,接下来往这个空白图上增加图层。为了简单起见,我们假设图层数据放在C:\data目录下,图层格式为Shape文件,其文件名为test.shp。 <BR><BR>第三步、在CMmapView中创建一个增加shape文件的方法AddShpLayer(),其实现为:<BR>增加SHP图层,返回图层内部名称,为空表示不成功。<BR>CString CMmapView::AddShpLayer(const CString ; path, COLORREF color, short symbolSize, short symbolStyle)<BR>{<BR><BR>CMoDataConnection conn;<BR>if (!conn.CreateDispatch(TEXT("MapObjects2.DataConnection"))) return "";<BR>conn.SetDatabase(GetFileDirectory(path));<BR>if (!conn.Connect()) return ""; <BR><BR>// Add layer specified by path<BR>CMoLayers layers=m_map.GetLayers();<BR>CMoMapLayer layer;<BR>if (!layer.CreateDispatch(TEXT("MapObjects2.MapLayer"))) return "";<BR><BR>CString LayerName = GetFileTitle(path);<BR>CMoGeoDataset geoDataset=conn.FindGeoDataset(LayerName);<BR>if(!geoDataset) return ""; <BR><BR>layer.SetGeoDataset(geoDataset);<BR>CMoSymbol layerSymbol(layer.GetSymbol()); <BR><BR>if (color != -1) layerSymbol.SetColor(color); // Set color if specified<BR><BR>layerSymbol.SetSize(symbolSize);<BR>layerSymbol.SetStyle(symbolStyle);<BR>layers.Add(layer);<BR>return(layer.GetName());<BR><BR>} <BR><BR>为了使这段代码能够被顺利编译,还要在mmapview.cpp的文件开始处增加如下include语句:<BR>#include "modataconnection.h"<BR>#include "molayers.h"<BR>#include "momaplayer.h"<BR>#include "mogeodataset.h"<BR>#include "mosymbol.h" <BR><BR>另外,在CMmapView中增加几个辅助函数,用于分析图层文件路径中的文件名、目录名:<BR>CString CMmapView::GetFileDirectory(const CString; path)<BR>{<BR><BR>int pos = path.ReverseFind('\\');<BR>if (pos >= 0) return path.Left(pos);<BR>return "";<BR><BR>} <BR><BR>CString CMmapView::GetFileTitle(const CString; path)<BR>{<BR><BR>CString strResult = GetFileName(path);<BR>int pos = strResult.ReverseFind('.');<BR>if (pos >= 0) return strResult.Left(pos);<BR>return strResult;<BR><BR>} <BR><BR>CString CMmapView::GetFileName(const CString; path)<BR>{<BR><BR>int pos = path.ReverseFind('\\');<BR>if (pos >= 0) return path.Right(path.GetLength() - pos - 1);<BR>return path;<BR><BR>} <BR><BR>第四步,回到CMmapView的OnInitialUpdate(),在其返回之前加上如下语句:<BR>AddShpLayer("c:\\data\\test.shp", RGB(125,125,125), 0, 0); <BR><BR>再次编译后运行(运行前确保C:\data\test.shp图层文件存在,即至少包括c:\data\test.dbf、c:\data\test.shp、c:\data\test.shx三个文件),应该能够观察到test图层被加入到了地图中。</P>
喜欢0 评分0
游客

返回顶部