AE二次开发进行DEM表面积求算

上传人:大米 文档编号:498566749 上传时间:2023-12-06 格式:DOCX 页数:18 大小:22.90KB
返回 下载 相关 举报
AE二次开发进行DEM表面积求算_第1页
第1页 / 共18页
AE二次开发进行DEM表面积求算_第2页
第2页 / 共18页
AE二次开发进行DEM表面积求算_第3页
第3页 / 共18页
AE二次开发进行DEM表面积求算_第4页
第4页 / 共18页
AE二次开发进行DEM表面积求算_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《AE二次开发进行DEM表面积求算》由会员分享,可在线阅读,更多相关《AE二次开发进行DEM表面积求算(18页珍藏版)》请在金锄头文库上搜索。

1、四、算法代码此后为自定义类中的代码(1)栅格数据提取:采用二维数组对栅格数据进行结果存储,代码为arcengine帮助文档内 部搜索出然后修正的public double, ReadWriteRawBlocks(IRasterDataset2 rasterDs)/Create a raster.IRaster2 raster2 = rasterDs.CreateFullRaster() as IRaster2;/Create a raster cursor with a system-optimized pixel block size by passing a null.IRasterCur

2、sor rasterCursor = raster2.CreateCursorEx(null);/Use the IRasterEdit interface.IRasterEdit rasterEdit = raster2 as IRasterEdit;/Loop through each band and pixel block.IRasterBandCollection bands = rasterDs as IRasterBandCollection;IPixelBlock3 pixelblock3 = null;IRawBlocks rawBlocks = (IRawBlocks)ba

3、nds.Item(0);IRasterInfo rasInfo = rawBlocks.RasterInfo;long blockwidth = 0;long blockheight = 0;System.Array pixels;IPnt tlc = null;double v1 = new double1000000;int m = 0;int lenght=0;double, value=new double rasInfo.Width ,rasInfo.Height;long bandCount = bands.Count;dopixelblock3 = rasterCursor.Pi

4、xelBlock as IPixelBlock3;blockwidth = pixelblock3.Width;blockheight = pixelblock3.Height; pixelblock3.Mask(255);/value = new doubleblockwidth, blockheight;for (int k = 0; k bandCount; k+)/Get the pixel array.pixels =(System.Array)pixelblock3.get_PixelData(k);for (long i = 0; i blockwidth; i+)for (lo

5、ng j = 0; j blockheight; j+)/Get the pixel valuev = pixels.GetValue(i,j);/Do something with the value./此处的数据提取是以64*64 单元提取,需要主意顺序,该段代码前一讲中已说明。v1m =Convert .ToDouble (v); lenght =m;m+;/Set the pixel array to the pixel block. pixelblock3.set_PixelData(k, pixels);/Write back to the raster.tlc = rasterC

6、ursor.TopLeft;rasterEdit.Write(tlc, (IPixelBlock)pixelblock3);while (rasterCursor.Next() = true);System.Runtime.InteropServices.Marshal.ReleaseComObject(rasterEdit);m=0;/此处的循环为了将提取的数据进行重新排序while (m lenght)for (int i = 0; i rasInfo.Height; i=i+64)for(int j=0;jrasInfo .Width ;j=j+64)for(int b=0;b64;b+

7、)for(int d=0;d64;d+)if (i + d rasInfo.Height& j + b rasInfo.Width)valuej + b,i + d = v1m;m+;return value;(2)三角型面积计算,cellx, celly为栅格每一格所代表的实际长度public double AreaBase(double cellX,double cellY,double cellZ1,double cellZ2,doublecellZ3)double value1, value2, value3;value1 = Math.Sqrt(cellX * cellX + (ce

8、llZ1 - cellZ2) * (cellZ1 -cellZ2);value2 = Math.Sqrt(cellX * cellX + (cellZ3 - cellZ2) * (cellZ3 -cellZ2);va l ue3 = Math.Sqrt(c e l l X * c e l l X + c e l l Y * c e l l Y + (c e l l Z3 -cellZ1)* (cellZ3 - cellZ1);double length=value1+value2+value3;return Math.Sqrt(length * (length - value1) * (len

9、gth- value2) * (length - value3);(3)总体面积计算:此处采用一个sbyte三维数组,将每个栅格格子分成八个小三角形,目的是为了记录该快小三角形是否被之前相邻的格子使用过。以免造成面积重复计算public string AreaCalculate()tryIRasterBandCollection rbcollection = raster asIRasterBandCollection;IRasterDataset rasterDataset1= new RasterDatasetClass();rasterDataset1 = rbcollection.It

10、em(0).RasterDataset asIRasterDataset;IRasterDataset2 rasterDataset2 = rasterDataset1 asIRasterDataset2;double cellX, cellY;int Xnum, Ynum;RasterInfo rasterInfo = new RasterInfo();rasterInfo.GetRasterInfo(raster);Xnum = rasterInfo.Height;Ynum = rasterInfo.Width;cellX = (rasterInfo.xmax - rasterInfo.x

11、min) / Xnum;cellY = (rasterInfo.ymax - rasterInfo.ymin) / Ynum; double, value = new doubleYnum, Xnum;sbyte, , bool1 = new sbyteYnum, Xnum, 8;for (int i = 0; i Ynum; i+)for (int j = 0; j Xnum; j+)for (int k = 0; k 8; k+)bool1i, j, k = 0;value = ReadWriteRawBlocks(rasterDataset2); double area = 0;doub

12、le sarea = 0;/ return value0, 0;for (int i = 1; i Ynum - 1; i+)for (int j = 1; j Xnum - 1; j+)if (valuei, j != -32768)valuei + 1, jbool1i, j, 5AreaBase(cellX,sarea;if (valuei, j - 1 != -32768 & != -32768)if (bool1i, j, 4 = 0 &= 0 & bool1i, j - 1, 7 = 0 & bool1i + 1, j, 2 = 0)sarea =cellY, valuei, j

13、- 1, valuei, j, valuei + 1, j);area = area +bool1i, j, 4 =1;bool1i, j, 5 =1;= 1;= 1;bool1i, j - 1, 7 bool1i + 1, j, 2 if (valuei + 1, j != -32768 &valuei + 1, j1 != -32768)if (bool1i, j, 5 = 0 &bool1i + 1, j,2 = 0 & bool1i + 1, j, 3 = 0 & bool1i + 1, j - 1, 0 = 0)sarea =AreaBase(cellX,cellY, valuei,

14、 j, valuei + 1, j, valuei + 1, j - 1);area = area +sarea;1;= 1;= 1;0 = 1;bool1i, j, 5 = bool1i + 1, j, 2 bool1i + 1, j, 3 bool1i + 1, j - 1, if (valuei + 1, j != -32768 &valuei + 1, j + 1 != -32768)if (bool1i, j, 6 = 0 & bool1i + 1, j, 0 = 0 & bool1i + 1, j, 1 = 0 & bool1i + 1, j + 1, 3 = 0)AreaBase(cellX,cellY, valuei,j,valuei + 1, j, valuei + 1,sarea =1);area = areasarea;1;bool1i, j,6 =bool1i+1,j,0= 1;bool1i+1,j,1= 1;bool1i+1,j+1,3 = 1;if(valuei,+ 1

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号