sbitx
路人甲
路人甲
  • 注册日期2006-12-26
  • 发帖数14
  • QQ
  • 铜币201枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:2875回复:5

C#+MO实现地图基本功能

楼主#
更多 发布于:2007-04-28 20:11
<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>
喜欢0 评分0
学习,是一个很累过程 学习,是一个很开心的过程 学习,学习, email:lihai.851022@tom.com
whmwxhanshan123
路人甲
路人甲
  • 注册日期2006-06-17
  • 发帖数3108
  • QQ
  • 铜币6445枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2007-04-29 22:59
<img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em01.gif" />
举报 回复(0) 喜欢(0)     评分
chunlei
路人甲
路人甲
  • 注册日期2006-11-17
  • 发帖数11
  • QQ
  • 铜币130枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2007-10-07 10:25
<P>很不错.</P>
举报 回复(0) 喜欢(0)     评分
jay100125
路人甲
路人甲
  • 注册日期2007-06-13
  • 发帖数53
  • QQ
  • 铜币246枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2007-11-17 12:34
很不错啊  楼主  多多发代码啊  支持支持<img src="images/post/smile/dvbbs/em12.gif" />
举报 回复(0) 喜欢(0)     评分
jianfei2009
路人甲
路人甲
  • 注册日期2005-11-25
  • 发帖数1
  • QQ
  • 铜币111枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2008-03-15 19:33
楼主可以加我QQ吗? 564171918  呵呵,有许多问题不明白  <br>
举报 回复(0) 喜欢(0)     评分
霜之哀伤
路人甲
路人甲
  • 注册日期2007-10-24
  • 发帖数4
  • QQ
  • 铜币122枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2008-07-30 10:57
[求助]帮帮新手
我是一个超级菜鸟新手,刚看到您的代码,可是还是好多不明白,能否把您的这个小程序打包发给我?我的邮箱:lele0lulu@163.com 或者 hlydd@yahoo.cn,不甚感激!!<br>
举报 回复(0) 喜欢(0)     评分
游客

返回顶部