Создать и заполнить поле в shape-файле с помощью ogr2ogr

Ответить
Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9037
Зарегистрирован: 06 окт 2003, 20:20
Статьи: 231
Проекты: 12/6
Репутация: 713
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Создать и заполнить поле в shape-файле с помощью ogr2ogr

Сообщение Максим Дубинин » 06 мар 2008, 00:05

Кто-то сталкивался с подобной задачей?
Есть shape-файл, нужно добавить к нему новое поле с неким любым значением, используя только ogr2ogr?

Промучался, так и не смог сделать, в принципе в ogr2ogr есть параметр -sql "", куда можно передать синтаксис SQL команды, но что-то не очень получается, знаний SQL не хватает.
пристегивайтесь, турбулентность прямо по курсу

lalex
Участник
Сообщения: 74
Зарегистрирован: 07 фев 2006, 22:54
Репутация: 0

Re: Создать и заполнить поле в shape-файле с помощью ogr2ogr

Сообщение lalex » 06 мар 2008, 12:14

Я не знаю ogr, но если там есть SQL-интерфейс, то должно получиться. Синтаксис SQL формализован достаточно четко, фразы работают начиная от Access и кончая Oracle/mySQL. Однако создание поля - ALTER TABLE - не во всех реализациях работает, по старинному стандарту ANSI-92 все поля только с начала, с нуля. Тогда глядите CREATE TABLE. В связи с этим обычно встроенные команды приложений с такими делами лучше справляются. Однако все равно гляньте любой учебник по SQL, например, вот.
http://www.sql.ru/docs/sql/u_sql/index.shtml

Заполнить значением через SQL уже гораздо легче,
UPDATE [Table] SET [Column] = "Value";
Это везде одинаково
http://www.sql.ru/docs/sql/u_sql/ch15.shtml#15.7

Для начала советую не слать команды вслепую, а потренироваться в Access, там визуальный интерфейс очень помогает разобраться в основах SQL. Да, перед любой посылкой в БД извне с ней должна быть установлена связь: логин, пароль и т.п.

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9037
Зарегистрирован: 06 окт 2003, 20:20
Статьи: 231
Проекты: 12/6
Репутация: 713
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Создать и заполнить поле в shape-файле с помощью ogr2ogr

Сообщение Максим Дубинин » 06 мар 2008, 19:35

Да, SQL это свой мир...Поэкспериментировал, хочу посоветоваться.

На любую попытку ввести SQL-команду без SELECT, ogr2ogr выдает следующее:

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

ERROR 1: SQL: Missing keyword SELECT
SELECT, как я понимаю, извлекает информацию из таблицы. Однако, в данном случае мне выбирать ничего не надо, хорошо, даже если я пытаюсь выбрать все (не уверен, что мне это нужно, ну раз он хочет SELECT)...

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

ogr2ogr output.shp test.shp -sql "SELECT * FROM test; ALTER TABLE test ADD COLUMN New"
Выдает большое количество разных ошибок, ругаясь на синтаксис (все перепробованные варианты не привожу).

Хотя вот еще один:

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

ogr2ogr output.shp test.shp -sql "SELECT *, ALTER TABLE ADD COLUMN New
ERROR 1: SQL: Missing comma after column ALTER in SELECT statement.
Подозреваю, что это просто нельзя сделать, ни одного примера не нашел с подключением к шейпу, как к базе, к PostGIS, Oracle сколько угодно. Жаль, уж больно производительная штука. Придется постаринке.
пристегивайтесь, турбулентность прямо по курсу

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Статьи: 18
Проекты: 4
Репутация: 122
Откуда: Казань

Re: Создать и заполнить поле в shape-файле с помощью ogr2ogr

Сообщение KolesovDmitry » 07 мар 2008, 11:48

Это не решение, но может натолкнет на мысль. Shp с полями HEMISPHERE, INDEXNUM, UNIQUE, запрос

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

ogr2ogr -f "ESRI Shapefile" -sql "select HEMISPHERE, INDEXNUM, UNIQUE, INDEXNUM from tst"  tst2.shp tst.shp
добавит еще одну колонку INDEXNUM.

В нормальном sql сработал бы и такой запрос:

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

ogr2ogr -f "ESRI Shapefile" -sql "select HEMISPHERE, INDEXNUM, UNIQUE, INDEXNUM as NewName from tst"  tst2.shp tst.shp
но в ogr2ogr почему-то не хочет. Также не хочет производить и действия над полями, создавая вычисляемые колонки...

lalex
Участник
Сообщения: 74
Зарегистрирован: 07 фев 2006, 22:54
Репутация: 0

Re: Создать и заполнить поле в shape-файле с помощью ogr2ogr

Сообщение lalex » 07 мар 2008, 12:11

Опять же, я не знаток ogr и других клиентов SQL. Но правила обычно похожие. Если клиент требует SELECT, обычно это означает, что он принимает только запросы на выборку и доступ, похоже, read_only. Это характерно для слаборазвитого софта. Вставить другую фразу в этом случае не удастся, они идут всегда по отдельности - это не язык программирования, а язык команд.

Однако проверьте документацию - может быть другой тип доступа, на изменение. Обычно он идет через логин-пароль и соответственно, указание прав. Тогда команды create/alter могут работать. Вообще сомнительно чтобы на отдельных dbf работал полноценный SQL. Нужна ведь полноценная БД: списки пользователей, таблиц, индексов, транзакций и другие метаданные.

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Статьи: 11
Проекты: 2/1
Репутация: 9

Re: Создать и заполнить поле в shape-файле с помощью ogr2ogr

Сообщение Mavka » 09 апр 2009, 10:28

Также не хочет производить и действия над полями, создавая вычисляемые колонки...
OGR SQL
Field List Limitations:
  • Field arithmetic, and other binary operators are not supported
лангольеры под окном жрали время ом-ном-ном

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Статьи: 33
Проекты: 9
Репутация: 526
Ваше звание: Author
Контактная информация:

Re: Создать и заполнить поле в shape-файле с помощью ogr2ogr

Сообщение Denis Rykov » 19 авг 2009, 08:50

Как вариант - выгрузить shp в csv, добавить нужные поля в csv, а затем сконвертировать обратно в шейп. Вот пример.
Spatial is now, more than ever, just another column- The Geometry Column.

Ответить

Вернуться в «GDAL/OGR»

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

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