Exemplo n.º 1
0
        private void btnOK_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(cmbSource.Text) || string.IsNullOrEmpty(cmbRegion.Text) || string.IsNullOrEmpty(txtTarget.Text))
            {
                return;
            }
            try
            {
                //得到图层

                ILayer pSourceLayer = ClsGDBDataCommon.GetLayerFromName(m_mapControl.Map, cmbSource.Text);
                ILayer pRegionLayer = ClsGDBDataCommon.GetLayerFromName(m_mapControl.Map, cmbRegion.Text);
                if (pSourceLayer == null || pRegionLayer == null)
                {
                    return;
                }
                if (!(pSourceLayer is IRasterLayer))
                {
                    return;
                }

                IRaster        raster              = ((IRasterLayer)pSourceLayer).Raster;
                IRaster2       raster2             = raster as IRaster2;
                IRasterDataset rasterDatasetSource = raster2.RasterDataset;

                //得到裁切范围
                IGeometry pGeometryRegion = null;
                if (pRegionLayer is IRasterLayer)
                {
                    IRaster     rasterRegion     = ((IRasterLayer)pRegionLayer).Raster;
                    IGeoDataset geoDatasetRegion = rasterRegion as IGeoDataset;
                    IEnvelope   pEnvelope        = geoDatasetRegion.Extent;
                    pGeometryRegion = pEnvelope as IGeometry;
                }
                else if (pRegionLayer is IFeatureLayer)
                {
                    IFeatureLayer featureLayer = pRegionLayer as IFeatureLayer;
                    if (featureLayer.FeatureClass != null)
                    {
                        if (featureLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPolygon)
                        {
                            IFeatureCursor pFeatureCursor = featureLayer.FeatureClass.Search(null, false);
                            IFeature       pFeature       = pFeatureCursor.NextFeature();
                            //只裁切出第一个多边形
                            if (pFeature != null)
                            {
                                pGeometryRegion = pFeature.Shape;
                            }
                        }
                    }
                }
                //裁切栅格
                ClsGDBDataCommon cls = new ClsGDBDataCommon();
                cls.RasterSubsetByPolygon(rasterDatasetSource, pGeometryRegion, txtTarget.Text);
                //加到地图中

                IRasterLayer rasterLayerNew = new RasterLayerClass();
                rasterLayerNew.CreateFromFilePath(txtTarget.Text);
                m_mapControl.AddLayer(rasterLayerNew);
                m_mapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            #region 原代码

            //if (cmbSource.SelectedItem != null)
            //{
            //    string itemName = cmbSource.SelectedItem.ToString();
            //    for (int i=0;i<m_mapControl.Map.LayerCount;i++)
            //    {
            //        ILayer pLayer = m_mapControl.Map.get_Layer(i);
            //        if (pLayer.Name==itemName)
            //        {
            //            if(pLayer is IRasterLayer)
            //            {
            //                IDataLayer pDatalayer = pLayer as IDataLayer;
            //                IDatasetName pDname = (IDatasetName)pDatalayer.DataSourceName;

            //                string layername = pDname.WorkspaceName.PathName + "\\" + pDname.Name;
            //                if (!layername.Contains("\\\\"))
            //                {
            //                    m_RasterPath=pDname.WorkspaceName.PathName + "\\" + pDname.Name;
            //                }
            //                else
            //                {
            //                    layername = pDname.WorkspaceName.PathName + pDname.Name;
            //                    m_RasterPath=layername;
            //                }
            //                break;
            //            }
            //        }
            //    }
            //}

            //else
            //{
            //    MessageBox.Show("请选择原始栅格数据", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            //    return;
            //}
            //if (m_ResultPath == null)
            //{
            //    MessageBox.Show("请选择输出路径及文件名", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            //    return;
            //}
            //if (cmbRegion.SelectedItem != null)
            //{
            //    //m_ShpPath = comboBoxEx1.SelectedItem.ToString();
            //    string itemName = cmbRegion.SelectedItem.ToString();
            //    for (int i = 0; i < m_mapControl.Map.LayerCount; i++)
            //    {
            //        ILayer pLayer = m_mapControl.Map.get_Layer(i);
            //        if (pLayer.Name == itemName)
            //        {
            //           if(pLayer is IFeatureLayer)
            //           {
            //               IDataLayer pDatalayer = pLayer as IDataLayer;
            //               IDatasetName pDname = (IDatasetName)pDatalayer.DataSourceName;
            //               m_ShpPath=pDname.WorkspaceName.PathName + "\\" + pDname.Name + ".shp";
            //                break;
            //            }
            //        }
            //    }
            //}
            //else
            //{
            //    MessageBox.Show("请选择矢量文件", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            //    return;
            //}
            //RasterLayerClass rasterlayer = new RasterLayerClass();
            //rasterlayer.CreateFromFilePath(m_RasterPath);
            //string str = m_ShpPath;
            //string str2 = str.Substring(str.LastIndexOf(@"\") + 1);     //文件名
            //string str3 = str.Substring(0, (str.Length - str2.Length) - 1);  //路径
            //IWorkspaceFactory PWorkSpaceFactory = new ShapefileWorkspaceFactory();
            //IFeatureWorkspace pFeatureWorkSpace = (IFeatureWorkspace)PWorkSpaceFactory.OpenFromFile(str3, 0) ;
            //IFeatureLayer pFeatureLayer = new FeatureLayerClass();
            //pFeatureLayer.FeatureClass = pFeatureWorkSpace.OpenFeatureClass(str2);
            //esriGeometryType pType = pFeatureLayer.FeatureClass.ShapeType;
            //if (pType != esriGeometryType.esriGeometryPolygon)
            //{
            //    MessageBox.Show("矢量文件必须是多边形图层!请重新输入!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            //    return;
            //}
            //IFeatureCursor pFeatureCursor = pFeatureLayer.FeatureClass.Search(null, false);
            //IFeature pFeature = pFeatureCursor.NextFeature();
            //IGeometry pGeometry = pFeature.Shape;
            //IPolygon pPolygon = pGeometry as IPolygon;
            //bool result = RasterClip(rasterlayer, pPolygon, m_ResultPath);
            //if (result == true)
            //{
            //    RasterLayerClass prasterlayer = new RasterLayerClass();
            //    rasterlayer.CreateFromFilePath(m_ResultPath + ".tif");
            //    m_mapControl.AddLayer(rasterlayer as ILayer);
            //    m_mapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
            //}
            //else
            //{
            //    return;
            //}

            #endregion
        }