<null> в "1"

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
swdartvader
Активный участник
Сообщения: 190
Зарегистрирован: 16 дек 2012, 09:08
Репутация: 48
Откуда: Калининград

<null> в "1"

Сообщение swdartvader »

Доброго времени суток! Подскажите пожалуйста, как решить проблему:

С помощью регулярной сетки иного экстента были извлечены значения с растра интерполяции экстентом отличного от сетки. Соответственно в некоторых местах значения точек сетки приняли значение <null>. Однако, для расчетов это невероятно не подходит, нужна полная сетка. Отсюда вопрос : как значения <null> сделать 1 или 0, плюсование ко всему полю 1 не получилось. Заранее спасибо.
lam
Гуру
Сообщения: 1018
Зарегистрирован: 01 авг 2012, 13:55
Репутация: 241

Re: <null> в "1"

Сообщение lam »

1. Экспорт в аски файл.
2. Открыть в текстовом редакторе, команда "Найти и заменить".
3. Импорт из аски файла.
А.Серов
Активный участник
Сообщения: 209
Зарегистрирован: 14 янв 2010, 15:40
Репутация: 68
Откуда: Сыктывкар
Контактная информация:

Re: <null> в "1"

Сообщение А.Серов »

Если у Вас есть Spatial Analyst то задача решается при помощи инструмента Spatail Analyst Tools - Map Algebra - Single output map algebra (это в ArcToolBox). Запускаете инструмент, появляется диалог.

В окошке Map Algebra Expression необходимо воспользоваться функцией CON, написать что-то типа
CON("[IN_GRID]=NULL", "1", "[IN_GRID]").

Уточните синтаксис по справке, пишу по памяти для версии 9.3
swdartvader
Активный участник
Сообщения: 190
Зарегистрирован: 16 дек 2012, 09:08
Репутация: 48
Откуда: Калининград

Re: <null> в "1"

Сообщение swdartvader »

А.Серов писал(а):Если у Вас есть Spatial Analyst то задача решается при помощи инструмента Spatail Analyst Tools - Map Algebra - Single output map algebra (это в ArcToolBox). Запускаете инструмент, появляется диалог.

В окошке Map Algebra Expression необходимо воспользоваться функцией CON, написать что-то типа
CON("[IN_GRID]=NULL", "1", "[IN_GRID]").

Уточните синтаксис по справке, пишу по памяти для версии 9.3
У меня версия 10 sp 5. В spatial analyst tools нету Single output map algebra, nтолько calculate raster, однако Con есть в Conditional, но там предлагается только провести манипуляцию с растром, а у меня это точечная векторная сетка.
Я попробовал через выражение на питоне сделать таким образом !powerkf!.replace("Null", "1"). Считает до 30% а потом выдает ошибку:
Executing: CalculateField extract_power powerkf !powerkf!.replace("Null", "1") PYTHON_9.3 #
Start Time: Wed Jan 02 20:46:46 2013
ERROR 000539: <type 'exceptions.SyntaxError'>: invalid syntax (<expression>, line 1)
Failed to execute (CalculateField).
Failed at Wed Jan 02 20:46:53 2013 (Elapsed Time: 7.00 seconds)
А.Серов
Активный участник
Сообщения: 209
Зарегистрирован: 14 янв 2010, 15:40
Репутация: 68
Откуда: Сыктывкар
Контактная информация:

Re: <null> в "1"

Сообщение А.Серов »

Так с вектором еще проще. Вам нужно последовательно выполнить две операции (названия меню для 9.3):
1. Выборку всех объектов со значением поля NULL (Selection-Select By Attributes)
2. Рассчитать новое значение поля для всех выбранных объектов. Правая кнопка мыши на имени слоя-Attribute Table-Правая кнопка мыши на имени колонки-Field Calculator. Не забыть поставить галочку Only selected. Ну а дальше сами сообразите)
swdartvader
Активный участник
Сообщения: 190
Зарегистрирован: 16 дек 2012, 09:08
Репутация: 48
Откуда: Калининград

Re: <null> в "1"

Сообщение swdartvader »

Ой, прошу прощения, я не уточнил - мне необходимо именно посредством некоторой операции-выражения осуществить это, чтобы потом запихнуть все это дело в модель. Через калькулятор поля получается все отлично, но вот именно при автоматизации этого дела и происходит моя проблема.
А.Серов
Активный участник
Сообщения: 209
Зарегистрирован: 14 янв 2010, 15:40
Репутация: 68
Откуда: Сыктывкар
Контактная информация:

Re: <null> в "1"

Сообщение А.Серов »

swdartvader писал(а):Ой, прошу прощения, я не уточнил - мне необходимо именно посредством некоторой операции-выражения осуществить это, чтобы потом запихнуть все это дело в модель. Через калькулятор поля получается все отлично, но вот именно при автоматизации этого дела и происходит моя проблема.
И этому тоже можно помочь! Используйте ModelBuilder. Кнопка для его запуска расположена в Toolbar Main Menu. Откроется окно Model Builder. Затем перетащите туда нужные элементы из ArcToolbox (Например Data Management Tools-Fields-Calculate Field) и Table of Contents, постройте модель и отладьте ее. Затем в окне ModelBulider из меню выполните Model-Export-To Script-Python. Получите Вашу модель, но написанную на Питоне.

PS. Задавать вопросы тоже искусство, научитесь со временем))
lam
Гуру
Сообщения: 1018
Зарегистрирован: 01 авг 2012, 13:55
Репутация: 241

Re: <null> в "1"

Сообщение lam »

На всякий случай, сделать копию исходного растра.
В растре поменять null на 1 (одним из предложенных выше способом), а потом уже извлекать значения из растра для регулярной сетки точечного шейп файла.
swdartvader
Активный участник
Сообщения: 190
Зарегистрирован: 16 дек 2012, 09:08
Репутация: 48
Откуда: Калининград

Re: <null> в "1"

Сообщение swdartvader »

lam писал(а):На всякий случай, сделать копию исходного растра.
В растре поменять null на 1 (одним из предложенных выше способом), а потом уже извлекать значения из растра для регулярной сетки точечного шейп файла.
Под мою задачу все оказалась очень просто - существовала функция IsNull, обработав которой растр, я получил в пустых местах 1, а в местах наличия объектов 0, очень удобно.
Ответить

Вернуться в «ArcGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 9 гостей