源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C#+MO实现一个道路编辑软件(刚开始)

  • 时间:2021-08-07 03:32 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C#+MO实现一个道路编辑软件(刚开始)
//********************************************************** //******主窗口程序 //******************************************************** using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace IRND_DPT {     public partial class frmMain : Form     {         IRND_DPT.layerVariable pubLayerVariable = new layerVariable ();         public frmMain()         {             InitializeComponent();         }         //添加图层         private void tlbAddLayer_Click(object sender, EventArgs e)         {             IRND_DPT.OpenFile AddFile = new OpenFile();             AddFile.OpenShapeFiles(CD1,axMap1 );             object refMap = (object)this.axMap1;             bool refTrue = true;             short refShort = 0;             axlegend1.setMapSource(ref refMap);             axlegend1.ShowAllLegend();             axlegend1.LoadLegend(ref refTrue);             axlegend1.set_Active(ref refShort, true);             axMap1.Refresh();             axlegend1.Refresh();             //AddFile(CD1, axMap1);         }         //删除图层         private void toolStripButton4_Click(object sender, EventArgs e)         {             if (pubLayerVariable.MapLayerIndex >= 0)             {                 for (int i = 0; i <= axMap1.Layers.Count - 1; i++)                 {                     axMap1.Layers.Remove(pubLayerVariable.MapLayerIndex);                     break;                 }                 bool refTrue = true;                 axMap1.Refresh();                 axlegend1.LoadLegend(ref refTrue);             }         }         private void axlegend1_AfterSetLayerVisible(object sender,AxSampleLegendControl.__legend_AfterSetLayerVisibleEvent e)         {             axMap1.Refresh();                     }         private void axlegend1_LayerDblClick(object sender, AxSampleLegendControl.__legend_LayerDblClickEvent e)         {         }         private void axlegend1_MouseDownEvent(object sender, AxSampleLegendControl.__legend_MouseDownEvent e)         {             if (e.index >= 0)             {                 MapObjects2.MapLayer layer= (MapObjects2.MapLayer )axMap1.Layers.Item(e.index );                 pubLayerVariable.MapLayerName = layer.Name;                 pubLayerVariable.MapLayerIndex = e.index;                             }             axMap1.TrackingLayer.Refresh(true, axMap1.Extent);         }         //放大         private void tlb_ZoomIn_Click(object sender, EventArgs e)         {             axMap1.MousePointer = MapObjects2.MousePointerConstants.moZoomIn;         }         //缩小         private void tlb_ZoomOut_Click(object sender, EventArgs e)         {             axMap1.MousePointer = MapObjects2.MousePointerConstants.moZoomOut;         }         //漫游         private void tlb_Pan_Click(object sender, EventArgs e)         {             axMap1.MousePointer = MapObjects2.MousePointerConstants.moPan;         }         //全图         private void tbl_Full_Click(object sender, EventArgs e)         {             axMap1.Extent = axMap1.FullExtent;             axMap1.MousePointer = MapObjects2.MousePointerConstants.moArrow;         }         //逐渐放大         private void tbl_SmallIn_Click(object sender, EventArgs e)         {             MapObjects2.Rectangle r = axMap1.Extent;             r.ScaleRectangle(0.9);             axMap1.Extent = r;         }         //逐渐缩小         private void tbl_SmallOut_Click(object sender, EventArgs e)         {             MapObjects2.Rectangle r = axMap1.Extent;             r.ScaleRectangle(1.1);             axMap1.Extent = r;         }         //选择查询         private void tbl_Identify_Click(object sender, EventArgs e)         {             axMap1.MousePointer = MapObjects2.MousePointerConstants.moIdentify;         }         //属性浏览         private void toolStripButton2_Click(object sender, EventArgs e)         {             if (pubLayerVariable.MapLayerIndex >= 0 & pubLayerVariable.MapLayerName != null)             {                 MapObjects2.MapLayer lyr = (MapObjects2.MapLayer )axMap1.Layers.Item(pubLayerVariable.MapLayerName);                 IRND_DPT.frmBrowseAttr frmBrowset = new frmBrowseAttr();                                 frmBrowset.IniListview(lyr);                 frmBrowset.ShowDialog(this);              }         }         //地图响应事件         private void axMap1_MouseDownEvent(object sends, AxMapObjects2._DMapEvents_MouseDownEvent e)         {             MapObjects2.Rectangle rect;             MapObjects2.Point curp;             MapObjects2.MapLayer lyr;             MapObjects2.Recordset rest;             switch (axMap1.MousePointer)             {                 //放大                                     case MapObjects2.MousePointerConstants.moZoomIn:                 {                                         rect = axMap1.TrackRectangle();                     if (rect.Width == 0 || rect.Height == 0)                     {                         rect = axMap1.Extent;                         rect.ScaleRectangle(0.5);                     }                     axMap1.Extent = rect;                     break;                 }                 //缩小                 case MapObjects2.MousePointerConstants.moZoomOut:                 {                     MapObjects2.Rectangle Tempr;                     Tempr = axMap1.Extent;                     rect = axMap1.TrackRectangle();                     double NewSR;                     if (rect.Width != 0 || rect.Height != 0)                     {                         if (axMap1.Extent.Width / rect.Width  > axMap1.Extent.Height / rect.Height)                         {                             NewSR = axMap1.Extent.Height / rect.Height;                         }                         else                         {                             NewSR = axMap1.Extent.Width / rect.Width;                         }                         Tempr.ScaleRectangle(NewSR);                     }                     else                      {                         Tempr.ScaleRectangle(2.0);                     }                     axMap1.Extent = Tempr;                     break;                 }                 //漫游                 case MapObjects2.MousePointerConstants.moPan:                 {                     axMap1.Pan();                     break;                 }                 //选择查询             case MapObjects2.MousePointerConstants.moIdentify:                 {                     if (pubLayerVariable.MapLayerIndex >= 0 && pubLayerVariable.MapLayerName != "")                     {                         rect = axMap1.TrackRectangle();                         lyr = (MapObjects2.MapLayer)axMap1.Layers.Item(pubLayerVariable.MapLayerIndex);                         if (rect.Width == 0)                         {                             curp = axMap1.ToMapPoint(e.x, e.y);                             rest = lyr.SearchByDistance(curp, (double)axMap1.ToMapDistance((float)Screen.PrimaryScreen.WorkingArea.X * 5), "");                         }                         else                         {                             rest = lyr.SearchShape(rect, MapObjects2.SearchMethodConstants.moAreaIntersect, "");                         }                         if (rest.EOF!=true)                         {                             axMap1.FlashShape(rest.Fields.Item("shape").Value, 2);                             IRND_DPT.frmIdentify FunctionClass = new frmIdentify();                             ////FunctionClass.Close();                               FunctionClass.CurRecordSet(rest);                             FunctionClass.IniTvFeat(rest, lyr.Name);                             FunctionClass.IniLvwAttr(rest);                             FunctionClass.Show(this);                         }                     }                     break;                 }             }         }         ////////         ///////////////////////////////////////////////////////////////////////////////////////////////     } } //************************************************* //********属性查询 //************************************************ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace IRND_DPT {     public partial class frmIdentify : Form     {         MapObjects2.Recordset mrs;                 public frmIdentify()         {             InitializeComponent();         }         private void frmIdentify_Load(object sender, System.EventArgs e)         {             lvwAttr.View = View.Details;              lvwAttr.Columns.Add("字段",50,HorizontalAlignment.Left );             lvwAttr.Columns.Add ("值",50,HorizontalAlignment.Center );         }         //         private void tvFeat_NodeMouseClick(object sender, System.Windows.Forms.TreeNodeMouseClickEventArgs e)         {             string ID;             ListViewItem Item;             //if (e.Node.Parent == null) { return; }             lvwAttr.Items.Clear();             ID = e.Node.Text;             mrs.MoveFirst();             while (mrs.EOF != true)             {                 if (ID == mrs.Fields.Item("FeatureID").ValueAsString)                 {                     for (short fld = 1; fld < mrs.TableDesc.FieldCount; fld++)                     {                                                 Item = lvwAttr.Items.Add(mrs.TableDesc.get_FieldName(fld));                         Item.SubItems.Add(mrs.Fields.Item(Item.Text).ValueAsString);                     }                     lvwAttr.Refresh();                        break;                 }                 mrs.MoveNext();             }              }         public void CurRecordSet(MapObjects2.Recordset vNewValue)         {             mrs = vNewValue;         }         public void IniLvwAttr(MapObjects2.Recordset rst)         {             TreeNode n=null ;             ListViewItem Item;             string ID;             lvwAttr.Items.Clear();             if (tvFeat.Nodes.Count >= 2)             {                 int i = 0;                 foreach (TreeNode tn in tvFeat.Nodes)                 {                                         i=i+1;                     if (i == 2)                      {                          n = tn;                         break;                     }                 }                               if (n.Text != null)                 {                     rst.MoveFirst();                                         ID = rst.Fields.Item("FeatureID").ValueAsString;                                         while (rst.EOF != true)                     {                         if (ID == n.Text)                         {                             for (short fld = 1; fld < rst.TableDesc.FieldCount; fld++)                             {                                 Item = lvwAttr.Items.Add(rst.TableDesc.get_FieldName(fld));                                 Item.SubItems.Add(rst.Fields.Item(Item.Text).ValueAsString);                             }                             lvwAttr.Refresh();                             break;                         }                     }                 }             }         }         //将选择的记录集加入到树型控件中进行显示         public void IniTvFeat(MapObjects2.Recordset moRs_in, string lyrName_in)         {             TreeNode n;                         string ID;             if (moRs_in.EOF != true)             {                 moRs_in.MoveFirst();                 tvFeat.Nodes.Clear();                 n = tvFeat.Nodes.Add(lyrName_in);                 n=n.Parent;                 while (moRs_in.EOF != true)                 {                                  ID = moRs_in.Fields.Item("FeatureID").ValueAsString;                                         n= tvFeat.Nodes.Add(ID);                     moRs_in.MoveNext();                  }                               }         }         ///////zuihou////////////////////////////////////////////////////////////////////////////     } } //************************************************************* //************加载图层函数 //************************************************************* using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; namespace IRND_DPT {     class OpenFile     {            //功能说明:         //    从公共对话框中提取文件名,然后调用不同的子模块处理不同的文件加入图层的问题(支持打开多个文件)         public void  OpenShapeFiles(OpenFileDialog comopenfile,AxMapObjects2.AxMap map)         {             try             {                 string strShape, strCov, strCAD, strVPF, strImage, strMilImage;                 //将过滤器设置为可支持的文件                 strShape = "ESRI ShapeFiles(*.shp)|*.shp";                 strCov = "ESRI Coverages(*.adf,*.tat,*.pat,*.rat)|aat.adf;pat.adf;nat.adf;txt.adf;*.tat;*.pat;*.rat";                 strCAD = "AutoCAD File (*.dwg,*.dxf)|*.dwg;*.dxf";                 strImage ="All Image(*.bmp,*.dib,*.tif,*.jpg,*.jff,*.bil,*.bip,*.bsq,*.gis,*.lan,*.rlc,*.sid,*.sun,*.rs,*.ras,*.svf,*.img,*.gif)|*.bmp,*.dib,*.tif,*.jpg,*.jff,*.bil,*.bip,*.bsq,*.gis,*.lan,*.rlc,*.sid,*.sun,*.rs,*.ras,*.svf,*.img,*.gif";                 comopenfile.CheckFileExists = true;                 //设置过滤                 comopenfile.Filter = strShape + "|" + strCov + "|" + strCAD + "|" + strImage ;                 comopenfile.Title = "添加图层";                 //允许选择多个文件,并允许长文件名                 comopenfile.Multiselect = true;                 if (comopenfile.ShowDialog() == DialogResult.OK)                 {                     foreach (string strFilename in comopenfile.FileNames)                     {                         string sPath = strFilename.Substring(0, strFilename.LastIndexOf("\\") + 1);                         string sFile = strFilename.Substring(strFilename.LastIndexOf("\\") + 1, strFilename.Length - strFilename.LastIndexOf("\\") - 1);                         string nametype = sFile.Substring(sFile.LastIndexOf(".") + 1, sFile.Length - sFile.LastIndexOf(".") - 1);                         open_file(sPath, sFile, nametype, map);                     }                 }             }             catch             {                 MessageBox.Show("图层添加有错!");             }                  }         //功能说明:         //    测试文件类型,一便调用不同的子模块.处理不同图层加入的问题         private void open_file(string Path,string filename,string filetype,AxMapObjects2.AxMap mapobject)         {             string LayerName = filename.Substring(0, filename.LastIndexOf("."));             switch (filetype)             {                 case "shp":                     shpAdd(Path, filename, mapobject, LayerName, true);                     break;             }         }         //功能说明:         //添加shape格式的文件         public void   shpAdd(string databasepath, string filename,AxMapObjects2.AxMap mapobject, string LayerName, bool Hide)         {              MapObjects2.DataConnection dCon=new MapObjects2.DataConnection() ;            // MapObjects2.GeoDataset gSet=new MapObjects2.GeoDataset ();             MapObjects2.MapLayer newLayer = new MapObjects2.MapLayer();                  long i=0;             try             {                 dCon.Database = databasepath;                 if (dCon.Connect())                 {                     MapObjects2.GeoDataset gSet = dCon.FindGeoDataset(filename);                     if (gSet == null)                     {                         return ;                     }                     else                     {                          //查看当前是否有重复的图层名,以确保所有的图层名都是唯一的                         if (FindMapLayerName(mapobject,LayerName)==true )                         {                             string tempstr = LayerName;                             while (FindMapLayerName(mapobject, tempstr + "-" + i)==true )                             {                                 i++;                             }                             LayerName = LayerName + "-" + i;                         }                         newLayer.GeoDataset = gSet;                         if (Hide)                         {                             newLayer.Visible = true;                         }                         else                         {                             newLayer.Visible = false;                          }                         //使用默认颜色和样式设置图层                         switch (newLayer.shapeType)                         {                              case MapObjects2.ShapeTypeConstants.moShapeTypePoint :                                 newLayer.Symbol.Color=11513775;                                 newLayer.Symbol.Size=5;                                 break;                             case MapObjects2.ShapeTypeConstants .moShapeTypeLine :                                 newLayer.Symbol.Color = 11513775;                                 newLayer.Symbol.Size = 1;                                 break;                             case MapObjects2.ShapeTypeConstants.moShapeTypePolygon :                                 newLayer.Symbol.SymbolType = 0;                                 newLayer.Symbol.Style = 8;                                 newLayer.Symbol.Color = 12566463;                                 newLayer.Symbol.Outline = true;                                 newLayer.Symbol.OutlineColor = (int)MapObjects2.ColorConstants.moBlack;                                 break;                         }                         mapobject.Layers.Add (newLayer);                         newLayer.Name = LayerName;                         newLayer.Tag=databasepath + filename ;                                             }                 }             }             catch             {                 // MessageBox("加载图层出错!");             }         }         //功能说明:         //    查找map中的图层AxMapObjects2.AxMap mapobject,string LayerName          public bool FindMapLayerName(AxMapObjects2.AxMap mapobject, string LayerName)         {                 for (int i=0;i<mapobject.Layers.Count ;i++)             {                 if (mapobject.Layers.Item(i).ToString() ==LayerName )                 {                     return true;                 }             }                 return false ;         }     } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部