private void comboBoxToraster_SelectedIndexChanged(object sender, EventArgs e) { if (comboBoxToraster.Items.Count > 0) { toraster_Name = comboBoxToraster.SelectedItem.ToString(); ; ILayer pLayer = GetLayerByName(ref fortraster_Name); IWorkspace pSourceWorkspace; if (pLayer is IRasterLayer)//读取RasterLayer的路径名和像元大小值 { IRasterLayer pRasterLayer = pLayer as IRasterLayer; IDataset pDataset = pRasterLayer as IDataset; pSourceWorkspace = pDataset.Workspace; toraster_Path = pSourceWorkspace.PathName; toraster_Path = toraster_Path + toraster_Name; } else if (pLayer is ITinLayer) { ITinLayer pTinLayer = pLayer as ITinLayer; ITin pTin = pTinLayer.Dataset; IDataset pDataset = pTin as IDataset; pSourceWorkspace = pDataset.Workspace; toraster_Path = pSourceWorkspace.PathName; toraster_Path = toraster_Path + "\\" + toraster_Name; } btnSure.Enabled = true; } else { btnSure.Enabled = false; } }
//缩放至图层 private void ctMenuTFZoomToLayer_Click(object sender, EventArgs e) { IGeoDataset pGeoDataset = null; if (this.TOCRightLayer is IFeatureLayer) { IFeatureClass pFeatureClass = ((IFeatureLayer)this.TOCRightLayer).FeatureClass; pGeoDataset = pFeatureClass as IGeoDataset; } else if (this.TOCRightLayer is IRasterLayer) { IRasterLayer pRaterLayer = this.TOCRightLayer as IRasterLayer; pGeoDataset = pRaterLayer.Raster as IGeoDataset; } else if (this.TOCRightLayer is ITinLayer) { ITinLayer pTinLayer = this.TOCRightLayer as ITinLayer; pGeoDataset = pTinLayer.Dataset as IGeoDataset; } else { return; } this.axMapControl1.Extent = pGeoDataset.Extent; this.axMapControl1.Refresh(); }
private void 影像叠加ToolStripMenuItem_Click(object sender, System.EventArgs e) { ISceneGraph pSceneGraph = this.axSceneControl1.SceneGraph; IScene pScene = pSceneGraph.Scene; ILayer layer = pScene.get_Layer(0); ITinLayer tinLayer = layer as ITinLayer; layer = pScene.get_Layer(1); IRasterLayer rasterLayer = layer as IRasterLayer; ITinAdvanced tinAdvanced; ISurface surface; tinAdvanced = tinLayer.Dataset as ITinAdvanced; surface = tinAdvanced.Surface; ILayerExtensions layerExtensions = (ILayerExtensions)rasterLayer; I3DProperties i3dProperties = null; for (int i = 0; i < layerExtensions.ExtensionCount; i++) { if (layerExtensions.get_Extension(i) is I3DProperties) { i3dProperties = (I3DProperties)layerExtensions.get_Extension(i); } }//get 3d properties from extension i3dProperties.BaseOption = esriBaseOption.esriBaseSurface; i3dProperties.BaseSurface = surface; i3dProperties.Apply3DProperties(rasterLayer); pSceneGraph.RefreshViewers(); }
public ISurface GetSurfaceFromLayer(ILayer ilayer_0) { ISurface surface = null; if (ilayer_0 == null) { surface = null; } else if (ilayer_0 is ITinLayer) { ITinLayer tinLayer = ilayer_0 as ITinLayer; surface = (tinLayer.Dataset as ISurface); } else if (ilayer_0 is IRasterLayer) { IRasterLayer rasterLayer = ilayer_0 as IRasterLayer; if (surface == null) { IRasterBandCollection rasterBandCollection = rasterLayer.Raster as IRasterBandCollection; IRasterBand rasterBand = rasterBandCollection.Item(0); surface = (new RasterSurface { RasterBand = rasterBand } as ISurface); } } return(surface); }
private ISurface method_0(ILayer ilayer_1) { ISurface surface = null; if (ilayer_1 == null) { return(null); } if (ilayer_1 is ITinLayer) { ITinLayer layer = ilayer_1 as ITinLayer; return(layer.Dataset as ISurface); } if (ilayer_1 is IRasterLayer) { IRasterLayer layer2 = ilayer_1 as IRasterLayer; IRasterBand band = (layer2.Raster as IRasterBandCollection).Item(0); IRasterSurface surface2 = new RasterSurfaceClass { RasterBand = band }; surface = surface2 as ISurface; } return(surface); }
private void 生成等高线ToolStripMenuItem_Click(object sender, EventArgs e) { //获取TIN图层 ITinLayer pTinLayer = axSceneControl1.Scene.get_Layer(0) as ITinLayer; ITin pTin = pTinLayer.Dataset as ITin; string contourFileName = pTinLayer.Name + "_Contour"; string contourFileName_shp = WorkSpaceName + @"/" + contourFileName + ".shp"; if (System.IO.File.Exists(contourFileName_shp)) { System.IO.File.Delete(contourFileName_shp); System.IO.File.Delete(System.IO.Path.ChangeExtension(contourFileName_shp, ".dbf")); System.IO.File.Delete(System.IO.Path.ChangeExtension(contourFileName_shp, ".shx")); } IFeatureClass contourFeatureClass = Create_ContourLine(pTin, WorkSpaceName, contourFileName); //添加等高线图层 IFeatureLayer pFeatureLayer = new FeatureLayerClass(); pFeatureLayer.FeatureClass = contourFeatureClass; IGeoFeatureLayer pGeoFeatureLayer = pFeatureLayer as IGeoFeatureLayer; pGeoFeatureLayer.DisplayAnnotation = true; pGeoFeatureLayer.DisplayField = "Contour"; pGeoFeatureLayer.Name = contourFileName + "_Contour"; //设置线样式 ILineSymbol pLineSymbol = new SimpleLineSymbolClass(); pLineSymbol.Color = Get_RGBColor(100, 50, 30); pLineSymbol.Width = 2; ISimpleRenderer pRender = pGeoFeatureLayer.Renderer as ISimpleRenderer; pRender.Symbol = pLineSymbol as ISymbol; axMapControl1.AddLayer(pFeatureLayer as ILayer); }
private void comboBoxOpen_SelectedIndexChanged(object sender, EventArgs e) { try { if (comboBoxOpen.Items.Count > 0) { label.Text = ""; DrawGeo.Enabled = false; string LayerName = comboBoxOpen.SelectedItem.ToString(); ILayer pLayer = GetLayerByName(ref LayerName); if (pLayer is IRasterLayer)//读取Raster数据的ISurface { IRasterLayer pRasterLayer = pLayer as IRasterLayer; IGeoDataset pDataset = pRasterLayer as IGeoDataset; ISpatialReference psr = pDataset.SpatialReference; // ZQ 20110808 为处理地理坐标系与投影坐标系单位的转换 if (psr is IProjectedCoordinateSystem) { label.Text = "该数据为地理坐标,计算结果无效仅供参考!"; } else if (psr is IGeographicCoordinateSystem) { //m_pMapControlDefault.MapUnits.ToString(); } // IRasterSurface pRasterSurface = new RasterSurfaceClass(); pRasterSurface.PutRaster(pRasterLayer.Raster, 0); m_SurFace = pRasterSurface as ISurface; } else if (pLayer is ITinLayer)//读取TIN数据的ISurface { ITinLayer pTinLayer = pLayer as ITinLayer; IGeoDataset pDataset = pTinLayer as IGeoDataset; ISpatialReference psr = pDataset.SpatialReference; if (!(psr is IProjectedCoordinateSystem)) { label.Text = "该数据为地理坐标,计算结果无效仅供参考!"; } m_SurFace = pTinLayer.Dataset as ISurface; } if (m_SurFace == null) { MessageBox.Show("请选择需要进行分析的DEM数据", "提示!"); return; } DrawGeo.Enabled = true; } } catch { return; } }
public FrmSymboloTin(AxMapControl pmapcontral, AxTOCControl ptoccontral, AxSceneControl scenecontrol, ITinLayer pLayer, DevComponents.DotNetBar.Bar bar) { InitializeComponent(); this.EnableGlass = false; pMapContral = pmapcontral; pTocContral = ptoccontral; pTLayer = pLayer; pSceneControl = scenecontrol; bar3 = bar; }
public void SetTinLayerHeight(ITinLayer pTinLayer, double tinHeight) { I3DProperties p3DProps = get3DProps(pTinLayer); if (p3DProps != null) { p3DProps.BaseOption = esriBaseOption.esriBaseExpression; p3DProps.BaseExpressionString = tinHeight.ToString(); p3DProps.Apply3DProperties(pTinLayer); } }
private void SetTinAsBase(ITinLayer tinLayer) { I3DProperties _3DProps = get3DProps(tinLayer); if (_3DProps != null) { _3DProps.BaseOption = esriBaseOption.esriBaseSurface; _3DProps.BaseSurface = tinLayer as IFunctionalSurface; _3DProps.Apply3DProperties(tinLayer); } }
/// <summary> /// 获取分析图层及Surfer /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void comboBoxOpen_SelectedIndexChanged(object sender, EventArgs e) { if (comboBoxOpen.Items.Count > 0) { string LayerName = comboBoxOpen.SelectedItem.ToString(); m_Layer = GetLayerByName(ref LayerName); if (m_Layer is IRasterLayer)//读取Raster数据的ISurface { IRasterLayer pRasterLayer = m_Layer as IRasterLayer; IRasterSurface pRasterSurface = new RasterSurfaceClass(); pRasterSurface.PutRaster(pRasterLayer.Raster, 0); m_Surface = pRasterSurface as ISurface; } else if (m_Layer is ITinLayer)//读取TIN数据的ISurface { ITinLayer pTinLayer = m_Layer as ITinLayer; m_Surface = pTinLayer.Dataset as ISurface; } if (m_Surface == null) { MessageBox.Show("请选择需要进行分析的DEM数据", "提示!"); return; } pTool3DLineOfSight.m_Layer = m_Layer; //将当前选中的图层传给通视分析工具 pTool3DLineOfSight.m_SurFace = m_Surface; //将当前获取的Surface传给通视分析工具 //下面是根据获取的Surface来自动判断是否应用曲率和折射校正 bool bCurvEnabled; bCurvEnabled = false; ISurface pSurface = m_Surface; IGeoDataset pGeoDataset; if (pSurface is ITin) { pGeoDataset = pSurface as IGeoDataset; } else { IRasterSurface pRasterSurf = pSurface as IRasterSurface; pGeoDataset = pRasterSurf.RasterBand.RasterDataset as IGeoDataset; } ISpatialReference pSpatialReference = pGeoDataset.SpatialReference; ILinearUnit pLinearUnit = pSpatialReference.ZCoordinateUnit; if (pLinearUnit != null) { if (pSpatialReference is IProjectedCoordinateSystem)//当投影ProjectedCoordinateSystem时使用应用曲率和折射校正 { bCurvEnabled = true; } } checkBoxCurv.Checked = bCurvEnabled; } }
private void InsertLayerToTree(IBasicMap pMap, ILayer pLayer, TOCTreeNode pMapNode) { int num; if (pLayer is IGroupLayer) { for (num = 0; num < (pLayer as ICompositeLayer).Count; num++) { this.InsertLayerToTree(pMap, (pLayer as ICompositeLayer).get_Layer(num), pMapNode); } } else { int layerOID = 0; TOCTreeNode node = this.GetParentItem(pLayer, pMapNode, ref layerOID); if (node == null) { node = pMapNode; } TOCTreeNode pNode = new TOCTreeNodeEx(pLayer.Name, true, true); (pNode as TOCTreeNodeEx).OID = layerOID; pNode.Checked = pLayer.Visible; pNode.Tag = pLayer; node.Nodes.Add(pNode); if (pLayer is ITinLayer) { ITinLayer layer = pLayer as ITinLayer; for (num = 0; num < layer.RendererCount; num++) { ITinRenderer renderer = layer.GetRenderer(num); TOCTreeNode node3 = new TOCTreeNodeEx(renderer.Name) { Tag = renderer }; pNode.Nodes.Add(node3); this.InsertLegendInfoToTree((ILegendInfo)renderer, pNode); } } else if (pLayer is IGeoFeatureLayer) { IGeoFeatureLayer layer2 = (IGeoFeatureLayer)pLayer; this.InsertLegendInfoToTree((ILegendInfo)layer2.Renderer, pNode); } else if (pLayer is IRasterLayer) { IRasterLayer layer3 = (IRasterLayer)pLayer; this.InsertLegendInfoToTree((ILegendInfo)layer3.Renderer, pNode); } } }
private I3DProperties get3DProps(ITinLayer tinLayer) { I3DProperties _3DProps = null; ILayerExtensions lyrExt = tinLayer as ILayerExtensions; for (int i = 0; i < lyrExt.ExtensionCount; i++) { if (lyrExt.get_Extension(i) is I3DProperties) { _3DProps = lyrExt.get_Extension(i) as I3DProperties; } } return(_3DProps); }
private void comboBoxOpen_SelectedIndexChanged(object sender, EventArgs e)//选择图层并自动设置默认输出像元大小及图层路径 { if (comboBoxOpen.Items.Count > 0) { txtSave.Text = ""; txtCellSize.Text = "0.02"; fileName = comboBoxOpen.SelectedItem.ToString(); ILayer pLayer = GetLayerByName(ref fileName); //去除不可用的数据 ZQ 20110907 if (pLayer.Valid) { return; } IWorkspace pSourceWorkspace; if (pLayer is IRasterLayer)//读取RasterLayer的路径名和像元大小值 { IRasterLayer pRasterLayer = pLayer as IRasterLayer; IRaster pRaster = pRasterLayer.Raster; IRasterAnalysisProps pRasterAnalysisProps = (IRasterAnalysisProps)pRaster; double pixH = pRasterAnalysisProps.PixelHeight; txtCellSize.Text = Convert.ToString(pixH); IDataset pDataset = pRasterLayer as IDataset; pSourceWorkspace = pDataset.Workspace; filePath = pSourceWorkspace.PathName; filePath = filePath + fileName; } else if (pLayer is ITinLayer)//读取TIN数据的路径信息 { ITinLayer pTinLayer = pLayer as ITinLayer; ITin pTin = pTinLayer.Dataset; IDataset pDataset = pTin as IDataset; pSourceWorkspace = pDataset.Workspace; filePath = pSourceWorkspace.PathName; filePath = filePath + "\\" + fileName; } btnSure.Enabled = true; } else { btnSure.Enabled = false; } }
private void comboBoxOpenraster_SelectedIndexChanged(object sender, EventArgs e) { if (comboBoxOpenraster.Items.Count > 0) { fileName_raster = comboBoxOpenraster.SelectedItem.ToString(); ILayer pLayer = GetLayerByName(ref fileName_raster); IWorkspace pSourceWorkspace; if (pLayer is IRasterLayer)//读取RasterLayer的路径名和像元大小值 { IRasterLayer pRasterLayer = pLayer as IRasterLayer; IRaster pRaster = pRasterLayer.Raster; IRasterAnalysisProps pRasterAnalysisProps = (IRasterAnalysisProps)pRaster; double pixH = pRasterAnalysisProps.PixelHeight; txtCellSize.Text = Convert.ToString(pixH); IDataset pDataset = pRasterLayer as IDataset; pSourceWorkspace = pDataset.Workspace; filePath_raster = pSourceWorkspace.PathName; filePath_raster = filePath_raster + fileName_raster; } else if (pLayer is ITinLayer) { ITinLayer pTinLayer = pLayer as ITinLayer; ITin pTin = pTinLayer.Dataset; IDataset pDataset = pTin as IDataset; pSourceWorkspace = pDataset.Workspace; filePath_raster = pSourceWorkspace.PathName; filePath_raster = filePath_raster + "\\" + fileName_raster; } btnSure.Enabled = true; } else { btnSure.Enabled = false; btnSure.ForeColor = Color.Black; } }
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 btnok_Click(object sender, EventArgs e) { try { ILayer pLayer = null; IRasterLayer pRlayer = null; ITinLayer pTinlayer = null; ISurface pSurface = null; for (int i = 0; i < pMapControl.LayerCount; i++) { if (pMapControl.get_Layer(i).Name == cmblayer.SelectedItem.ToString()) { pLayer = pMapControl.get_Layer(i); } } if (pLayer is IRasterLayer) { pRlayer = pLayer as IRasterLayer; IRasterSurface rasterSurf = new RasterSurfaceClass(); rasterSurf.PutRaster(pRlayer.Raster, 0); pSurface = rasterSurf as ISurface; } else if (pLayer is ITinLayer) { pTinlayer = pLayer as ITinLayer; ITin ptin = pTinlayer.Dataset; pSurface = (ISurface)ptin; } IPolyline pPolyline = pFeature.ShapeCopy as IPolyline; IGeometry pProfLine; IPoint m_StartPoint = pPolyline.FromPoint; IPoint m_EndPoint = pPolyline.ToPoint; object size = new object(); pSurface.GetProfile(pPolyline, out pProfLine, ref size); IPolyline pNewLine = pProfLine as IPolyline; double iii = pPolyline.Length; List <double> ZValue = new List <double>(); List <double> DistanceValue = new List <double>(); DistanceValue.Add(0); ZValue.Add(pNewLine.FromPoint.Z); for (int i = 1; i < (int)pNewLine.Length; i++) { DistanceValue.Add(i); ICurve pCurve; pNewLine.GetSubcurve(0, DistanceValue[i], false, out pCurve); ZValue.Add(pCurve.ToPoint.Z); } DistanceValue.Add(pNewLine.Length); ZValue.Add(pNewLine.ToPoint.Z); double roffset = inoffset.Value / 2; //右轮偏移 double loffset = -inoffset.Value / 2; //左轮偏移 IPolyline pRLine = ConstructOffset(pPolyline, roffset); IPolyline pLLine = ConstructOffset(pPolyline, loffset); IGeometry pLProfLine; IGeometry pRProfLine; pSurface.GetProfile(pRLine, out pRProfLine, ref size); pSurface.GetProfile(pLLine, out pLProfLine, ref size); IPolyline pRNewline = pRProfLine as IPolyline; IPolyline pLNewline = pLProfLine as IPolyline; List <double> ZRValue = new List <double>(); List <double> ZLValue = new List <double>(); List <double> RDistanceValue = new List <double>(); List <double> LDistanceValue = new List <double>(); RDistanceValue.Add(0); LDistanceValue.Add(0); ZRValue.Add(pRNewline.FromPoint.Z); ZLValue.Add(pLNewline.FromPoint.Z); for (int j = 1; j < (int)pRNewline.Length; j++) { RDistanceValue.Add(j); ICurve pCurve; pRNewline.GetSubcurve(0, RDistanceValue[j], false, out pCurve); ZRValue.Add(pCurve.ToPoint.Z); } RDistanceValue.Add(pRNewline.Length); ZRValue.Add(pRNewline.ToPoint.Z); for (int k = 1; k < (int)pLNewline.Length; k++) { LDistanceValue.Add(k); ICurve pCurve; pLNewline.GetSubcurve(0, LDistanceValue[k], false, out pCurve); ZLValue.Add(pCurve.ToPoint.Z); } LDistanceValue.Add(pLNewline.Length); ZLValue.Add(pLNewline.ToPoint.Z); FrmprofileGraph frmgraph = new FrmprofileGraph(ZValue, DistanceValue, pNewLine, ZRValue, RDistanceValue, ZLValue, LDistanceValue); frmgraph.ShowDialog(); frmgraph.ShowInTaskbar = false; frmgraph.StartPosition = FormStartPosition.CenterScreen; #region /// ////用ISurface的 InterpolateShape方法,得到这条直线做剖面后的Geometry,方法说明详见帮助 //IGeometry OutShape; //object size = new object(); //pSurface.InterpolateShape(pPolyline, out OutShape, ref size); ////将结果QI为 PointCollection,QI成功显示结果是直线上单一的几个离散点,InterpolateShape会自动将分析的结果直线上选取六个等分的离散点,以这六个点的值来作曲线图 //IPointCollection pointCollection = OutShape as IPointCollection; //IMAware maware = pointCollection as IMAware; //maware.MAware = true; //IZAware zaware = pointCollection as IZAware; //zaware.ZAware = true; //IMSegmentation mseg = pointCollection as IMSegmentation; ////设置M的值为距离 //mseg.SetMsAsDistance(false); //IPointCollection newPointColl = new PolylineClass(); //int count = pointCollection.PointCount; //for (int i = 0; i < count; i++) //{ // IPoint point = pointCollection.get_Point(i); // IPoint newPoint = new PointClass(); // newPoint.X = point.M; // newPoint.Y = point.Z; // object missing = Type.Missing; // newPointColl.AddPoint(newPoint, ref missing, ref missing); //} //#region ////IWorkspaceFactory wsFactory = new ShapefileWorkspaceFactoryClass(); ////IWorkspaceName workspaceName = wsFactory.Create("F:", "temp", null, 0); //IWorkspaceFactory workspaceFactory = new InMemoryWorkspaceFactoryClass(); //IWorkspaceName workspaceName = workspaceFactory.Create("", "MyWorkspace", null, 0); //IName name = workspaceName as IName; //IWorkspace workspace = name.Open() as IWorkspace; //IFields fields = new FieldsClass(); //IFieldsEdit fieldsEdit = fields as IFieldsEdit; //IField field = new FieldClass(); //IFieldEdit fieldEdit = field as IFieldEdit; //fieldEdit.Name_2 = "OID"; //fieldEdit.Type_2 = esriFieldType.esriFieldTypeOID; //fieldsEdit.AddField(field); //IGeometryDef geometryDef = new GeometryDefClass(); //IGeometryDefEdit geometryDefEdit = geometryDef as IGeometryDefEdit; //geometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline; //ISpatialReference spatialRef = new UnknownCoordinateSystemClass(); //geometryDefEdit.SpatialReference_2 = (pRlayer as IGeoDataset).SpatialReference; //field = new FieldClass(); //fieldEdit = field as IFieldEdit; //fieldEdit.Name_2 = "Shape"; //fieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; //fieldEdit.GeometryDef_2 = geometryDef; //fieldsEdit.AddField(field); //IFieldChecker fieldChecker = new FieldCheckerClass(); //IEnumFieldError enumFieldError = null; //IFields validatedFields = null; //fieldChecker.ValidateWorkspace = workspace; //fieldChecker.Validate(fields, out enumFieldError, out validatedFields); //IFeatureClass featureClass = (workspace as IFeatureWorkspace).CreateFeatureClass("test", // validatedFields, null, null, esriFeatureType.esriFTSimple, "Shape", ""); //IFeatureCursor featureCursor = featureClass.Insert(true); //IFeatureBuffer featureBuffer = featureClass.CreateFeatureBuffer(); //featureBuffer.Shape = pFeature as IGeometry; //featureCursor.InsertFeature(featureBuffer); //featureCursor.Flush(); //#endregion //IFeatureLayer featureLayer = new FeatureLayerClass(); //featureLayer.FeatureClass = featureClass; //featureLayer.Name = featureClass.AliasName; //pMapControl.AddLayer(featureLayer as ILayer); //pMapControl.Refresh(); ////建立featureClass,为后面曲线图提供数据 //IWorkspaceFactory workspaceFactory = new InMemoryWorkspaceFactoryClass(); //IWorkspaceName workspaceName = workspaceFactory.Create("", "MyWorkspace", null, 0); //IName name = (IName)workspaceName; //IWorkspace inmemWor = (IWorkspace)name.Open(); //IFields fields = new FieldsClass(); //IFieldsEdit fieldsEdit = fields as IFieldsEdit; //IField oidField = new FieldClass(); //IFieldEdit oidFieldEdit = oidField as IFieldEdit; //oidFieldEdit.Name_2 = "OID"; //oidFieldEdit.Type_2 = esriFieldType.esriFieldTypeOID; //fieldsEdit.AddField(oidField); //IGeometryDef geometryDef = new GeometryDefClass(); //IGeometryDefEdit geometryDefEdit = geometryDef as IGeometryDefEdit; //geometryDefEdit.GeometryType_2 = ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint; //geometryDefEdit.HasM_2 = true; //geometryDefEdit.HasZ_2 = true; //ISpatialReferenceFactory spatialReferenceFactory = new SpatialReferenceEnvironmentClass(); //ISpatialReference spatialReference = pMapControl.SpatialReference;//spatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984); //ISpatialReferenceResolution spatialReferenceResolution = (ISpatialReferenceResolution)spatialReference; spatialReferenceResolution.ConstructFromHorizon(); //ISpatialReferenceTolerance spatialReferenceTolerance = (ISpatialReferenceTolerance)spatialReference; spatialReferenceTolerance.SetDefaultXYTolerance(); //geometryDefEdit.SpatialReference_2 = spatialReference; //IField geometryField = new FieldClass(); //IFieldEdit geometryFieldEdit = (IFieldEdit)geometryField; //geometryFieldEdit.Name_2 = "Shape"; //geometryFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; //geometryFieldEdit.GeometryDef_2 = geometryDef; //fieldsEdit.AddField(geometryField); //IField mField = new FieldClass(); //IFieldEdit mFieldEdit = (IFieldEdit)mField; //mFieldEdit.Name_2 = "M"; //mFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; //mFieldEdit.Length_2 = 8; //fieldsEdit.AddField(mField); //IField zField = new FieldClass(); //IFieldEdit zFieldEdit = (IFieldEdit)zField; //zFieldEdit.Name_2 = "Z"; //zFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; //zFieldEdit.Length_2 = 8; //fieldsEdit.AddField(zField); //IFieldChecker fieldChecker = new FieldCheckerClass(); //IEnumFieldError enumFieldError = null; //IFields validatedFields = null; //fieldChecker.ValidateWorkspace = inmemWor; //fieldChecker.Validate(fields, out enumFieldError, out validatedFields); //IFeatureClass featureClass = (inmemWor as IFeatureWorkspace).CreateFeatureClass("test", validatedFields, null, null, esriFeatureType.esriFTSimple, "Shape", ""); //IFeatureCursor cursor = featureClass.Insert(true); //IFeatureBuffer buffer = featureClass.CreateFeatureBuffer(); //int count = pointCollection.PointCount; //for (int i = 0; i < count; ++i) //{ // IPoint p = pointCollection.get_Point(i); // buffer.Shape = p as IGeometry; // buffer.set_Value(buffer.Fields.FindField("M"), p.M); // buffer.set_Value(buffer.Fields.FindField("Z"), p.Z); // cursor.InsertFeature(buffer); //} //cursor.Flush(); ////开始做曲线图 #endregion } catch (System.Exception ex) { MessageBox.Show("该图像不能做剖面分析", "提示", MessageBoxButtons.OK); } }
private I3DProperties get3DProps(ITinLayer tinLayer) { I3DProperties _3DProps = null; ILayerExtensions lyrExt = tinLayer as ILayerExtensions; for (int i = 0; i < lyrExt.ExtensionCount; i++) { if (lyrExt.get_Extension(i) is I3DProperties) { _3DProps = lyrExt.get_Extension(i) as I3DProperties; } } return _3DProps; }
private void btnSure_Click(object sender, EventArgs e) { SysCommon.CProgress vProgress = new SysCommon.CProgress("进度条"); try { if (comboBoxOpen.Text == "") { MessageBox.Show("请选择数据!", "提示!"); return; } if (txtZFactor.Text == "") { MessageBox.Show("请设置Z值参数!", "提示!"); return; } if (txtCellSize.Text == "") { MessageBox.Show("请设置输出精度参数!", "提示!"); return; } if (txtSave.Text == "") { MessageBox.Show("请输入保存文件名!", "提示!"); return; } string Unit; if (radioBtnDegree.Checked) { Unit = "DEGREE"; } else { Unit = "PERCENT"; } //this.Hide(); //Progress.FormProgress vProgress.EnableCancel = false;//设置进度条 vProgress.ShowDescription = true; vProgress.FakeProgress = true; vProgress.TopMost = true; vProgress.ShowProgress(); vProgress.SetProgress("正在进行坡度分析"); ILayer pLayer = GetLayerByName(ref fileName);//根据图层名获取图层 IGeoDataset pGeoDataset = pLayer as IGeoDataset; ISurfaceOp pSurfaceOp; IRasterAnalysisEnvironment pRasterAnalysisEnvironment = new RasterSurfaceOp(); pSurfaceOp = pRasterAnalysisEnvironment as ISurfaceOp; object pObject = Convert.ToDouble(txtCellSize.Text); object pZFactor = Convert.ToDouble(txtZFactor.Text); pRasterAnalysisEnvironment.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref pObject); //设置输出数据的像元值大小 IWorkspaceFactory pWorkspaceFactory = new RasterWorkspaceFactoryClass(); string OutPath = System.IO.Path.GetDirectoryName(txtSave.Text); //输出文件存储的目录信息 string TempPath = string.Concat(System.IO.Path.GetDirectoryName(Application.ExecutablePath), "\\Temp\\"); //临时文件存储位置 if (!Directory.Exists(TempPath)) { Directory.CreateDirectory(TempPath);// 当路径不存在时创建临时文件存储路径 } IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(TempPath, 0); pRasterAnalysisEnvironment.OutWorkspace = pWorkspace; IRasterBandCollection pRasterBandCollection; string Newfile = System.IO.Path.GetFileName(txtSave.Text); if (pGeoDataset is IRasterLayer) { IRasterLayer pRasterLayer = pLayer as IRasterLayer; pGeoDataset = (IGeoDataset)pRasterLayer.Raster; if (Unit == "DEGREE")//选择不同单位进行坡度分析 { pRasterBandCollection = pSurfaceOp.Slope(pGeoDataset, esriGeoAnalysisSlopeEnum.esriGeoAnalysisSlopeDegrees, ref pZFactor) as IRasterBandCollection; } else { pRasterBandCollection = pSurfaceOp.Slope(pGeoDataset, esriGeoAnalysisSlopeEnum.esriGeoAnalysisSlopePercentrise, ref pZFactor) as IRasterBandCollection; } pWorkspace = pWorkspaceFactory.OpenFromFile(OutPath, 0); pRasterBandCollection.SaveAs(Newfile, pWorkspace, RasterType); //保存分析结果到固定路径下 vProgress.Close(); if (MessageBox.Show("坡度分析成功,是否加载分析结果", "提示!", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { vProgress.ShowProgress(); vProgress.SetProgress("正在进行加载结果数据"); IRasterWorkspace pRasterWorkspace = pWorkspaceFactory.OpenFromFile(OutPath, 0) as IRasterWorkspace; // 张琪 20110613 IRasterDataset pRasterDataset = pRasterWorkspace.OpenRasterDataset(System.IO.Path.GetFileName(txtSave.Text)); //包含扩展名的表面数据集 IRasterLayer pOutRasterLayer = new RasterLayerClass(); pOutRasterLayer.CreateFromDataset(pRasterDataset); m_pCurrentSceneControl.Scene.AddLayer(pOutRasterLayer as ILayer, true); vProgress.Close(); } System.Runtime.InteropServices.Marshal.ReleaseComObject(pRasterBandCollection); } else if (pGeoDataset is ITinLayer) { ITinLayer pTinLayer = pGeoDataset as ITinLayer; ITinAdvanced pTinAdvanced = pTinLayer.Dataset as ITinAdvanced; Cls3DModulsefun pCls3DModulsefun = new Cls3DModulsefun(); IRasterDataset pRasterDataset; esriRasterizationType pesriRasterizationType; if (Unit == "DEGREE") { pesriRasterizationType = esriRasterizationType.esriDegreeSlopeAsRaster; } else { pesriRasterizationType = esriRasterizationType.esriPercentageSlopeAsRaster; } rstPixelType prstPixelType = rstPixelType.PT_LONG; //TIN数据转换成Raster数据并进行坡度分析(暂时未成功) vProgress.Close(); pRasterDataset = pCls3DModulsefun.TinToRaster2(pTinAdvanced, pesriRasterizationType, OutPath, Newfile, prstPixelType, Convert.ToDouble(txtCellSize.Text), pTinAdvanced.Extent, true, RasterType); if (MessageBox.Show("坡度分析成功,是否加载分析结果", "提示!", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { IRasterLayer pOutRasterLayer = new RasterLayerClass(); pOutRasterLayer.CreateFromDataset(pRasterDataset); m_pCurrentSceneControl.Scene.AddLayer(pOutRasterLayer as ILayer, true); if (this.WriteLog) { Plugin.LogTable.Writelog("坡度分析,表面集为:" + comboBoxOpen.Text); Plugin.LogTable.Writelog("输出栅格路径为:" + txtSave.Text); } } } else { MessageBox.Show("目前不支持对当前选择图层的坡度分析功能", "提示!"); } m_pCurrentSceneControl.SceneGraph.RefreshViewers(); this.Close(); DeleteFolder(TempPath);//清楚临时文件 } catch { vProgress.Close(); this.Close(); MessageBox.Show("很抱歉,操作失败!", "提示!"); return; } }
/// <summary> /// 获取分析图层及Surfer /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void comboBoxOpen_SelectedIndexChanged(object sender, EventArgs e) { try { if (comboBoxOpen.Items.Count > 0) { label.Text = ""; Cls3DMarkDraw.DeleteAllElementsWithName(m_pCurrentSceneControl.Scene, sRefPlaneName); Cls3DMarkDraw.DeleteAllElementsWithName(m_pCurrentSceneControl.Scene, ContourName); m_pCurrentSceneControl.SceneGraph.RefreshViewers(); m_ScenePoly = null; m_StaPolygon = null; m_SurFace = null; txtArea2DSel.Text = ""; txtAreaAbove.Text = ""; txtAreaBelow.Text = ""; txtPara.Text = ""; txtPlaneHeight.Text = ""; txtVolumeAbove.Text = ""; txtVolumeBelow.Text = ""; DrawGeo.Enabled = false; sldPlaneHeight.Enabled = false; btncount.Enabled = false; string LayerName = comboBoxOpen.SelectedItem.ToString(); ILayer pLayer = GetLayerByName(ref LayerName); if (pLayer is IRasterLayer)//读取Raster数据的ISurface { IRasterLayer pRasterLayer = pLayer as IRasterLayer; IGeoDataset pDataset = pRasterLayer as IGeoDataset; ISpatialReference psr = pDataset.SpatialReference; if (!(psr is IProjectedCoordinateSystem)) { label.Text = "该数据为地理坐标,计算结果无效仅供参考!"; } IRasterSurface pRasterSurface = new RasterSurfaceClass(); pRasterSurface.PutRaster(pRasterLayer.Raster, 0); m_SurFace = pRasterSurface as ISurface; DrawGeo.Enabled = false; m_IsTin = false; } else if (pLayer is ITinLayer)//读取TIN数据的ISurface { ITinLayer pTinLayer = pLayer as ITinLayer; IGeoDataset pDataset = pTinLayer as IGeoDataset; ISpatialReference psr = pDataset.SpatialReference; if (!(psr is IProjectedCoordinateSystem)) { label.Text = "该数据为地理坐标,计算结果无效仅供参考!"; } m_SurFace = pTinLayer.Dataset as ISurface; m_IsTin = true; DrawGeo.Enabled = true; } if (m_SurFace == null) { MessageBox.Show("请选择需要进行分析的DEM数据", "提示!"); return; } if (m_StaPolygon == null) { if (m_SurFace is ITin) { ITin pTin = m_SurFace as ITin; sldPlaneHeight.Maximum = Convert.ToInt32(pTin.Extent.ZMax); sldPlaneHeight.Minimum = Convert.ToInt32(pTin.Extent.ZMin); } else { IRasterSurface pRasterSurface = m_SurFace as IRasterSurface; IRasterStatistics pRasterStatistic = pRasterSurface.RasterBand.Statistics; sldPlaneHeight.Maximum = Convert.ToInt32(pRasterStatistic.Maximum); sldPlaneHeight.Minimum = Convert.ToInt32(pRasterStatistic.Minimum); } double Vale = sldPlaneHeight.Maximum + sldPlaneHeight.Minimum; Vale = Vale / 2; txtPlaneHeight.Text = Vale.ToString(); Vale = Convert.ToDouble(txtPlaneHeight.Text); sldPlaneHeight.Value = Convert.ToInt32(Vale); } else { double zrange; zrange = m_StaPolygon.Envelope.ZMax - m_StaPolygon.Envelope.ZMin; sldPlaneHeight.Maximum = Convert.ToInt32(m_StaPolygon.Envelope.ZMax + zrange); sldPlaneHeight.Minimum = Convert.ToInt32(m_StaPolygon.Envelope.ZMin); sldPlaneHeight.Value = Convert.ToInt32(Math.Round(m_StaPolygon.Envelope.ZMin + (zrange * 0.5))); txtPlaneHeight.Text = sldPlaneHeight.Value.ToString(); } sldPlaneHeight.Enabled = true; btncount.Enabled = true; } } catch { return; } }
public static bool AddDataset(ref IBasicMap pBasicMap, IDatasetName pDatasetName, List <IDataset> m_DatasetCol, bool blnAddData) { bool functionReturnValue = false; functionReturnValue = false; ////如果是特征数据集,则添加里边的所有要素类 IFeatureDataset pFeatDS = default(IFeatureDataset); IEnumDataset pEnumDataSet = default(IEnumDataset); IDataset pDataset = default(IDataset); IFeatureClass pFeatCls = default(IFeatureClass); IFeatureLayer pFeatLayer = default(IFeatureLayer); IName pName = default(IName); ILayer pLayer = default(ILayer); ITopologyLayer pTopoLayer = default(ITopologyLayer); //Dim pEnumLyr As IEnumLayer ITinWorkspace pTinWS = default(ITinWorkspace); IEnumFeatureClass pEnumFeatCls = null; IRasterCatalogDisplayProps pRasterCatalogPro = default(IRasterCatalogDisplayProps); //WHFErrorHandle.clsErrorHandle pfrmError = new WHFErrorHandle.clsErrorHandle(); if (pDatasetName is IFeatureDatasetName) { pName = (IName)pDatasetName; pFeatDS = (IFeatureDataset)pName.Open(); pEnumDataSet = pFeatDS.Subsets; pDataset = pEnumDataSet.Next(); m_DatasetCol.Add(pDataset); if (pDataset == null) { return(functionReturnValue); } ////根据数据集的类型,添加特征数据集中的所有要素类(拓扑,一般的,栅格目录,网络) while ((pDataset != null)) { if (pDataset.Type == esriDatasetType.esriDTFeatureClass) { pFeatLayer = null; if (pFeatLayer == null) { pFeatLayer = new FeatureLayer(); pFeatCls = (IFeatureClass)pDataset; pFeatLayer.Name = pFeatCls.AliasName; pFeatLayer.FeatureClass = pFeatCls; } if (pDataset.Type == esriDatasetType.esriDTRasterCatalog) { // Dim pRaster } // pSelectedCln.Add(pFeatLayer) } else if (pDataset.Type == esriDatasetType.esriDTTopology) { pTopoLayer = new TopologyLayerClass(); pTopoLayer.Topology = (ITopology)pDataset; pLayer = (ILayer)pTopoLayer; pLayer.Name = pDataset.Name; //pSelectedCln.Add(pFeatLayer) } pDataset = pEnumDataSet.Next(); } functionReturnValue = true; ////添加拓扑图层 } else if (pDatasetName is ITopologyName) { ITopology pTopo = null; pName = (IName)pDatasetName; pDataset = (IDataset)pName.Open(); pTopoLayer = new TopologyLayerClass(); pTopoLayer.Topology = (ITopology)pDataset; pLayer = (ILayer)pTopoLayer; pLayer.Name = pDataset.Name; m_DatasetCol.Add(pDataset); if (blnAddData == true) { //pMap.AddLayer pLayer AddLyrToBasicMap(ref pBasicMap, pLayer); //SortLayer(pBasicMap, pLayer) } //pSelectedCln.Add(pLayer) //if (pfrmError.DisplayInformation("要把拓扑里边的所有要素类也添加到当前地图中吗?") == true) if (MessageBoxEx.Show("要把拓扑里边的所有要素类也添加到当前地图中吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) == DialogResult.OK) { IFeatureClassContainer pFeatClsContainer = default(IFeatureClassContainer); pFeatClsContainer = (IFeatureClassContainer)pTopo; pEnumFeatCls = pFeatClsContainer.Classes; pFeatCls = pEnumFeatCls.Next(); pFeatLayer = new FeatureLayer(); ////循环拓扑中的每个要素类,并添加到当前地图中 while ((pFeatCls != null)) { pFeatLayer.FeatureClass = pFeatCls; pFeatLayer.Name = pFeatCls.AliasName; if (blnAddData == true) { //pMap.AddLayer pFeatLayer AddLyrToBasicMap(ref pBasicMap, pFeatLayer); //SortLayer(pBasicMap, pFeatLayer) } //pSelectedCln.Add(pFeatLayer) pFeatCls = pEnumFeatCls.Next(); } } functionReturnValue = true; ////添加网络数据 } else if (pDatasetName is IGeometricNetworkName) { INetworkCollection pNetworkCollection = default(INetworkCollection); IGeometricNetwork pGeometricNetwork = default(IGeometricNetwork); int i = 0; int j = 0; IDataset pGeoDataset = default(IDataset); pName = (IName)pDatasetName; pGeoDataset = (IDataset)pName.Open(); m_DatasetCol.Add(pGeoDataset); if (pGeoDataset.Type == esriDatasetType.esriDTGeometricNetwork) { ////这里对网络数据进行处理 IFeatureClassContainer pFeatureClassContainer = default(IFeatureClassContainer); pGeometricNetwork = (IGeometricNetwork)pGeoDataset; pFeatureClassContainer = (IFeatureClassContainer)pGeometricNetwork; for (i = 0; i <= pFeatureClassContainer.ClassCount - 1; i++) { pFeatCls = pFeatureClassContainer.get_Class(i); pFeatLayer = new FeatureLayer(); pFeatLayer.Name = pFeatCls.AliasName; pFeatLayer.FeatureClass = pFeatCls; if (blnAddData == true) { // pMap.AddLayer pFeatLayer AddLyrToBasicMap(ref pBasicMap, pFeatLayer); //SortLayer(pBasicMap, pFeatLayer) } //pSelectedCln.Add(pFeatLayer) } } else { pFeatDS = (IFeatureDataset)pGeoDataset; pNetworkCollection = (INetworkCollection)pFeatDS; ////如果是用户选择一个网络技术打开的话,肯定只有一个网络在里边,其实 ////可以不需要循环,而用GeometricNetwork(0)代替循环 for (j = 0; j <= pNetworkCollection.GeometricNetworkCount - 1; j++) { pGeometricNetwork = pNetworkCollection.get_GeometricNetwork(j); for (i = 0; i <= 3; i++) { switch (i) { case 0: pEnumFeatCls = pGeometricNetwork.get_ClassesByType(esriFeatureType.esriFTSimpleJunction); break; case 1: pEnumFeatCls = pGeometricNetwork.get_ClassesByType(esriFeatureType.esriFTSimpleEdge); break; case 2: pEnumFeatCls = pGeometricNetwork.get_ClassesByType(esriFeatureType.esriFTComplexJunction); break; case 3: pEnumFeatCls = pGeometricNetwork.get_ClassesByType(esriFeatureType.esriFTComplexEdge); break; } pFeatCls = pEnumFeatCls.Next(); while ((pFeatCls != null)) { pFeatLayer = new FeatureLayer(); pFeatLayer.Name = pFeatCls.AliasName; pFeatLayer.FeatureClass = pFeatCls; pFeatCls = pEnumFeatCls.Next(); if (blnAddData == true) { //pMap.AddLayer pFeatLayer AddLyrToBasicMap(ref pBasicMap, pFeatLayer); //SortLayer(pBasicMap, pFeatLayer) } // pSelectedCln.Add(pFeatLayer) functionReturnValue = true; } } } } ////添加栅格目录,并设置为显示最新时相 } else if (pDatasetName is IRasterCatalogName) { pName = (IName)pDatasetName; pDataset = (IDataset)pName.Open(); m_DatasetCol.Add(pDataset); pFeatLayer = new GdbRasterCatalogLayerClass(); pFeatLayer.FeatureClass = (IFeatureClass)pDataset; pFeatLayer.Name = pDataset.Name; //'//如果是SDE的栅格目录 //If pFeatLayer.DataSourceType = "SDE Raster Catalog" Then // Dim pFeatLayerDef As IFeatureLayerDefinition // pFeatLayerDef = pFeatLayer // '//设置最初显示地图范围内最近时相的数据 // pFeatLayerDef.DefinitionExpression = "objectid in (select objectid from" & vbNewLine & _ // "(select a.objectid, b.receive_date,rank()" & vbNewLine & _ // "over(partition by a.name,a.resolution order by b.receive_date desc) as cid" & vbNewLine & _ // "from " & pFeatLayer.Name & " a, sj_t_tense b" & vbNewLine & _ // "where a.tense = b.tense" & vbNewLine & "and b.online_state = 1) t2" & vbNewLine & _ // "where " & pFeatLayer.Name & ".objectid=t2.objectid and t2.cid = 1)" //End If ////设置当栅格目录中的图幅在地图上超过16个的时候,以格网来显示,而不显示栅格本身 pRasterCatalogPro = (IRasterCatalogDisplayProps)pFeatLayer; ////不用数量来控制了,而以比例尺来控制 pRasterCatalogPro.DisplayRasters = 16; pRasterCatalogPro.UseScale = true; ////设置一个比例,在此临界栅格数据将会在框架显示与实际栅格显示之间转换 pRasterCatalogPro.TransitionScale = 50000; if (blnAddData == true) { //pMap.AddLayer pFeatLayer AddLyrToBasicMap(ref pBasicMap, pFeatLayer); //'SortLayer(pBasicMap, pFeatLayer) } //pSelectedCln.Add(pFeatLayer) functionReturnValue = true; // 陈昉 2009-3-22 添加单一的RasterDataset } else if (pDatasetName is IRasterDatasetName) { IRasterLayer pRasterLayer = default(IRasterLayer); pName = (IName)pDatasetName; pDataset = (IDataset)pName.Open(); m_DatasetCol.Add(pDataset); pRasterLayer = new RasterLayerClass(); pRasterLayer.CreateFromDataset(pDataset as IRasterDataset); pRasterLayer.Name = pDataset.Name; AddLyrToBasicMap(ref pBasicMap, pRasterLayer); functionReturnValue = true; ////添加TIN图层 } else if (pDatasetName is ITinWorkspace) { pTinWS = (ITinWorkspace)pDatasetName; ITinLayer pTinLyr = default(ITinLayer); pTinLyr = new TinLayer(); pTinLyr.Dataset = pTinWS.OpenTin(pDatasetName.Name); pTinLyr.Name = pDatasetName.Name; if (blnAddData == true) { //pMap.AddLayer pTinLyr AddLyrToBasicMap(ref pBasicMap, pTinLyr); //SortLayer(pBasicMap, pTinLyr) } //pSelectedCln.Add(pTinLyr) functionReturnValue = true; ////添加一般的要素类,未写完。。。。。。 } else { pName = (IName)pDatasetName; pDataset = (IDataset)pName.Open(); pFeatCls = (IFeatureClass)pDataset; m_DatasetCol.Add(pDataset); if (pFeatCls.FeatureType == esriFeatureType.esriFTAnnotation) { pFeatLayer = new FDOGraphicsLayerClass(); } else if (pFeatCls.FeatureType == esriFeatureType.esriFTDimension) { pFeatLayer = new DimensionLayerClass(); } else { pFeatLayer = new FeatureLayer(); } //印骅 20081205 添加"Not" if ((pFeatLayer != null)) { //pFeatLayer.Name = pDataset.Name pFeatLayer.Name = pFeatCls.AliasName; pFeatLayer.FeatureClass = (IFeatureClass)pDataset; } if (blnAddData == true) { //pMap.AddLayer pFeatLayer AddLyrToBasicMap(ref pBasicMap, pFeatLayer); //SortLayer(pBasicMap, pFeatLayer) } //pSelectedCln.Add(pFeatLayer) functionReturnValue = true; } return(functionReturnValue); //'//添加Coverage图层 //ElseIf vItem.SmallIcon = "Coverage" Then //AddSelectedLayer = ADDCoverageLayer(pMap, pCurrentFilePath.Path, _ //vItem.Text, pSelectedCln, blnAddData) }
private void MapUserIdentify(double mapX, double mapY) { try { //axMapControl1.Map.ClearSelection(); ESRI.ArcGIS.Controls.IMapControl3 m_mapControl = (IMapControl3)axMapControl1.Object; IMap pMap = axMapControl1.Map; IGroupLayer pGroupLayer = new GroupLayer(); if (pMap.LayerCount == 0) { return; } IEnumLayer pEnumLayer; ILayer pLayer; pEnumLayer = pMap.get_Layers(null, true); if (pEnumLayer == null) { return; } pEnumLayer.Reset(); double dCurrScale = m_mapControl.MapScale; for (pLayer = pEnumLayer.Next(); pLayer != null; pLayer = pEnumLayer.Next()) { if (pLayer.Visible) { if (pLayer is IGroupLayer) { continue; } if (pLayer.MinimumScale != 0 && dCurrScale > pLayer.MinimumScale) { continue; } if (pLayer.MaximumScale != 0 && dCurrScale < pLayer.MaximumScale) { continue; } pGroupLayer.Add(pLayer); } } IPoint pPoint = new ESRI.ArcGIS.Geometry.Point(); pPoint.X = mapX; pPoint.Y = mapY; IIdentifyObj pIdObj; IIdentify pIdentify = pGroupLayer as IIdentify; IArray pIDArray; IFeatureIdentifyObj pFeatIdObj; IEnvelope pEnv = pPoint.Envelope; IDisplayTransformation pDT = m_mapControl.ActiveView.ScreenDisplay.DisplayTransformation; pEnv.Expand(pDT.VisibleBounds.Width / 200, pDT.VisibleBounds.Height / 200, false); pIDArray = pIdentify.Identify(pEnv); if (pIDArray == null || pIDArray.Count == 0) { return; } pFeatIdObj = pIDArray.get_Element(0) as IFeatureIdentifyObj; pIdObj = pFeatIdObj as IIdentifyObj; IRowIdentifyObject pRowIdentifyObj = pFeatIdObj as IRowIdentifyObject; IFeature pFeature = pRowIdentifyObj.Row as IFeature; if (pFeature != null && pFeature.Shape != null && !pFeature.Shape.IsEmpty) { //axMapControl1.FlashShape(pFeature.Shape); axMapControl1.Map.SelectFeature(pIdObj.Layer, pFeature); FlashFeature(axMapControl1, pFeature.Shape); } // pIdObj.Flash(m_mapControl.ActiveView.ScreenDisplay);//The Flash method is not supported with ArcGIS Engine, use the IHookActions.DoActions() method with the esriHookActionsFlash for this functionality. ILayer pIdentiyLayer = pIdObj.Layer; DataTable pTable = new DataTable(); DataColumn pDataColumn = pTable.Columns.Add(); pDataColumn.ColumnName = "列名"; pDataColumn = pTable.Columns.Add(); pDataColumn.ColumnName = "值"; DataRow pFirestDataRow = pTable.Rows.Add(); pFirestDataRow[0] = "所在层"; pFirestDataRow[1] = pIdentiyLayer.Name; if (pIdentiyLayer is IFeatureLayer) { IRowIdentifyObject pRowObj = pIdObj as IRowIdentifyObject; // IRow pRow = pRowObj.Row; IFeature pRow = pRowObj.Row as IFeature; IFields pFields = pRow.Fields; for (int i = 0; i < pFields.FieldCount; i++) { IField pField = pFields.get_Field(i); DataRow pDataRow = null; /* * switch (pField.Type) * { * case esriFieldType.esriFieldTypeOID: * pDataRow = pTable.Rows.Add(); * pDataRow[0] = pField.Name; * pDataRow[1] = pRow.OID.ToString(); * break; * case esriFieldType.esriFieldTypeGeometry: * //pDataRow[0] = "Geometry"; * //pDataRow[1] = QueryShapeType(pField.GeometryDef.GeometryType);; * break; * default: * pDataRow = pTable.Rows.Add(); * pDataRow[0] = pField.Name; * pDataRow[1] = pRow.get_Value(i).ToString(); * break; * } * * */ ////////////////////////////////////////////////// string sValue = pRow.get_Value(i).ToString(); string strFName = pField.AliasName.ToUpper(); string strUName = strFName.ToUpper(); if (strUName == "SHAPE" || strUName == "LENGTH" || strUName == "OBJECTID" || strUName == "ID" || strUName == "FNODE_" || strUName == "TNODE_" || strUName == "LPOLY_" || strUName == "RPOLY_" || strUName == "SDXL_" || strUName == "SDXL_ID" || strUName == "OBJECTID_1" || strUName == "FID") { continue; } else if (strUName == "SHAPE.LEN" || strUName == "SHAPE_LENG") { strFName = "几何长度"; } else if (strUName == "SHAPE_AREA" || strUName == "SHAPE.AREA") { strFName = "多边形面积"; } else if (strUName == "HEIGHT") { strFName = "高程"; } else if (strUName == "NAME") { strFName = "名称"; } else if (strUName == "TYPE") { strFName = "类型"; } else if (strUName == "SUBTYPE") { strFName = "子类型"; } if (strUName == "LENGTH" || strUName == "SHAPE.LEN") { IUnitConverter myUnit = new UnitConverterClass(); sValue = Math.Round(myUnit.ConvertUnits((double)pRow.get_Value(i), esriUnits.esriMeters, esriUnits.esriKilometers), 2).ToString(); sValue = sValue.ToString() + "千米"; } if (strUName == "SHAPE_AREA" || strUName == "SHAPE.AREA") { IGeometry pGeo = pRow.ShapeCopy; pGeo.Project(axMapControl1.Map.SpatialReference); IPolygon pPolygon = (IPolygon)pGeo; IArea pArea = (IArea)pPolygon; double strValue = pArea.Area * 0.000001; //// double strValue = Math.Abs((double)pFeature.get_Value(j)) * 10585; strValue = Math.Round(strValue, 2); sValue = strValue.ToString() + "平方千米"; } esriFieldType tFieldTypy = pField.Type; if (tFieldTypy == esriFieldType.esriFieldTypeGeometry) { sValue = pField.GeometryDef.GeometryType.ToString(); sValue = sValue.Substring(12, sValue.Length - 12); } pDataRow = pTable.Rows.Add(); pDataRow[0] = strFName; pDataRow[1] = sValue; ////////////////////////////////////////////////// } } else if (pIdentiyLayer is ITinLayer) { ITinLayer pTinLayer = (ITinLayer)pIdentiyLayer; ITinSurface pTinSurface = (ITinSurface)pTinLayer.Dataset; if (pTinSurface == null) { return; } ITinSurfaceElement pTinSurfaceElement = pTinSurface.GetSurfaceElement(pPoint); if (pTinSurfaceElement == null) { return; } IFields pFields = pTinLayer.Dataset.Fields; DataRow pDataRow = null; pDataRow = pTable.Rows.Add(); pDataRow[0] = "高度"; pDataRow[1] = pTinSurfaceElement.Elevation.ToString(); pDataRow = pTable.Rows.Add(); pDataRow[0] = "坡度"; pDataRow[1] = pTinSurfaceElement.SlopeDegrees.ToString(); pDataRow = pTable.Rows.Add(); pDataRow[0] = "方向"; pDataRow[1] = pTinSurfaceElement.AspectDegrees.ToString(); } if (pIdentiyLayer is IRasterLayer) { MessageBox.Show("aa"); } //ShowIndetify(pTable); //m_pMainform.ShowIndetify(pTable); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop); return; } }