Beispiel #1
0
        /// <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();
            }
        }
Beispiel #2
0
        //添加数据工具;
        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();
        }
Beispiel #3
0
 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);
        }
Beispiel #8
0
        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);
        }
Beispiel #10
0
        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("裁剪失败");
            }
        }
Beispiel #11
0
        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;
            }
        }
Beispiel #12
0
        //打开文件函数
        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;
                }
            }
        }
Beispiel #13
0
        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());
            }
        }
Beispiel #14
0
        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;
        }