Arccgis Engine中关于创建栅格数据集的NoData问题

ArcGIS修改栅格数据无效值NoData 如给格网地形数据无效值赋-9999,或者删除影像原本NoData值,假设数据原本无效值是0,但像素0值是有效的,需删除NoData指定。3、在弹窗的对话框中 输出或删除 无效值,再在对话框空白处点击一下鼠标,“OK”按钮高亮可用,点击“OK”关闭无效值设置对话框。2、在数据图层右键,点击“属性”,打开属性对话框,如下图。4、然后在数据属性框,点击“应用”、“确定”按钮,完成无效值修改。注意:先删除影像金字塔,再修改无效值,否则修改可能不生效。1、打开ArcCatalog,在目录树中找到待修改的数据。 阅读详情

Arcgis Engine中关于创建栅格数据集的NoData问题

我们知道在ArcMap中生成一张栅格图像时,其有效值所包含的区域内形状不一定是和屏幕横向或纵向平行的,而ArcMap在生成栅格图像时,也是和我们一样创建了格网,通过分析他的数据,我个人认为ArcMap也是创建了规则格网,因为在其四个角点组成的最大外接矩形框内,透明白色区域的值会显示“NoData”,而之外的透明白色区域都无值可查。如下图所示(自己也可以在ArcMap中生成一副栅格试验一下):
在这里插入图片描述
据此可以推断,在生成栅格时,其建立格网均是以规则切与屏幕方向平行的方向建立的,遍历规则也需从左上角(ArcEngine遍历规则)或者左下角(哈希表遍历规则)依次遍历。
ArcGIS Engine 10 开发手册中的创建栅格数据集是这样的:

public IRasterDataset CreateRasterDataset (string pRasterFolderPath,string pFileName, string pRasterType, ISpatialReference pSpr)
{
  IRasterWorkspace2 pRasterWs = GetRasterWorkspace (pRasterFolderPath) as IRasterWorkspace2;

  IPoint pPoint = new PointClass ();
  pPoint.PutCoords (15.0, 15.0);

  int pWidth = 300;
  int pHeight = 300;
  double xCell = 30;
  double yCell = 30;
  int NumBand = 1;

  IRasterDataset pRasterDataset = pRasterWs.CreateRasterDataset (pFileName, pRasterType,pPoint, pWidth, pHeight, xCell, yCell, NumBand, rstPixelType.PT_UCHAR, pSpr,true);

  IRasterBandCollection pRasterBands = (IRasterBandCollection) pRasterDataset;

  IRasterBand pRasterBand = pRasterBands.Item (0);
  IRasterProps pRasterProps = (IRasterProps) pRasterBand;

  pRasterProps.NoDataValue = 255;

  IRaster pRaster = pRasterDataset.CreateDefaultRaster ();

  IPnt pPnt = new PntClass ();
  pPnt.SetCoords (30, 30);

  IRaster2 pRaster2 = pRaster as IRaster2;
  IRasterEdit pRasterEdit = (IRasterEdit) pRaster2;

  IRasterCursor pRasterCursor = pRaster2.CreateCursorEx (pPnt);

  do
  {
    IPixelBlock3 pPixelblock = pRasterCursor.PixelBlock as IPixelBlock3;

    System.Array pixels = (System.Array) pPixelblock.get_PixelData (0);

    for (int i = 0; i & lt; pPixelblock.Width; i++)

      for (int j = 0; j & lt; pPixelblock.Height; j++)
        if (i == j)

          pixels.SetValue (Convert.ToByte (255), i, j);
        else
          pixels.SetValue (Convert.ToByte ((i* j + 30) / 255), i, j);

    pPixelblock.set_PixelData (0,(System.Array) pixels);
    IPnt pUpperLeft = pRasterCursor.TopLeft;

    pRasterEdit.Write (pUpperLeft,(IPixelBlock) pPixelblock);

  } while (pRasterCursor.Next ());

  System.Runtime.InteropServices.Marshal.ReleaseComObject (pRasterEdit);

  return pRasterDataset;
}

其中,有这样一句pRasterProps.NoDataValue = 255;,我们可以按F12查看此接口IRasterProps的定义。关于NoDataValue的定义如下:
在这里插入图片描述
我们由此可知,用此接口来设置“NoData”,我们知道灰度图像的值范围为0-255,因此,如果超出这个值,在输出灰度图像栅格时,我们将这些值统一标记为“NoData”即可。具体代码如下:
PS:我是以哈希表来传递值的,因此在后面遍历传值时,涉及到ArcEngine的遍历和HashTable的遍历转换问题。

        /// <summary>
        /// 创建栅格数据集
        /// </summary>
        /// <param name="pFileDirectoryName"></param>
        /// <param name="pFielName"></param>
        /// <param name="pXmin">格网最小X</param>
        /// <param name="pYmin">格网最小Y</param>
        /// <param name="pGridSide">一个格网长</param>
        /// <param name="pHashtable">输入的哈希表</param>
        /// <param name="pRowSum">格网总行数</param>
        /// <param name="pColumnSum">格网总列数</param>
        /// <returns></returns>
        public IRasterDataset CreateRasterDataset(string pFileDirectoryName, string pFielName, double pXmin, double pYmin, double pGridSide, Hashtable pHashtable, int pRowSum, int pColumnSum)
        {
            //原点
            IPoint pOriginPoint = new PointClass();
            pOriginPoint.PutCoords(pXmin, pYmin);

            //创建数据集
            IWorkspaceFactory pWorkspaceFactory = new RasterWorkspaceFactoryClass();//using ESRI.ArcGIS.DataSourcesRaster;
            IRasterWorkspace2 pRasterWorkspace = pWorkspaceFactory.OpenFromFile(pFileDirectoryName, 0) as IRasterWorkspace2;
            IRasterDataset pRasterDataset = pRasterWorkspace.CreateRasterDataset(pFielName, "TIFF", pOriginPoint, pColumnSum, pRowSum, pGridSide, pGridSide, 1, rstPixelType.PT_DOUBLE, new UnknownCoordinateSystemClass(), true);

            IRasterBandCollection pIRasterBandCollection = (IRasterBandCollection)pRasterDataset;
            IRasterBand pIRasterBand;
            IRasterProps pIRasterProps;
            pIRasterBand = pIRasterBandCollection.Item(0);
            pIRasterProps = (IRasterProps)pIRasterBand;
            //Set NoData if necessary. For a multiband image, a NoData value needs to be set for each band.
            pIRasterProps.NoDataValue = 256; //以此值来标记“NoData”
            IRaster pIRaster = ((IRasterDataset2)pRasterDataset).CreateFullRaster();

            IPnt blocksize = new PntClass();
            blocksize.SetCoords(pColumnSum, pRowSum);
            IPixelBlock3 pIPixelBlock3 = pIRaster.CreatePixelBlock(blocksize) as IPixelBlock3;

            System.Array pPixelData;
            pPixelData = (System.Array)pIPixelBlock3.get_PixelData(0);
            byte[] outputArray = (byte[])pIPixelBlock3.get_NoDataMaskByRef(0);
            for (int i = 0; i < pColumnSum; i++)//列数
            {
                for (int j = 0; j < pRowSum; j++)//行数
                {
                    int pGridIndex = (pRowSum - j - 1) * pColumnSum + (i + 1);//遍历顺序转换
                    if (pHashtable.ContainsKey(pGridIndex))
                    {
                        pPixelData.SetValue(Convert.ToDouble(pHashtable[pGridIndex]), i, j);
                    }
                    else
                    {
                        pPixelData.SetValue(Convert.ToDouble(256), i, j);  //将此值输出,结果为“NoData”
                    }
                }
            }

            pIPixelBlock3.set_PixelData(0, (System.Object)pPixelData);
            IPnt upLeft = new PntClass();
            upLeft.SetCoords(0, 0);
            IRasterEdit rasterEdit = (IRasterEdit)pIRaster;
            rasterEdit.Write(upLeft, (IPixelBlock)pIPixelBlock3);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(rasterEdit);
            return pRasterDataset;
        }
    }

至此,我们可以达到和ArcMap中一样的效果。
感谢各位浏览支持,多多交流。

arcgis--NoData数据处理 先对原始数据进行重分类,分成1类,将NoData赋值为2,。然后,将重分类结果与原始数据进行镶嵌,【镶嵌至新栅格】工具,将两者连接在一起,即可完成NoData的数据处理。:利用【栅格计算器】可以对NoData的值进行修改。【Spatial Analyst工具】-【地图代数】-【栅格计算器】,将NoData修改为某一个值。:将栅格数据转换成二进制文本文件,在文本文件中将NoData值替换成需要修改的值,然后在将修改后的二进制文件转换成栅格数据。【数据管理工具】-【栅格】-【栅格数据集】-【镶嵌至新栅格】, 阅读详情

相关推荐

ArcGIS基础:栅格数据中的NoData数值(空值)的处理

栅格计算器工具位于【spatial analyst工具】下,输入如下计算表达式,con表示条件函数,isnull表示条件判断,表达式的意思是如果不是dem,那就是nodata了,那么就对其赋值1,如果是DEM,就保持原来的值不变。使用【重分类】工具,该工具也是位于【spatial analyst】工具下,如下所示,需要在重分类设置里把其他所有值【旧值】设置为nodata【新值】,nodata重分类为2。先使用【栅格转ASCII】工具,该工具位于【转换工具】的【由栅格转出】下,输入栅格数据进行以下设置。

yuanYW7556的博客 5万+

ArcGIS中ArcMap栅格图层0值设置为NoData值的简便方法

本文介绍在ArcMap软件中,将栅格图层中的0值或其他指定数值作为NoData值的方法~

疯狂学习GIS的博客 7689

【ArcGIS微课1000例】0067:Nodata数据处理的3种方法案例教程

NoData数据是栅格数据中的一个特殊值,即属性值为空,代表该像元位置处不存在任何值。因此,在众多分析过程中,具有Nodata值的栅格像元不参与运算操作,故而无法使用修改栅格像元值的常规方法来处理 NoData数据,需要借助条件判断、叠加合并、格式转换等方法来处理。

智慧空间实验室 4668

Arcgis中影像空值NoData处理及去除背景值

no.1 首先针对第一种情况就是去除影像的背景值,(具体情况就是你的遥感影像周围有大量的深色背景值,一般为255或者0,查看属性表可知) 处理:打开 栅格计算器(raster calculator) Setnull["raster"==0/255,"raster"] no.2 针对第二种情况,就是影像中间 会有空值,这个怎么处理,首先你要是明确这是什么地物类型,可以直接通过属性表赋值为该地物类型的value 值,但是有时候我们要想统一的给中间的NoData值赋值,可以参考以下操...

Along6的博客 2万+

【ArcGIS微课1000例】0057:将多波段栅格(影像.tif)背景设置为无数据nodata的方法

可以用【识别】工具来获取影像数据的背景值。 在背景上单击,得到背景值为(255,255,255),如下图所示:针对多波段栅格(影像.tif)背景设置为无数据nodata的方法,不能用栅格计算器,二是要借助影像分析功能中的来实现。打开【影像分析】窗口,选择影像数据→单击【添加函数】→右键→插入【掩膜函数】,如下图所示: 在无效值处输入背景值(255,255,255)。点击确定之后会在内容列表框中多出一个图层,再次识别,发现已经将背景值改为nodata了。 接下来,将图层导出即可。导出选项。

智慧空间实验室 2918

51单片机STC8G1K08驱动ws2812记录

使用51单片机控制17个2812灯,这里选择STC8芯片,最大频率可以达到35M,参考网上的各种文章案例,使用定时器做的时候实测做不到规格书要求的245-345ns,STC8G1K08不带PWM,所以只能使用nop来做,好在单片机在这里只有做编程灯的功能,省略测试过程,下面是程序,使用的是24MHz内部晶振 //设置一个灯珠 void SendOnePix(unsigned char *ptr) { unsigned char i,j; unsigned char temp; fo...

的博客 7320

ArcGIS:栅格对齐并保持行列号一致,方法2

介绍了一种统一多源栅格数据空间对齐和行列式统一的方法,并进行了实验验证。

Teng_NaoDan的博客 1万+

STM32 野火MINI 用FontCvtST.exe 生成.c文件 写汉字到文本框 按钮上

STM32 野火MINI 用FontCvtST.exe 生成.c文件 写汉字到文本框 按钮上 参考了好多大神博客,自己写的过程中发现,还有些小细节。 一、打开Notepad写需要的字 另存为 UTF-16LE 也就是Unicode。 二、打开FontCvtST转 删掉所有字 读入test.txt里的字 选择刚才的test.txt 另存为.c文件 改个英文名 复制到RTOS的例程文件夹下 三、打开GUIBuilder 画一个这样的 保存之前要注意路径配置要在当前位置,否则存不上 生成的D

weixin_41376117的博客 1935

ArcGIS 10.2中栅格缺失值处理--Nodata in raster

问题描述: 需要对同一区域的多图层的栅格数据进行叠加操作,而相同位置,如果有一个图层的值为Nodata,则计算结果也是Nodata,即:Nodata+value = Nodata 需要将Nodata转换成0,以便进行后续操作。 工具:Spatial Analyst Tools / Map Algebra / Raster Calculation 首先利用Con() 函数进行条件的限制;

u012486361的博客 4万+

pta——特立独行的幸福

这是我认为比较复杂的一道题了,比较迷茫的点在于不知道要算各位平方和几次到不了1,才算他不是幸福数。突破口在于如果如果不是回到1也会有一些数字重复出现,只要重复出现的数字不是1,那就不是幸福数

m0_65620244的博客 4035

硬件工程师的蜗牛成长路

1、《模拟电路课程》R/L/C/继电器/光耦/二极管/三极管/MOS管磁珠/ESD/TVS/肖特基二极管/稳压二极管/保险丝/GDT/TSS/光耦/MOS/运放/BJT比较器/面板开关/按键开关/拨码开关/BUCK/LDO/电源防护器件LM5069单输出PLL/多路输出PLL/单端晶振/差分晶振/晶体(这方面不熟悉,待以后补充)1)速度传感器2)温度传感器3)倾斜角传感器4)火焰传感器5)红外传感器6)呼吸心跳采集chaunganqi1)数字隔离 电平转换芯片/磁隔离/专用隔离芯片。

caozhaokun的博客 1979

arcgis 去除影像黑色边框(nodata)

目的: 加载进arcmap的tif数据发现有黑边。 想要去除黑边。 问题: 1、在属性中设置“将NoData显示为绿色”,发现对黑色区域无效。 2、使用“识别”功能发现黑色区域为“nodata”,而绿色区域没有数值,为空值。 原理: 需要知道没有数据与显示“NoData”不一样。 黑色区域,“识别”显示“NoData”,表示此处没有有效数据,使用“NoData”存储。 绿色区域,“识别”显示“为空值,表示此处没有数据。 解决办法: 1、使用裁剪工具(数据管理-栅格-栅格处理-裁

小琳子要开心呀 1万+

【机器学习-17】数据变换---小波变换特征提取及应用案列介绍

小波变换作为一种前沿的数据分析工具,近年来在信号分析领域崭露头角。小波分析的理论和方法凭借其独特优势,在信号处理、图像处理、语音处理、模式识别以及量子物理等多个领域得到了广泛的应用,堪称近年来在工具及方法上的重大突破。小波变换以其多分辨率的特性,在时域和频域均展现出对信号局部特征的强大表征能力。通过伸缩和平移等运算过程,小波变换能够对信号进行多尺度聚焦分析,为非平稳信号的时频分析提供了一种有效手段。它允许我们由粗及细地逐步观察信号,从而精准地提取出有用信息。

qq_38614074的博客 2万+

Arcgis处理栅格数据中Nodata值

在前面介绍了对栅格数据Nodata进行补充的一种方法,在实际研究过程中,面临的情况多种多样。下图为LUCC数据,在各省边界上存在较多的数据缺失值,这个缺失值一方面可以使用更高精度的其他数据去填充。在缺失值较少的情况下,也可以使用邻域的数据去填充。以下还有几种方法对数据填充,但都是使用Raster Calculation 工具。

weixin_43416590的博客 6184

让 ABAP BAPI_COSTACTPLN_POSTPRIMCOST 不再沉默:一套可落地的参数一致性校验与排错打法

SAP BAPI_COSTACTPLN_POSTPRIMCOST 沉默失败分析与解决方案 问题现象 使用 BAPI_COSTACTPLN_POSTPRIMCOST 上传计划数据时,接口执行不报错但数据未写入 COSP 等计划表,呈现"沉默失败"现象。 根本原因 索引关联断裂:INDEXSTRUCTURE 中 OBJECT_INDEX 和 VALUE_INDEX 未正确关联 COOBJECT 和 PERVALUE/TOTVALUE 表的数据 对象定义冲突:COOBJECT 中同一行填写了多

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 108

跨平台C#上位机开发:.NET MAUI与工业物联网的融合实战

NET MAUI正在重塑工业上位机的开发模式——从“为单一设备定制”转向“全场景覆盖”。其价值不仅在于“代码复用”,更在于打通了工业物联网的“最后一公里”:让边缘设备、云平台、移动终端通过统一的数据模型协同工作。未来,随着.NET MAUI对WebAssembly的支持(计划在.NET 9实现),上位机甚至可直接运行在浏览器中,进一步降低部署门槛。对于工业开发者,掌握跨平台技术意味着能更快响应多样化的现场需求,从“Windows专家”升级为“全栈工业开发者”。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1088

arcgis图层拉伸显示时nodata(无值)区域也有显示该怎么处理?

arcgis图层拉伸显示时nodata(无值)区域也有显示该怎么处理? arcgis图层拉伸显示时nodata(无值)区域也有显示该怎么处理? 答案,这时需要用shp文件重新裁剪,栅格图层在裁剪的时候需要勾选 use input features for clipping geometry(使用输入要素裁剪几何),不选的话是根据数据的外围矩形框范围处理。 这种方法容错率高,容易实现。 https://zhidao.baidu.com/question/2271540596590010868.html 工

sinat_35373367的博客 3841

手把手教你学Simulink--人形机器人控制场景实例:基于Simulink的多连杆人形机器人拉格朗日动力学建模仿真

matlab编辑% 连杆长度 (m)% 躯干(髋到CoM)% 大腿% 小腿% 质量 (kg)% 转动惯量(绕质心,简化为杆)matlab编辑% 躯干CoM(假设在髋上方L_body/2处)% 左大腿CoM% 左小腿CoM% (右腿类似,略)本文完成了基于Simulink的多连杆人形机器人拉格朗日动力学建模仿真,实现了:✅ 定义7-DOF平面人形结构✅ 使用Symbolic Math Toolbox自动推导动力学方程✅ 生成。

MHD0815的博客 145

使用ArcGIS将Nodata区设置为0(软件操作类,非代码类)

两个栅格进行叠加,有时会有一部分没有数据,即用identify点击该区域,Value为NoData,而不是像其他非空区域一样有值。 此时注意nodata区域要赋予0值,因为nodata+任何数=nodata,因此要采用条件查询函数将NoData的地方赋值为0. 方法是ArcTools->Spatial Analyst Tools->Map Algebra->Single Output Map

狮子座明仔知识集散场 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

ArcGIS矢量转栅格结果,不能上传GEE(Google earth Engine)

ArcGIS矢量转栅格结果,不能上传GEE(Google earth Engine) Error :No data value -128.0 cannot be applied to band #0 of type Short <0,255>. Error code:3 GEE提示是:存在-128值,但是gee的数值范围仅包括0-255。nodata一个数值(我碰到了-128等等) 在ArcGIS里面查看以后,发现是在我栅格转矢量的时候,系统默认将nodata赋为-128. 在反复实验之后,

wjz8486的博客 1727

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

arcgis中去除图层白底,并导出透明底tif

如图,有两个层,下面是China.tif图层,上面是guangdong.tif,发现guangdong.tif有白底;右击 内容列表 中的 guangdong图层,并选择属性。勾选显示北京值,并将输入框更改为 255 255 255。最关键的一步,设置NoData 为 255,并保存.最后会根据位置生成一个透明底的tif文件.确定后,返回预览,发现白底不见了.

logyang的专栏 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ArcGIS 背景图像处理

一、直接设置Nodata数值为指定颜色或透明色 二、去除图像背景(Mask 函数计算法) 0、初始图像(有黑色的背景) 1、打开Windows——Image Analysis 2、添加掩膜函数 3、设置背影区域数值参数 4、执行确定,创建新的去背景图层 ...

hawktony的博客 6134

ArcGIS Engine将栅格创建为图层并将背景设置为白色

代码 public static ILayer RasterToLayer(string sFullName) { ILayer pLayer = null; try { var sFolder = Path.GetDirectoryName(sFullName); var sName = Path.GetFileName(sFullName); var pRasterWorks...

a_dev的专栏 2335

ArcMap【面转栅格】结果像素范围为0-255且栅格数据属性表为空

这两天一直在解决 “ArcMap【面转栅格】结果像素范围为0-255且栅格数据属性表为空” 的问题,今天追根溯源发现是【创建栅格】这一步就出错了。之前想要创建500*500的渔网,结果不显示渔网,就选择了输入行列数创建,后来做到【面转栅格】就又出错了。 搜索【创建渔网不显示】发现了可能是坐标系不一致的问题,查看图层坐标系果然还是原始数据的地理坐标系,而输入数据的坐标系已经是投影坐标系了。果断把图层坐标系改成数据坐标系,问题就解决了。 虽然是个小问题,但尝试了各种方法都失败了还挺有挫败感的。 所以说,坐

Lucia's vblog 6267

使用GP裁剪工具裁剪栅格不能“按照矢量图范围”裁剪的一个问题

调用GP工具裁剪栅格数据的代码: ESRI.ArcGIS.Geoprocessor.Geoprocessor gp = new ESRI.ArcGIS.Geoprocessor.Geoprocessor(); gp.OverwriteOutput = true; ESRI.ArcGIS.DataManagementTools...

qq_40821274的博客 1792

栅格数据中NoData值的处理

栅格数据中NoData值的处理 在栅格数据镶嵌时,边界往往无法完全重合,导致边界部分出现NoData,因此需要通过某些方法来填补这些无数据的地方 问题描述:这是广西、广东、江西、湖南四省的DEM,打开后可以看见两省的边界部分会出现空白,并识别空白部分的数据则是NoData 2. 处理方法: 2.1 打开栅格计算器,将NoData的区域赋值为其他值,(赋的值最好是栅格数据的属性表中没有的),这里赋值为9999 在栅格计算器中输入Con(IsNull(“要处理的栅格数据”),9999,“要处理的栅格

simon的博客 2万+
上一篇: VS2010+Opencv2.4.9+QT4.8.0实现图像处理
下一篇: 关于工业化模型在WebGL技术体系下实时渲染的一些优化思路
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值