阅读:3083回复:5
C#+MO实现地图基本功能
<P >其实现代码如下:</P>
<P >一:由菜单实现:</P> <P >菜单代码如下:</P> <P ><FONT face="Times New Roman">Int map1mousesymbol;//mouse</FONT>事件的一个标志性变量</P> <P align=left>private void mnu_zoomout_Click(object sender, System.EventArgs e)<p></p></P> <P align=left> {<p></p></P> <P align=left> this.map1mousesymbol = 4;<p></p></P> <P align=left> this.axMap1.MousePointer = MapObjects2.MousePointerConstants.moZoomOut ;<p></p></P> <P align=left> }<p></p></P> <P align=left><p> </p></P> <P align=left> private void mnu_zoomin_Click(object sender, System.EventArgs e)<p></p></P> <P align=left> {<p></p></P> <P align=left> this.map1mousesymbol = 5;<p></p></P> <P align=left> this.axMap1 .MousePointer = MapObjects2.MousePointerConstants.moZoomIn;<p></p></P> <P align=left> }<p></p></P> <P align=left><p> </p></P> <P align=left> private void mnu_pan_Click(object sender, System.EventArgs e)<p></p></P> <P align=left> {<p></p></P> <P align=left> this.map1mousesymbol = 6;<p></p></P> <P align=left> this.axMap1.MousePointer= MapObjects2.MousePointerConstants.moPan;<p></p></P> <P align=left> }<p></p></P> <P align=left><p> </p></P> <P align=left> private void mnu_fullview_Click(object sender, System.EventArgs e)<p></p></P> <P align=left> {<p></p></P> <P align=left> this.map1mousesymbol = 7;<p></p></P> <P align=left> this.axMap1.MousePointer=MapObjects2.MousePointerConstants.moSizeAll;<p></p></P> <P > }<p></p></P> <P >对<FONT face="Times New Roman">AXMAP1</FONT>加入一个<FONT face="Times New Roman">mouse</FONT>单击事件,从而可以对上述菜单进行相应的操作:</P> <P align=left> switch(this.map1mousesymbol )<p></p></P> <P align=left> {//地图的缩小功能<p></p></P> <P align=left>case 4:MapObjects2.Rectangle myrc=new MapObjects2.Rectangle ();<p></p></P> <P align=left> myrc = this.axMap1.Extent;<p></p></P> <P align=left> myrc.ScaleRectangle (1.5) ;<p></p></P> <P align=left> axMap1.Extent = myrc;<p></p></P> <P align=left> this.axMap1 .Refresh ();<p></p></P> <P align=left> break;<p></p></P> <P align=left>//地图的放大功能<p></p></P> <P align=left> case 5:this.axMap1 .Extent = axMap1.TrackRectangle();<p></p></P> <P align=left> this.axMap1 .Refresh ();<p></p></P> <P align=left> break;<p></p></P> <P align=left>//地图的移动功能<p></p></P> <P align=left> case 6: this.axMap1.Pan (); <p></p></P> <P align=left> this.axMap1.MousePointer=MapObjects2.MousePointerConstants.moPanning;<p></p></P> <P align=left> this.axMap1 .Refresh (); <p></p></P> <P align=left> break;<p></p></P> <P align=left>//地图的全屏显示功能<p></p></P> <P align=left> case 7:this.axMap1.Extent = axMap1.FullExtent;<p></p></P> <P align=left> this.axMap1 .Refresh ();<p></p></P> <P align=left> break;<p></p></P> <P align=left> default:<p></p></P> <P > break;</P> <P ><FONT face="Times New Roman">}</FONT></P> <P >二.由工具栏实现。</P> <P ><FONT face="Times New Roman">//</FONT>在这里的代码主要实现的也是一个标志性变量赋值功能</P> <P align=left>private void toolBar1_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e)<p></p></P> <P align=left> {<p></p></P> <P align=left> if(e.Button.Tag.ToString()=="tool_zoomout")<p></p></P> <P align=left> {<p></p></P> <P align=left> this.map1mousesymbol = 4;<p></p></P> <P align=left> this.axMap1.MousePointer = MapObjects2.MousePointerConstants.moZoomOut ;<p></p></P> <P align=left> }<p></p></P> <P align=left> if(e.Button.Tag.ToString()=="tool_zoomin")<p></p></P> <P align=left> {<p></p></P> <P align=left> this.map1mousesymbol = 5;<p></p></P> <P align=left> this.axMap1 .MousePointer = MapObjects2.MousePointerConstants.moZoomIn;<p></p></P> <P align=left> }<p></p></P> <P align=left> if(e.Button.Tag.ToString()=="tool_pan")<p></p></P> <P align=left> {<p></p></P> <P align=left> this.map1mousesymbol = 6;<p></p></P> <P align=left> this.axMap1.MousePointer= MapObjects2.MousePointerConstants.moPan;<p></p></P> <P align=left> }<p></p></P> <P align=left> if(e.Button.Tag.ToString()=="tool_full")<p></p></P> <P align=left> {<p></p></P> <P align=left> this.axMap1.Extent = axMap1.FullExtent;<p></p></P> <P align=left> this.axMap1 .Refresh ();<p></p></P> <P align=left> this.axMap1.MousePointer=MapObjects2.MousePointerConstants.moSizeAll;<p></p></P> <P align=left> }<p></p></P> <P align=left> if(e.Button.Tag.ToString()=="tool_arrow")<p></p></P> <P align=left> {<p></p></P> <P align=left> this.axMap1.MousePointer=MapObjects2.MousePointerConstants.moArrow;<p></p></P> <P align=left> }<p></p></P> <P align=left>}<p></p></P> <P ><FONT face="Times New Roman"> </FONT><B >图层的加载功能的实现</B><B ><p></p></B></P> <P >这里的实现也是由菜单和工具栏实现的。</P> <P >而加载的主要过程由下面函数实现的:</P> <P ><FONT face="Times New Roman">//</FONT>打开“打开文件对话框”的<FONT face="Times New Roman">SHOW</FONT>函数过程,</P> <P align=left> private void ShowOpenFileDialog()<p></p></P> <P align=left> {<p></p></P> <P align=left> <p></p></P> <P align=left> DialogResult drfile;<p></p></P> <P align=left> string strFilePath,strFileName,strSpliter1; <p></p></P> <P align=left> int intCount;<p></p></P> <P align=left> int intCount2; <p></p></P> <P align=left> strSpliter1=@""; <p></p></P> <P align=left> strFilePath="";<p></p></P> <P align=left> strFileName=""; <p></p></P> <P align=left> openFileDialog1.FileName="";<p></p></P> <P align=left> drfile=openFileDialog1.ShowDialog();<p></p></P> <P align=left>//分别读取文件名和文件的路径,<p></p></P> <P align=left> if (drfile == DialogResult.OK)<p></p></P> <P align=left> {<p></p></P> <P align=left> strSpliter1 = openFileDialog1.FileName;<p></p></P> <P align=left> intCount=strSpliter1.Length-4; <p></p></P> <P align=left> intCount2=strSpliter1.LastIndexOf('\\');<p></p></P> <P align=left> for(int j=0;j<=intCount2;j++)<p></p></P> <P align=left> {<p></p></P> <P align=left> strFilePath=strFilePath+strSpliter1[j];<p></p></P> <P align=left> }<p></p></P> <P align=left> for(int i=intCount;i>0;i--)<p></p></P> <P align=left> {<p></p></P> <P align=left> if(strSpliter1=='\\')<p></p></P> <P align=left> {<p></p></P> <P align=left> strFileName=strSpliter1.Substring(i+1);<p></p></P> <P align=left> break;<p></p></P> <P align=left> <p></p></P> <P align=left> }<p></p></P> <P align=left> }<p></p></P> <P align=left> <p></p></P> <P align=left> <p></p></P> <P align=left> <p></p></P> <P align=left> }<p></p></P> <P align=left>//调用加载图层的方法<p></p></P> <P align=left> AddLayer(strFilePath,strFileName);<p></p></P> <P align=left> }<p></p></P> <P align=left><p> </p></P> <P align=left><p> </p></P> <P align=left>//加载图层的方法 <p></p></P> <P align=left> private void AddLayer(string strDatabase,string strDatasetName)<p></p></P> <P align=left> {<p></p></P> <P align=left> MapObjects2.DataConnection objDataConn;<p></p></P> <P align=left> MapObjects2.GeoDataset objGeoDataset;<p></p></P> <P align=left> MapObjects2.MapLayer objMapLayer;<p></p></P> <P align=left> objDataConn=new MapObjects2.DataConnection();<p></p></P> <P align=left> objMapLayer=new MapObjects2.MapLayer();<p></p></P> <P align=left> objDataConn.Database =strDatabase;<p></p></P> <P align=left> if(objDataConn.Connect()==true)<p></p></P> <P align=left> { <p></p></P> <P align=left> objGeoDataset=objDataConn.FindGeoDataset(strDatasetName);<p></p></P> <P align=left> objMapLayer.GeoDataset=objGeoDataset; <p></p></P> <P align=left> axMap1.Layers.Add(objMapLayer);<p></p></P> <P align=left> axMap1.Refresh();<p></p></P> <P align=left> <p></p></P> <P align=left> }<p></p></P> <P align=left> <p></p></P> <P > }<p></p></P> <P >由上面方法我们就可以用菜单或者用工具栏来实现了,<p></p></P> <P >一,用菜单来实现,<p></p></P> <P align=left>private void mnu_addlayer_Click(object sender, System.EventArgs e)<p></p></P> <P align=left> {//打开“打开文件对话框”<p></p></P> <P align=left> ShowOpenFileDialog();<p></p></P> <P align=left> }<p></p></P> <P > <p></p></P> <P >二,用工具框来实现打开图层,</P> <P >如上:</P> <P align=left> <p></p></P> <P align=left> if(e.Button.Tag.ToString()=="tool_addlayer")<p></p></P> <P align=left> {<p></p></P> <P align=left> ShowOpenFileDialog();<p></p></P> <P > }</P> <P ><p><FONT face="Times New Roman"> </FONT></p></P> <P >在这里还加入了一个删除所有图层的功能,。</P> <P align=left>if(e.Button.Tag.ToString()=="deleteall")<p></p></P> <P align=left> {<p></p></P> <P align=left><p> </p></P> <P align=left> warnbox.ShowDialog();<p></p></P> <P align=left> <p></p></P> <P align=left> switch(warnbox.symbolbutton)<p></p></P> <P align=left> {<p></p></P> <P align=left> case true:this.axMap1.Layers.Clear();<p></p></P> <P align=left> this.axMap1.Refresh();<p></p></P> <P align=left> break;<p></p></P> <P align=left> default :break;<p></p></P> <P align=left> }<p></p></P> <P align=left> <p></p></P> <P align=left> }<p></p></P> |
|
|
1楼#
发布于:2007-04-29 22:59
<img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em01.gif" />
|
|
2楼#
发布于:2007-10-07 10:25
<P>很不错.</P>
|
|
3楼#
发布于:2007-11-17 12:34
很不错啊 楼主 多多发代码啊 支持支持<img src="images/post/smile/dvbbs/em12.gif" />
|
|
4楼#
发布于:2008-03-15 19:33
楼主可以加我QQ吗? 564171918 呵呵,有许多问题不明白 <br>
|
|
5楼#
发布于:2008-07-30 10:57
[求助]帮帮新手
我是一个超级菜鸟新手,刚看到您的代码,可是还是好多不明白,能否把您的这个小程序打包发给我?我的邮箱:lele0lulu@163.com 或者 hlydd@yahoo.cn,不甚感激!!<br> |
|