TfLogarithm (arcpy.sa)
讨论
使用 TfLogarithm 对象的工具为按函数重设等级。
对数的底数和系数之间没有直接关系。
按照定义,输入值趋近于零时,函数值趋近于无穷。随着函数值趋近于无穷,较小的函数值将大幅增加函数的范围。因此,当函数范围线性变换为评估级别时,较小的函数值将影响范围,因而对数曲线的形状可能会丢失。可通过增加 lowerThreshold 截断部分非常低的值。
为解决较小输入值影响函数范围的问题,默认情况下将应用基于输入范围的可变平移。该平移将截断非常低的值,从而使对数函数的形状保持在输出栅格之内。
默认可变平移在概念上的技术相互作用为
- 函数限制通过最小和最大输入值乘以系数计算而得。
- 增量的计算方式为:Delta = Exp(functionLimit)/factor。增量应小于 FLT_EPSILON(等于 1.19209290 x 10-07)。
- 确定平移:shift = inputMinimum - Delta。
语法
参数 | 说明 | 数据类型 |
shift |
定义每个输入值应平移的量。平移值是从输入值中减去的值。将变换函数应用于平移后的输入值以确定函数值。 默认情况下,通过平移进行调整,从而使函数从 lowerThreshold(或非常接近的位置)开始。因此,在函数已限于阈值下限和上限之间的情况下,函数将应用于 0(偏移后的输入值)。 可通过应用平移,使较小输入值不会大幅增加函数值的范围,进而使最终输出评估等级保持常规的函数形状。 The shift can be positive or negative. (默认值为 None) | Double |
factor | 应用于平移后的输入值的乘数。系数会更改对数曲线的增长情况。 (默认值为 None) | Double |
lowerThreshold | 定义开始应用指定变换函数的起始值。在输出栅格上与 lowerThreshold 对应的输入值将分配到自等级评估等级值。低于 lowerThreshold 的输入值将分配到 valueBelowThreshold,并且不会计入函数值范围。 lowerThreshold 必须小于 upperThreshold。 (默认值为 None) | Double |
valueBelowThreshold | 此用户定义的值用于分配输入值小于 lowerThreshold 的输出像元位置。 valueBelowThreshold 的值可以为浮点数、整数或 NoData。在工具对话框内,NoData 左右不使用引号;但在编写脚本时需要使用引号,即 "NoData"。 (默认值为 None) | Variant |
upperThreshold | 定义终止应用指定变换函数的结束值。在输出栅格上与 upperThreshold 对应的输入值将分配到至等级评估等级值。高于 upperThreshold 的输入值将分配到 valueAboveThreshold,并且不会计入函数值范围。 lowerThreshold 必须小于 upperThreshold。 (默认值为 None) | Double |
valueAboveThreshold | 此用户定义的值用于分配输入值大于 upperThreshold 的输出像元位置。 valueAboveThreshold 的值可以为浮点数、整数或 NoData。在工具对话框内,NoData 左右不使用引号;但在编写脚本时需要使用引号,即 "NoData"。 (默认值为 None) | Variant |
属性
属性 | 说明 | 数据类型 |
shift (读写) |
函数的平移值,用于定义在应用函数前每个输入值应减去的量。 | Double |
factor (读写) |
变换函数的系数值,用于确定要应用到已平移输入值的乘数。 | Double |
lowerThreshold (读写) |
变换函数的 lowerThreshold 的值,用于定义开始应用指定变换函数的起始值。 | Double |
valueBelowThreshold (读写) |
输入值低于 lowerThreshold 的值将被分配到输出像元。 | Variant |
upperThreshold (读写) |
变换函数的 upperThreshold 值,用于定义停止应用指定函数的终止值。 | Double |
valueAboveThreshold (读写) |
输入值高于 upperThreshold 的值将被分配到输出像元。 | Variant |
代码实例
演示如何创建 TfLogarithm 类以及如何在 Python 窗口的 RescaleByFunction 工具中使用该类。
import arcpy
from arcpy.sa import *
from arcpy import env
env.workspace = "c:/sapyexamples/data"
outRescale = RescaleByFunction("elevation", TfLogarithm(450, 6.25, "#", "#", "#", "#"), 1, 10)
outRescale.save("c:/sapyexamples/rescaletflo1")
演示如何使用 TfLogarithm 类在 RescaleByFunction 工具中转换输入数据。
# Name: TfLogarithm_Ex_02.py
# Description: Rescales input raster data using an Logarithm function and
# transforms the function values onto a specified evaluation scale.
# Requirements: Spatial Analyst Extension
# Author: esri
# Import system modules
import arcpy
from arcpy import env
from arcpy.sa import *
# Set environment settings
env.workspace = "C:/sapyexamples/data"
# Set local variables
inRaster = "elevation"
# Create the TfLogarithm object
shift = 450
factor = 6.25
lowerthresh = "#"
valbelowthresh = "#"
upperthresh = "#"
valabovethresh = "#"
myTfFunction = TfLogarithm(shift, factor, lowerthresh, valbelowthresh, upperthresh, valabovethresh)
# Set evaluation scale
fromscale = 1
toscale = 10
# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")
# Execute RescaleByFunction
outRescale = RescaleByFunction(inRaster, myTfFunction, fromscale, toscale)
# Save the output
outRescale.save("c:/sapyexamples/rescaletflg2")