TfLogarithm (arcpy.sa)
Краткая информация
Задает функцию преобразования Logarithm, которая определяется по контролирующим форму параметрам сдвига и фактора, а также по верхнему и нижнему порогам, задающим диапазон, в котором функция будет применена.
Более подробно о влиянии параметров на эту функцию преобразования
Обсуждение
Инструмент, который использует объект TfLogarithm, – это Пересчет по функции (Rescale by Function).
Между основанием логарифма и factor нет прямой связи.
По определению, при приближении входных значений к нулю, значения функции приближаются к бесконечности. По мере приближения значений функции к бесконечности, меньшие значения функции существенно увеличивают диапазон функции. В результате, когда диапазон функции линейно преобразуется в шкалу оценки, меньшие значения функции искажают диапазон функции так, что форма логарифмической кривой может оказаться потерянной. Увеличение lowerThreshold можно использовать для срезания некоторых действительно низких значений.
Для решения проблемы искажения диапазона функции маленькими значениями, по умолчанию применяется переменный сдвиг, основанный на диапазоне входных значений. Этот сдвиг убирает очень низкие значения, сохраняя форму логарифмической функции в выходном растре.
Технические основы переменного сдвига, использующегося по умолчанию
- Лимит функции вычисляется по минимальному и максимальному входным значениям, умноженным на factor.
- Дельта вычисляется так: Delta = Exp(functionLimit)/factor. Дельта должна быть меньше FLT_EPSILON (которое равно 1.19209290 x 10-07).
- Определение сдвига: shift = inputMinimum – Delta.
Синтаксис
Параметр | Объяснение | Тип данных |
shift |
Определяет степень смещения каждого из входных значений. Значение сдвига вычитается из входного значения. Функция преобразования применяется к смещенному входному значению для определения значения функции. По умолчанию сдвиг меняет функцию так, чтобы она начиналась у lowerThreshold (или очень близко к нему). В результате функция будет применена к 0 (смещенное входное значение) и ограничена верхним и нижним порогами. Сдвиг можно применить так, чтобы низкие входные значения не существенно увеличивали диапазон значений функции; поэтому конечная выходная шкала оценки будет сохранять общую форму функции. Сдвиг может быть положительным или отрицательным. (Значение по умолчанию — None) | Double |
factor | Множитель, применяемый к входным значениям со сдвигом. Параметр factor меняет степень возрастания логарифмической кривой. (Значение по умолчанию — None) | Double |
lowerThreshold | Задает начальное значение, к которому начинает применяться указанная функция преобразования. Входное значение, соответствующее lowerThreshold, присваивается шкале оценки fromScale в выходном растре. Входные значения меньшее lowerThreshold присваиваются значению valueBelowThreshold и не рассматриваются в диапазоне значений функции. Значение lowerThreshold должно быть меньше, чем upperThreshold. (Значение по умолчанию — None) | Double |
valueBelowThreshold | Указываемое пользователем значение, которое будет присвоено ячейкам, чьи значения ниже lowerThreshold. Значение valueBelowThreshold может быть числом с плавающей точкой, целым числом или NoData. В диалоговом окне инструмента вокруг NoData не используются кавычки; однако в скрипте необходимо указывать "NoData" (с кавычками). (Значение по умолчанию — None) | Variant |
upperThreshold | Задает конечное значение,на котором заканчивается применение указанной функции преобразования. Входное значение, соответствующее upperThreshold, присваивается шкале оценки toScale в выходном растре. Входные значения выше upperThreshold присваиваются значению valueAboveThreshold и не рассматриваются в диапазоне значений функции. Значение lowerThreshold должно быть меньше, чем upperThreshold. (Значение по умолчанию — None) | Double |
valueAboveThreshold | Указываемое пользователем значение, которое будет присвоено ячейкам, чьи значения выше upperThreshold. Значение valueAboveThreshold может быть числом с плавающей точкой, целым числом или NoData. В диалоговом окне инструмента вокруг NoData не используются кавычки; однако в скрипте необходимо указывать "NoData" (с кавычками). (Значение по умолчанию — None) | Variant |
Свойства
Свойство | Объяснение | Тип данных |
shift (чтение и запись) |
Значение shift для функция, задающее объем вычитания из каждого входного значения перед применением функции. | Double |
factor (чтение и запись) |
Значение factor для функции преобразования, задающее множитель, применяемый к входным значениям со сдвигом. | Double |
lowerThreshold (чтение и запись) |
Значение lowerThreshold для функция преобразования, задающее начальное значение, к которому начинает применяться функция преобразования. | Double |
valueBelowThreshold (чтение и запись) |
Значение, которое будет присвоено ячейкам выходного растра, чьи значения ниже lowerThreshold. | Variant |
upperThreshold (чтение и запись) |
Значение upperThreshold для функция преобразования, задающее конечное значение, к которому начинает применяться функция преобразования. | Double |
valueAboveThreshold (чтение и запись) |
Значение, которое будет присвоено ячейкам выходного растра, чьи значения превышают upperThreshold. | Variant |
Пример кода
Иллюстрирует создание класса TfLogarithm и его использование в инструменте RescaleByFunction в окне Python.
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")
Иллюстрирует преобразование входных данных с помощью инструмента RescaleByFunction, использующего класс TfLogarithm.
# 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")