/// <summary> /// �½���ͼ�� /// </summary> public void CreatePolygonLayer() { SaveFileDialog sfdPoint = new SaveFileDialog(); sfdPoint.Title = "��ѡ����ͼ��Ĵ洢λ��"; sfdPoint.Filter = "Shapefile(*.shp)|*.shp|All files(*.*)|*.*"; sfdPoint.RestoreDirectory = true; if (sfdPoint.ShowDialog() == DialogResult.OK) { LocalFilePath = sfdPoint.FileName; FilePath = System.IO.Path.GetDirectoryName(LocalFilePath); FileName = System.IO.Path.GetFileName(LocalFilePath); IFields pFields = new FieldsClass(); IFieldsEdit pFieldsEdit = pFields as IFieldsEdit; IField pField = new FieldClass(); IFieldEdit pFieldEdit = pField as IFieldEdit; pFieldEdit.Name_2 = "SHAPE"; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; IGeometryDef pGeometryDef = new GeometryDefClass(); IGeometryDefEdit pGeometryDefEdit = pGeometryDef as IGeometryDefEdit; pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon; pFieldEdit.GeometryDef_2 = pGeometryDef; IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactory(); IWorkspace workspace; workspace = workspaceFactory.OpenFromFile(Application.StartupPath + "\\out", 0); //inPathդ�����ݴ洢·�� IRasterWorkspace rastWork = (IRasterWorkspace)workspace; IRasterDataset rastDataset; rastDataset = rastWork.OpenRasterDataset("ps2010.img");//inNameդ���ļ��� IGeoDataset geoDS = rastDataset as IGeoDataset; pGeometryDefEdit.SpatialReference_2 = geoDS.SpatialReference; pFieldsEdit.AddField(pField); //�½��ֶ� pField = new FieldClass(); pFieldEdit = pField as IFieldEdit; pFieldEdit.Length_2 = 15; pFieldEdit.Name_2 = "�ṹ����"; pFieldEdit.AliasName_2 = "�ṹ����"; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldsEdit.AddField(pField); //�½��ֶ� pField = new FieldClass(); pFieldEdit = pField as IFieldEdit; pFieldEdit.Length_2 = 15; pFieldEdit.Name_2 = "Ȩ��"; pFieldEdit.AliasName_2 = "Ȩ��"; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldsEdit.AddField(pField); IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass(); IFeatureWorkspace pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(FilePath, 0) as IFeatureWorkspace; pFeatureWorkspace.CreateFeatureClass(FileName, pFields, null, null, esriFeatureType.esriFTSimple, "SHAPE", ""); m_mapControl.AddShapeFile(FilePath, FileName); m_mapControl.ActiveView.Refresh(); } }
//添加数据工具; private void toolStripButton1_Click(object sender, EventArgs e) { index._tool_lable = HmMap.PublicMark.ButtonFunction.roam; openFileDialog1.Title = "打开文件"; openFileDialog1.Filter = "矢量文件(*.shp)|*.shp|ArcMap工程文件(*.mxd)|*.mxd|栅格影像文件|*.bmp;*.tif;*.img;*.jpg"; openFileDialog1.Multiselect = true; if (openFileDialog1.ShowDialog() == DialogResult.OK) { string [] filename = openFileDialog1.FileNames; //添加矢量文件; if (System.IO.Path.GetExtension(openFileDialog1.FileName) == ".shp") { for (int i = 0; i < filename.Length; i++) { string path = System.IO.Path.GetDirectoryName(filename[i]); string filename_1 = System.IO.Path.GetFileName(filename[i]); axMapControl1.AddShapeFile(path, filename_1); } } //添加ArcMaP工程文件; else if (System.IO.Path.GetExtension(openFileDialog1.FileName) == ".mxd") { axMapControl1.LoadMxFile(openFileDialog1.FileName); } //加载栅格数据文件; else if (System.IO.Path.GetExtension(openFileDialog1.FileName) == ".tif" || System.IO.Path.GetExtension(openFileDialog1.FileName) == ".img" || System.IO.Path.GetExtension(openFileDialog1.FileName) == ".bmp" || System.IO.Path.GetExtension(openFileDialog1.FileName) == ".jpg") { for (int i = 0; i < filename.Length; i++) { string path = System.IO.Path.GetDirectoryName(filename[i]); string filename_1 = System.IO.Path.GetFileName(filename[i]); IWorkspaceFactory pWorkspaceFactory = new RasterWorkspaceFactory(); IWorkspace pworkspace = pWorkspaceFactory.OpenFromFile(path, 0); IRasterWorkspace pRasterWorkspace = pworkspace as IRasterWorkspace; IRasterDataset prasterdataset = pRasterWorkspace.OpenRasterDataset(filename_1); IRasterPyramid3 jzt; jzt = prasterdataset as IRasterPyramid3; if (jzt != null) { if (!(jzt.Present)) { jzt.Create(); } } IRaster raster; raster = prasterdataset.CreateDefaultRaster(); IRasterLayer rasterLayer; rasterLayer = new RasterLayerClass(); rasterLayer.CreateFromRaster(raster); ILayer layer = rasterLayer as ILayer; axMapControl1.AddLayer(layer); axMapControl1.ActiveView.Refresh(); } } } else { MessageBox.Show("文件打开失败!"); return; } axMapControl1.Refresh(); }
private void button1_Click(object sender, EventArgs e) { if (comboBox1.Text != "") { if (textBox1.Text != "") { ESRI.ArcGIS.DataManagementTools.CopyRaster copyRst = new CopyRaster(); copyRst.in_raster = getlayer(comboBox1.Text); copyRst.out_rasterdataset = textBox1.Text.ToString(); Geoprocessor gp = new Geoprocessor(); gp.OverwriteOutput = true; IGeoProcessorResult gpresult = gp.Execute(copyRst, null) as IGeoProcessorResult; if (gpresult.Status == esriJobStatus.esriJobSucceeded) { DialogResult dr = MessageBox.Show("格式转化操作成功"); if (dr == DialogResult.OK) { //结果添加到工作空间 if (checkBox1.Checked == true) { string fileFullName = textBox1.Text; if (fileFullName == "") { return; } string filePathName = System.IO.Path.GetDirectoryName(fileFullName); string fileName = System.IO.Path.GetFileName(fileFullName); IWorkspaceFactory pWorkspaceFactory = new RasterWorkspaceFactory(); //创建工作空间工厂 IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(filePathName, 0); //打开工作空间 IRasterWorkspace pRasterWorkspace = pWorkspace as IRasterWorkspace; //创建栅格工作空间 IRasterDataset pRasterDataset = pRasterWorkspace.OpenRasterDataset(fileName); //创建Dataset //影像金字塔创建与判断 IRasterPyramid2 pRasPymid = pRasterDataset as IRasterPyramid2; if (pRasPymid != null) { if (!(pRasPymid.Present)) { pRasPymid.Create();//创建金字塔 } } IRaster pRaster = pRasterDataset.CreateDefaultRaster(); IRasterLayer pRasterLayer = new RasterLayer(); pRasterLayer.CreateFromRaster(pRaster); ILayer pLayer = pRasterLayer as ILayer; axmapcontrol.AddLayer(pLayer, 0); } } } else { MessageBox.Show("格式转化操作失败"); } } else { MessageBox.Show("保存路径不能为空"); } } else { MessageBox.Show("输入栅格不能为空"); } }
/// <summary> /// 道路风险计算 /// </summary> /// <param name="workPath">存储路径</param> /// <param name="roadEvalPath">道路评价结果 </param> /// <param name="roadRainsShpPath">加了雨量字段的道路缓冲区</param> /// <returns></returns> public bool RoadRaskCaulte(string roadEvalName, string roadRainsName, string saveWorkspace) { //读取 道路评价结果栅格数据的信息 RasterHelper rh = new RasterHelper(); //IRasterWorkspace rasterWorkspace = new RasterLayer(); IWorkspaceFactory rWorkspaceFactory = new RasterWorkspaceFactory(); IWorkspace SWorkspace = rWorkspaceFactory.OpenFromFile(saveWorkspace, 0); IRasterWorkspace rasterWorkspace = SWorkspace as IRasterWorkspace; IRasterDataset rasterDt = rasterWorkspace.OpenRasterDataset(roadEvalName); // var t = rh.GetRasterProps(rasterDt); IRasterLayer rasterLayer = new RasterLayer(); rasterLayer.CreateFromFilePath(saveWorkspace + "\\" + roadEvalName); IRaster pRaster = rasterLayer.Raster; IRasterProps rasterProps = (IRasterProps)pRaster;;//存储了栅格信息 //初始化GP工具 Geoprocessor gp = new Geoprocessor(); gp.OverwriteOutput = true; //string path = @"D:\GISTest"; //gp.SetEnvironmentValue("workspace", path); //道路缓冲区 根据雨量转栅格 FeatureToRaster featureToRaster = new FeatureToRaster(); featureToRaster.cell_size = rasterProps.MeanCellSize().X;//这里可以提前规定一个值,而不是每次去读取 featureToRaster.in_features = OpenFeatureClass(saveWorkspace + "\\" + roadRainsName); featureToRaster.out_raster = saveWorkspace + "\\roadGrid"; featureToRaster.field = "RAINS";//这个字段需要矢量图层中加上 try { gp.Execute(featureToRaster, null); } catch (Exception ex) { Console.WriteLine("矢量转栅格失败!"); return(false); } //栅格计算器 计算风险级数 IMapAlgebraOp mapAlgebra = new RasterMapAlgebraOpClass(); IRasterDataset roadEvalRaster = OpenRasterDataSet(rasterWorkspace, roadEvalName); IRasterDataset roadGridRaster = OpenRasterDataSet(rasterWorkspace, saveWorkspace + @"\roadGrid"); IGeoDataset geo1 = roadEvalRaster as IGeoDataset; IGeoDataset geo2 = roadGridRaster as IGeoDataset; mapAlgebra.BindRaster(geo1, "EvalRaster"); mapAlgebra.BindRaster(geo2, "RoadRains"); IGeoDataset raskDataset = mapAlgebra.Execute("[EvalRaster] * [RoadRains] / 25");//然后存储 表达式必须间隔开 ISaveAs saveAs = raskDataset as ISaveAs; saveAs.SaveAs("roadPre", SWorkspace, ""); //加入图层 IRasterLayer rasterLayer2 = new RasterLayer(); rasterLayer2.CreateFromFilePath(saveWorkspace + "\\" + "roadPre"); MainFrom.m_mapControl.AddLayer(rasterLayer2, 0); //MainFrom.m_mapControl.Refresh(esriViewDrawPhase.esriViewGeography, null, null); MainFrom.m_pTocControl.Update(); //将生成的风险栅格重分类 //<0.2 一级:可能性小 //0.2-0.4 二级:可 //能性较小 //0.4-0.6 三级:可能性较大 //0.6-0.8 四级:可能性大 //>0.8 五级:可能性很大 // 输入:raskDataset // 输出:geoDataset_result IReclassOp pReclassOp = new RasterReclassOpClass(); INumberRemap pNumRemap = new NumberRemapClass(); IDictionary <int, RoadRange> roadRanges = this.roadRiskConfig.GetRoadRiskLevelFromConfig(); foreach (var v in roadRanges) { pNumRemap.MapRange(v.Value.MinValue, v.Value.MaxValue, v.Key); } /* * pNumRemap.MapRange(0, 0.2, 1); * pNumRemap.MapRange(0.2, 0.4, 2); * pNumRemap.MapRange(0.4, 0.6, 3); * pNumRemap.MapRange(0.6, 0.8, 4); * pNumRemap.MapRange(0.8,1000,5); */ //pNumRemap.MapRangeToNoData(-1000,0); //pNumRemap.MapRangeToNoData(1000, 20000); IRemap pRemap = pNumRemap as IRemap; // 重分类 // geoDataset为上一步得到的栅格 // IGeoDataset geoDataset_result = pReclassOp.ReclassByRemap(raskDataset, pRemap, true);//还没有测试成功 // RasterCalculator rasterCalculator = new RasterCalculator("[EvalRaster]*[RoadRains]/25", saveWorkspace + @"\RainEval.tif"); try { // gp.Execute(rasterCalculator, null); } catch (Exception ex) { Debug.Print(ex.Message); for (int i = 0; i < gp.MessageCount; i++) { Debug.Print(gp.GetMessage(i)); } Console.WriteLine("栅格计算失败!"); return(false); } return(true); }
/// <summary> /// Add Raster Layer for the result of Extract textlayer /// </summary> /// <param name="path"></param> /// <param name="fileName"></param> public void AddRasterLayer(string path, string fileName) { IMap map = ArcMap.Document.FocusMap; try { IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactory(); IRasterWorkspace rasterWorkspace = (ESRI.ArcGIS.DataSourcesRaster.IRasterWorkspace)(workspaceFactory.OpenFromFile(path, 0)); IRasterDataset rasterDataset = rasterWorkspace.OpenRasterDataset(fileName); IGeoDataset geoDataset = (ESRI.ArcGIS.Geodatabase.IGeoDataset)rasterDataset; // Create a raster for viewing IRasterLayer rasterLayer = new RasterLayer(); rasterLayer.CreateFromDataset(rasterDataset); // Add the raster to the map map.AddLayer(rasterLayer); } catch (System.Exception ex) { Log.WriteLine("AddRasterLayer: " + ex.Message); } }
/// <summary> /// 生成风险等级栅格 /// </summary> /// <param name="roadEvalName"></param> /// <param name="rains"></param> /// <param name="saveWorkspace"></param> /// <returns></returns> public bool RoadRaskCaulte(string roadEvalName, double rains, string saveWorkspace) { #region 备份 // IWorkspaceFactory rWorkspaceFactory = new RasterWorkspaceFactory(); // IWorkspace SWorkspace = rWorkspaceFactory.OpenFromFile(saveWorkspace, 0); // IRasterWorkspace rasterWorkspace = SWorkspace as IRasterWorkspace; // //栅格计算器 计算风险级数 先不要签你的三方协议 然后存储 表达式必须隔开 // IMapAlgebraOp mapAlgebra = new RasterMapAlgebraOpClass(); // IRasterDataset roadEvalRaster = OpenRasterDataSet(rasterWorkspace, roadEvalName); // IGeoDataset geo1 = roadEvalRaster as IGeoDataset; // mapAlgebra.BindRaster(geo1, "EvalRaster"); // IGeoDataset raskDataset = mapAlgebra.Execute("[EvalRaster] * 10 / 25");//然后存储 表达式必须间隔开 // //将生成的风险栅格重分类 // //<0.2 一级:可能性小 // //0.2-0.4 二级:可 // //能性较小 // //0.4-0.6 三级:可能性较大 // //0.6-0.8 四级:可能性大 // //>0.8 五级:可能性很大 // // 输入:raskDataset //// 输出:geoDataset_result // IRasterBandCollection pRsBandCol = raskDataset as IRasterBandCollection; // IRasterBand pRasterBand = pRsBandCol.Item(0); // pRasterBand.ComputeStatsAndHist(); // IRasterStatistics pRasterStatistic = pRasterBand.Statistics; // double dMaxValue = pRasterStatistic.Maximum; // double dMinValue = pRasterStatistic.Minimum; // IReclassOp pReclassOp = new RasterReclassOpClass(); // INumberRemap pNumRemap = new NumberRemapClass(); // //pNumRemap.MapRange(dMinValue, 0.2, 1); // //pNumRemap.MapRange(0.2, 0.4, 2); // //pNumRemap.MapRange(0.4, 0.6, 3); // //pNumRemap.MapRange(0.6, dMaxValue, 4); // //pNumRemap.MapRangeToNoData(-1000, 0); // //pNumRemap.MapRange(0.8, 1000, 5); // pNumRemap.MapRange(dMinValue,0.2, 0); // pNumRemap.MapRange(0.2, 0.4, 1); // pNumRemap.MapRange(0.4, 0.6, 2); // pNumRemap.MapRange(0.6, 0.8, 3); // pNumRemap.MapRange(0.8, dMaxValue, 4); // IRemap pRemap = pNumRemap as IRemap; // //IGeoDataset geoDataset_result = pReclassOp.ReclassByRemap(raskDataset, pRemap, true); // IRaster pOutRaster = pReclassOp.ReclassByRemap(raskDataset, pRemap, false) as IRaster; // IRasterLayer rasterLayer = new RasterLayerClass(); // rasterLayer.CreateFromRaster(pOutRaster); // if (rasterLayer != null) // { // //string fullPath = Common.RoadshapePath+"道路.shp"; // rasterLayer.Name = "公路风险"; // Boolean IsEqual = false; // //int Position = fullPath.LastIndexOf("\\"); // ////文件目录 // //string FilePath = fullPath.Substring(0, Position); // //string ShpName = fullPath.Substring(Position + 1); // //IWorkspaceFactory pWF; // //pWF = new ShapefileWorkspaceFactory(); // //IFeatureWorkspace pFWS; // //pFWS = (IFeatureWorkspace)pWF.OpenFromFile(FilePath, 0); // //IFeatureClass pFClass; // //pFClass = pFWS.OpenFeatureClass(ShpName); // //IFeatureLayer pFLayer = new FeatureLayer(); // //pFLayer.FeatureClass = pFClass; // for (int i = 0; i < MainFrom.m_mapControl.LayerCount;i++ ) // { // ILayer ComLayer=MainFrom.m_mapControl.get_Layer(i); // if (rasterLayer.Name == ComLayer.Name) // { // IsEqual = true; // } // } // if (!IsEqual) // { // //MainFrom.m_mapControl.AddLayer((ILayer)pFLayer); // MainFrom.m_mapControl.AddLayer(rasterLayer); // IEnvelope envelope = rasterLayer.AreaOfInterest; // MainFrom.m_mapControl.ActiveView.Extent = envelope;//缩放至图层 // } // } // return true; #endregion IWorkspaceFactory rWorkspaceFactory = new RasterWorkspaceFactory(); IWorkspace SWorkspace = rWorkspaceFactory.OpenFromFile(saveWorkspace, 0); IRasterWorkspace rasterWorkspace = SWorkspace as IRasterWorkspace; //栅格计算器 计算风险级数 先不要签你的三方协议 然后存储 表达式必须隔开 IMapAlgebraOp mapAlgebra = new RasterMapAlgebraOpClass(); IRasterDataset roadEvalRaster = OpenRasterDataSet(rasterWorkspace, roadEvalName); IGeoDataset geo1 = roadEvalRaster as IGeoDataset; mapAlgebra.BindRaster(geo1, "EvalRaster"); IGeoDataset raskDataset = mapAlgebra.Execute("[EvalRaster] * " + rains + " / 25");//然后存储 表达式必须间隔开 //将生成的风险栅格重分类 //<0.2 一级:可能性小 //0.2-0.4 二级:可 //能性较小 //0.4-0.6 三级:可能性较大 //0.6-0.8 四级:可能性大 //>0.8 五级:可能性很大 // 输入:raskDataset // 输出:geoDataset_result IRasterBandCollection pRsBandCol = raskDataset as IRasterBandCollection; IRasterBand pRasterBand = pRsBandCol.Item(0); pRasterBand.ComputeStatsAndHist(); IRasterStatistics pRasterStatistic = pRasterBand.Statistics; double dMaxValue = pRasterStatistic.Maximum; double dMinValue = pRasterStatistic.Minimum; IReclassOp pReclassOp = new RasterReclassOpClass(); INumberRemap pNumRemap = new NumberRemapClass(); IDictionary <int, RoadRange> roadRanges = this.roadRiskConfig.GetRoadRiskLevelFromConfig(); foreach (var v in roadRanges) { pNumRemap.MapRange(v.Value.MinValue, v.Value.MaxValue, v.Key); } IRemap pRemap = pNumRemap as IRemap; //IGeoDataset geoDataset_result = pReclassOp.ReclassByRemap(raskDataset, pRemap, true); IRaster pOutRaster = pReclassOp.ReclassByRemap(raskDataset, pRemap, false) as IRaster; IRasterLayer rasterLayer = new RasterLayerClass(); rasterLayer.CreateFromRaster(pOutRaster); if (rasterLayer != null) { rasterLayer.Name = "公路风险"; for (int i = 0; i < MainFrom.m_mapControl.LayerCount; i++) { ILayer ComLayer = MainFrom.m_mapControl.get_Layer(i); if (rasterLayer.Name == ComLayer.Name) { MainFrom.m_mapControl.Map.DeleteLayer(ComLayer); } } Common.funColorForRaster_Classify(rasterLayer, roadRanges.Count); IEnvelope envelope = rasterLayer.AreaOfInterest; MainFrom.m_mapControl.ActiveView.Extent = envelope;//缩放至图层 } return(true); }
/// <summary> /// 风险因素等级划分 /// </summary> /// <param name="RasterWorkspace"></param> /// <param name="roadEvalName"></param> /// <returns></returns> public static bool RaskCaulte(string RasterWorkspace, string roadEvalName) { IWorkspaceFactory rWorkspaceFactory = new RasterWorkspaceFactory(); IWorkspace SWorkspace = rWorkspaceFactory.OpenFromFile(RasterWorkspace, 0); IRasterWorkspace rasterWorkspace = SWorkspace as IRasterWorkspace; //栅格计算器 计算风险级数 先不要签你的三方协议 然后存储 表达式必须隔开 IMapAlgebraOp mapAlgebra = new RasterMapAlgebraOpClass(); IRasterDataset roadEvalRaster = rasterWorkspace.OpenRasterDataset(roadEvalName); IGeoDataset geo1 = roadEvalRaster as IGeoDataset; mapAlgebra.BindRaster(geo1, "EvalRaster"); IGeoDataset raskDataset = mapAlgebra.Execute("[EvalRaster]");//然后存储 表达式必须间隔开 //将生成的风险栅格重分类 //<0.2 一级:可能性小 //0.2-0.4 二级:可 //能性较小 //0.4-0.6 三级:可能性较大 //0.6-0.8 四级:可能性大 //>0.8 五级:可能性很大 // 输入:raskDataset // 输出:geoDataset_result IRasterBandCollection pRsBandCol = raskDataset as IRasterBandCollection; IRasterBand pRasterBand = pRsBandCol.Item(0); pRasterBand.ComputeStatsAndHist(); IRasterStatistics pRasterStatistic = pRasterBand.Statistics; double dMaxValue = pRasterStatistic.Maximum; double dMinValue = pRasterStatistic.Minimum; IReclassOp pReclassOp = new RasterReclassOpClass(); INumberRemap pNumRemap = new NumberRemapClass(); //等级参数 List <double> raskRanges = new List <double>(); for (int n = 0; n < 5; n++) { raskRanges.Add(dMinValue + (dMaxValue - dMinValue) * n / 4); } for (int m = 0; m < 4; m++) { pNumRemap.MapRange(raskRanges[m], raskRanges[m + 1], m + 1); } IRemap pRemap = pNumRemap as IRemap; IRaster pOutRaster = pReclassOp.ReclassByRemap(raskDataset, pRemap, false) as IRaster; IRasterLayer rasterLayer = new RasterLayerClass(); rasterLayer.CreateFromRaster(pOutRaster); if (rasterLayer != null) { rasterLayer.Name = roadEvalName; for (int i = 0; i < MainFrom.m_mapControl.LayerCount; i++) { ILayer ComLayer = MainFrom.m_mapControl.get_Layer(i); if (rasterLayer.Name == ComLayer.Name) { MainFrom.m_mapControl.Map.DeleteLayer(ComLayer); } } Common.funColorForRaster_Classify(rasterLayer, 4); IEnvelope envelope = rasterLayer.AreaOfInterest; MainFrom.m_mapControl.ActiveView.Extent = envelope;//缩放至图层 } return(true); }
private void uiCommandManager1_CommandClick(object sender, Janus.Windows.UI.CommandBars.CommandEventArgs e) { this.m_mapControl.CurrentTool = null; this.StatusBar.Panels[0].Text = "当前任务:" + e.Command.Text.ToString(); this.m_rasterMeasureDis = false; this.m_rasterMeasureArea = false; //this.mapCtlMain.CurrentTool = null; if (e.Command.Key == "menuExit") //退出程序 { Application.Exit(); } switch (e.Command.CategoryName) { #region 标准工具栏 case "Standard": m_toolLib.StandardToolLibrary(e.Command.Key.Substring(4, e.Command.Key.Length - 4)); break; #endregion #region 导航工具栏 case"Navigation": m_toolLib.NavigationToolLibrary(e.Command.Key.Substring(4, e.Command.Key.Length - 4)); break; #endregion 导航工具栏 #region 数据库工具栏 case "DB": m_toolLib.DBToolLibrary(e.Command.Key.Substring(4, e.Command.Key.Length - 4)); break; #endregion 数据库工具栏 #region 工具工具栏 case "Tool": m_toolLib.ToolToolLibrary(e.Command.Key.Substring(4, e.Command.Key.Length - 4)); break; #endregion 工具工具栏 case"CallMap": m_toolLib.CallMapToolLibrary(e.Command.Key.Substring(4, e.Command.Key.Length - 4)); break; case"3D": m_toolLib.ThreeDToolLibrary(e.Command.Key.Substring(4, e.Command.Key.Length - 4)); break; case"Index": m_toolLib.IndexToolibrry(e.Command.Key.Substring(4, e.Command.Key.Length - 4)); break; } #region 出图制图栏 if (e.Command.Key == "menuLegend") //设置比例尺 { DesignPageLayout designPageLayout = new DesignPageLayout(m_mapControl, m_pageLayoutControl); designPageLayout.AddLegend();//添加图例 } if (e.Command.Key == "menuText") { m_designPageLayout = new DesignPageLayout(m_mapControl, m_pageLayoutControl); m_designPageLayout.AddText();//添加文字 } if (e.Command.Key == "menuNorthArrow") { m_designPageLayout = new DesignPageLayout(m_mapControl, m_pageLayoutControl); m_designPageLayout.AddNorthArrow();//添加指北针 } if (e.Command.Key == "menuScaleBar") { m_designPageLayout = new DesignPageLayout(m_pageLayoutControl); m_designPageLayout.AddScaleBar();//添加比例尺 } if (e.Command.Key == "menuScaleText") { m_designPageLayout = new DesignPageLayout(m_pageLayoutControl); m_designPageLayout.AddTextScale();//添加文字比例尺 } if (e.Command.Key == "menuMapGrid") { m_designPageLayout = new DesignPageLayout(m_pageLayoutControl); m_designPageLayout.AddMapGrid();//添加地图格网 } if (e.Command.Key == "menuPageAndPrintaSet") { #region//页面设置 DialogResult result = pageSetupDialog1.ShowDialog(); document.PrinterSettings = pageSetupDialog1.PrinterSettings; document.DefaultPageSettings = pageSetupDialog1.PageSettings; int i; IEnumerator paperSizes = pageSetupDialog1.PrinterSettings.PaperSizes.GetEnumerator(); paperSizes.Reset(); for (i = 0; i < pageSetupDialog1.PrinterSettings.PaperSizes.Count; ++i) { paperSizes.MoveNext(); if (((PaperSize)paperSizes.Current).Kind == document.DefaultPageSettings.PaperSize.Kind) { document.DefaultPageSettings.PaperSize = ((PaperSize)paperSizes.Current); } } IPaper paper; paper = new PaperClass(); //create a paper object IPrinter printer; printer = new EmfPrinterClass(); //create a printer object paper.Attach(pageSetupDialog1.PrinterSettings.GetHdevmode(pageSetupDialog1.PageSettings).ToInt32(), pageSetupDialog1.PrinterSettings.GetHdevnames().ToInt32()); printer.Paper = paper; m_pageLayoutControl.Printer = printer; #endregion } if (e.Command.Key == "menuPrintView") { #region//打印预览 m_CurrentPrintPage = 0; if (axPageLayoutControl1.ActiveView.FocusMap == null) return; document.DocumentName = axPageLayoutControl1.DocumentFilename; printPreviewDialog1.Document = document; printPreviewDialog1.ShowDialog(); #endregion } if (e.Command.Key == "menuPrintExport") { #region //打印 //allow the user to choose the page range to be printed printDialog1.AllowSomePages = true; //show the help button. printDialog1.ShowHelp = true; //set the Document property to the PrintDocument for which the PrintPage Event //has been handled. To display the dialog, either this property or the //PrinterSettings property must be set printDialog1.Document = document; //show the print dialog and wait for user input DialogResult result = printDialog1.ShowDialog(); // If the result is OK then print the document. if (result == DialogResult.OK) document.Print(); #endregion } if (e.Command.Key == "menuPrintByAnyPolygonRegion") { if (this.mapCtlMain.LayerCount == 0) { MessageBox.Show("请先添加数据!", "提示"); return; } ICommand pArePrintMapClass = new ExportMapProj.AreaPrintMapClass(this.mapCtlMain.Map); pArePrintMapClass.OnCreate(this.mapCtlMain.Object); this.mapCtlMain.CurrentTool = (ITool)pArePrintMapClass; mapCtlMain.ActiveView.Refresh(); } if (e.Command.Key == "menuExportMap") { ICommand pExportMapAsPicture = new ExportMapProj.CmdExoprtMapAsPicture(); pExportMapAsPicture.OnCreate(m_pageLayoutControl.Object); pExportMapAsPicture.OnClick(); } #endregion #region 要素编辑 if (e.Command.Key == "menuStart") { if (mapCtlMain.LayerCount == 0) { MessageBox.Show("请先加载数据!"); return; } m_Map = mapCtlMain.Map; IFeatureLayer feaLayer = null; IDataset dataSet = null; IWorkspaceEdit wsEdit = null; for (int i = 0; i < m_Map.LayerCount; i++) { if (m_Map.get_Layer(i) is IFeatureLayer) { feaLayer = m_Map.get_Layer(i) as IFeatureLayer; dataSet = (IDataset)feaLayer.FeatureClass; wsEdit = dataSet.Workspace as IWorkspaceEdit; uiComboBox5.Items.Add(m_Map.get_Layer(i).Name); } if (wsEdit.IsBeingEdited()==true) { return; } } this.menuStart.Enabled = Janus.Windows.UI.InheritableBoolean.False; this.menuStop2.Enabled = Janus.Windows.UI.InheritableBoolean.True; this.menuSketch1.Enabled = Janus.Windows.UI.InheritableBoolean.True; this.menuSaveEditing2.Enabled = Janus.Windows.UI.InheritableBoolean.True; this.menuDelete1.Enabled = Janus.Windows.UI.InheritableBoolean.True; this.menuRedoEditing1.Enabled = Janus.Windows.UI.InheritableBoolean.True; this.menuUndoEditing1.Enabled = Janus.Windows.UI.InheritableBoolean.True; this.menuTask1.Enabled = Janus.Windows.UI.InheritableBoolean.True; this.menuLayer1.Enabled = Janus.Windows.UI.InheritableBoolean.True; uiComboBox5.SelectedIndex = 0; for (int i = 0; i < m_Map.LayerCount; i++) { if (m_Map.get_Layer(i).Name == uiComboBox5.Text) { m_CurrentLayer = m_Map.get_Layer(i); break; } } m_bModify = false; m_bSketch = true; uiComboBox4.SelectedIndex = 0; StartEditing(); MapEditing.CreatShape m_CreateShapeStart = new CreatShape(m_CurrentLayer,this.m_dig); mapCtlMain.CurrentTool = (ITool)m_CreateShapeStart; m_CreateShapeStart.OnCreate(this.mapCtlMain.Object); } if (e.Command.Key == "menuStop") { if (mapCtlMain.LayerCount == 0) { MessageBox.Show("请加载数据!"); return; } if (StopEditing() == 1) { mapCtlMain.Map.ClearSelection(); mapCtlMain.ActiveView.Refresh(); mapCtlMain.MousePointer = esriControlsMousePointer.esriPointerDefault; this.menuStart.Enabled = Janus.Windows.UI.InheritableBoolean.True; this.menuStop2.Enabled = Janus.Windows.UI.InheritableBoolean.False; this.menuSketch1.Enabled = Janus.Windows.UI.InheritableBoolean.False; this.menuSaveEditing2.Enabled = Janus.Windows.UI.InheritableBoolean.False; this.uiComboBox4.Text = ""; this.uiComboBox5.Text =""; this.menuDelete1.Enabled = Janus.Windows.UI.InheritableBoolean.False; this.menuRedoEditing1.Enabled = Janus.Windows.UI.InheritableBoolean.False; this.menuUndoEditing1.Enabled = Janus.Windows.UI.InheritableBoolean.False; this.menuTask1.Enabled = Janus.Windows.UI.InheritableBoolean.False; this.menuLayer1.Enabled = Janus.Windows.UI.InheritableBoolean.False; this.uiComboBox5.Items.Clear(); } } if (e.Command.Key == "menuSaveEditing") { if (mapCtlMain.LayerCount == 0) { MessageBox.Show("请加载数据!"); return; } if (SaveEditing() == 1) { mapCtlMain.Map.ClearSelection(); mapCtlMain.ActiveView.Refresh(); } } if (e.Command.Key == "menuSketch") //草图画笔工具 { if (mapCtlMain.LayerCount == 0) { MessageBox.Show("请加载数据!"); return; } if (m_bSketch) { CreatShape m_CreateShapeSketch = new CreatShape(m_CurrentLayer,this.m_dig); mapCtlMain.CurrentTool = (ITool)m_CreateShapeSketch; m_CreateShapeSketch.OnCreate(this.mapCtlMain.Object); } else if (m_bModify) { ModifyShape m_ModifyShape = new ModifyShape(m_CurrentLayer); mapCtlMain.CurrentTool = (ITool)m_ModifyShape; m_ModifyShape.OnCreate(this.mapCtlMain.Object); } else if (m_bEditNode) { } else { MessageBox.Show("编辑操作尚未开始,请先开始编辑!"); return; } StartEditing();//开始编辑 } if (e.Command.Key == "menuDelete") { if (mapCtlMain.LayerCount == 0) { MessageBox.Show("请先加载数据!"); return; } DeleteSelectedFeatures(); //调用删除要素方法 } if (e.Command.Key == "menuUndoEditing") { if (m_CurrentLayer == null) return; IWorkspaceEdit pWorkSpaceEdit = GetWorkspaceEdit(); bool bHasUndos = false; pWorkSpaceEdit.HasUndos(ref bHasUndos); if (bHasUndos) pWorkSpaceEdit.UndoEditOperation(); IActiveView pActiveView = m_Map as IActiveView; pActiveView.Refresh(); } if (e.Command.Key == "menuRedoEditing") { if (m_CurrentLayer == null) return; IWorkspaceEdit pWorkSpaceEdit = GetWorkspaceEdit(); bool bHasRedo = false; pWorkSpaceEdit.HasRedos(ref bHasRedo); if (bHasRedo) pWorkSpaceEdit.RedoEditOperation(); IActiveView pActiveView = m_Map as IActiveView; pActiveView.Refresh(); } #endregion if (e.Command.Key == "menuSelectbyAttribute") { if (this.mapCtlMain.LayerCount == 0) { MessageBox.Show("请先添加数据!"); return; } QueryForm pQueryForm = new QueryForm(this.m_mapControl); pQueryForm.Show(); } if (e.Command.Key == "menuSelectbyLocation") { if (this.mapCtlMain.LayerCount == 0) { MessageBox.Show("请先添加数据!"); return; } SpatialQueryForm pSpatialQueryForm = new SpatialQueryForm(this.m_mapControl); pSpatialQueryForm.Show(); } if (e.Command.Key == "menuBuffer") { if (this.mapCtlMain.LayerCount == 0) { MessageBox.Show("请先添加数据!"); return; } BufferForm pBufferForm = new BufferForm(this.m_mapControl); pBufferForm.Show(); } if (e.Command.Key == "menuOverLay") { if (this.mapCtlMain.LayerCount == 0) { MessageBox.Show("请先添加数据!"); return; } OverLayerForm pOverLayerForm = new OverLayerForm(this.m_mapControl); pOverLayerForm.Show(); } if (e.Command.Key == "menu3DForm") { if (e.Command.Checked == Janus.Windows.UI.InheritableBoolean.False) { this.ThreeDtap.TabVisible = true; this.mapTab.Enabled = false; this.pageTab.Enabled = false; this.uiTab1.SelectedTab = this.ThreeDtap; this.ThreeDBar.Visible = true; e.Command.Checked = Janus.Windows.UI.InheritableBoolean.True; this.axTOCControl1.SetBuddyControl(this.axSceneControl1); } else { this.ThreeDtap.TabVisible = false; this.mapTab.Enabled = true; this.pageTab.Enabled = true; this.uiTab1.SelectedTab = this.mapTab; this.ThreeDBar.Visible = false; e.Command.Checked = Janus.Windows.UI.InheritableBoolean.False; this.axSceneControl1.CurrentTool = null; this.axSceneControl1.Scene.ClearLayers(); this.axTOCControl1.SetBuddyControl(this.mapCtlMain); } } if (e.Command.Key == "menuCacu") { if (this.mapCtlMain.LayerCount == 0) { MessageBox.Show("请先添加数据!"); return; } ICommand ff = new AreaPrintMapClass(); ff.OnCreate(this.m_mapControl); this.m_mapControl.CurrentTool = (ITool)ff; } if (e.Command.Key == "menuRasDis") { this.mapCtlMain.CurrentTool = null; bool isRaster = false; ILayer layer = null; for (int i = 0; i < this.mapCtlMain.LayerCount; i++) { layer = this.mapCtlMain.get_Layer(i); if (layer is IRasterLayer) { isRaster = true; break; } } if (isRaster == false) { MessageBox.Show("请先添加影像数据!", "提示"); return; } this.m_rasterMeasureDis = true; this.mapCtlMain.MousePointer = esriControlsMousePointer.esriPointerCrosshair; } if (e.Command.Key == "menuRasArea") { this.mapCtlMain.CurrentTool = null; bool isRaster = false; ILayer layer = null; for (int i = 0; i < this.mapCtlMain.LayerCount; i++) { layer = this.mapCtlMain.get_Layer(i); if (layer is IRasterLayer) { isRaster = true; break; } } if (isRaster == false) { MessageBox.Show("请先添加影像数据!", "提示"); return; } this.m_rasterMeasureArea = true; this.mapCtlMain.MousePointer = esriControlsMousePointer.esriPointerCrosshair; } if (e.Command.Key == "menuTemplate") { ChoseTemple chosetem = new ChoseTemple(); chosetem.ShowDialog(); if (chosetem.m_templateName != "") { this.axPageLayoutControl1.ActiveView.Clear(); if (chosetem.m_templateName.Contains("\\")) { this.axPageLayoutControl1.LoadMxFile(chosetem.m_templateName, Type.Missing); } else { this.axPageLayoutControl1.LoadMxFile(System.Windows.Forms.Application.StartupPath + @"\pagelayoutTemplate\" + chosetem.m_templateName, Type.Missing); } m_controlsSynchronizer.ReplaceMap(m_mapControl.Map);//重新联动 SetMapFrame(); m_pageLayoutControl.ActiveView.ShowScrollBars = true; } } if (e.Command.Key == "menuAbout") { frmAbout frmAbout = new frmAbout(); frmAbout.ShowDialog(); } if (e.Command.Key == "menuTOCControl") { if (this.menuTOCControl1.Checked == Janus.Windows.UI.InheritableBoolean.True) { this.TOCPanel.Visible = false; this.menuTOCControl1.Checked = Janus.Windows.UI.InheritableBoolean.False; } else { this.TOCPanel.Visible = true; this.menuTOCControl1.Checked = Janus.Windows.UI.InheritableBoolean.True; } } if (e.Command.Key == "menuAtrriWin") { if (this.menuAtrriWin1.Checked == Janus.Windows.UI.InheritableBoolean.True) { this.SearchPanel.Closed = true; this.menuAtrriWin1.Checked = Janus.Windows.UI.InheritableBoolean.False; } else { this.SearchPanel.Closed = false; this.menuAtrriWin1.Checked = Janus.Windows.UI.InheritableBoolean.True; } } if (e.Command.Key == "menuOut") { if (e.Command.Checked == Janus.Windows.UI.InheritableBoolean.True) { e.Command.Checked = Janus.Windows.UI.InheritableBoolean.False; m_out = false; } else { e.Command.Checked = Janus.Windows.UI.InheritableBoolean.True; m_out = true; this.mapCtlMain.ClearLayers(); IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactory(); IWorkspace workspace; workspace = workspaceFactory.OpenFromFile(Application.StartupPath + "\\out", 0); //inPath栅格数据存储路径 IRasterWorkspace rastWork = (IRasterWorkspace)workspace; IRasterDataset rastDataset; rastDataset = rastWork.OpenRasterDataset("ps2010.img");//inName栅格文件名 IRasterLayer layer = new RasterLayerClass(); layer.CreateFromDataset(rastDataset); m_mapControl.AddLayer(layer, 0); m_mapControl.AddShapeFile(Application.StartupPath + "\\out", "WYDCZL.shp"); m_mapControl.ActiveView.Refresh(); } } if (e.Command.Key == "menuDig") { if (e.Command.Checked == Janus.Windows.UI.InheritableBoolean.False) { e.Command.Checked = Janus.Windows.UI.InheritableBoolean.True; this.m_dig = true; } else { e.Command.Checked = Janus.Windows.UI.InheritableBoolean.False; this.m_dig = false; } } if (e.Command.Key == "menuIndexCacu") { frmCacuIndex index = new frmCacuIndex(); index.ShowDialog(); } if (e.Command.Key == "menuSKC") { frmChart chart = new frmChart(this.m_oraCmd); chart.ShowDialog(); } //******************************增加----陈************************************************* //if (e.Command.Key == "menuKMEANS") //{ // KMEANS kMEANS = new KMEANS(m_mapControl); // kMEANS.ShowDialog(); //} //if (e.Command.Key == "menuCalibration") //{ // OpenFileDialog openGD = new OpenFileDialog(); // openGD.Filter = "ERDAS格式(*.img)|*.img|所有文件|*.*"; // if (openGD.ShowDialog() == DialogResult.OK) // { // string filename = openGD.FileName; // int bandCount; // try // { // IRasterLayer rasterLayer = new RasterLayerClass(); // rasterLayer.CreateFromFilePath(filename); // bandCount = rasterLayer.BandCount; // } // catch // { // MessageBox.Show("输入文件有误"); // return; // } // Calibration cali = new Calibration(filename, bandCount, m_mapControl); // cali.ShowDialog(); // } //} //if (e.Command.Key == "menuISODATA") //{ // ISODATA isodata = new ISODATA(m_mapControl); // isodata.ShowDialog(); //} //if (e.Command.Key == "menuNDVI") //{ // NDVI ndvi = new NDVI(m_mapControl); // ndvi.ShowDialog(); //} //if (e.Command.Key == "menuRVI") //{ // RVI rvi = new RVI(m_mapControl); // rvi.ShowDialog(); //} //if (e.Command.Key == "menuSAVI") //{ // SAVI savi = new SAVI(m_mapControl); // savi.ShowDialog(); //} //if (e.Command.Key == "menuVC") //{ // VegCover vegCover = new VegCover(m_mapControl); // vegCover.ShowDialog(); //} //if (e.Command.Key == "menuTemprature") //{ // Temperature temperature = new Temperature(m_mapControl); // temperature.ShowDialog(); //} //if (e.Command.Key == "menuChangeD") //{ // ChangeDetection changeD = new ChangeDetection(m_mapControl); // changeD.ShowDialog(); //} //if (e.Command.Key == "menuIce") //{ // IceExtract iceExtract = new IceExtract(m_mapControl); // iceExtract.ShowDialog(); //} //if (e.Command.Key == "menuWater") //{ // WaterExtract waterExtract = new WaterExtract(m_mapControl); // waterExtract.ShowDialog(); //} //if (e.Command.Key == "menuHOT") //{ // HOT hot = new HOT(m_mapControl); // hot.ShowDialog(); //} //if (e.Command.Key == "menuQAC") //{ // QAC qac = new QAC(m_mapControl); // qac.ShowDialog(); //} //if (e.Command.Key == "menuLUC") //{ // LandUseChange luc = new LandUseChange(m_mapControl); // luc.ShowDialog(); //} //if (e.Command.Key == "menuComposite") //{ // Composite comp = new Composite(m_mapControl); // comp.ShowDialog(); //} //***************************************************************************************** }
private IRaster CreateRaster(Point2D ptLeftTop, double[] dbResolution, int[] nSize) { try { IWorkspaceFactory pworkspaceFactory = new RasterWorkspaceFactory(); ESRI.ArcGIS.Geodatabase.IWorkspaceName pworkspaceName = pworkspaceFactory.Create(null, "MyWorkspace", null, 0); ESRI.ArcGIS.esriSystem.IName pname = (IName)pworkspaceName; ESRI.ArcGIS.Geodatabase.IWorkspace inmemWor = (IWorkspace)pname.Open(); IRasterWorkspace2 rasterWs = (IRasterWorkspace2)inmemWor; //Define the spatial reference of the raster dataset. ISpatialReference sr = new UnknownCoordinateSystemClass(); //Define the origin for the raster dataset, which is the lower left corner of the raster. IPoint origin = new PointClass(); origin.PutCoords(ptLeftTop.X, ptLeftTop.Y); //Define the dimensions of the raster dataset. int width = nSize[0]; //This is the width of the raster dataset. int height = nSize[1]; //This is the height of the raster dataset. double xCell = dbResolution[0]; //This is the cell size in x direction. double yCell = dbResolution[1]; //This is the cell size in y direction. int NumBand = 1; // This is the number of bands the raster dataset contains. //Create a raster dataset in TIFF format. IRasterDataset rasterDataset = rasterWs.CreateRasterDataset("", "MEM", origin, width, height, xCell, yCell, NumBand, rstPixelType.PT_UCHAR, sr, true); //If you need to set NoData for some of the pixels, you need to set it on band //to get the raster band. IRasterBandCollection rasterBands = (IRasterBandCollection)rasterDataset; IRasterBand rasterBand; IRasterProps rasterProps; rasterBand = rasterBands.Item(0); rasterProps = (IRasterProps)rasterBand; //Set NoData if necessary. For a multiband image, a NoData value needs to be set for each band. //rasterProps.NoDataValue = -9999f; //Create a raster from the dataset. IRaster raster = rasterDataset.CreateDefaultRaster(); //Create a pixel block using the weight and height of the raster dataset. //If the raster dataset is large, a smaller pixel block should be used. //Refer to the topic "How to access pixel data using a raster cursor". //IPnt blocksize = new PntClass(); //blocksize.SetCoords(width, height); //IPixelBlock3 pixelblock = raster.CreatePixelBlock(blocksize) as IPixelBlock3; ////Populate some pixel values to the pixel block. //System.Array pixels; //pixels = (System.Array)pixelblock.get_PixelData(0); //for (int i = 0; i < width; i++) //{ // for (int j = 0; j < height; j++) // { // pixels.SetValue(dbData[i, j], i, j); // } //} //pixelblock.set_PixelData(0, (System.Array)pixels); ////Define the location that the upper left corner of the pixel block is to write. //IPnt upperLeft = new PntClass(); //upperLeft.SetCoords(ptLeftTop.X, ptLeftTop.Y); ////Write the pixel block. //IRasterEdit rasterEdit = (IRasterEdit)raster; //rasterEdit.Write(upperLeft, (IPixelBlock)pixelblock); //rasterEdit.Refresh(); //Release rasterEdit explicitly. //System.Runtime.InteropServices.Marshal.ReleaseComObject(rasterDataset); //System.Runtime.InteropServices.Marshal.ReleaseComObject(rasterEdit); //System.Runtime.InteropServices.Marshal.ReleaseComObject(rasterWs); //System.Runtime.InteropServices.Marshal.ReleaseComObject(sr); // GC.Collect(); return(raster); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); return(null); } return(null); }
private void button3_Click(object sender, EventArgs e) { ESRI.ArcGIS.DataManagementTools.Clip clp = new Clip(); clp.in_raster = getlayer(comboBox1.Text.ToString()); clp.out_raster = textBoxsave.Text; if (checkBox1.Checked == true) { IGPUtilities gputilities = new GPUtilitiesClass(); IEnvelope penvelope = 遥感数据管理系统.Form1.envelope.penv; clp.rectangle = string.Format("{0} {1} {2} {3} ", penvelope.XMin, penvelope.YMin, penvelope.XMax, penvelope.YMax); } else { IGPUtilities gputilities = new GPUtilitiesClass(); IGeoDataset pgeodataset = gputilities.OpenRasterDatasetFromString(getlayer(comboBox2.Text.ToString())) as IGeoDataset; IEnvelope penvelope = pgeodataset.Extent; clp.in_template_dataset = getlayer(comboBox2.Text.ToString()); clp.rectangle = string.Format("{0} {1} {2} {3} ", penvelope.XMin, penvelope.YMin, penvelope.XMax, penvelope.YMax); } clp.clipping_geometry = "true"; Geoprocessor gp = new Geoprocessor(); gp.OverwriteOutput = true; IGeoProcessorResult gpresult = gp.Execute(clp, null) as IGeoProcessorResult; if (gpresult.Status == esriJobStatus.esriJobSucceeded) { DialogResult dl = MessageBox.Show("裁剪成功"); if (dl == DialogResult.OK) { if (checkBox3.Checked == true) { string fileFullName = textBoxsave.Text; if (fileFullName == "") { return; } string filePathName = System.IO.Path.GetDirectoryName(fileFullName); string fileName = System.IO.Path.GetFileName(fileFullName); IWorkspaceFactory pWorkspaceFactory = new RasterWorkspaceFactory(); //创建工作空间工厂 IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(filePathName, 0); //打开工作空间 IRasterWorkspace pRasterWorkspace = pWorkspace as IRasterWorkspace; //创建栅格工作空间 IRasterDataset pRasterDataset = pRasterWorkspace.OpenRasterDataset(fileName); //创建Dataset //影像金字塔创建与判断 IRasterPyramid2 pRasPymid = pRasterDataset as IRasterPyramid2; if (pRasPymid != null) { if (!(pRasPymid.Present)) { pRasPymid.Create();//创建金字塔 } } IRaster pRaster = pRasterDataset.CreateDefaultRaster(); IRasterLayer pRasterLayer = new RasterLayer(); pRasterLayer.CreateFromRaster(pRaster); ILayer pLayer = pRasterLayer as ILayer; axmapcontrol.AddLayer(pLayer, 0); } } } else { MessageBox.Show("裁剪失败"); } }
private void BtnInput_Click(object sender, EventArgs e) { OpenFileDialog OpenFileDlg = new OpenFileDialog(); String strPath; // '文件名 OpenFileDlg.FileName = ""; OpenFileDlg.Filter = "tif files (*.tif)|*.tif|All files (*.*)|*.*"; //过滤文件类型 OpenFileDlg.FilterIndex = 2; OpenFileDlg.ShowDialog(); strPath = OpenFileDlg.FileName.Trim(); layerpath.Text = strPath; //获取图层的栅格信息 IRasterWorkspace pRWS; IWorkspaceFactory pWorkspaceFactory; pWorkspaceFactory = new RasterWorkspaceFactory(); String wsp; int r; int l; r = layerpath.Text.LastIndexOf("\\"); l = layerpath.Text.LastIndexOf("."); wsp = layerpath.Text.Substring(0, r); pRWS = (IRasterWorkspace)pWorkspaceFactory.OpenFromFile(wsp, 0); try { string ws = Path.GetDirectoryName(layerpath.Text); string fbs = Path.GetFileName(layerpath.Text); IWorkspaceFactory pWork = new RasterWorkspaceFactory(); IRasterWorkspace pRasterWs = pWork.OpenFromFile(ws, 0) as IRasterWorkspace; pRster = pRasterWs.OpenRasterDataset(fbs).CreateDefaultRaster(); //pRster = pRWS.OpenRasterDataset(sp) IRasterBandCollection pRasterBandCol; pRasterBandCol = (IRasterBandCollection)pRster; IRawPixels pRawpixel; pRawpixel = (IRawPixels)pRasterBandCol.Item(0); IRasterProps pRasterProps; pRasterProps = (IRasterProps)pRawpixel; IPnt pSize; pSize = new DblPnt(); pSize.SetCoords(pRasterProps.Width, pRasterProps.Height); IPixelBlock pPixelBlock; pPixelBlock = pRawpixel.CreatePixelBlock(pSize); IPnt pPnt; pPnt = new DblPnt(); pPnt.X = 0; //the origin (top left corner) of the PixelBlock pPnt.Y = 0; pRawpixel.Read(pPnt, pPixelBlock); float PixelValue; minValue = 10000000; maxValue = 0; for (int i = 0; i < pPixelBlock.Width; i++) { for (int j = 0; j < pPixelBlock.Height; j++) { PixelValue = (float)pPixelBlock.GetVal(0, i, j); if (PixelValue != null) { if (PixelValue > maxValue) { maxValue = PixelValue; } if (PixelValue < minValue) { minValue = PixelValue; } } } } IRasterBand pRasterBand; pRasterBand = pRasterBandCol.Item(0); pRasterBand.ComputeStatsAndHist(); IRasterStatistics pRasterStatistic; pRasterStatistic = pRasterBand.Statistics; maxValue = (float)pRasterStatistic.Maximum; minValue = (float)pRasterStatistic.Minimum; //先求每个等分间距 float Tmpincrement; DataRow FilterRow; Tmpincrement = (maxValue - minValue) / Convert.ToInt16(CmbLineCount.Text); FilterDataTable.Rows.Clear(); for (int i = 1; i < Convert.ToInt16(CmbLineCount.Text); i++) { FilterRow = FilterDataTable.NewRow(); FilterRow[0] = Convert.ToString(minValue + Tmpincrement * (i - 1)) + "~" + Convert.ToString(minValue + Tmpincrement * i); FilterRow[1] = i; FilterDataTable.Rows.Add(FilterRow); } DataGridFilterData.DataSource = FilterDataTable; DataGridFilterData.Refresh(); } catch (Exception ex) { MessageBox.Show(ex.ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } }
//打开文件函数 public static void OpenFile(AxMapControl mapControl, AxPageLayoutControl pageLayoutControl) { OpenFileDialog OpenFdlg = new OpenFileDialog(); OpenFdlg.Title = "选择需要加载的地理数据文件"; OpenFdlg.Filter = "mxd文件|*.mxd|Shape文件|*.shp|所有文件|*.*"; OpenFdlg.RestoreDirectory = true; if (OpenFdlg.ShowDialog() == DialogResult.OK) { string strFileName = OpenFdlg.FileName;//完全名 if (strFileName == string.Empty) { return; } string pathName = System.IO.Path.GetDirectoryName(strFileName); //位置 string strFExtendN = System.IO.Path.GetExtension(strFileName); //后缀名 string fileName = System.IO.Path.GetFileNameWithoutExtension(strFileName); //单独的文件名 string fileNameE = System.IO.Path.GetFileName(strFileName); //文件名和扩展名 switch (strFExtendN) { case ".shp": mapControl.AddShapeFile(pathName, fileName); OperateFile.CopyAndOverwriteMap(mapControl, pageLayoutControl); break; case ".mxd": if (mapControl.CheckMxFile(strFileName)) { mapControl.MousePointer = esriControlsMousePointer.esriPointerHourglass; mapControl.LoadMxFile(strFileName, 0, Type.Missing); mapControl.MousePointer = esriControlsMousePointer.esriPointerDefault; OperateFile.CopyAndOverwriteMap(mapControl, pageLayoutControl); } else { MessageBox.Show("所选文件不是地图文档文件!", "信息提示"); return; } break; case ".bmp": case ".BMP": case ".tif": case ".TIF": case ".jpg": case ".JPG": case ".img": case ".IMG": case ".png": case ".PNG": IWorkspaceFactory pWSF; pWSF = new RasterWorkspaceFactory(); IWorkspace pWS; pWS = pWSF.OpenFromFile(pathName, 0); IRasterWorkspace pRWS; pRWS = pWS as IRasterWorkspace; IRasterDataset pRasterDataset; pRasterDataset = pRWS.OpenRasterDataset(fileNameE); //影像金字塔判断与创建 IRasterPyramid pRasPyrmid; pRasPyrmid = pRasterDataset as IRasterDataset as IRasterPyramid; if (pRasPyrmid != null) { if (!(pRasPyrmid.Present)) { pRasPyrmid.Create(); //在进度条中说明正在创建金字塔 } } IRaster pRaster; pRaster = pRasterDataset.CreateDefaultRaster(); IRasterLayer pRasterLayer; pRasterLayer = new RasterLayerClass(); pRasterLayer.CreateFromRaster(pRaster); ILayer pLayer = pRasterLayer as ILayer; mapControl.AddLayer(pLayer, 0); OperateFile.CopyAndOverwriteMap(mapControl, pageLayoutControl); //OperateFile.ArchieveEagleEyeWhenAddRaster(mapControl, strFileName); break; } } }
private void button1_Click(object sender, EventArgs e) { //存储打开文件的全路径 string fullFilePath; //设置OpenFileDialog的属性,使其能打开多种类型文件 OpenFileDialog openFile = new OpenFileDialog(); openFile.Filter = "shape文件(*.shp)|*.shp|栅格数据(*.img,*.tiff)|*.img;*.tiff|Personal Geodatabase(*.mdb)|*.mdb|地图文档(*.mxd)|*.mxd|All Files(*.*)|*.*"; openFile.Title = "打开文件"; try { if (openFile.ShowDialog() == DialogResult.OK) { fullFilePath = openFile.FileName; //获得文件路径 int index = fullFilePath.LastIndexOf("\\"); string filePath = fullFilePath.Substring(0, index); int loc2 = fullFilePath.LastIndexOf("."); //获得文件名称 string fileNam = fullFilePath.Substring(index + 1); //加载shape文件 if (openFile.FilterIndex == 1) { //打开工作空间工厂 IWorkspaceFactory workspcFac = new ShapefileWorkspaceFactory(); IFeatureWorkspace featureWorkspc; IFeatureLayer featureLay = new FeatureLayerClass(); //打开路径 featureWorkspc = workspcFac.OpenFromFile(filePath, 0) as IFeatureWorkspace; //打开类要素 featureLay.FeatureClass = featureWorkspc.OpenFeatureClass(fileNam); String fname; fname = fullFilePath.Substring(index + 1, loc2 - index - 1); listBox1.Items.Insert(0, fname); frm.mainMapControl.ClearLayers(); //////注意与主函数MainForm中区别,此处要加"frm." //添加图层 frm.mainMapControl.AddLayer(featureLay); //////注意与主函数MainForm中区别,此处要加"frm." frm.mainMapControl.Refresh(); //////注意与主函数MainForm中区别,此处要加"frm." } //加载栅格图像 else if (openFile.FilterIndex == 2) { IWorkspaceFactory workspcFac = new RasterWorkspaceFactory(); IRasterWorkspace rasterWorkspc; IRasterDataset rasterDatst = new RasterDatasetClass(); IRasterLayer rasterLay = new RasterLayerClass(); rasterWorkspc = workspcFac.OpenFromFile(filePath, 0) as IRasterWorkspace; rasterDatst = rasterWorkspc.OpenRasterDataset(fileNam); rasterLay.CreateFromDataset(rasterDatst); String fname = fullFilePath.Substring(index + 1, loc2 - index - 1); listBox1.Items.Insert(0, fname); ////////frm.axMapControl1.ClearLayers();//////注意与主函数MainForm中区别,此处要加"frm." //添加图层 frm.mainMapControl.AddLayer(rasterLay); //////注意与主函数MainForm中区别,此处要加"frm." frm.mainMapControl.Refresh(); //////注意与主函数MainForm中区别,此处要加"frm." } //加载地图文档 else if (openFile.FilterIndex == 3) { IMapDocument mapDoc = new MapDocumentClass(); mapDoc.Open(filePath, ""); frm.mainMapControl.ClearLayers();//////注意与主函数MainForm中区别,此处axMapControl1前要加"frm." for (int i = 0; i < mapDoc.MapCount - 1; i++) { frm.mainMapControl.Map = mapDoc.get_Map(i); } IActiveView activeViw = frm.mainMapControl.Map as IActiveView; activeViw.Extent = frm.mainMapControl.FullExtent; frm.mainMapControl.Refresh(); } } } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); } }
public bool SwitchPasture(string strName) { m_activePasture = GetPastureByName(strName); if (m_activePasture.strPasture == string.Empty) return false; // m_pastureMap = new Map(); m_pastureMap.Name = m_activePasture.strPasture; IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactoryClass(); IFeatureWorkspace workspace = (IFeatureWorkspace)workspaceFactory.OpenFromFile(m_activePasture.strDataDir,0); DirectoryInfo pastureDir = new DirectoryInfo(m_activePasture.strDataDir); FileInfo[] files = pastureDir.GetFiles("*.shp"); foreach (FileInfo file in files) { IFeatureLayer featureLayer = new FeatureLayerClass(); featureLayer.Name = file.Name; featureLayer.Visible = true; featureLayer.FeatureClass = workspace.OpenFeatureClass(file.Name); m_pastureMap.AddLayer(featureLayer); } ////////////////////////////////////////////////////////////////////////// if (m_activePasture.strRasLyr != string.Empty) { IWorkspaceFactory rasWksFactory = new RasterWorkspaceFactory(); IRasterWorkspace rasWks = rasWksFactory.OpenFromFile(m_activePasture.strDataDir, 0) as IRasterWorkspace; IRasterDataset rasDataset = rasWks.OpenRasterDataset(m_activePasture.strRasLyr); IRasterLayer rasLyr = new RasterLayerClass(); rasLyr.CreateFromDataset(rasDataset); LayerHelper.SetLayerColor(rasLyr); if (m_adminMap.LayerCount == 3) { m_adminMap.AddLayer(rasLyr); m_adminMap.MoveLayer(rasLyr,3); } else if(m_adminMap.LayerCount == 4) { ILayer lyr = m_adminMap.get_Layer(3); if (null != lyr) m_adminMap.DeleteLayer(lyr); m_adminMap.AddLayer(rasLyr); m_adminMap.MoveLayer(rasLyr,3); } } ////////////////////////////////////////////////////////////////////////// Queue<TreeNode> vistor_queue = new Queue<TreeNode>(); vistor_queue.Enqueue(m_tree.Nodes[0]); while (vistor_queue.Count > 0) { TreeNode node = vistor_queue.Dequeue(); if (node.Text == strName) node.ForeColor = Color.BlueViolet; else node.ForeColor = Color.Black; TreeNode child = node.FirstNode; while (null != child) { vistor_queue.Enqueue(child); child = child.NextNode; } return true; } return false; }
public static IRasterDataset OpenRasterDataset(string sPath, string sFileName) { // Returns RasterDataset object given a file name and its directory. // sPath: path of the input raster dataset. // sFileName: name of the input raster dataset. IRasterDataset rasterDataset = null; try { IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactory(); IRasterWorkspace rasterWorkspace; rasterWorkspace = (IRasterWorkspace)workspaceFactory.OpenFromFile(sPath, 0); rasterDataset = rasterWorkspace.OpenRasterDataset(sFileName); } catch (Exception ex) { Console.WriteLine("Failed in Opening RasterDataset. " + ex.InnerException.ToString()); } return rasterDataset; }
public static IRasterWorkspace OpenRasterWorkspace(string sPath) { IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactory(); IRasterWorkspace rasterWorkspace = null; rasterWorkspace = (IRasterWorkspace)workspaceFactory.OpenFromFile(sPath, 0); return rasterWorkspace; }