//计算栅格数据块的高程值 public void CalPixelArray(ITinSurface pTinSurf, double UpLeftX, double UpLeftY, double XCellsize, double YCellsize, ref IPixelBlock3 pixelblock) { System.Array pArray = pixelblock.get_PixelData(0) as System.Array; for (int i = 0; i < pixelblock.Width; i++) { for (int j = 0; j < pixelblock.Height; j++) { double dheight = (double)pTinSurf.get_Z(UpLeftX + i * XCellsize, UpLeftY - j * YCellsize); pArray.SetValue(dheight, i, j); } } pixelblock.set_PixelData(0, pArray); }
private IFeatureClass Create_ContourLine(ITin pTin, string WorkSpaceName, string FileName) { int pInterval = 1; IWorkspaceFactory contourWSF = new ShapefileWorkspaceFactoryClass(); IFeatureWorkspace contourFWS = (IFeatureWorkspace)contourWSF.OpenFromFile(WorkSpaceName, 0); IFields pFields = CreateShapeFields(esriGeometryType.esriGeometryPolyline); contourFWS.CreateFeatureClass(FileName, pFields, null, null, esriFeatureType.esriFTSimple, "Shape", null); IFeatureClass pContourFeatureClass = contourFWS.OpenFeatureClass(FileName); //生成等高线 ITinSurface pTinSurface = pTin as ITinSurface; pTinSurface.Contour(0, pInterval, pContourFeatureClass, "Contour", 0); return(pContourFeatureClass); }
/// <summary> /// 通过TIN文件,建立*.shp文件 /// </summary> /// <param name="TINDir">TIN文件的文件夹路径</param> private void CreateContourData(string TINDir) { try { IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory(); CopyFolder(Application.StartupPath + "\\Convert\\TemContour", Application.StartupPath + "\\Convert\\ContourResult\\" + this.Random); IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(Application.StartupPath + "\\Convert\\ContourResult\\" + this.Random, 0); IWorkspaceEdit w = pWorkspace as IWorkspaceEdit; IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace; IFeatureClass tFeatureClass = pFeatureWorkspace.OpenFeatureClass("Contour.shp"); ITinWorkspace pTinWorkspace; IWorkspace pWS; IWorkspaceFactory pWSFact = new TinWorkspaceFactoryClass(); pWS = pWSFact.OpenFromFile(TINDir, 0); ITin pTin; pTinWorkspace = pWS as ITinWorkspace; w.StartEditing(true); w.StartEditOperation(); if (pTinWorkspace.get_IsTin(this.Random)) { pTin = pTinWorkspace.OpenTin(this.Random); ITinSurface pTinSurface = pTin as ITinSurface; pTinSurface.Contour(0, this.Interval, tFeatureClass, "Z", 0); w.StopEditOperation(); w.StopEditing(true); } } catch (Exception) { } }
/// <summary> /// TIN数据转栅格数据并进行坡度分析 张琪 20110614 /// </summary> /// <param name="pTinAdvanced"></param> /// <param name="pRastConvType"></param> /// <param name="sDir"></param> /// <param name="sName"></param> /// <param name="ePixelType"></param> /// <param name="cellsize"></param> /// <param name="pExtent"></param> /// <param name="bPerm"></param> /// <param name="strType"></param> /// <returns></returns> public IRasterDataset TinToRaster(ITinAdvanced pTinAdvanced, esriRasterizationType pRastConvType, String sDir, String sName, rstPixelType ePixelType, Double cellsize, IEnvelope pExtent, bool bPerm, String strType) { try { ESRI.ArcGIS.Geometry.IPoint pOrigin = pExtent.LowerLeft; pOrigin.X = pOrigin.X - (cellsize * 0.5); pOrigin.Y = pOrigin.Y - (cellsize * 0.5); int nCol, nRow; nCol = Convert.ToInt32(Math.Round(pExtent.Width / cellsize)) + 1; nRow = Convert.ToInt32(Math.Round(pExtent.Height / cellsize)) + 1; IGeoDataset pGeoDataset = pTinAdvanced as IGeoDataset; ISpatialReference2 pSpatialReference2 = pGeoDataset.SpatialReference as ISpatialReference2; IRasterDataset pRasterDataset = CreateRasterSurf(sDir, sName, strType, pOrigin, nCol, nRow, cellsize, cellsize, ePixelType, pSpatialReference2, bPerm); IRawPixels pRawPixels = GetRawPixels(pRasterDataset, 0); object pCache = pRawPixels.AcquireCache(); ITinSurface pTinSurface = pTinAdvanced as ITinSurface; IGeoDatabaseBridge2 pbridge2 = (IGeoDatabaseBridge2) new GeoDatabaseHelperClass(); IRasterProps pRasterProps = pRawPixels as IRasterProps; //float nodataFloat; //int nodataInt; double dZMin = pTinAdvanced.Extent.ZMin; object vNoData; if (ePixelType.ToString() == "PT_FLOAT") { vNoData = (dZMin - 1).ToString(); } else { vNoData = Convert.ToInt32((dZMin - 1)); } pRasterProps.NoDataValue = vNoData; IPnt pOffset = new DblPntClass(); int lMaxBlockX = 2048; if (nCol < lMaxBlockX) { lMaxBlockX = nCol; } int lMaxBlockY = 2048; if (nRow < lMaxBlockY) { lMaxBlockY = nRow; } IPnt pBlockSize = new DblPntClass(); pBlockSize.X = lMaxBlockX; pBlockSize.Y = lMaxBlockY; IPixelBlock3 pPixelBlock = pRawPixels.CreatePixelBlock(pBlockSize) as IPixelBlock3; object blockArray = pPixelBlock.get_PixelDataByRef(0); ITrackCancel pCancel = new CancelTrackerClass(); pCancel.CancelOnClick = false; pCancel.CancelOnKeyPress = true; int lBlockCount = Convert.ToInt32(Math.Round((nCol / lMaxBlockX) + 0.49) * Math.Round((nRow / lMaxBlockY) + 0.49)); ESRI.ArcGIS.Geometry.IPoint pBlockOrigin = new ESRI.ArcGIS.Geometry.PointClass(); int lColOffset, lRowOffset; for (lRowOffset = 0; lRowOffset < (nRow - 1);) { for (lColOffset = 0; lColOffset < (nCol - 1);) { if ((nCol - lColOffset) < lMaxBlockX) { pBlockSize.X = (nCol - lColOffset); pPixelBlock = pRawPixels.CreatePixelBlock(pBlockSize) as IPixelBlock3; blockArray = pPixelBlock.get_PixelDataByRef(0); } pBlockOrigin.X = pOrigin.X + (lColOffset * cellsize) + (cellsize * 0.5); pBlockOrigin.Y = pOrigin.Y + ((nRow - lRowOffset) * cellsize) - (cellsize * 0.5); pbridge2.QueryPixelBlock(pTinSurface, pBlockOrigin.X, pBlockOrigin.Y, cellsize, cellsize, pRastConvType, vNoData, ref blockArray); //pTinSurface.QueryPixelBlock(pBlockOrigin.X, pBlockOrigin.Y, cellsize, cellsize, pRastConvType, vNoData, blockArray); pOffset.X = lColOffset; pOffset.Y = lRowOffset; pPixelBlock.set_PixelData(0, (System.Object)blockArray); pRawPixels.Write(pOffset, pPixelBlock as IPixelBlock); if (lBlockCount > 1) { if (!pCancel.Continue()) { break; } else if (pTinAdvanced.ProcessCancelled) { break; } } lColOffset = lColOffset + lMaxBlockX; } bool bReset = false; if (pBlockSize.X != lMaxBlockX) { pBlockSize.X = lMaxBlockX; bReset = true; } if ((nRow - lRowOffset) < lMaxBlockY) { pBlockSize.Y = (nRow - lRowOffset); bReset = true; } if (bReset) { pPixelBlock.set_PixelData(0, blockArray); pPixelBlock = pRawPixels.CreatePixelBlock(pBlockSize) as IPixelBlock3; blockArray = pPixelBlock.get_PixelDataByRef(0); } lRowOffset = lRowOffset + lMaxBlockY; } pRawPixels.ReturnCache(pCache); pCache = null; pRawPixels = null; pPixelBlock = null; pRasterProps = null; blockArray = 0; pRasterDataset = OpenRasterDataset(sDir, sName); if (lBlockCount == 1) { pTinAdvanced.TrackCancel = null; } return(pRasterDataset); } catch { return(null); } }
public IRasterDataset TinToRaster2(ITinAdvanced pTinAdvanced, esriRasterizationType pRastConvType, String sDir, String sName, rstPixelType ePixelType, Double cellsize, IEnvelope pExtent, bool bPerm, String strType) { try { ESRI.ArcGIS.Geometry.IPoint pOrigin = pExtent.LowerLeft; pOrigin.X = pOrigin.X - (cellsize * 0.5); pOrigin.Y = pOrigin.Y - (cellsize * 0.5); int nCol, nRow; nCol = Convert.ToInt32(Math.Round(pExtent.Width / cellsize)) + 1; nRow = Convert.ToInt32(Math.Round(pExtent.Height / cellsize)) + 1; IGeoDataset pGeoDataset = pTinAdvanced as IGeoDataset; ISpatialReference2 pSpatialReference2 = pGeoDataset.SpatialReference as ISpatialReference2; IRasterDataset pRasterDataset = CreateRasterSurf(sDir, sName, strType, pOrigin, nCol, nRow, cellsize, cellsize, ePixelType, pSpatialReference2, bPerm); IRawPixels pRawPixels = GetRawPixels(pRasterDataset, 0); IPnt pBlockSize = new DblPntClass(); pBlockSize.X = nCol; pBlockSize.Y = nRow; IPixelBlock3 pPixelBlock = pRawPixels.CreatePixelBlock(pBlockSize) as IPixelBlock3; object blockArray = pPixelBlock.get_PixelDataByRef(0); ITinSurface pTinSurface = pTinAdvanced as ITinSurface; IGeoDatabaseBridge2 pbridge2 = (IGeoDatabaseBridge2) new GeoDatabaseHelperClass(); IRasterProps pRasterProps = pRawPixels as IRasterProps; object nodataFloat; object nodataInt; pOrigin.X = pOrigin.X + (cellsize * 0.5); pOrigin.Y = pOrigin.Y + (cellsize * nRow) - (cellsize * 0.5); if (ePixelType.ToString() == "PT_FLOAT") { nodataFloat = pRasterProps.NoDataValue; pTinSurface.QueryPixelBlock(pOrigin.X, pOrigin.Y, cellsize, cellsize, pRastConvType, nodataFloat, blockArray); } else { nodataInt = pRasterProps.NoDataValue; pTinSurface.QueryPixelBlock(pOrigin.X, pOrigin.Y, cellsize, cellsize, pRastConvType, nodataInt, blockArray); } if (pTinAdvanced.ProcessCancelled == false) { return(null); } IPnt pOffset = new DblPntClass(); pOffset.X = 0; pOffset.Y = 0; pRawPixels.Write(pOffset, pPixelBlock as IPixelBlock); if (!bPerm && ePixelType.ToString() == "PT_FLOAT") { IRasterBand pBand = pRawPixels as IRasterBand; IRasterStatistics pStats = pBand.Statistics; pStats.Recalculate(); } if (bPerm) { pRawPixels = null; pPixelBlock = null; pRasterProps = null; blockArray = 0; pRasterDataset = OpenRasterDataset(sDir, sName); } return(pRasterDataset); } catch { return(null); } }
private void buttonOK_Click(object sender, EventArgs e) { //高程底面 ILayer pBaseLayer = null; ISurface pSurface = null; if (m_pSceneCtrl != null) { try { // m_pSceneCtrl.LoadSxFile(ClsGDBDataCommon.GetParentPathofExe() +@"Resource\DefaultData\Default.sxd"); } catch { } //IScene pScene = new SceneClass(); //pScene.Name = "Scene"; //m_pSceneCtrl.Scene = pScene; IScene pScene = m_pSceneCtrl.Scene; pScene.Name = "Scene"; //ILayer pglayer = new GraphicsLayer3DClass(); //pScene.AddLayer(pglayer); //pScene.ActiveGraphicsLayer = new CompositeGraphicsLayerClass(); pScene.ExaggerationFactor = Convert.ToDouble(doubleInputExaFactor.Value.ToString()); while (pScene.LayerCount > 0) { pScene.DeleteLayer(pScene.get_Layer(0)); } // pScene.ClearLayers(); pScene.AddLayer(pScene.ActiveGraphicsLayer); GC.Collect(); for (int i = 0; i < m_pMapCtrl.Map.LayerCount; i++) { ILayer pMapLayer = m_pMapCtrl.Map.get_Layer(i); ILayer pLayer = pMapLayer; if (comboBoxExBaseHeightLayer.Items.Count > 0) { if (pLayer.Name == comboBoxExBaseHeightLayer.SelectedItem.ToString()) { pBaseLayer = pLayer; } } } if (pBaseLayer is IRasterLayer) { IRaster pRaster = ((IRasterLayer)pBaseLayer).Raster; IRasterBand pBand = ((IRasterBandCollection)pRaster).Item(0); IRasterSurface rsurface = new RasterSurface(); rsurface.RasterBand = pBand; //将dem的数据指定为surface pSurface = rsurface as ISurface; } if (pBaseLayer is ITinLayer) { ITin pTin = ((ITinLayer)pBaseLayer).Dataset; ITinSurface pTinSurface = pTin as ITinSurface; pSurface = pTinSurface as ISurface; } for (int i = 0; i < m_pMapCtrl.Map.LayerCount; i++) { ILayer pMapLayer = m_pMapCtrl.Map.get_Layer(i); ILayer pLayer = pMapLayer; string filepath = ""; string filename = ""; string sourcepath = GetDataLayerPath(pMapLayer as IDataLayer, ref filepath, ref filename); //if (pMapLayer is IRasterLayer) //{ // IRasterLayer prl = new RasterLayerClass(); // prl.CreateFromRaster(((IRasterLayer)pMapLayer).Raster); // pLayer = prl as ILayer; //} if (pMapLayer is IFeatureLayer) { // if (((IFeatureLayer)pMapLayer).FeatureClass.ShapeType != ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryMultiPatch) // { IFeatureLayer pfl = new FeatureLayerClass(); IFeatureClass pFc = ((IFeatureLayer)pMapLayer).FeatureClass; if (pFc != null) { pfl.FeatureClass = ((IFeatureLayer)pMapLayer).FeatureClass; pLayer = pfl as ILayer; pLayer.Name = pMapLayer.Name; ///////////////////////////////////////////////////////////////////// //后期添加,用于带进涂层渲染 ///////////////////////////////////////////////////////////////////// IGeoFeatureLayer pGeoFLayer = pfl as IGeoFeatureLayer; IGeoFeatureLayer pGFMapLayer = pMapLayer as IGeoFeatureLayer; if (pGFMapLayer != null) //注记图层为空 { pGeoFLayer.Renderer = pGFMapLayer.Renderer; ILegendInfo pLegend3D = (ILegendInfo)pGeoFLayer; for (int k = 0; k < pLegend3D.LegendGroupCount; k++) { ILegendGroup pLgroup = pLegend3D.LegendGroup[k]; for (int p = 0; p < pLgroup.ClassCount; p++) { ILegendClass pLClass = pLgroup.Class[p]; if (pLClass.Symbol is IMarkerSymbol) { IMarkerSymbol pSMSymbol = pLClass.Symbol as IMarkerSymbol; pSMSymbol.Size /= 20; } } } if (pFc.ShapeType == esriGeometryType.esriGeometryMultipoint || pFc.ShapeType == esriGeometryType.esriGeometryPoint) { if (pGFMapLayer.Renderer is IUniqueValueRenderer) { } } } } // } } #region 这段代码家的有点重复,如果不加有时候会弹出设置数据源的对话框 if (pLayer is IRasterLayer) { I3DProperties properties = null; properties = new Raster3DPropertiesClass(); ILayerExtensions layerextensions = pLayer as ILayerExtensions; object p3d; for (int j = 0; j < layerextensions.ExtensionCount; j++) { p3d = layerextensions.get_Extension(j); if (p3d != null) { properties = p3d as I3DProperties; if (properties != null) { break; } } } properties.BaseOption = esriBaseOption.esriBaseSurface; properties.BaseSurface = pSurface; //I、更改分辨率后,如何让分辨率设置发挥作用。主要是刷新的问题(使用IActiveView刷新、而不能使用Iscene及IScenegraph刷新) //II、分辨率数值在( 262144-268435456)范围之内,越大越清晰。使用3DProperties.MaxTextureMemory 方法 properties.MaxTextureMemory = 268435456; } #endregion pScene.AddLayer(pLayer); //if (((CheckBoxItem)itemPanelSetVisible.Items[i]).Checked == false) //{ // pLayer.Visible = false; //} //else //{ // pLayer.Visible = true; //} if (comboBoxExBaseHeightLayer.Items.Count > 0) { if (pLayer.Name == comboBoxExBaseHeightLayer.SelectedItem.ToString()) { pBaseLayer = pLayer; } } } } if (pSurface != null) { for (int i = 0; i < m_pSceneCtrl.Scene.LayerCount; i++) { ILayer pLayer = m_pSceneCtrl.Scene.get_Layer(i); ILayerExtensions layerextensions = m_pSceneCtrl.Scene.get_Layer(i) as ILayerExtensions; I3DProperties properties = null; if (pLayer is IRasterLayer) { properties = new Raster3DPropertiesClass(); } if (pLayer is IFeatureLayer) { properties = new Feature3DPropertiesClass(); } if (pLayer is ITinLayer) { properties = new Tin3DPropertiesClass(); } object p3d; for (int j = 0; j < layerextensions.ExtensionCount; j++) { p3d = layerextensions.get_Extension(j); if (p3d != null) { properties = p3d as I3DProperties; if (properties != null) { break; } } } if (!(pLayer is IFeatureLayer)) { properties.BaseOption = esriBaseOption.esriBaseSurface; properties.BaseSurface = pSurface; //I、更改分辨率后,如何让分辨率设置发挥作用。主要是刷新的问题(使用IActiveView刷新、而不能使用Iscene及IScenegraph刷新) //II、分辨率数值在( 262144-268435456)范围之内,越大越清晰。使用3DProperties.MaxTextureMemory 方法 properties.MaxTextureMemory = 268435456; } else { IFeatureLayer pFlayer = pLayer as IFeatureLayer; //multipatch的本身有高度信息 if (pFlayer.FeatureClass != null && pFlayer.FeatureClass.ShapeType != ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryMultiPatch) { bool needConstantHeight = false; /* * try * { * //把导航点转向角,视场角等信息都设置成不贴在表面而需要根据生产该信息的文件设置高度 * IFeatureClass fc = pFlayer.FeatureClass; * IFeatureCursor pFcursor = fc.Search(null, false); * int OriginalFeatureidx = fc.FindField("OriginalFeatureClass"); * int OriginalFeatureOIDidx = fc.FindField("OID"); * IFeature pF = pFcursor.NextFeature(); * IFeatureLayer pOFeatureLayer = null; * if (OriginalFeatureidx == -1|| OriginalFeatureOIDidx == -1) * { * pF = null; * } * else * { * if (pF != null) * { * //获取路径点图层名称 * string orignalname = pF.get_Value(OriginalFeatureidx).ToString(); * IMap pMap = m_pMapCtrl.Map; * for (int k = 0; k < pMap.LayerCount; k++) * { * if (pMap.get_Layer(k).Name.Equals(orignalname)) * { * pOFeatureLayer = pMap.get_Layer(k) as IFeatureLayer; * break; * } * } * if (pOFeatureLayer == null) * { * pF = null; * } * } * } * * while (pF != null) * { * //IFeatureClass pFClass = pOFeatureLayer.FeatureClass; * //pFClass.FindField(OriginalFeatureOIDidx); * * * pF = pFcursor.NextFeature(); * } * } * catch * { * ; * } */ if (needConstantHeight == false) { properties.BaseOption = esriBaseOption.esriBaseSurface; //I3DProperties2 pr = properties as I3DProperties2; //if (pr != null) //{ // pr.OffsetExpressionString = "0.005"; //} // properties.BaseOption = esriBaseOption.esriBaseExpression; properties.BaseSurface = pSurface; //I、更改分辨率后,如何让分辨率设置发挥作用。主要是刷新的问题(使用IActiveView刷新、而不能使用Iscene及IScenegraph刷新) //II、分辨率数值在( 262144-268435456)范围之内,越大越清晰。使用3DProperties.MaxTextureMemory 方法 properties.MaxTextureMemory = 268435456; } } } // properties.Apply3DProperties(domlayer); // ps.SceneGraph.RefreshViewers(); IActiveView iv = m_pSceneCtrl.Scene as IActiveView; iv.PartialRefresh(esriViewDrawPhase.esriViewGeography, pLayer, null); } } }
/// <summary> /// 面积、体积统计及三维效果绘制 张琪 20110629 /// </summary> private void StaTisTic() { SysCommon.CProgress vProgress = new SysCommon.CProgress("进度条"); try { vProgress.EnableCancel = false;//设置进度条 vProgress.ShowDescription = true; vProgress.FakeProgress = true; vProgress.TopMost = true; vProgress.ShowProgress(); vProgress.SetProgress("正在计算"); object before = Type.Missing; object after = Type.Missing; if (m_StaPolygon == null) { txtArea2DSel.Text = m_SurFace.GetProjectedArea(Convert.ToDouble(txtPlaneHeight.Text), esriPlaneReferenceType.esriPlaneReferenceAbove).ToString(); txtAreaAbove.Text = m_SurFace.GetSurfaceArea(Convert.ToDouble(txtPlaneHeight.Text), esriPlaneReferenceType.esriPlaneReferenceAbove).ToString(); txtAreaBelow.Text = m_SurFace.GetSurfaceArea(Convert.ToDouble(txtPlaneHeight.Text), esriPlaneReferenceType.esriPlaneReferenceBelow).ToString(); txtVolumeBelow.Text = m_SurFace.GetVolume(Convert.ToDouble(txtPlaneHeight.Text), esriPlaneReferenceType.esriPlaneReferenceBelow).ToString(); txtVolumeAbove.Text = m_SurFace.GetVolume(Convert.ToDouble(txtPlaneHeight.Text), esriPlaneReferenceType.esriPlaneReferenceAbove).ToString(); } else//在地图上绘制多边形时 { if (m_IsTin)//为true是指数据为TIN { ITinSurface pTinsurface = m_SurFace as ITinSurface; ITinAdvanced pTinAdvanced = pTinsurface as ITinAdvanced; ////ITriangleLabelInPolyFilter = new //ITinFilter pTCFilterBasic = pTCFilter as ITinFilter; //pTCFilterBasic.DataElementsOnly = true; int Criteria = 4; IEnumTinTriangle pEnumTriangles = pTinAdvanced.MakeTriangleEnumerator(m_StaPolygon.Envelope, Criteria, null); object dVolumeBelow = null; object dSurfaceArea = null; object dProjectedArea = null; //根据绘制的多边形和Z值来计算基准面以上的面积和体积 pTinsurface.GetPartialVolumeAndArea(Convert.ToDouble(txtPlaneHeight.Text), esriPlaneReferenceType.esriPlaneReferenceAbove, pEnumTriangles, ref dVolumeBelow, ref dSurfaceArea, ref dProjectedArea); txtAreaAbove.Text = Convert.ToDouble(dSurfaceArea).ToString(); txtVolumeAbove.Text = dVolumeBelow.ToString(); txtArea2DSel.Text = dProjectedArea.ToString(); //根据绘制的多边形和Z值来计算基准面以下的面积和体积 pTinsurface.GetPartialVolumeAndArea(Convert.ToDouble(txtPlaneHeight.Text), esriPlaneReferenceType.esriPlaneReferenceBelow, pEnumTriangles, ref dVolumeBelow, ref dSurfaceArea, ref dProjectedArea); txtAreaBelow.Text = dSurfaceArea.ToString(); txtVolumeBelow.Text = dVolumeBelow.ToString(); } else { MessageBox.Show("抱歉该功能暂不支持Raster数据", "提示!"); vProgress.Close(); return; } } IPointCollection pPolygon; ESRI.ArcGIS.Geometry.IPoint pPoint = new ESRI.ArcGIS.Geometry.PointClass(); //IPolygon pOutPoly; if (m_StaPolygon == null)//当绘制范围为空,获取整张图的范围 { pPolygon = new PolygonClass(); IZAware pZawre; pPoint.SpatialReference = m_pCurrentSceneControl.Scene.SpatialReference; pPoint.X = m_SurFace.Domain.Envelope.XMin; pPoint.Y = m_SurFace.Domain.Envelope.YMin; pZawre = pPoint as IZAware; pZawre.ZAware = true; pPoint.Z = Convert.ToDouble(txtPlaneHeight.Text); pPolygon.AddPoint(pPoint, ref before, ref after); pPoint = new ESRI.ArcGIS.Geometry.PointClass(); pZawre = pPoint as IZAware; pZawre.ZAware = true; pPoint.SpatialReference = m_pCurrentSceneControl.Scene.SpatialReference; pPoint.X = m_SurFace.Domain.Envelope.XMax; pPoint.Y = m_SurFace.Domain.Envelope.YMin; pPoint.Z = Convert.ToDouble(txtPlaneHeight.Text); pPolygon.AddPoint(pPoint, ref before, ref after); pPoint = new ESRI.ArcGIS.Geometry.PointClass(); pZawre = pPoint as IZAware; pZawre.ZAware = true; pPoint.SpatialReference = m_pCurrentSceneControl.Scene.SpatialReference; pPoint.X = m_SurFace.Domain.Envelope.XMax; pPoint.Y = m_SurFace.Domain.Envelope.YMax; pPoint.Z = Convert.ToDouble(txtPlaneHeight.Text); pPolygon.AddPoint(pPoint, ref before, ref after); pPoint = new ESRI.ArcGIS.Geometry.PointClass(); pZawre = pPoint as IZAware; pZawre.ZAware = true; pPoint.SpatialReference = m_pCurrentSceneControl.Scene.SpatialReference; pPoint.X = m_SurFace.Domain.Envelope.XMin; pPoint.Y = m_SurFace.Domain.Envelope.YMax; pPoint.Z = Convert.ToDouble(txtPlaneHeight.Text); pPolygon.AddPoint(pPoint, ref before, ref after); pPoint = new ESRI.ArcGIS.Geometry.PointClass(); pZawre = pPoint as IZAware; pZawre.ZAware = true; pPoint.SpatialReference = m_pCurrentSceneControl.Scene.SpatialReference; pPoint.X = m_SurFace.Domain.Envelope.XMin; pPoint.Y = m_SurFace.Domain.Envelope.YMin; pPoint.Z = Convert.ToDouble(txtPlaneHeight.Text); pPolygon.AddPoint(pPoint, ref before, ref after); //获得整张图范围组成的多边形 IGeometry pGeometry = pPolygon as IGeometry; pGeometry.SpatialReference = m_pCurrentSceneControl.Scene.SpatialReference; } else { pPolygon = m_StaPolygon as IPointCollection; } if (pPolygon == null) { vProgress.Close(); return; } //显示参考面 ShowRefPlane(pPolygon as IPolygon); //显示周边 ShowCountour(pPolygon as IPolygon); //获取轮廓线的周长 m_ScenePoly = pPolygon as IPolygon; ITopologicalOperator pTopo = pPolygon as ITopologicalOperator; IPolyline pPolyLine = pTopo.Boundary as IPolyline; txtPara.Text = pPolyLine.Length.ToString(); vProgress.Close(); } catch { vProgress.Close(); } }
public IRaster TINToDEM(ITin pTin) { IPoint pOrigin = pTin.Extent.LowerLeft; IWorkspaceFactory pworkspaceFactory = new RasterWorkspaceFactory(); ESRI.ArcGIS.Geodatabase.IWorkspaceName pworkspaceName = pworkspaceFactory.Create(null, "MyWorkspace", null, 0); ESRI.ArcGIS.esriSystem.IName pname = (IName)pworkspaceName; ESRI.ArcGIS.Geodatabase.IWorkspace inmemWor = (IWorkspace)pname.Open(); IPoint originpoint = pOrigin; IRasterWorkspace2 rasterws = (IRasterWorkspace2)inmemWor; int nCol, nRow; nCol = 500; nRow = 500; double cellsizeX, cellsizeY; cellsizeX = pTin.Extent.Width / nCol; cellsizeY = pTin.Extent.Height / nRow; //用于计算的 float型的栅格数据 IRasterDataset demdataset = rasterws.CreateRasterDataset("Dataset", "MEM", originpoint, nCol, nRow, (double)cellsizeX, (double)cellsizeY, 1, rstPixelType.PT_DOUBLE, null, true); try { System.Runtime.InteropServices.Marshal.ReleaseComObject(pname); System.Runtime.InteropServices.Marshal.ReleaseComObject(pworkspaceFactory); System.Runtime.InteropServices.Marshal.ReleaseComObject(pworkspaceName); System.Runtime.InteropServices.Marshal.ReleaseComObject(inmemWor); } catch { } //IRawPixels pRawPixels = GetRawPixels(pRDS, 0); IRaster pRaster = demdataset.CreateDefaultRaster(); IPnt pBlockSize = new DblPnt(); //nCol = 50; //nRow = 50; pBlockSize.X = nCol; pBlockSize.Y = nRow; IPixelBlock pPixelBlock = pRaster.CreatePixelBlock(pBlockSize); //IPixelBlock pPixelBlock = pRawPixels.CreatePixelBlock(pBlockSize); IPixelBlock3 pPixelBlock3 = pPixelBlock as IPixelBlock3; //object val = pPixelBlock.get_SafeArray(0); ITinSurface pTinSurf = pTin as ITinSurface; // IRasterProps pRasterProps = pRawPixels as IRasterProps; IRasterProps pRasterProps = pRaster as IRasterProps; object nodata; //pOrigin.X = pOrigin.X + (cellsize * 0.5); //pOrigin.Y = pOrigin.Y + (cellsize * nRow) - (cellsize * 0.5); pOrigin.X = pOrigin.X; pOrigin.Y = pOrigin.Y + (cellsizeY * nRow); nodata = pRasterProps.NoDataValue; IGeoDatabaseBridge2 pbridge2 = (IGeoDatabaseBridge2) new GeoDatabaseHelperClass(); //这个pOrigin为栅格左上角 //pbridge2.QueryPixelBlock(pTinSurf, pOrigin.X, pOrigin.Y, cellsize, cellsize, esriRasterizationType.esriElevationAsRaster, nodata, ref val); //if (pTin.ProcessCancelled) // return null; //val.GetType(); CalPixelArray(pTinSurf, pOrigin.X, pOrigin.Y, cellsizeX, cellsizeY, ref pPixelBlock3); IPnt pOffset = new DblPnt(); pOffset.X = 0; pOffset.Y = 0; //pPixelBlock3.set_PixelData(0, val); //pRawPixels.Write(pOffset, (IPixelBlock)pPixelBlock3);//写入硬盘 IRasterEdit prasteredit = pRaster as IRasterEdit; prasteredit.Write(pOffset, (IPixelBlock)pPixelBlock3); //pRDS = OpenOutputRasterDataset(sDir, sName); //IPixelBlock pb = pRaster.CreatePixelBlock(pBlockSize); //pRaster.Read(pOffset,pb); return(pRaster); }
public IRasterDataset TinToRaster_new(ITinAdvanced pTin, esriRasterizationType eRastConvType, String sDir, String sName, rstPixelType ePixelType, Double cellsize, IEnvelope pExtent, bool bPerm) { IPoint pOrigin = pExtent.LowerLeft; //pOrigin.X = pOrigin.X - (cellsize * 0.5); //pOrigin.Y = pOrigin.Y - (cellsize * 0.5); pOrigin.X = pOrigin.X; pOrigin.Y = pOrigin.Y; int nCol, nRow; nCol = (int)Math.Round(pExtent.Width / cellsize); nRow = (int)Math.Round(pExtent.Height / cellsize); IGeoDataset pGDS = pTin as IGeoDataset; ISpatialReference2 pSR = pGDS.SpatialReference as ISpatialReference2; //这个pOrigin为栅格左下角 IWorkspaceFactory pworkspaceFactory = new RasterWorkspaceFactory(); IRasterWorkspace2 rasterws = pworkspaceFactory.OpenFromFile(sDir, 0) as IRasterWorkspace2; IPoint originpoint = pOrigin; //用于计算的 float型的栅格数据 IRasterDataset demdataset = rasterws.CreateRasterDataset(sName, "TIFF", originpoint, nCol, nRow, cellsize, cellsize, 1, rstPixelType.PT_DOUBLE, null, true); IRasterDataset pRDS = demdataset; //IRawPixels pRawPixels = GetRawPixels(pRDS, 0); IRaster pRaster = pRDS.CreateDefaultRaster(); IPnt pBlockSize = new DblPnt(); //nCol = 50; //nRow = 50; pBlockSize.X = nCol; pBlockSize.Y = nRow; IPixelBlock pPixelBlock = pRaster.CreatePixelBlock(pBlockSize); //IPixelBlock pPixelBlock = pRawPixels.CreatePixelBlock(pBlockSize); IPixelBlock3 pPixelBlock3 = pPixelBlock as IPixelBlock3; //object val = pPixelBlock.get_SafeArray(0); ITinSurface pTinSurf = pTin as ITinSurface; // IRasterProps pRasterProps = pRawPixels as IRasterProps; IRasterProps pRasterProps = pRaster as IRasterProps; object nodata; //pOrigin.X = pOrigin.X + (cellsize * 0.5); //pOrigin.Y = pOrigin.Y + (cellsize * nRow) - (cellsize * 0.5); pOrigin.X = pOrigin.X; pOrigin.Y = pOrigin.Y + (cellsize * nRow); nodata = pRasterProps.NoDataValue; IGeoDatabaseBridge2 pbridge2 = (IGeoDatabaseBridge2) new GeoDatabaseHelperClass(); //这个pOrigin为栅格左上角 //pbridge2.QueryPixelBlock(pTinSurf, pOrigin.X, pOrigin.Y, cellsize, cellsize, esriRasterizationType.esriElevationAsRaster, nodata, ref val); //if (pTin.ProcessCancelled) // return null; //val.GetType(); CalPixelArray(pTinSurf, pOrigin.X, pOrigin.Y, cellsize, cellsize, ref pPixelBlock3); IPnt pOffset = new DblPnt(); pOffset.X = 0; pOffset.Y = 0; //pPixelBlock3.set_PixelData(0, val); //pRawPixels.Write(pOffset, (IPixelBlock)pPixelBlock3);//写入硬盘 IRasterEdit prasteredit = pRaster as IRasterEdit; prasteredit.Write(pOffset, (IPixelBlock)pPixelBlock3); //pRDS = OpenOutputRasterDataset(sDir, sName); //IPixelBlock pb = pRaster.CreatePixelBlock(pBlockSize); //pRaster.Read(pOffset,pb); // ISaveAs pSaveas = pRasterProps as ISaveAs2; // pSaveas.SaveAs(sDir + "\\" + sName, null, "TIFF"); prasteredit.Refresh(); return(pRDS); }
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; } }
public static IRasterDataset TinToRaster(ITinAdvanced itinAdvanced_0, esriRasterizationType esriRasterizationType_0, string string_0, string string_1, string string_2, rstPixelType rstPixelType_0, double double_0, IEnvelope ienvelope_0, bool bool_0) { object obj3; IPoint lowerLeft = ienvelope_0.LowerLeft; lowerLeft.X -= double_0 * 0.5; lowerLeft.Y -= double_0 * 0.5; int num = ((int)Math.Round((double)(ienvelope_0.Width / double_0))) + 1; int num2 = ((int)Math.Round((double)(ienvelope_0.Height / double_0))) + 1; IGeoDataset dataset = itinAdvanced_0 as IGeoDataset; ISpatialReference2 spatialReference = dataset.SpatialReference as ISpatialReference2; IRasterDataset dataset2 = CreateRasterSurf(string_0, string_1, string_2, lowerLeft, num, num2, double_0, double_0, 1, rstPixelType_0, spatialReference, bool_0); IRawPixels rawPixels = GetRawPixels(dataset2, 0); object cache = rawPixels.AcquireCache(); ITinSurface pSurface = itinAdvanced_0 as ITinSurface; IRasterProps o = rawPixels as IRasterProps; double zMin = itinAdvanced_0.Extent.ZMin; if (rstPixelType_0 == rstPixelType.PT_FLOAT) { obj3 = (float)(zMin - 1.0); } else { obj3 = (int)(zMin - 1.0); } o.NoDataValue = obj3; IPnt tlc = new DblPnt(); int num4 = 2048; if (num < 2048) { num4 = num; } int num5 = 2048; if (num2 < 2048) { num5 = num2; } IPnt size = new DblPnt { X = num4, Y = num5 }; IPixelBlock3 block = rawPixels.CreatePixelBlock(size) as IPixelBlock3; ITrackCancel cancel = new CancelTracker { CancelOnClick = false, CancelOnKeyPress = true }; int num6 = (int)(Math.Round((double)((num / num4) + 0.49)) * Math.Round((double)((num2 / num5) + 0.49))); if (num6 == 1) { itinAdvanced_0.TrackCancel = cancel; } IPoint point2 = new Point(); object obj4 = block.get_PixelDataByRef(0); for (int i = 0; i < num2; i += num5) { for (int j = 0; j < num; j += num4) { if ((num - j) < num4) { size.X = num - j; block = rawPixels.CreatePixelBlock(size) as IPixelBlock3; obj4 = block.get_PixelDataByRef(0); } point2.X = (lowerLeft.X + (j * double_0)) + (double_0 * 0.5); point2.Y = (lowerLeft.Y + ((num2 - i) * double_0)) - (double_0 * 0.5); IGeoDatabaseBridge2 bridge = new GeoDatabaseHelper() as IGeoDatabaseBridge2; bridge.QueryPixelBlock(pSurface, point2.X, point2.Y, double_0, double_0, esriRasterizationType_0, obj3, ref obj4); tlc.X = j; tlc.Y = i; block.set_PixelData(0, obj4); rawPixels.Write(tlc, block as IPixelBlock); } bool flag = false; if (size.X != num4) { size.X = num4; flag = true; } if ((num2 - i) < num5) { size.Y = num2 - i; flag = true; } if (flag) { block = rawPixels.CreatePixelBlock(size) as IPixelBlock3; obj4 = block.get_PixelDataByRef(0); } } rawPixels.ReturnCache(cache); Marshal.ReleaseComObject(cache); cache = null; Marshal.ReleaseComObject(rawPixels); rawPixels = null; Marshal.ReleaseComObject(block); block = null; Marshal.ReleaseComObject(o); o = null; obj4 = 0; GC.Collect(); return(dataset2); }
public static IRasterDataset TinToRaster(ITinAdvanced itinAdvanced_0, esriRasterizationType esriRasterizationType_0, string string_0, string string_1, rstPixelType rstPixelType_0, double double_0, IEnvelope ienvelope_0, bool bool_0) { IPoint lowerLeft = ienvelope_0.LowerLeft; lowerLeft.X -= double_0 * 0.5; lowerLeft.Y -= double_0 * 0.5; int num = (int)Math.Round((double)((ienvelope_0.Width / double_0) + 1.0)); int num2 = (int)Math.Round((double)((ienvelope_0.Height / double_0) + 1.0)); IGeoDataset dataset = itinAdvanced_0 as IGeoDataset; ISpatialReference2 spatialReference = dataset.SpatialReference as ISpatialReference2; IRasterDataset dataset2 = CreateRasterSurf(string_0, string_1, "GRID", lowerLeft, num, num2, double_0, double_0, rstPixelType_0, spatialReference, true); IRasterBandCollection bands = dataset2 as IRasterBandCollection; IRawPixels pixels = bands.Item(0) as IRawPixels; ITinSurface pSurface = itinAdvanced_0 as ITinSurface; pSurface.RasterInterpolationMethod = esriSurfaceInterpolationType.esriNaturalNeighborInterpolation; IRasterProps props = pixels as IRasterProps; object noDataValue = props.NoDataValue; IPnt tlc = new DblPnt(); int num3 = 2048; int num4 = 2048; if (num < 2048) { num3 = num; } if (num2 < num4) { num4 = num2; } IPnt size = new DblPnt { X = num3, Y = num4 }; IPixelBlock pxls = pixels.CreatePixelBlock(size); object block = pxls.get_SafeArray(0); IPoint point2 = new Point(); for (int i = 0; i < num2; i += num4) { for (int j = 0; j < num; j += num3) { if ((num - j) < num3) { size.X = num - j; pxls = pixels.CreatePixelBlock(size); block = pxls.get_SafeArray(0); } point2.X = (lowerLeft.X + (j * double_0)) + (double_0 * 0.5); point2.Y = (lowerLeft.Y + ((num2 - i) * double_0)) - (double_0 * 0.5); IGeoDatabaseBridge2 bridge = new GeoDatabaseHelper() as IGeoDatabaseBridge2; bridge.QueryPixelBlock(pSurface, point2.X, point2.Y, double_0, double_0, esriRasterizationType_0, noDataValue, ref block); tlc.X = j; tlc.Y = i; pxls.set_SafeArray(0, block); pixels.Write(tlc, pxls); } bool flag = false; if (size.X != num3) { size.X = num3; flag = true; } if ((num2 - i) < num4) { size.Y = num2 - i; } if (flag) { block = pixels.CreatePixelBlock(size).get_SafeArray(0); } } return(dataset2); }
public static void QueryPixelBlock(ITinSurface itinSurface_0, double double_0, double double_1, double double_2, double double_3, esriRasterizationType esriRasterizationType_0, object object_0, object object_1) { int length = ((float[, ])object_1).GetLength(0); int num2 = ((float[, ])object_1).GetLength(1); IPoint pPoint = new Point(); int num3 = 0; Label_0024: if (num3 >= num2) { return; } int num4 = 0; while (true) { if (num4 < length) { pPoint.X = double_0 + (num4 * double_2); pPoint.Y = double_1 - (num3 * double_3); float slopeDegrees = 0f; try { switch (esriRasterizationType_0) { case esriRasterizationType.esriDegreeSlopeAsRaster: slopeDegrees = (float)itinSurface_0.GetSlopeDegrees(pPoint); break; case esriRasterizationType.esriPercentageSlopeAsRaster: slopeDegrees = (float)itinSurface_0.GetSlopePercent(pPoint); break; case esriRasterizationType.esriDegreeAspectAsRaster: slopeDegrees = (float)itinSurface_0.GetAspectDegrees(pPoint); break; case esriRasterizationType.esriElevationAsRaster: slopeDegrees = (float)itinSurface_0.GetElevation(pPoint); break; } if (!double.IsNaN((double)slopeDegrees)) { ((float[, ])object_1)[num4, num3] = slopeDegrees; } else { ((float[, ])object_1)[num4, num3] = (float)object_0; } } catch { } } else { num3++; goto Label_0024; } num4++; } }