ogr2ogr -lco ENCODING=WIN-1251

Аватара пользователя
Игорь Лебедь
Завсегдатай
Сообщения: 451
Зарегистрирован: 24 апр 2010, 19:47
Репутация: 100
Откуда: Город в клёнах и акациях
Контактная информация:

ogr2ogr -lco ENCODING=WIN-1251

Сообщение Игорь Лебедь » 19 авг 2014, 16:58

В статье http://gis-lab.info/qa/ogr2ogr-examples.html описано, как из файла UTF-8 создать файл UTF-8:

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

ogr2ogr -lco ENCODING=UTF-8 output.shp input.vrt
Соответственно, если мне надо из файла WIN-1251 создать файл UTF-8, то:

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

ogr2ogr -lco ENCODING=WIN-1251 output.shp input.shp
, но так вылетают ошибки.
Если

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

ogr2ogr output.shp input.shp
, то просто создаётся файл WIN-1251.
Как же решить задачу? И если можно, пакетный вариант.

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Статьи: 7
Проекты: 2
Репутация: 261
Откуда: Москва

Re: ogr2ogr -lco ENCODING=WIN-1251

Сообщение Дмитрий Барышников » 19 авг 2014, 20:40

Ключ lco переводится как layer create options. Таким образом вы указывате выходную кодировку. Входная как бы определяется автоматически (что в случае шейп файла не всегда происходит верно). Что бы подсказать входную кодировку можно попробовать --config SHAPE_ENCODING CP1251
Результирующая строчка может иметь вид:
ogr2ogr -lco ENCODING=UTF8 --config SHAPE_ENCODING CP1251 output.shp input.shp

Аватара пользователя
Игорь Лебедь
Завсегдатай
Сообщения: 451
Зарегистрирован: 24 апр 2010, 19:47
Репутация: 100
Откуда: Город в клёнах и акациях
Контактная информация:

Re: ogr2ogr -lco ENCODING=WIN-1251

Сообщение Игорь Лебедь » 20 авг 2014, 08:48

Не помогло, то же самое, создаётся файл в кодировке CP1251:
Test.7z
(1.25 КБ) 229 скачиваний
output.7z
(1.11 КБ) 214 скачиваний

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Статьи: 7
Проекты: 2
Репутация: 261
Откуда: Москва

Re: ogr2ogr -lco ENCODING=WIN-1251

Сообщение Дмитрий Барышников » 20 авг 2014, 12:37

Да, прошу прощения. Оказывается опция --config SHAPE_ENCODING CP1251 имеет более высокий приоритет - получается следующее:
1. оба шейпа считаются в кодировке CP1251
2. при создании выходного шейпа везде прописываются правильная кодировка (в заголовке DBF и в файле cpg).
Shape: DBF Codepage = CP1251 for Testshp1251.shp
Shape: Treating as encoding 'CP1251'.
GDAL: GDALOpen(Testshp1251.shp, this=0x21f3e20) succeeds as ESRI Shapefile.
GDAL: GDALDriver::Create(ESRI Shapefile,TestshpUTF8_3.shp,0,0,0,Unknown,(nil))
Shape: DBF Codepage = UTF-8 for TestshpUTF8_3.shp
Shape: Treating as encoding 'CP1251'.
OGR2OGR: 3 features written in layer 'TestshpUTF8_3'
GDAL: GDALClose(TestshpUTF8_3.shp, this=0x21f3620)
Shape: 3 features read on layer 'Testshp1251'.
GDAL: GDALClose(Testshp1251.shp, this=0x21f3e20)

Решение следующее:
1. Создать текстовый файл input.cpg и записать в него кодировку:
CP1251
2. Выполнить команду ogr2ogr -lco ENCODING=UTF8 output.shp input.shp --config CPL_DEBUG ON

У меня так сработало.
Shape: DBF Codepage = CP1251 for Testshp1251.shp
Shape: Treating as encoding 'CP1251'.
GDAL: GDALOpen(Testshp1251.shp, this=0x163ee00) succeeds as ESRI Shapefile.
GDAL: GDALDriver::Create(ESRI Shapefile,TestshpUTF8.shp,0,0,0,Unknown,(nil))
Shape: DBF Codepage = UTF-8 for TestshpUTF8.shp
Shape: Treating as encoding 'UTF-8'.
SHAPE: Extending field 1 (Nametext) from 20 to 29 characters
OGR2OGR: 3 features written in layer 'TestshpUTF8'
GDAL: GDALClose(TestshpUTF8.shp, this=0x163e600)
Shape: 3 features read on layer 'Testshp1251'.
GDAL: GDALClose(Testshp1251.shp, this=0x163ee00)
Осталось только файлик CPG размножить с соответсвующими именами на все ваши данные - т.к. его содержимое не меняется.

Аватара пользователя
Игорь Лебедь
Завсегдатай
Сообщения: 451
Зарегистрирован: 24 апр 2010, 19:47
Репутация: 100
Откуда: Город в клёнах и акациях
Контактная информация:

Re: ogr2ogr -lco ENCODING=WIN-1251

Сообщение Игорь Лебедь » 20 авг 2014, 14:23

Спасибо большое! На Ubuntu получилось, на винде пришлось заменить "UTF8" на "UTF-8", только тогда пошло нормально.

maks24
Интересующийся
Сообщения: 21
Зарегистрирован: 27 авг 2014, 11:44
Репутация: 0
Откуда: Новосибирск

Re: ogr2ogr -lco ENCODING=WIN-1251

Сообщение maks24 » 27 авг 2014, 13:34

Здравствуйте. Тоже проблема с кодировкой. Win-7. Импортирую из esri gbd

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

ogr2ogr 1\arc\popnt.shp F:\public\ArcGIS\TOPO300K.gdb poppnt_1mln -lco encoding=1251
Кстати работает именно encoding=1251, encoding=windows-1251 не работает.
Получается нормальный shp c читаемым dbf файлом.
Вообще нужно получить mid/mif. Вот при конвертации шейп-миф с кодировкой возникает проблема.

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

ogr2ogr -f "Mapinfo File" 1\arc\popnt.mif 1\arc\popnt.shp -lco encoding=1251
Получаю нечитаемую кодировку, с любыми шейпами такая история, и если напрямую из gdb - так же. С шейпом так же присутствует файл *.cpg с кодировкой. Разные encoding пробовал.
Из mif в mif в кодировке 1251 всё хорошо переносится.

Аватара пользователя
Игорь Лебедь
Завсегдатай
Сообщения: 451
Зарегистрирован: 24 апр 2010, 19:47
Репутация: 100
Откуда: Город в клёнах и акациях
Контактная информация:

Re: ogr2ogr -lco ENCODING=WIN-1251

Сообщение Игорь Лебедь » 28 авг 2014, 10:55

gdb и shp в студию

maks24
Интересующийся
Сообщения: 21
Зарегистрирован: 27 авг 2014, 11:44
Репутация: 0
Откуда: Новосибирск

Re: ogr2ogr -lco ENCODING=WIN-1251

Сообщение maks24 » 28 авг 2014, 13:11

Сделал небольшую вырезку
ogr2ogr -sql "select * from poppnt_1mln where fid<10" 1\arc\poppnt_test.shp 1\arc\poppnt_1mln.shp -lco encoding=1251
а gdb вообще огромный.
Вложения
test.7z
(1.05 КБ) 203 скачивания

Аватара пользователя
Игорь Лебедь
Завсегдатай
Сообщения: 451
Зарегистрирован: 24 апр 2010, 19:47
Репутация: 100
Откуда: Город в клёнах и акациях
Контактная информация:

Re: ogr2ogr -lco ENCODING=WIN-1251

Сообщение Игорь Лебедь » 28 авг 2014, 15:52

Так как gdal лучше понимает UTF-8, то лучше работать в нём. Сначала переводим Ваш шейп poppnt_test.shp(1251) в шейп output2.shp(UTF-8):

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

ogr2ogr -lco ENCODING=UTF-8 output2.shp poppnt_test.shp --config CPL_DEBUG ON
Затем конвертируем полученный шейп в миф:

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

ogr2ogr -f "MapInfo File" output3.mif output2.shp
Результаты и фото кугиса - во вложении.
Tomif20140828.7z
(53.19 КБ) 185 скачиваний

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Статьи: 7
Проекты: 2
Репутация: 261
Откуда: Москва

Re: ogr2ogr -lco ENCODING=WIN-1251

Сообщение Дмитрий Барышников » 28 авг 2014, 21:28

В общем я посмотрел и исходники и описание драйвера MapInfo. Он не поддерживает указание или определение кодировки. При этом все форматы при открытии в GDAL преобразовывают все строки в юникод. А потом при записи файла из юникода в нужную кодировку (установленную для файла). И т.к. у вас драйвер не позволяет указать кодировку, то ВСЕГДА будет при создании писать в UTF8.
Могу посоветовать попробовать wxGIS - он перекодирует в системную кодировку при записи. Работате пакетно. Текущая версия не поддерживает GDB но на шейпе все получилось. Единственное, что если у вас кодировка шейпа 1251 - то cpg стоит удалить, а то wxGIS не правильно определяет кодировку, а если utf8 - то в cpg должно быть записано 65001
https://wxgis.googlecode.com/files/wxgis-0.4.0.7z
В следующем релизе все эти глюки исправим, да и GDB будет.

maks24
Интересующийся
Сообщения: 21
Зарегистрирован: 27 авг 2014, 11:44
Репутация: 0
Откуда: Новосибирск

Re: ogr2ogr -lco ENCODING=WIN-1251

Сообщение maks24 » 29 авг 2014, 06:17

Спасибо кто помог.
vsugig
хотя задачу не решило на самом деле, мифа с кодировкой 1251 так и не получилось. Но разобраться я разобрался, с вашей помошью. Получается из любого шейпа, не важно в какой кодировке (нет необходимости его сначала переводить в utf8) формируется mif в UTF8 несмотря на параметр lco encoding. Очень жаль т.к. появляется ещё одно действие которое надо проделать с файлами - перекодировка.
По хорошему надо бы где-то описать эту проблему, тем кто поддерживает ogr
Дмитрий Барышников
Странно, но преобразование mif-mif происходит удачно с кодировкой 1251.

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Статьи: 7
Проекты: 2
Репутация: 261
Откуда: Москва

Re: ogr2ogr -lco ENCODING=WIN-1251

Сообщение Дмитрий Барышников » 29 авг 2014, 09:46

maks24 писал(а): Странно, но преобразование mif-mif происходит удачно с кодировкой 1251.
ogr2ogr использует метод getrawfield - т.е. как выдает драйвер. В случае шейпа - он выдает в кодировке - мифа - нет.
Я думал над вопросом сделать тикет - но это не ошибка. Все описано на страничке драйвера. То, что вы хотите - это запрос новой функциональности. Так что это скорее фичреквест.

Аватара пользователя
t[0]p
Участник
Сообщения: 93
Зарегистрирован: 15 ноя 2014, 14:35
Репутация: 7
Откуда: Томск

Re: ogr2ogr -lco ENCODING=WIN-1251

Сообщение t[0]p » 27 сен 2017, 05:54

Доброго времени суток! Я хочу перенести пространственные данные из PostgreSQL в MS SQL. Данные переносятся, но вот возникает проблема с кодировкой. В PostgreSQL импортировал shp с кодировкой windows -1251, все строки корректно отображаются, а при переносе - кодировка сбивается. -lco ENCODING=WIN-1251 пробовал - не помогло (прочитал этот раздел - понял, что и не должно было помочь =) )
Подскажите как тут обойти эту проблему?

trir
Гуру
Сообщения: 4518
Зарегистрирован: 09 апр 2010, 19:30
Статьи: 1
Репутация: 839
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: ogr2ogr -lco ENCODING=WIN-1251

Сообщение trir » 27 сен 2017, 06:37

есть такая вещь как sql-dump

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

Re: ogr2ogr -lco ENCODING=WIN-1251

Сообщение Александр Мурый » 27 сен 2017, 07:06

Вы каким образом переносите?
Редактор материалов, модератор форума

Ответить

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

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

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