“从24个输入光栅波段计算重叠像素值的中值”的答案 https://knowledge.亚搏在线safe.com/questions/41829/calculate-the-median-of-overlapping-pixel-values-f.html “从24个输入光栅波段计算重叠像素值的中位数”问题的最新答案 答案由隆 https://knowledge.亚搏在线safe.com/answers/50470/view.html

移动平均线……

如果您正在使用FME 2017.0+,可以使用光栅镶嵌器计算多个波段值的平均值@jdh建议之前。一种可能的方法,以获得移动平均在73波段,每个移动范围包括24波段是:

  1. 克隆(份数:50,拷贝数属性:_copynum):创建50(= 73 - 24 + 1)源栅格的副本。图50是移动的范围的数量。
  2. RasterBandSeparator(频带索引属性:_band_index):分解复制栅格成单波段栅格。[50×73 = 3650个单波段栅格]
  3. 测试仪(_copy_num <= _band_index AND _band_index <_copy_num + 24):针对每个移动范围(24个频带)选择栅格。[50×24 = 1200个单波段栅格]
  4. RasterMosaicker(分组方式:_copynum,输入排序:按组的,重叠的值:平均):Mosaick栅格的每个的移动范围(24个频带)。在这里,24条带的平均值将导致单元格的值,如果你设定的平均对重叠度参数。[50个单波段栅格]
  5. RasterBandCombiner(集团通过: ):合并的光栅成具有50个频带,其中包含移动平均值的单个光栅。[单个栅格由50个频带]

但是,我不明白为什么@if函数出现在您的表达式示例中。我认为计算平均值不需要条件运算。如果需要一个条件操作有特定的原因,应该修改上面的过程(或者不能应用)。

格林威治时间2017年8月12日星期六10:58:43
答案由uba_kp https://knowledge.亚搏在线safe.com/answers/50469/view.html

亲爱的FME-Users,

我在翻译时犯了一个错误。对不起,我是德国人。(收集整理我需要的不是中位数,而是我要计算的移动平均数。

现在我再重复一遍:
我试着用变压器来计算RasterExpressionEvaluator。我认为它工作,但表达式超载,因为所有光栅有73波段。

这是我的代码的第一行:
@if(A [23],(A [0] + A [1] + A [2] + A [3] + A [4] + A [5] + A [6] + A [7] + A[8]+A[9]+A[10]+A[11]+A[12]+A[13]+A[14]+A[15]+A[16]+A[17]+A[18]+A[19]+A[20]+A[21]+A[22]+A[23])/24,A[0])
这是我的代码的最后一行:
@if(A [73],(A [50] + A [51] + A [52] + A [53] + A [54] + A [55] + A [56] + A [57] + A[58] + A [59] + A [60] + A [61] + A [62] + A [63] + A [64] + A [65] + A [66] + A [67] + A[68] + A [69] + A [70] + A [71] + A [72] + A [73])/ 24,A [50])

有什么办法可以简化表达式吗?可能只有一个表达式?

后的变压器RasterExpressionEvaluator我已经接通了变压器RasterToPolygonCoercer生成矢量数据。

非常感谢你和最好的问候!

康拉德

格林威治时间2017年8月12日星期六09:12:33 uba_kp
答案由隆 https://knowledge.亚搏在线safe.com/answers/42125/view.html

@UBA_KP,如果您需要为每个单元计算24个频带值的“中值”,则RasterExpressionEvaluator不会提供任何帮助。因为,transformer不支持list(数组)操作,尽管有必要创建一个包含24个值的列表并对列表进行排序以计算“中值”。如。

列表:(1、3、1、3、2、1]- >排序:[1,1,1,2,3,3]- >:中位数(1 + 2)/ 2 = 1.5

点击这里了解更多关于“中位数”的信息:https://en.wikipedia.org/wiki/Median

作为@jdh@david_r建议使用rastercellcoer强制光栅,您可以获得单独的网格点,每个点都有24个带值作为列表属性。然后可以使用ListSorter和ExpressionEvaluator来计算列表的中位数基数。最后使用3DForcer将z坐标的中值设置为每个点,并使用数字光栅化器重新创建光栅。

然而,强制的性能并不好。如果您不喜欢强制方法,Python脚本可能是更好的解决方案@david_r提及。

或者,这也是一种可能的方式。

  1. RasterBandSeparator:分离源栅格到它们中的每一个具有单一条带24个栅格。
  2. PointCloudCombiner:创建一个从24个栅格单点云。点云将会对每一个网格单元24分。
  3. PointCloudStatsRasterizer(从集线器):这种变压器计算基于覆盖的输入点云的每个网格单元的多个点的统计值。设置“中值”的统计计算模式参数和源光栅的X / Y单元间隔设定为X / Y单元格间距的参数。可以使用RasterPropertyExtractor提取源光栅的X / Y细胞间距。
格林威治时间2017年3月29日星期三13:37:52
答案由david_r https://knowledge.亚搏在线safe.com/answers/42046/view.html

@jdh提到的rastercellcocer可以帮助您,但是要注意,在处理大型光栅时它可能非常慢。显然,你现在可以强迫光栅到点云,这应该更快,但我没有经验。

如果您对Python不陌生,我建议您研究一下fmeobjects API的新光栅功能。@takashi写了一些很好的示例代码,可以作为一个起点:

https://knowledge.亚搏在线safe.com/questions/38000/python-fme-objects-api-for-raster-manipulation.html

格林威治时间2017年3月28日星期二12:48:06 david_r
答案由uba_kp https://knowledge.亚搏在线safe.com/answers/42034/view.html

谢谢你的投入@jdh@gio

我尝试用transformer“RasterExpressionEvaluator”来计算它。我认为它是有效的,但是表达式重载了。

下面是重复代码的第一行:
“@ if([23]([0] +[1] +[2] +[3] +[4] +[5] +[6] +[7] +[8] +[9] +[10] +[11] +[12] +[13] +[14] +[15] +[16] +[17] +[18] +[19] +[20] +[21] +[22] +[23]) / 24日[0])”

有什么办法可以简化表达式吗?可能只有一个表达式?

我在附件中添加了一些截图。

非常感谢。:)

致以最亲切的问候。康拉德

格林威治时间2017年3月28日星期二08:55:57 uba_kp
答案由jdh https://knowledge.亚搏在线safe.com/answers/41835/view.html

我上一次做这样的事情是在几年前,当时我强制光栅指向点,聚合col上的点,保持列表的行数,然后对列表进行排序和分析。

注意,这是针对24个1波段光栅的,如果您有一个具有24波段的光栅,您可以使用波段作为属性强制光栅,并跳过聚合步骤。


如果我现在要这么做,我将首先研究强制到点云,如果这不会导致任何结果,然后试验新的python光栅api。

请注意,如果你想要的平均值,而不是媒体,然后设置为平均重叠值RasterMosaicker将要走的路。

格林尼治时间2017年3月24日星期五16:12:34 jdh
答案由gio https://knowledge.亚搏在线safe.com/answers/41834/view.html

的ExpressionEvaluator仅具有烯B输入端。

B可有多个光栅但配对,所以B的,不把它们之间的计算。

你可以使用一个WSC来依次用更新A输入计算所有的B输入端。

或先提取重叠位,提取数据,处理该数据,并重建光栅。

格林尼治时间2017年3月24日星期五15:58:43 gio