Страница 1 из 1

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

Добавлено: 06 мар 2008, 00:05
Максим Дубинин
Кто-то сталкивался с подобной задачей?
Есть shape-файл, нужно добавить к нему новое поле с неким любым значением, используя только ogr2ogr?

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

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

Добавлено: 06 мар 2008, 12:14
lalex
Я не знаю 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. Да, перед любой посылкой в БД извне с ней должна быть установлена связь: логин, пароль и т.п.

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 сколько угодно. Жаль, уж больно производительная штука. Придется постаринке.

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

Добавлено: 07 мар 2008, 11:48
KolesovDmitry
Это не решение, но может натолкнет на мысль. 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 почему-то не хочет. Также не хочет производить и действия над полями, создавая вычисляемые колонки...

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

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

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

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

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

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

Добавлено: 19 авг 2009, 08:50
Denis Rykov
Как вариант - выгрузить shp в csv, добавить нужные поля в csv, а затем сконвертировать обратно в шейп. Вот пример.