field calculator - if...

Вопросы общего характера по ГИС и дистанционному зондированию, не связанные с конкретным ПО.
Ответить
oleg
Завсегдатай
Сообщения: 460
Зарегистрирован: 03 фев 2005, 11:46
Репутация: 15
Контактная информация:

field calculator - if...

Сообщение oleg » 24 авг 2011, 01:06

Есть 2 исходных текстовых поля (A, B) и пустое конечное (С). Данные "A" и "В" есть не для всех записей. В "C" нужно записать значение "A", если оно есть, и если нет - записать "В", если оно есть. Ничего нет - ничего не пишем в "C". Подскажите, пожалуйста, синтаксис (Arc/gv/Q). Спасибо.

UPD:Поправил опечатку.
Последний раз редактировалось oleg 24 авг 2011, 15:23, всего редактировалось 1 раз.

Slinger
Гуру
Сообщения: 879
Зарегистрирован: 17 июн 2010, 23:14
Репутация: 207
Откуда: Москва

Re: field calculator - if...

Сообщение Slinger » 24 авг 2011, 12:18

Видимо:
записать "С", если оно есть.
Записать необходимо B, если нету А. А то вроде как C пустая...

Что-то на ум приходит только самое простое, а-ля:
В этом случае в обновляемую колонку запишется значения A и за ними значения B. Если A пустое, то запишется только B и наоборот. Если оба заполнены, то запишется и то и другое.

Хотя я всё-таки что-то не так понял =)

oleg
Завсегдатай
Сообщения: 460
Зарегистрирован: 03 фев 2005, 11:46
Репутация: 15
Контактная информация:

Re: field calculator - if...

Сообщение oleg » 24 авг 2011, 20:09

Slinger писал(а):Видимо:
Записать необходимо B, если нету А. А то вроде как C пустая...
Да, поправил выше, спасибо.
Нужна запись в порядке приоритета, вариант со всеми значениями к сожалению не подходит...

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 792
Ваше звание: званий не имею
Откуда: Москва

Re: field calculator - if...

Сообщение Александр Мурый » 24 авг 2011, 23:27

Не знаю точно, как в "Arc/gv/Q", но я создал подобную таблицу в GRASS (в DBF)

Код: Выделить всё

cat|A|B|C
1|a|b|
2|aa||
3|aaa|bb|
4|aaaa||
5||bbbb|
6|aaaaa|bbb|
7||bbbbbb|
8|||
9|||
Делаем два запроса:

Код: Выделить всё


echo "UPDATE vector SET C = A WHERE (A NOT NULL)" | db.execute
echo "UPDATE vector SET C = B WHERE (A IS NULL) AND (B NOT NULL)" | db.execute

Получается так:

Код: Выделить всё

cat|A|B|C
1|a|b|a
2|aa||aa
3|aaa|bb|aaa
4|aaaa||aaaa
5||bbbb|bbbb
6|aaaaa|bbb|aaaaa
7||bbbbbb|bbbbbb
8|||
9|||
В QGIS в "калькуляторе полей" не смог это повторить.
Последний раз редактировалось Александр Мурый 25 авг 2011, 11:53, всего редактировалось 2 раза.
Редактор материалов, модератор форума

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 792
Ваше звание: званий не имею
Откуда: Москва

Re: field calculator - if...

Сообщение Александр Мурый » 25 авг 2011, 11:51

Увлекся идеей заставить QGIS сделать вышеописанное. Создал такой же точечный слой в БД SpatiaLite, с помощью QspatiaLite не удалось (посыпались "ошибки SQL" + "error GeometryConstraints"). Поискал в сети -- говорят, какие-то траблы с версиями SpatiaLite и т.п.

Попробовал на "голом" SQLite:

Код: Выделить всё


UPDATE vector SET C = A WHERE (A IS NOT NULL);
UPDATE vector SET C = B WHERE (A IS NULL) AND (B IS NOT NULL);
-- работает :)

Интересно: так как проделать такое в QGIS (ну, кроме PostGIS)?
Редактор материалов, модератор форума

yellow-sky
Гуру
Сообщения: 588
Зарегистрирован: 30 мар 2009, 21:53
Репутация: 55
Откуда: Королев

Re: field calculator - if...

Сообщение yellow-sky » 25 авг 2011, 12:07

amuriy писал(а):Интересно: так как проделать такое в QGIS (ну, кроме PostGIS)?
Сделайте это в питоновской консоли. Пример

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 792
Ваше звание: званий не имею
Откуда: Москва

Re: field calculator - if...

Сообщение Александр Мурый » 25 авг 2011, 12:16

yellow_sky писал(а):
amuriy писал(а):Интересно: так как проделать такое в QGIS (ну, кроме PostGIS)?
Сделайте это в питоновской консоли. Пример
Спасибо, попробую. Понять бы, как написать нужное выражение на питоне...
Редактор материалов, модератор форума

Ответить

Вернуться в «Общие вопросы»

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

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