<<На Главную         <В меню Советы по ArcGIS

Инструмент Field Calculator является мощным средством для вычислений в атрибутивных таблицах наборов данных ArcGIS. Ещё более широкие возможности откроются для вас, если вы научитесь создавать скрипты на диалекте Python.  Правда, здесь желательно знать некоторые особенности при создании таких скриптов. О небольших, не совсем очевидных тонкостях в случае работы с Python ArcGIS и поговорим немного ниже.

 

Представим, что в таблице отметок высот otmetki нужно создать символьное поле  Kod и добавить в него литеру 'н', 'c' или 'в' (низкая, средняя, высокая) в зависимости от значения высоты в поле elev. Первом делом нам придётся создать это поле. Поступаем сл. образом - в атрибутивной таблице жмём по значку Table Options в левом верхнем углу и в контекстном меню выбираем Add Field :

 

Добавить поле ArcGIS

 

... и в сл. форме задаем атрибуты нового столбца (он будет текстовым  длиной 1 символ для случая нашего примера):

 

 

Теперь настало время работы с Field Calculator - щёлкаем по заголовку вновь созданного столбца и выбираем соотв. пункт меню:

 

Field Calculator в ArcGIS

 

В форме Field Calculator в секции Pre-Logic Script Code есть возможность набрать на диалекте Python нужный нам код :

 

 

 

Небольшой комментарий к рисунку выше. Значение поля Kod  будем вычислять с помощью авторской функции MyFunc. Аргумент  этой функции будем брать из поля elev - в коде это означается как MyFunc(!elev!). Само тело функции (как было указано выше) пропишем в секции Pre-Logic (не забываем для этого выставит флажок Show Codeblock!). Для наглядности приведём здесь код нашего простенького примера с использованием оператора if ... elif ... else:

 

def MyFunc(value):

   if value<1000:

       return 'н'

   elif (value > 1000.0 and value < 2000.0):

       return 'с'

   else: return 'в'

 

Жмём на форме Field Calculator OK и если все было сделано корректно, видим заполненный индексами 'н', 'с', 'в' столбец Kod (для нашего примера). К сожалению, редактор скриптов Python в секции Pre-Logic обладает некоторыми недостатками. Во-первых, нет наглядного контроля проверки корректности введенного кода типа наличия кнопочки Check . А во-вторых,  текст  крайне чувствителен  к наличию ведущих пробелов (правда, этот момент  является особенностью синтаксиса Python' а. Блочные операторы типа if здесь выделяются отступом относительно заголовка конструкции). Например, если в приведенном примеры всего-навсего сдвинуть вправо на несколько позиций конструкцию if :

 

 

... то неминуемо получите сообщение об ошибке типа этого:

 

 

В общем, эту особенность Python  надо иметь в виду. Однако, продолжим ...

 

 

В качестве ещё одного небольшого  примера можно привести решение такой учебной задачки. Предположим, что необходимо заполнить поле Podpis строковым значение, которое должно состоять из названия вершины заглавными буквами и через дефис высоты. Причем для тех отметок, где нет названия, значение должно быть пустым. Соответствующий скрипт может выглядеть так:

 

Небольшой комментарий. Преобразование названия вершины к верхнему регистру выполнено оператором nazv.upper(), а преобразование числового значения высоты конструкцией  '{0}'.format(elv)

 

 А соответствующий  результат заполнения поля Podpis после отработки макроса будет таким:

 

 

Прим. Основные встроенные функции по обработке ваших данных разработчики разместили справа в секции Functions . Для приведенного примера, с тем, чтобы воспользоваться  в нашем учебном случае функцией .upper() достаточно выбрать список типов ( в нашем случае String) и просто дважды щёлкнуть по нужной функции - она тот час же 'залетит' в код скрипта:

 

 

Что характерно. Аналогичного результата можно добиться, используя утилиту Calculate Field из набора Data Management Tools>Fields:

 

Кстати сказать, добавить/удалить поле из атрибутивной таблицы можно с помощью утилит Add/Delete Field

 

Заполнение всех необходимых реквизитов для решения поставленной выше задачки будет выглядеть сл. образом:

 

 

Сообщения об ошибках выполнения скрипта можно посмотреть по меню Geoprocessing>Results (Геообработка>Результаты) :

 

 

Прим. от 21.05.2015  Еще об использовании Python в ArcGIS (создание простой среды разработки) можно посмотреть на нашем сайте здесь

©Simashkov.2014

30.05.2014 г.

Назад