djhua
路人甲
路人甲
  • 注册日期2009-04-17
  • 发帖数1
  • QQ
  • 铜币102枚
  • 威望1点
  • 贡献值0点
  • 银元0个
阅读:1791回复:2

请问如何求出单个栅格像元内,离像元中心最近或者想院内平均的点???

楼主#
更多 发布于:2016-05-23 16:17
[img]file:///D:\用户目录\我的文档\Tencent Files\187149455\Image\C2C\}BA[EP22LE)FWFL3L1G(]`4.png[/img]

图片:QQ图片20160523154435.png


这是一个像元内包含了两个点,请问用什么工具和方法求出以下两种形式的结果?
1.求出离像元中心最近的点,并把点的值赋值给像元。
2.求出像元内所有点的平均值,并把这个平均值赋值给像元。
喜欢0 评分0
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15947
  • QQ554730525
  • 铜币25339枚
  • 威望15364点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
1楼#
发布于:2016-05-27 23:11
最方便的办法,恐怕你要写点程序来实现。

如果写程序不大会,可以逐步来分析了

——————————————————————
在处理图象数据时,我们经常会碰到要求修改栅格图象象元值的问题,比如说DEM图的部分数据错误,我们要进行修改;再比如说栅格图象中有些与周围均匀色彩不一致的错误斑块要更正等等,那我们如何来处理这一类问题呢?
现我以一DEM栅格图(名字为eldodem)为例,现在我要修改它的部分象元值,总结出以下三种方法,大家可以参考一下。第一种方法不大实用,但可借鉴,第二三种方法针对的条件不一致,大家可以在具体情况下进行选择。

一、直接运用转换,思路简单,易操作,但实用性
1、栅格——ascii文件——栅格这种方法是先将栅格图用工具

直接转成ascii文件,然后在ascii文本文件中直接修改需要修改的象元的值,修改好后又用工具

转换成栅格图。这种方法可行,但是不实用,因为我们要搜索到指定的象元好像不是那么简单。那么有没有别的比较好的方法呢?
二、在栅格计算器中操作,方法灵活,可操作性强,实用性强准备工作
先要在option中设置保留的栅格范围,通常情况下默认的为相交后的部分,这里我们要保留整个DEM,所以要改为以下设置:

2、通过点的位置修改点象元值
2.1*问题一、要是我想修改图象中的指定的行列的点的象元值(比如说把第100行,200列的点的值修改为0),那该如何操作呢?
这时候我们可以在栅格计算器中输入以下公式:
con(($$rowmap == 99 & $$colmap == 199),0,[eldodem.img])
(栅格图的编号是从0行0列开始的)

2.2*问题二、那若是要修改指定行列范围内的栅格的象元值,比如说把第101行,251列到第401行,301列的部分的象元值改为0,又改如何进行呢?
con(($$rowmap < 400 & $$rowmap > 100 & $$colmap < 300 & $$colmap > 250),0,[eldodem.img])
结果如下

2.3 *问题三、这些行和列是给定的,但是实际情况往往不是这样的,那若看到一些要修改的点,我如何通过以上的方法来修改它的属性值呢,这时要解决的首要问题是如何获知这个点的行列值,我们可以通过以下方法来解决:
(1)准备工作,设置spatial analyst中的option,设置所需范围,象素以及捕捉

这个确定后再次打开设定捕捉,使生成的栅格和原栅格象元重合

(2)在栅格计算器中分别做出对应的行列栅格图
行栅格图的生成:在栅格计算器中输入以下公式——
r=$$rowmap
c=$$colmap
(在这里r---行,c------列)

(3)然后可以用identify工具,对要修改的点的行列号进行查询

如图,所要修改的点位于第166行,129列,若要修改此点象元值为6,可以在栅格计算器中输入以下公式:
con(($$rowmap == 165 & $$colmap == 128),6,[eldodem.img])
3、通过点面文件来修改象元值
*问题、现在我们有一幅栅格图,由于某种需要要修改其中的部分点单元格的象元值或者是修改部分斑块的象元值,这时候该如何实现呢?本人觉得以下方法可行。
思路主要是(1)先建一点shp或面shp图层,(2)然后在点或面图层上数字化需要修改的点或面,(3)接着将点或面转换成栅格图,(4)在栅格计算器中进行替换运算。
现我仍以eldodem为例,假设其中有部分象元的值是错误的,要对其进行修改,(同时进行点面转换操作)
具体步骤如下:
(1)新建一点文件point_11,然后在上面数字化出需要修改的点。新建一面文件eldodem,数字化出需要修改的面。

(2)将point_11和eldodem在feature to raster工具中分别转换成栅格文件poin1和
和eldo1.
(3)在栅格计算器中进行运算
假设现在要把个别点象元值修改为0,我们在栅格计算器中填入以下的公式:
con(IsNull([poin1]),[eldodem.img],0)

然后点右下角的Evaluate运行
因为点象元值很小,放大可以看到我们修改后的微小的黑点
对于面状象元值的修改,相似的,输入以下公式:
con(IsNull([eldo1]),[eldodem.img],0)

然后运行,得到的图如下

(大家很可能得到的图与此图有异,要在属性的symbol里设置一下,使其为拉伸样式)

可以看到,修改过的部分变为黑色。
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15947
  • QQ554730525
  • 铜币25339枚
  • 威望15364点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
2楼#
发布于:2016-05-27 23:12
http://resources.arcgis.com/zh-cn/help/main/10.1/index.html#//001w0000001s000000

支持“像元大小”环境设置的工具可以设置在操作时使用的输出栅格像元大小或分辨率。默认输出分辨率由最粗糙的输入栅格数据集决定。


用法说明

  • 默认输出分辨率由最粗糙的输入栅格数据集决定。
  • 如果要素数据集作为工具的输入,则默认像元大小将采用要素数据集范围的宽度或高度(取较小的值)除以 250 后得出的值。
  • 如果指定了数字像元大小值,则当输出使用的空间参考与输入数据的空间参考不同时,输入数据集不进行投影。在其他情况下,输入数据集将进行投影并将使用新的像元大小。
  • 指定一个比输入栅格数据集像元大小更精细的像元大小时,务必谨慎。不会创建任何新数据;将使用最邻近重采样法对单元进行插值。结果的精度仅与最粗糙的输入相同。



对话框语法

  • 输入最大值 - 使用所有输入数据集的最大像元大小。这是默认设置。
  • 输入最小值 - 使用所有输入数据集的最小像元大小。
  • 如下面的指定 - 在以下字段中指定数值。
  • 与图层 <名称> 相同 - 使用指定图层或栅格数据集的像元大小。



脚本语法


arcpy.env.cellSize = cellsize_option
[table=799,baseline][tr][td]
cellsize_option[/td][td]
说明[/td][/tr][tr][td]
MAXOF[/td][td]
输入最大值 - 所有输入数据集的最大像元大小。这是默认设置。[/td][/tr][tr][td]
MINOF[/td][td]
输入最小值 - 所有输入数据集的最小像元大小。[/td][/tr][tr][td]
number[/td][td]
直接使用指定的像元大小值。[/td][/tr][tr][td]
layer_name[/td][td]
使用指定图层或栅格数据集的像元大小。[/td][/tr][/table]cellSize 语法


import arcpy # Set the cell size environment using a keyword. arcpy.env.cellSize = "MINOF" # Set the cell size environment using a number. arcpy.env.cellSize = 20 # Set the cell size environment using a raster dataset. arcpy.env.cellSize = "C:/sapyexamples/data/myraster"
举报 回复(0) 喜欢(0)     评分
游客

返回顶部