开发者社区> 橘子红了呐> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

AE 遍历栅格实现栅格重分类(C#实现)

简介:
+关注继续查看

 

下面要讲的种重分类方法,网上很多。但是好像 System.Array pSafeArray = pPixelBlock.get_SafeArray(0) as System.Array;这一句一直报下面的错误。我还没有解决。

不过还是将这种方法整理一下,转载自此。

作者本人的初步的解决方法为:

将 pSafeArray.GetValue(x, y) 替换为 pPixelBlock.GetVal(0, c_x, r_y)。 同时避免了“System.Array pSafeArray = pPixelBlock.get_SafeArray(0) as System.Array”的异常问题。该问题很有可能为内部调用 MemoryStream 的 set_Capacity 时,在申请新内存时失败,可能是需要存储到ViewState中的内容太过庞大,或者可用内存太少。导致尝试将数据序列化写入ViewState时内存溢出。

 

 

 

下面为正文

--------------------------

栅格重分类方法很多,在AE中有多种方式可以实现,使用地图代数(在RasterModel中实现),或者IReclassOp,或者Geoprocessor的方式都可以,甚至可以遍历栅格来实现,这是最原始的方式,不过也可能是最实用的。这里使用的是最原始的遍历栅格的方式。

复制代码
private void reclass(IRaster pRaster, float weight)  
{  
    IRasterProps rasterProps = (IRasterProps)pRaster;  
  
    //设置栅格数据起始点  
    IPnt pBlockSize = new Pnt();  
    pBlockSize.SetCoords(rasterProps.Width, rasterProps.Height);  
  
    //选取整个范围  
    IPixelBlock pPixelBlock = pRaster.CreatePixelBlock(pBlockSize);  
  
    //左上点坐标  
    IPnt tlp = new Pnt();  
    tlp.SetCoords(0, 0);  
  
    //读入栅格  
    IRasterBandCollection pRasterBands = pRaster as  IRasterBandCollection;  
    IRasterBand pRasterBand = pRasterBands.Item(0);  
    IRawPixels pRawRixels = pRasterBands.Item(0) as IRawPixels;  
    pRawRixels.Read(tlp, pPixelBlock);  
  
    //将PixBlock的值组成数组  
    System.Array pSafeArray = pPixelBlock.get_SafeArray(0) as System.Array;  
    for (int y = 0; y < rasterProps.Height; y++)  
    {  
        for (int x = 0; x < rasterProps.Width; x++)  
        {  
            //int value = Convert.ToInt32(pSafeArray.GetValue(x, y));  
            Byte value = Convert.ToByte(pSafeArray.GetValue(x, y));  
            if (value != 0)  
                pSafeArray.SetValue((Byte)(value * weight), x, y);  
        }  
    }  
  
    pPixelBlock.set_SafeArray(0, pSafeArray);  
  
    //编辑raster,将更新的值写入raster中  
    IRasterEdit rasterEdit = pRaster as IRasterEdit;  
    rasterEdit.Write(tlp, pPixelBlock);  
    rasterEdit.Refresh();  
}  
复制代码

 

改变RasterLayer中DEM的值

 View Code

 

及将IRasterLayer存储起来的方法

1
2
3
4
5
6
7
8
9
public static void SaveRasterLayerTofile(IRasterLayer pRasterLayer, string fileName, string strFileExtension="TIFF")
 {
 
            IRaster pRaster = pRasterLayer.Raster;
            IRaster2 pRaster2 = pRaster as IRaster2;
 
            ISaveAs pSaveAs = pRaster2 as ISaveAs;
            pSaveAs.SaveAs(fileName, null, strFileExtension);
}

 

 

 

 
参考文章:
 
 
 
 
没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。



    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/6838365.html,如需转载请自行联系原作者






版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
版本控制分类
版本控制分类
17 0
JS - 二叉树算法实现与遍历 (更新中...)
一、关于二叉树: 截图来自:https://segmentfault.com/a/1190000000740261 温馨提示:学习以及使用二叉树概念,心中永远有这么一个图,对于理解和接受二叉树有很大的帮助。
1374 0
橡皮筋算法的原理和实现
橡皮筋算法         程序员,可以选择研究技术,也可以选择赚钱。但是以赚钱的心态去做程序员,会品尝不到技术的很多快乐。   1.橡皮筋算法原理       橡皮筋算法,指的是什么,我们都应该很清楚了。
1314 0
SAE平台搭建wordpress实现注册用户发送邮件
最近使用sina云平台搭建wordpress程序,在使用过程中前台可以注册用户,但是找回密码功能输入用户邮件地址后出现: 发送邮件错误 您的主机禁用了 mail() 函数 网上搜索一遍,找到了通过插件解决问题的方法:WP-Mail-SMTP 参考网址:http://www.ziyouwu.com/index.php/archives/98.html 在wordpress的后台启动插件后设置发送邮件的相关信息   1:填写你的邮箱地址,你打算用哪个邮箱发信件 2:填写你想显示的发件人名称 3:不用管了 4:你选择发信邮箱的SMTP地址。
1141 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
重新定义计算的边界
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载