Skip to main content

转换函数的公式

需具备 Spatial Analyst 许可方可使用。

本节介绍了用于按函数重设等级工具中转换函数的公式。 转换函数公式表示为 Spatial Analyst 地图代数表达式。

确定了每个转换函数的通用公式。 默认情况下,更改通用公式以适应输入数据集的最小值 (lowerThreshold) 和最大值 (upperThreshold)。 下面还介绍了如何确定默认参数。

使用通用公式,可以定义任意数量的函数曲线,并且可以捕获函数曲线的任何部分。 在公式的默认版本中,函数仅有一条曲线可以拟合输入数据集的最小值和最大值。 因此,除了应用转换值的线性缩放外,以不同单位(例如摄氏度或华氏度)表示的数据将产生相同的输出评估值。

应用转换函数

从概念上讲,应用转换函数的步骤如下:

  1. 指定输入数据集和函数参数。

  2. 应用转换公式。

  3. 将转换后的值线性缩放到评估等级。

用于将转换值缩放到上面步骤 3 中的评估等级的线性变换方程如下所示。

\(ScaledY = fromScale + (Y - min(Y)) * r\)

  • 其中:

    \(Y = F(In)\) 为转换后的值,公式为 \(F\),一般格式如下(其中 \(In\) 是输入值)

    \(r\)\(\Large \frac {(toScale - fromScale)}{(max(Y) - min(Y))}\) 的结果

    \(min(Y)\)\(Y\) 的最小值

    \(max(Y)\)\(Y\) 的最大值

    \(fromScale\) 是评估等级的最小值(例如,1)

    \(toScale\) 是评估等级的最大值(例如,10)

指数

以下是指数转换函数的公式和默认值。

一般格式

公式的一般格式如下。

\(Exp((In – inShift) * baseFactor)\)

  • 其中:

    \(In\) 为输入值

    \(inShift\) 是从输入值中减去的值

    \(baseFactor\) 是移位输入值的乘数,用于控制指数函数增加的急剧程度

默认值

\(inShift\)\(baseFactor\) 的默认值计算方式如下。

\(inShift = Con(toScale > fromScale, A, B)\)

\(baseFactor = Con(toScale > fromScale, C, D)\)

  • 其中:

    \(A = \Large \frac {(minIn * Ln(toScale) - maxIn * Ln(fromScale))}{(Ln(toScale) - Ln(fromScale))}\)

    \(B = \Large \frac {(minIn * Ln(fromScale) - maxIn * Ln(toScale))}{(Ln(fromScale) - Ln(toScale))}\)

    \(C = \Large \frac {(Ln(toScale) - Ln(fromScale))}{(maxIn - minIn)}\)

    \(D = \Large \frac {(Ln(fromScale) - Ln(toScale))}{(maxIn - minIn)}\)

    \(Ln\) 是以 e 为底的值的对数

    \(minIn\) 是输入的最小值

    \(maxIn\) 是输入的最大值

高斯

以下是高斯转换函数的公式和默认值。

一般格式

公式的一般格式如下。

\(Exp(-Spread * Square(In - MidPoint))\)

  • 其中:

    \(Spread\) 为散度参数,用于控制自中点开始衰减的急剧程度

    \(In\) 为输入值

    \(MidPoint\) 为中点参数,可定义高斯曲线的中心

默认值

\(Spread\)\(MidPoint\) 的默认值计算方式如下。

\(Spread = Ln(10) * 4 / Pow(MidPoint - minIn, 2)\)

\(MidPoint = (maxIn + minIn) / 2\)

  • 其中:

    \(Ln(10)\) 是以 e 为底的 10 的对数

    \(Pow(MidPoint - minIn, 2)\)\(MidPoint - minIn\) 的 2 次方值

    \(minIn\) 是输入的最小值

    \(maxIn\) 是输入的最大值

较大值

以下是大值转换函数的公式和默认值。

一般格式

公式的一般格式如下。

\(1.0 / (1.0 + Pow(In / MidPoint, - Spread))\)

  • 其中:

    \(In\) 为输入值

    \(MidPoint\) 为中点参数,可定义此函数的过渡点

    \(Spread\) 为散度参数,用于控制优先级升高和降低的速度

默认值

\(Spread\)\(MidPoint\) 的默认值计算方式如下。

\(Spread = 5\)

\(MidPoint = (maxIn + minIn) / 2\)

  • 其中:

    \(minIn\) 是输入的最小值

    \(maxIn\) 是输入的最大值

线性

以下是线性转换函数的公式和默认值。

一般格式

根据坡度类型,公式的一般形式如下:

正斜率(最小值 < 最大值):

\(Con(In < Min, 0, Con(In > Max, 1, (In - Min) / Diff))\)

负斜率(最小值 > 最大值):

\(Con(In > Min, 0, Con(In < Max, 1, (In - Min) / Diff))\)

  • 其中:

    \(In\) 为输入值

    \(Min\) 为指定最小值,用于建立线性函数必须经过的第一个点。

    \(Max\) 为指定最大值,用于建立线性函数必须经过的第二个点。

    \(Diff\) 等于 \(Max - Min\)

默认值

\(Min\)\(Max\) 的默认值计算方式如下。

\(Min = minIn\)

\(Max = maxIn\)

  • 其中:

    \(minIn\) 是输入的最小值

    \(maxIn\) 是输入的最大值

对数

以下是对数转换函数的公式和默认值。

一般格式

公式的一般格式如下。

\(Ln((In – inShift) * baseFactor)\)

  • 其中:

    \(In\) 为输入值

    \(InShift\) 是从输入值中减去的值

    \(baseFactor\) 是移位输入值的乘数,用于控制对数函数的上升程度

默认值

\(inShift\)\(baseFactor\) 的默认值计算方式如下。

\(inShift = Con(toScale > fromScale, A, B)\)

\(baseFactor = Con(toScale > fromScale, C, D)\)

  • 其中:

    \(A = \Large \frac {(minIn * Exp(toScale) - maxIn * Exp(fromScale))}{(Exp(toScale) - Exp(fromScale))}\)

    \(B = \Large \frac {(minIn * Exp(fromScale) - maxIn * Exp(toScale))}{(Exp(fromScale) - Exp(toScale))}\)

    \(C = \Large \frac {(Exp(toScale) - Exp(fromScale))}{(maxIn - minIn)}\)

    \(D = \Large \frac {(Exp(fromScale) - Exp(toScale))}{(maxIn - minIn)}\)

    \(Exp\) 是以 e 为底的值的指数

    \(minIn\) 是输入的最小值

    \(maxIn\) 是输入的最大值

逻辑衰减

以下是逻辑衰减转换函数的公式。

一般格式

公式的一般格式如下。

\(C / (1 + A * Exp((In – Min) * B))\)

公式中参数定义与 LogisticGrowth 相同。

注:

LogisticGrowth 方程中,Exponential 计算由计算指数的值的负值确定:Exp(- (In - Min) * B)。

逻辑增长

以下是逻辑增长转换函数的公式和默认值。

一般格式

公式的一般格式如下。

\(C / (1 + A * Exp( - (In – Min) * B))\)

  • 其中:

    \(Min\) 为指定最小值,用于控制逻辑增长的起点

    \(C\) 是容量或上水平渐近线

    \(A\) 用于确定 \(In = Min\) 时的截距

    \(B\) 用于确定指数函数 Exp 的底数

默认值

\(C\)\(A\)\(B\) 的默认值确定方式如下。

\(C = 100\)

\(A = C / yInterceptPercent - 1\)

\(B = \Large \frac {Ln(A)}{(0.5 * (Max + Min) - Min)}\)

  • 其中:

    \(yInterceptPercent\) 是 y 截距除以 \(C\) 的百分比;对于 LogisticGrowth,默认设置为 1;对于 LogisticDecay,默认设置为 99

    \(Min\) 是指定最小值,默认设置为输入的最小值

    \(Max\) 是指定最大值,默认设置为输入的最大值

    \(Ln(A)\) 为以 e 为底的 \(A\) 的对数

    \(0.5 * (Max + Min)\) 是拐点 \(y = C / 2\) 的 x 坐标,以确保拐点位于 \(Min\)\(Max\) 中间

MS 较大值

以下是 MSLarge 转换函数的公式和默认值。

一般格式

公式的一般格式如下。

\(Con(In > nMeans, 1 - (nStdv / (In - nMeans + nStdv)), 0)\)

  • 其中:

    \(In\) 为输入值

    \(nMeans\) 等于 \(meanMultiplier\) * mean

    \(nStdv\) 等于 \(STDMultiplier\) * std,其中 std 是指总体间的标准差

默认值

默认情况下,meanMultiplierSTDMultiplier 均设置为 1。

MS 较小值

以下是 MSSmall 转换函数的公式和默认值。

一般格式

公式的一般格式如下。

\(Con(In > nMeans, nStdv / (In - nMeans + nStdv), 1)\)

  • 其中:

    \(In\) 为输入值

    \(nMeans\) 等于 meanMultiplier * mean

    \(nStdv\) 等于 STDMultiplier * std,其中 std 是指总体间的标准差

默认值

默认情况下,meanMultiplierSTDMultiplier 均设置为 1。

近邻

以下是近邻转换函数的公式和默认值。

一般格式

公式的一般格式如下。

\(1.0 / (1.0 + Spread * Pow(In - MidPoint, 2))\)

  • 其中:

    \(In\) 为输入值

    \(Spread\) 为散度参数,用于控制自中点开始衰减的急剧程度

    \(MidPoint\) 为中点参数,可定义曲线的中心

默认值

\(Spread\)\(MidPoint\) 的默认值计算方式如下。

\(Spread = 36 / Pow(MidPoint - minIn, 2)\)

\(MidPoint = (maxIn + minIn) / 2\)

  • 其中:

    \(Pow(MidPoint - minIn, 2)\)\(MidPoint - minIn\) 的 2 次方值

    \(minIn\) 是输入的最小值

    \(maxIn\) 是输入的最大值

以下是转换函数的公式和默认值。

一般格式

公式的一般格式如下。

\(Pow(In – inShift, Exponent)\)

  • 其中:

    \(In\) 为输入值

    \(inShift\) 是从输入值中减去的值

    \(Exponent\) 是将函数提升到的指数

默认值

\(inShift\)\(Exponent\) 的默认值计算方式如下。

\(inShift = Con(toScale > fromScale, A, B)\)

  • 其中:

    \(A = Con(fromScale == 1, minIn - 1, minIn)\)

    \(B = Con(toScale == 1, minIn - 1, minIn)\)

    \(minIn\) 是输入的最小值

    \(maxIn\) 是输入的最大值

\(Exponent = Con(toScale > fromScale, C, D)\)

  • 其中:

    \(C = Con(fromScale == 0, C1, Con(fromScale == 1, C2, 2))\)

    \(C1 = Con(toScale <= 1, 1, Ln(toScale) / (maxIn - inShift))\)

    \(C2 = Ln(toScale) / Ln(maxIn - inShift)\)

    \(D = Con(toScale == 0, D1, Con(toScale == 1, D2, 2))\)

    \(D1 = Con(fromScale <= 1, 1, Ln(fromScale) / (maxIn - inShift))\)

    \(D2 = Ln(fromScale) / Ln(maxIn - inShift)\)

    \(Ln\) 是以 e 为底的值的对数

    \(minIn\) 是输入的最小值

    \(maxIn\) 是输入的最大值

较小值

以下是小值转换函数的公式和默认值。

一般格式

公式的一般格式如下。

\(1.0 / (1.0 + Pow(In / MidPoint, Spread))\)

  • 其中:

    \(In\) 为输入值

    \(MidPoint\) 为中点参数,可定义此函数的过渡点

    \(Spread\) 为散度参数,用于控制优先级降低和升高的速度

默认值

\(Spread\)\(MidPoint\) 的默认值计算方式如下。

\(Spread = 5\)

\(MidPoint = (maxIn + minIn) / 2\)

  • 其中:

    \(minIn\) 是输入的最小值

    \(maxIn\) 是输入的最大值

对称线性函数

以下是对称线性转换函数的公式和默认值。

一般格式

根据不同的坡度类型,公式的一般形式如下:

对于正斜率 (\(Min < Max\)):

\(Con(In < Min , 0, Con(In < MidP, (In - Min) / HDiff, Con(In > Max, 0, (Max - In) / HDiff)))\)

对于负斜率 (\(Min > Max\)):

\(Con(In < Max, 1, Con(In < MidP, (In - MidP) / HDiff, Con(In > Min, 1, (MidP - In) / HDiff)))\)

  • 其中:

    \(In\) 为输入值

    \(Min\) 为指定最小值,用于建立 \(SymmetricLinear\) 函数必须经过的一个点。

    \(Max\) 为指定最大值,用于建立 \(SymmetricLinear\) 函数必须经过的其他点。

    \(Diff\) 等于 \(Max - Min\)

    \(HDiff\) 等于 \(0.5 * Diff\)

    \(MidP\) 等于 \(Min + HDiff\)

默认值

\(Min\)\(Max\) 的默认值计算方式如下。

\(Min = minIn\)

\(Max = maxIn\)

  • 其中:

    \(minIn\) 是输入的最小值

    \(maxIn\) 是输入的最大值