Exemple #1
0
        private void comboBoxEx2_SelectedIndexChanged(object sender, EventArgs e)
        {
            ILayer pLayer = ClsGDBDataCommon.GetLayerFromName(m_pMapCtl.Map, comboBoxEx2.Text);

            if (pLayer is IRasterLayer)
            {
                IRasterLayer pFeatureLayer = pLayer as IRasterLayer;
                pRaster = pFeatureLayer.Raster;
            }
        }
Exemple #2
0
        private void comboBoxEx1_SelectedIndexChanged(object sender, EventArgs e)
        {
            ILayer pLayer = ClsGDBDataCommon.GetLayerFromName(m_pMapCtl.Map, comboBoxEx1.Text);

            if (pLayer is IFeatureLayer)
            {
                IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer;
                pPointFeatureclass = pFeatureLayer.FeatureClass;
            }
        }
Exemple #3
0
        private void cmbSource_SelectedIndexChanged(object sender, EventArgs e)
        {
            IRasterLayer pRasterLayer = ClsGDBDataCommon.GetLayerFromName(m_mapControl.Map, cmbSource.Text) as IRasterLayer;

            if (pRasterLayer == null)
            {
                return;
            }

            IDataLayer   pDatalayer = pRasterLayer as IDataLayer;
            IDatasetName pDname     = pDatalayer.DataSourceName as IDatasetName;

            txtTarget.Text = pDname.WorkspaceName.PathName + System.IO.Path.GetFileNameWithoutExtension(pDname.Name) + "_Sub.tif";;
        }
Exemple #4
0
        private void cmbLayerTrans_SelectedIndexChanged(object sender, EventArgs e)
        {
            //for (int i = 0; i < pMapControl.LayerCount;i++ )
            //{
            //   if (pMapControl.get_Layer(i).Name==cmbLayerTrans.Text)
            //   {
            pFeatureLayer = ClsGDBDataCommon.GetLayerFromName(pMapControl.Map, cmbLayerTrans.Text) as IFeatureLayer;
            IFeatureClass pFC       = pFeatureLayer.FeatureClass;
            IDataset      pDS       = pFC as IDataset;
            IWorkspace    pWS       = pDS.Workspace;
            string        filedir   = pWS.PathName;
            string        fdestname = "";

            if (radioButtonENUtoNED.Checked == true)
            {
                fdestname = pDS.BrowseName + "_NED";
            }
            if (radioButtonNEDtoENU.Checked == true)
            {
                fdestname = pDS.BrowseName + "_ENU";
            }
            txtLayerExp.Text    = filedir;
            txtFeatureName.Text = fdestname;


            //表示为gdb的feature,只能往gdb拷贝
            if (pDS.CanCopy() == false)
            {
                txtLayerExp.Enabled   = false;
                BtnWorkBrowse.Enabled = false;
            }
            else
            {
                txtLayerExp.Enabled   = true;
                BtnWorkBrowse.Enabled = true;
            }

            //string rasterfilepath = pFeatureLayer.ToString();//选中图层的文件路径
            //string rasterfiledir = System.IO.Path.GetDirectoryName(rasterfilepath);//文件位置
            //string rasterfilename=System.IO.Path.GetFileNameWithoutExtension(rasterfilepath);//文件名称
            //LayerExpName = rasterfiledir + "\\" + rasterfilename + "Trans.tif";
            //txtLayerExp.Text = LayerExpName;
            //break;
            //   }
            //}
        }
Exemple #5
0
        private void cmbDemLayer_SelectedIndexChanged(object sender, EventArgs e)
        {
            IRasterLayer pRasterLayer = ClsGDBDataCommon.GetLayerFromName(m_pMapControl.Map, cmbDemLayer.Text) as IRasterLayer;

            if (pRasterLayer == null)
            {
                return;
            }

            IDataLayer   pDatalayer = pRasterLayer as IDataLayer;
            IDatasetName pDname     = pDatalayer.DataSourceName as IDatasetName;

            string szPath           = pDname.WorkspaceName.PathName;
            string szOutputPolyline = szPath + "Polyline.shp";
            string szOutputPoint    = szPath + "Point.shp";

            txtOutputPoint.Text    = szOutputPoint;
            txtOutputPolyline.Text = szOutputPolyline;
        }
Exemple #6
0
        private void btnOk_Click(object sender, EventArgs e)
        {
            //IRasterLayer pRasterLayer = null;
            m_pRasterLayer = ClsGDBDataCommon.GetLayerFromName(m_pMap, cmbRaster.Text) as IRasterLayer;
            //for (int i = 0; i < m_pMap.LayerCount; i++)
            //{
            //    ILayer pLayer = m_pMap.get_Layer(i);
            //    if (pLayer is IRasterLayer)
            //    {
            //        // IRasterLayer prlayer = pLayer as IRasterLayer;
            //        if (pLayer.Name == cmbRaster.SelectedItem.ToString())
            //        {
            //            m_pRasterLayer = pLayer as IRasterLayer;
            //            //pRaster = pRasterLayer.Raster;
            //            break;
            //        }
            //    }
            //}

            m_pXmlFilename = txtXmlFilename.Text;
        }
        private void cmbInlayer_SelectedIndexChanged(object sender, EventArgs e)
        {
            cmbfield1.Items.Clear();
            ILayer playermap = ClsGDBDataCommon.GetLayerFromName(pMapControl.Map, cmbInlayer.Text);

            if (playermap is IFeatureLayer)
            {
                IFeatureLayer    pfeaturelayer    = (IFeatureLayer)playermap;
                IGeoFeatureLayer pGeofeaturelayer = (IGeoFeatureLayer)pfeaturelayer;
                if (pGeofeaturelayer.Renderer is IUniqueValueRenderer)
                {
                    pInLayer     = playermap;
                    pInFLayer    = (IFeatureLayer)pInLayer;
                    pInGeoFLayer = (IGeoFeatureLayer)pInFLayer;
                    pUniquerend  = pInGeoFLayer.Renderer as IUniqueValueRenderer;
                }
            }

            if (pUniquerend.FieldCount == 1)
            {
                cmbfield2.Enabled = false;
                cmbfield3.Enabled = false;
                ITable  pTbale  = pLayer as ITable;
                IFields pFields = pTbale.Fields;
                for (int i = 2; i < pFields.FieldCount; i++)
                {
                    cmbfield1.Items.Add(pFields.get_Field(i).Name);
                }
                string uniquefield = pUniquerend.get_Field(0);
                if (cmbfield1.Items.Contains(uniquefield))
                {
                    cmbfield1.Text = uniquefield;
                }
                else
                {
                    MessageBox.Show("当前图层中不包含导入符号图层的独立值字段", "提示", MessageBoxButtons.OK);
                    //this.Close();
                }
            }
        }
        private void cmbLayers_SelectedValueChanged(object sender, EventArgs e)
        {
            if (cmbLayers.SelectedIndex == -1)
            {
                return;
            }
            ILayer pLayer = ClsGDBDataCommon.GetLayerFromName(m_pMap, cmbLayers.Text);

            if (pLayer is IRasterLayer)
            {
                m_pRaster = ((IRasterLayer)pLayer).Raster;
            }
            else if (pLayer is ITinLayer)
            {
                ITinLayer pTinlayer = null;
                pTinlayer = pLayer as ITinLayer;
                if (pTinlayer != null)
                {
                    //FrmDEMToTin frm = new FrmDEMToTin();
                    ////ITin tin = frm.DEMToTIN(raster);
                    //ITinLayer tinlayer = new TinLayerClass();
                    //tinlayer.Dataset = tin;
                    //tinlayer.Name = "Mem_RandomTinLayer";
                    //// tinlayer.TipText = "RandomTinLayer";
                    //ITinEdit pTEdit = tin as ITinEdit;
                    FrmTinToDEM frm     = new FrmTinToDEM();
                    ITin        ptin    = pTinlayer.Dataset;
                    IRaster     praster = frm.TINToDEM(ptin);
                    m_pRaster = praster;
                }
            }
            else
            {
                m_pRaster = null;
            }
        }
        private void LandPointEdit()
        {
            try
            {
                ILayer pLayerLand    = ClsGDBDataCommon.GetLayerFromName(m_PagelayoutControl.ActiveView.FocusMap, "着陆点");
                ILayer pLayerLandAim = ClsGDBDataCommon.GetLayerFromName(m_PagelayoutControl.ActiveView.FocusMap, "瞄准点");
                if (pLayerLand == null && pLayerLandAim == null)
                {
                    return;
                }

                if (pLayerLand is IFeatureLayer)
                {
                    IFeatureLayer  pFLayerRes = pLayerLand as IFeatureLayer;
                    IFeatureCursor pFCursor   = null;
                    IFeature       pFeature   = null;

                    ITable  pTable       = (ITable)pFLayerRes;
                    IFields pFields      = pTable.Fields;
                    int     nFieldIndex  = pFields.FindField("Type");//获取标示类型的字段
                    int     nFieldLog    = 0;
                    int     nFieldLat    = 0;
                    int     nFiledHeight = 0;
                    for (int i = 0; i < pFields.FieldCount; i++)
                    {
                        if (pFields.get_Field(i).Name == "Log")
                        {
                            nFieldLog = i;
                        }
                        if (pFields.get_Field(i).Name == "Lat")
                        {
                            nFieldLat = i;
                        }
                        if (pFields.get_Field(i).Name == "Height")
                        {
                            nFiledHeight = i;
                        }
                    }

                    pFCursor = pFLayerRes.Search(null, false);

                    pFeature = pFCursor.NextFeature();
                    while (pFeature != null)
                    {
                        string    strType   = pFeature.get_Value(nFieldIndex).ToString();
                        IGeometry pGeometry = pFeature.Shape;
                        if (pGeometry.GeometryType == esriGeometryType.esriGeometryPoint)
                        {
                            IPoint pPoint = pGeometry as IPoint;
                            if (strType == "实际落点")
                            {
                                pPoint.PutCoords(LandPointRes.X, LandPointRes.Y);
                                pFeature.set_Value(nFieldLog, Math.Abs(LandPointRes.X).ToString("f2") + "°W");
                                pFeature.set_Value(nFieldLat, Math.Abs(LandPointRes.Y).ToString("f2") + "°N");
                                pFeature.set_Value(nFiledHeight, LandPointRes.Z);
                            }
                            pFeature.Store();
                        }
                        pFeature = pFCursor.NextFeature();
                    }
                    //pFCursor.Flush();
                }

                if (pLayerLandAim is IFeatureLayer)
                {
                    IFeatureLayer  pFLayerRes = pLayerLandAim as IFeatureLayer;
                    IFeatureCursor pFCursor   = null;
                    IFeature       pFeature   = null;

                    ITable  pTable       = (ITable)pFLayerRes;
                    IFields pFields      = pTable.Fields;
                    int     nFieldIndex  = pFields.FindField("Type");//获取标示类型的字段
                    int     nFieldLog    = 0;
                    int     nFieldLat    = 0;
                    int     nFiledHeight = 0;
                    for (int i = 0; i < pFields.FieldCount; i++)
                    {
                        if (pFields.get_Field(i).Name == "Log")
                        {
                            nFieldLog = i;
                        }
                        if (pFields.get_Field(i).Name == "Lat")
                        {
                            nFieldLat = i;
                        }
                        if (pFields.get_Field(i).Name == "Height")
                        {
                            nFiledHeight = i;
                        }
                    }

                    pFCursor = pFLayerRes.Search(null, false);
                    pFeature = pFCursor.NextFeature();
                    while (pFeature != null)
                    {
                        string    strType   = pFeature.get_Value(nFieldIndex).ToString();
                        IGeometry pGeometry = pFeature.Shape;
                        if (pGeometry.GeometryType == esriGeometryType.esriGeometryPoint)
                        {
                            IPoint pPoint = pGeometry as IPoint;
                            if (strType == "瞄准点")
                            {
                                pPoint.PutCoords(LandPointAim.X, LandPointAim.Y);
                                pFeature.set_Value(nFieldLog, Math.Abs(LandPointAim.X).ToString(".##") + "°W");
                                pFeature.set_Value(nFieldLat, Math.Abs(LandPointAim.Y).ToString(".##") + "°N");
                                pFeature.set_Value(nFiledHeight, LandPointAim.Z);
                            }
                            pFeature.Store();
                        }
                        pFeature = pFCursor.NextFeature();
                    }

                    //pFCursor.Flush();
                }
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Exemple #10
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
        }
Exemple #11
0
//         private IProjectedCoordinateSystem CreateProjectedCoordinateSystem()
//         {
//
//             // Set up the SpatialReferenceEnvironment.
//             // SpatialReferenceEnvironment is a singleton object and needs to use the Activator class.
//             Type factoryType = Type.GetTypeFromProgID(
//                 "esriGeometry.SpatialReferenceEnvironment");
//             System.Object obj = Activator.CreateInstance(factoryType);
//             ISpatialReferenceFactory3 spatialReferenceFactory = obj as
//                 ISpatialReferenceFactory3;
//
//             // Create a projection, GeographicCoordinateSystem, and unit using the factory.
//             IProjectionGEN projection = spatialReferenceFactory.CreateProjection((int)
//                 esriSRProjectionType.esriSRProjection_Sinusoidal) as IProjectionGEN;
//             IGeographicCoordinateSystem geographicCoordinateSystem =
//                 spatialReferenceFactory.CreateGeographicCoordinateSystem((int)
//                 esriSRGeoCS3Type.esriSRGeoCS_TheMoon);
//             ILinearUnit unit = spatialReferenceFactory.CreateUnit((int)
//                 esriSRUnitType.esriSRUnit_Meter) as ILinearUnit;
//
//             // Get the default parameters from the projection.
//             IParameter[] parameters = projection.GetDefaultParameters();
//
//             // Create a PCS using the Define method.
//             IProjectedCoordinateSystemEdit projectedCoordinateSystemEdit = new
//                 ProjectedCoordinateSystemClass();
//             object name = "Coustom";
//             object alias = "Coustom";
//             object abbreviation = "Coustom";
//             object remarks = "Coustom";
//             object usage = "Coustom";
//             object geographicCoordinateSystemObject = geographicCoordinateSystem as object;
//             object unitObject = unit as object;
//             object projectionObject = projection as object;
//             object parametersObject = parameters as object;
//
//
//             projectedCoordinateSystemEdit.Define(ref name, ref alias, ref abbreviation, ref
//         remarks, ref usage, ref geographicCoordinateSystemObject, ref unitObject,
//                 ref projectionObject, ref parametersObject);
//             ;
//             IProjectedCoordinateSystem userDefinedProjectCoordinateSystem =
//             projectedCoordinateSystemEdit as IProjectedCoordinateSystem;
//             return userDefinedProjectCoordinateSystem;
//         }

        private void btnOK_Click(object sender, EventArgs e)
        {
            //string szInputFilename = ;
            string       szDemFilename = cmbDemLayer.Text;
            IRasterLayer pDemLayer     = ClsGDBDataCommon.GetLayerFromName(m_pMapControl.Map, szDemFilename) as IRasterLayer;

            if (pDemLayer == null)
            {
                return;
            }

            string szXmlFilename = txtXmlFilename.Text;

            //得到FeatureLayer
            IFeatureLayer pInputFeatureLayer = ClsGDBDataCommon.GetLayerFromName(m_pMapControl.Map, cmbPathFeatureLayer.Text) as IFeatureLayer;

            if (pInputFeatureLayer == null)
            {
                return;
            }

            try
            {
                //获得inputFeatureClass
                IFeatureClass pInputFeatureClass = pInputFeatureLayer.FeatureClass;

                #region 注释代码
                //IFeatureDataset pInputDataset = pInputFeatureClass.FeatureDataset;
                //IWorkspace pInputWorkspace = pInputDataset.Workspace;
                //IWorkspace2 pInputWorkspace2 = pInputWorkspace as IWorkspace2;

                //设置空间参考
                //ISpatialReference pSpatialRef = new UnknownCoordinateSystemClass();//没有这一句就报错,说尝试读取或写入受保护的内存。
                //pSpatialRef.SetDomain(-8000000, 8000000, -8000000, 8000000);//没有这句就抛异常来自HRESULT:0x8004120E。
                //pSpatialRef.SetZDomain(-8000000, 8000000);
                #endregion


                #region 创建点SHP文件的字段
                IFields     pPointFields = new FieldsClass();
                IFieldsEdit pFieldsEdit  = (IFieldsEdit)pPointFields;

                //创建类型为几何类型的字段
                IField     pField     = new FieldClass();
                IFieldEdit pFieldEdit = (IFieldEdit)pField;

                pFieldEdit.Name_2 = "shape";
                pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
                IGeometryDef     pGeoDef     = new GeometryDefClass();
                IGeometryDefEdit pGeoDefEdit = (IGeometryDefEdit)pGeoDef;
                pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;
                pGeoDefEdit.HasM_2         = false;
                pGeoDefEdit.HasZ_2         = false;
                //pGeoDefEdit.SpatialReference_2 = pSpatialRef;
                //pFieldEdit.Name_2 = "SHAPE";
                //pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
                pFieldEdit.GeometryDef_2 = pGeoDef;
                pFieldEdit.IsNullable_2  = true;
                pFieldEdit.Required_2    = true;
                pFieldsEdit.AddField(pField);

                //添加字段
                pField            = new FieldClass();
                pFieldEdit        = (IFieldEdit)pField;
                pFieldEdit.Name_2 = "Name";             //名字
                pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
                pFieldsEdit.AddField(pField);

                pField            = new FieldClass();
                pFieldEdit        = (IFieldEdit)pField;
                pFieldEdit.Name_2 = "Type";             //类型
                pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
                pFieldsEdit.AddField(pField);
                #endregion

                #region 创建polyline字段
                IFields pPolylineFields = new FieldsClass(); //pInputFeatureClass.Fields;
                pFieldsEdit = (IFieldsEdit)pPolylineFields;

                //创建类型为几何类型的字段
                //pField = new FieldClass();
                //pFieldEdit = (IFieldEdit)pField;

                //pFieldEdit.Name_2 = "shape";
                //pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
                //pGeoDef = new GeometryDefClass();
                //pGeoDefEdit = (IGeometryDefEdit)pGeoDef;
                //pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline;
                //pGeoDefEdit.HasM_2 = false;
                //pGeoDefEdit.HasZ_2 = false;
                //pGeoDefEdit.SpatialReference_2 = pSpatialRef;
                ////pFieldEdit.Name_2 = "SHAPE";
                ////pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
                //pFieldEdit.GeometryDef_2 = pGeoDef;
                //pFieldEdit.IsNullable_2 = true;
                //pFieldEdit.Required_2 = true;
                //pFieldsEdit.AddField(pField);

                for (int i = 0; i < pInputFeatureClass.Fields.FieldCount; i++)
                {
                    //pField = new FieldClass();
                    //pFieldEdit = (IFieldEdit)pField;

                    IField pTmpField = pInputFeatureClass.Fields.get_Field(i);
                    IClone pSrcClone = pTmpField as IClone;
                    IClone pDstClone = pSrcClone.Clone();
                    IField pDstField = pDstClone as IField;
                    //IFieldEdit pTmpFieldEdit = pTmpField as IFieldEdit;

                    //pFieldEdit.Name_2 = pTmpFieldEdit.Name;
                    //pFieldEdit.Type_2 = pTmpFieldEdit.Type;
                    pFieldsEdit.AddField(pDstField);
                }

                ////添加字段
                //pField = new FieldClass();
                //pFieldEdit = (IFieldEdit)pField;
                //pFieldEdit.Name_2 = "Name";             //名字
                //pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
                //pFieldsEdit.AddField(pField);

                //pField = new FieldClass();
                //pFieldEdit = (IFieldEdit)pField;
                //pFieldEdit.Name_2 = "Type";             //类型
                //pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
                //pFieldsEdit.AddField(pField);
                #endregion

                //创建outputPolylineFeatureClass, outputPointFeatureClass
                IFeatureClass    pOutputPolylineFeatureClass = null, pOutputPointFeatureClass = null;
                ClsGDBDataCommon pDataCommon  = new ClsGDBDataCommon();


                string szPolylineFilename     = txtOutputPolyline.Text; // "D:\\test\\testPolyline.shp";
                string szPointFilename        = txtOutputPoint.Text;    // "D:\\test\\testPoint.shp";
                //IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();
                //IWorkspace pWorkspace = pDataCommon.OpenFromShapefile(System.IO.Path.GetDirectoryName(szPolylineFilename));
                //IFeatureWorkspace pFW = pWorkspace as IFeatureWorkspace;

                string szPath = System.IO.Path.GetDirectoryName(szPointFilename);
                pOutputPointFeatureClass    = pDataCommon.CreateShapefile(szPath, System.IO.Path.GetFileName(szPointFilename), pPointFields, null);
                pOutputPolylineFeatureClass = pDataCommon.CreateShapefile(szPath, System.IO.Path.GetFileName(szPolylineFilename), pPolylineFields, null);

                //判断类型是否一致
                if (pOutputPointFeatureClass.ShapeType != esriGeometryType.esriGeometryPoint)
                {
                    MessageBox.Show("输出点文件已存在,但类型不一致,请更改或删除!");
                    return;
                }

                if (pOutputPolylineFeatureClass.ShapeType != esriGeometryType.esriGeometryPolyline)
                {
                    MessageBox.Show("输出路径文件已存在,但类型不一致,请更改或删除!");
                    return;
                }
                //pOutputPolylineFeatureClass = pDataCommon.CreateFeatureClass(pInputWorkspace as IWorkspace2, pInputDataset, "Polyline", pPolylineFields, null, null, "");
                //pOutputPointFeatureClass = pDataCommon.CreateFeatureClass(pInputWorkspace as IWorkspace2, pInputDataset, "Point", pPointFields, null, null, "");
                if (pOutputPointFeatureClass == null || pOutputPolylineFeatureClass == null)
                {
                    return;
                }

                //先清空所有对象
                IFeatureCursor pFeatureCursor = pOutputPolylineFeatureClass.Search(null, false);
                IFeature       pFeature = pFeatureCursor.NextFeature();
                while (pFeature != null)
                {
                    pFeature.Delete();
                    pFeature = pFeatureCursor.NextFeature();
                }
                pFeatureCursor = pOutputPointFeatureClass.Search(null, false);
                pFeature       = pFeatureCursor.NextFeature();
                while (pFeature != null)
                {
                    pFeature.Delete();
                    pFeature = pFeatureCursor.NextFeature();
                }

                //反投影
                ClsProjectBackward pProjectBackward = new ClsProjectBackward();
                if (pProjectBackward.projectBackward(pInputFeatureClass, pDemLayer, szXmlFilename,
                                                     ref pOutputPolylineFeatureClass, ref pOutputPointFeatureClass))
                {
                    MessageBox.Show("反投影操作已经完成!");
                }
                else
                {
                    MessageBox.Show("反投影操作失败!");
                }

                //写入GDB
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.ToString());
                return;
            }
        }
Exemple #12
0
        //private bool RasterClip(IRasterLayer pRasterLayer, IPolygon clipGeo, string FileName)
        //{
        //    try
        //    {
        //        IRaster pRaster = pRasterLayer.Raster;
        //        IRasterProps pProps = pRaster as IRasterProps;
        //        object cellSizeProvider = pProps.MeanCellSize().X;
        //        IGeoDataset pInputDataset = pRaster as IGeoDataset;
        //        IExtractionOp pExtractionOp = new RasterExtractionOpClass();
        //        IRasterAnalysisEnvironment pRasterAnaEnvir = pExtractionOp as IRasterAnalysisEnvironment;
        //        pRasterAnaEnvir.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref cellSizeProvider);
        //        object extentProvider = clipGeo.Envelope;
        //        object snapRasterData = Type.Missing;
        //        pRasterAnaEnvir.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvValue, ref extentProvider, ref snapRasterData);
        //        IGeoDataset pOutputDataset = pExtractionOp.Polygon(pInputDataset, clipGeo as IPolygon, true);//裁切操作
        //        IRaster clipRaster; //裁切后得到的IRaster
        //        if (pOutputDataset is IRasterLayer)
        //        {
        //            IRasterLayer rasterLayer = pOutputDataset as IRasterLayer;
        //            clipRaster = rasterLayer.Raster;
        //        }
        //        else if (pOutputDataset is IRasterDataset)
        //        {
        //            IRasterDataset rasterDataset = pOutputDataset as IRasterDataset;
        //            clipRaster = rasterDataset.CreateDefaultRaster();
        //        }
        //        else if (pOutputDataset is IRaster)
        //        {
        //            clipRaster = pOutputDataset as IRaster;
        //        }
        //        else
        //        {
        //            return false;
        //        }

        //        //保存裁切后得到的clipRaster
        //        //如果直接保存为img影像文件
        //        IWorkspaceFactory pWKSF = new RasterWorkspaceFactoryClass();
        //        IWorkspace pWorkspace = pWKSF.OpenFromFile(System.IO.Path.GetDirectoryName(FileName), 0);
        //        ISaveAs pSaveAs = clipRaster as ISaveAs;
        //        IDataset pDataset = pSaveAs.SaveAs(System.IO.Path.GetFileName(FileName) + ".tif", pWorkspace, "TIFF");//以TIF格式保存
        //        System.Runtime.InteropServices.Marshal.ReleaseComObject(pDataset);
        //        return true;
        //        //MessageBox.Show("成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
        //    }
        //    catch (Exception exp)
        //    {
        //        MessageBox.Show(exp.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
        //        return false;
        //    }
        //}

        //从RASTER中根据SHP截取子图
        //private bool GetRasterSubset(IRasterLayer pRasterLayer, ILayer pLayerRegion, string szOutputRasterFilename,out IPoint ptLeftTopOffset)
        //{
        //    ptLeftTopOffset = null;
        //    if (pLayerRegion ==null)//裁切区域为空时,使用整个栅格
        //    {

        //    }
        //    else
        //    {
        //        //得到范围
        //    }


        //    return true;
        //}

        //private bool GetRasterSubset(IRasterLayer pRasterLayer, string szShpFilename, string szOutputRasterFilename, out IPoint ptLeftTopOffset)
        //{
        //    ptLeftTopOffset = null;
        //    if (string.IsNullOrEmpty(szOutputRasterFilename) || pRasterLayer==null || string.IsNullOrEmpty(szShpFilename))
        //        return false;

        //    try
        //    {
        //        //打开源文件
        //        IRasterLayer rasterlayer = pRasterLayer;

        //        //获得SHP文件
        //        string szShpPath = System.IO.Path.GetDirectoryName(szShpFilename);
        //        string szShpFile = System.IO.Path.GetFileName(szShpFilename);
        //        IWorkspaceFactory PWorkSpaceFactory = new ShapefileWorkspaceFactory();
        //        IFeatureWorkspace pFeatureWorkSpace = (IFeatureWorkspace)PWorkSpaceFactory.OpenFromFile(szShpPath, 0);
        //        IFeatureLayer pFeatureLayer = new FeatureLayerClass();
        //        pFeatureLayer.FeatureClass = pFeatureWorkSpace.OpenFeatureClass(szShpFile);
        //        esriGeometryType pType = pFeatureLayer.FeatureClass.ShapeType;
        //        if (pType != esriGeometryType.esriGeometryPolygon)
        //        {
        //            MessageBox.Show("矢量文件必须是多边形图层!请重新输入!");
        //            return false;
        //        }

        //        //截取子图
        //        IFeatureCursor pFeatureCursor = pFeatureLayer.FeatureClass.Search(null, false);
        //        IFeature pFeature = pFeatureCursor.NextFeature();
        //        IGeometry pGeometry = pFeature.Shape;
        //        IPolygon pPolygon = pGeometry as IPolygon;

        //        IRasterProps pRasterProps = rasterlayer.Raster as IRasterProps;
        //        IPoint pRasterLeftTop = pRasterProps.Extent.UpperLeft;
        //        IPoint pShpLeftTop = pPolygon.Envelope.UpperLeft;

        //        ptLeftTopOffset = new PointClass();
        //        ptLeftTopOffset.X = Math.Abs(pShpLeftTop.X - pRasterLeftTop.X);
        //        ptLeftTopOffset.Y = Math.Abs(pRasterLeftTop.Y - pShpLeftTop.Y);

        //        //保存到文件
        //        bool result = RasterClip(rasterlayer, pPolygon, szOutputRasterFilename);
        //        return result;
        //    }
        //    catch (System.Exception ex)
        //    {
        //        MessageBox.Show(ex.Message);
        //        return false;
        //    }
        //}
        #endregion
        private void btnOK_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txtRightImage.Text))
            {
                this.DialogResult = DialogResult.Cancel;
                return;
            }

            m_pRasterLayerRight = ClsGDBDataCommon.GetLayerFromName(m_pMapCtrl.Map, txtRightImage.Text) as IRasterLayer;
            //待配准影像完整名
            string strRegisterFile = "";
            //基准图层完整名
            string strBaseFile = "";

            if (m_pRasterLayerRight == null || m_pRasterLayerLeft == null)
            {
                this.DialogResult = DialogResult.Cancel;
                return;
            }

            if (m_pRasterLayerRight.Raster == null || m_pRasterLayerLeft.Raster == null)
            {
                this.DialogResult = DialogResult.Cancel;
                return;
            }

            IDataLayer   pDatalayer = m_pRasterLayerLeft as IDataLayer;
            IDatasetName pDname     = (IDatasetName)pDatalayer.DataSourceName;

            strRegisterFile = pDname.WorkspaceName.PathName + pDname.Name;

            pDatalayer  = m_pRasterLayerRight as IDataLayer;
            pDname      = (IDatasetName)pDatalayer.DataSourceName;
            strBaseFile = pDname.WorkspaceName.PathName + pDname.Name;

            //得到Raster2
            m_pRasterLeft  = m_pRasterLayerLeft.Raster as IRaster2;
            m_pRasterRight = m_pRasterLayerRight.Raster as IRaster2;

            string szLeftGrayImage  = System.IO.Path.GetTempFileName();
            string szRightGrayImage = System.IO.Path.GetTempFileName();

            try
            {
                IPoint ptLeftTopOffset = new PointClass();
                ptLeftTopOffset.X = 0;
                ptLeftTopOffset.Y = 0;

                //配置配准参数
                szLeftGrayImage  = System.IO.Path.GetDirectoryName(szLeftGrayImage) + "\\" + System.IO.Path.GetFileNameWithoutExtension(szLeftGrayImage) + ".tif";
                szRightGrayImage = System.IO.Path.GetDirectoryName(szRightGrayImage) + "\\" + System.IO.Path.GetFileNameWithoutExtension(szRightGrayImage) + ".tif";
                if (!stretchToGrayImage(m_pRasterLeft as IRaster, szLeftGrayImage))
                {
                    return;                                                                 //拉伸左影像
                }
                if (!stretchToGrayImage(m_pRasterRight as IRaster, szRightGrayImage))
                {
                    return;                                          //拉伸右影像
                }
                m_pSiftMatchPara.szLeftFilename  = szLeftGrayImage;  // strRegisterFile;
                m_pSiftMatchPara.szRightFilename = szRightGrayImage; // strBaseFile;
                //m_pSiftMatchPara.szOutputFilename = txtOutputFilename.Text;

                m_pSiftMatchPara.dbLeftTopOffsetX = ptLeftTopOffset.X;
                m_pSiftMatchPara.dbLeftTopOffsetY = ptLeftTopOffset.Y;

                m_pSiftMatchPara.dbRatio       = dbiRatio.Value;
                m_pSiftMatchPara.nMaxBlockSize = Convert.ToUInt32(iiMaxBlockSize.Value);
                m_pSiftMatchPara.nOverlaySize  = Convert.ToUInt32(iiOverlaySize.Value);
                m_pSiftMatchPara.dbRansacSigma = doubleRansac.Value;
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message);
                this.DialogResult = DialogResult.Cancel;
                return;
            }
        }