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; } }
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; } }
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";; }
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; // } //} }
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; }
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); } }
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 }
// 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; } }
//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; } }