Пакетное редактирование DBF
-
- Гуру
- Сообщения: 879
- Зарегистрирован: 17 июн 2010, 23:14
- Репутация: 207
- Откуда: Москва
Пакетное редактирование DBF
Возникла очередная творческая задача. Имеется много .shp файлов, у которых необходимо поправить .dbf, исправив не только тип поля но и порядок размещения полей. Усердно погуглив и покурив несколько .dbf редакторов, задачу удалось решить, но только для одного .dbf. А необходимо для пары сотен. Есть ли такие редакторы, работающие пакетно с .dbf ? Возможно такие, которые позволяют писать примитивные макросы.
Буду крайне благодарен за любой совет.
Буду крайне благодарен за любой совет.
-
- Гуру
- Сообщения: 977
- Зарегистрирован: 27 янв 2009, 22:57
- Репутация: 258
Re: Пакетное редактирование DBF
visual foxpro
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: Пакетное редактирование DBF
Смена типа полей:
-- загнать DBF с нормальную БД (PostgreSQL, MySQL, SQLite) --> сменить тип поля (CAST) --> экспорт назад в DBF
-- Python+ogr2ogr (в OGR SQL тоже есть оператор CAST)
Порядок полей:
-- Python+ogr2ogr: экспорт DBF в CSV --> смена порядка полей в CSV --> назад в DBF (?)
-- загнать DBF с нормальную БД (PostgreSQL, MySQL, SQLite) --> сменить тип поля (CAST) --> экспорт назад в DBF
-- Python+ogr2ogr (в OGR SQL тоже есть оператор CAST)
Порядок полей:
-- Python+ogr2ogr: экспорт DBF в CSV --> смена порядка полей в CSV --> назад в DBF (?)
Редактор материалов, модератор форума
-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: Пакетное редактирование DBF
порядок размещения полей в SQL запросе должен быть на выходе именно таким, каким он задан в SQL Select'е. По крайней мере это так во всех известных мне реализациях.
Судя по http://www.gdal.org/ogr/ogr_sql.html
никаких описаний того, что это не так там нет. Что простой SQL в ogr2ogr с заменой порядка столбцов не работает?
Судя по http://www.gdal.org/ogr/ogr_sql.html
никаких описаний того, что это не так там нет. Что простой SQL в ogr2ogr с заменой порядка столбцов не работает?
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: Пакетное редактирование DBF
Действительно, похоже, что хватит одного ogr2ogr. Оператор "-select" меняет порядок полей в выходном файле, с CAST ещё надо разобраться...
Редактор материалов, модератор форума
-
- Гуру
- Сообщения: 879
- Зарегистрирован: 17 июн 2010, 23:14
- Репутация: 207
- Откуда: Москва
Re: Пакетное редактирование DBF
Спасибо всем за ответы. Если с помощью ogr2ogr действительно можно менять тип поля и порядок полей и у кого достаточно опыта в этом деле - не могли бы вы помочь ?
Пример вложен в сообщение.
Порядок и тип полей должен быть таким:
1) FID
2) Shape
3) KOD (int)
4) NAME (char 40)
5) NUMOBJ (int)
6) FUNKTION (int)
7) ANGLE (float)
Одного работоспособного примера будет достаточно. Написание подобных операций и дальнейшее зацикливание труда уже не составит. Очень надеюсь на помощь.
Пример вложен в сообщение.
Порядок и тип полей должен быть таким:
1) FID
2) Shape
3) KOD (int)
4) NAME (char 40)
5) NUMOBJ (int)
6) FUNKTION (int)
7) ANGLE (float)
Одного работоспособного примера будет достаточно. Написание подобных операций и дальнейшее зацикливание труда уже не составит. Очень надеюсь на помощь.
- Вложения
-
primer.zip
- (1.74 КБ) 379 скачиваний
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: Пакетное редактирование DBF
Примерно так:
Код: Выделить всё
ogr2ogr -f "ESRI Shapefile" 1830-15_04_NEW.shp 1830-15_04.shp -sql "SELECT FID, OGR_GEOMETRY, CAST (KOD AS INTEGER), CAST (NAME AS CHARACTER(40)), CAST (NUMOBJ AS INTEGER), CAST (FUNKTION AS INTEGER), CAST (ANGLE AS FLOAT) FROM '1830-15_04'"
Редактор материалов, модератор форума
-
- Гуру
- Сообщения: 879
- Зарегистрирован: 17 июн 2010, 23:14
- Репутация: 207
- Откуда: Москва
Re: Пакетное редактирование DBF
Огромное спасибо, всё получилось. Запрос, соответствующий моим требования, выглядит так:
Однако возникла пара вопросов
1) Не могу никак задать тип Float. Если использовать при указании тип Float, но не указывать длину поля, то берётся максимум и поле становится типом Double. Задание специфичного Numeric'a тоже не прокатило.
2) Есть ли возможность задать точность типа данных Float? В некоторых моих слоях есть колонка с высотами горизонталей и тип у этой колонки должен быть Float. А Float всегда имеет точность до 6 знаков после запятой, поэтому он упорно дописывает несуществующие нули в конце, хотя мне надо до сотых. Можно ли как-это ограничить ?
Код: Выделить всё
ogr2ogr -f "ESRI Shapefile" 1830-15_04_NEW.shp 1830-15_04.shp -sq
l "SELECT CAST (KOD AS INTEGER(9)), CAST (NAME AS CHARACTER(40)), CAST (NUMOBJ A
S INTEGER(9)), CAST (FUNKTION AS INTEGER(9)), CAST (ANGLE AS FLOAT) FROM '1830-1
5_04'"
1) Не могу никак задать тип Float. Если использовать при указании тип Float, но не указывать длину поля, то берётся максимум и поле становится типом Double. Задание специфичного Numeric'a тоже не прокатило.
2) Есть ли возможность задать точность типа данных Float? В некоторых моих слоях есть колонка с высотами горизонталей и тип у этой колонки должен быть Float. А Float всегда имеет точность до 6 знаков после запятой, поэтому он упорно дописывает несуществующие нули в конце, хотя мне надо до сотых. Можно ли как-это ограничить ?
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: Пакетное редактирование DBF
1) CAST (ANGLE AS NUMERIC(9,2)) не пойдёт разве?
2) Судя по http://www.gdal.org/ogr/ogr_sql.html, задать точность Float нельзя.
2) Судя по http://www.gdal.org/ogr/ogr_sql.html, задать точность Float нельзя.
Редактор материалов, модератор форума
-
- Гуру
- Сообщения: 879
- Зарегистрирован: 17 июн 2010, 23:14
- Репутация: 207
- Откуда: Москва
Re: Пакетное редактирование DBF
1) Получится Double, у которого Length 9, Precision 8 и Scale 2. Правда ограничение до сотых присутствует, но не уверен, насколько это устроит руководство.
2) Очень жаль.
Ещё возник вопрос. В описалось ogr2ogr не нашёл опции на перезапись. То есть если имя выходного файла совпадает с именем файла, который уже лежит в той же директории, то обновлённый файл просто не создаётся. Если ли что-нибудь вроде ключа '-o' или около того ?
2) Очень жаль.
Ещё возник вопрос. В описалось ogr2ogr не нашёл опции на перезапись. То есть если имя выходного файла совпадает с именем файла, который уже лежит в той же директории, то обновлённый файл просто не создаётся. Если ли что-нибудь вроде ключа '-o' или около того ?
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: Пакетное редактирование DBF
Перезапись: -overwrite
* 1) А что, double -- не float ?
* 1) А что, double -- не float ?
Редактор материалов, модератор форума
-
- Гуру
- Сообщения: 879
- Зарегистрирован: 17 июн 2010, 23:14
- Репутация: 207
- Откуда: Москва
Re: Пакетное редактирование DBF
Спасибо за -overwrite, забыл совершенно глянуть основную страницу: http://www.gdal.org/ogr2ogr.html
Ну вроде как float это одиночное с плавающей точкой, а double это двойное с плавающей точкой. Что-то вроде расширенного варианта float'a...
Сдаётся мне, придётся править классификатор вдобавок.
Ну вроде как float это одиночное с плавающей точкой, а double это двойное с плавающей точкой. Что-то вроде расширенного варианта float'a...
Сдаётся мне, придётся править классификатор вдобавок.
-
- Гуру
- Сообщения: 879
- Зарегистрирован: 17 июн 2010, 23:14
- Репутация: 207
- Откуда: Москва
Re: Пакетное редактирование DBF
Очередной непонятный ребус к уже вышеописанным вопросам. Необходимо заменить файлы обновлёнными файлами с тем же именем. Как ни странно - ключа не нашёл. Есть только append, который хоть и заменяет существующий файл обновлённым, но ещё вдобавок и подсоединяет его самому к этому же файлу (то есть объекты дублируются). Как-то это можно обойти ?
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: Пакетное редактирование DBF
OGR тут не поможет. Можно переименовать в скрипте (?)Slinger писал(а):Необходимо заменить файлы обновлёнными файлами с тем же именем. Как ни странно - ключа не нашёл.
Редактор материалов, модератор форума
-
- Гуру
- Сообщения: 879
- Зарегистрирован: 17 июн 2010, 23:14
- Репутация: 207
- Откуда: Москва
Re: Пакетное редактирование DBF
Очень жаль. Придётся пользоваться ren, copy и del соответственно. Безумие конечно...
Кстати и цикл своять тоже не получилось. При указании таблицы FROM 'имя таблицы', так или иначе необходимо вводить корректное имя таблицы, дикие карты не поддерживаются.
Кстати и цикл своять тоже не получилось. При указании таблицы FROM 'имя таблицы', так или иначе необходимо вводить корректное имя таблицы, дикие карты не поддерживаются.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя