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

JOIN обрезка длины строки при сохранении в SHP

Добавлено: 13 дек 2011, 07:03
bolotoved
Тоже пожалуюсь на JOIN: При прикреплении таблицы с длинными строками, в самой синтезированной таблице длинные поля отображаются адекватно, а вот при экспорте в шейп, обрезаются до 80-ти символов (кодировка CP-1251). Вроде бы это не ограничение dbf, т.к. мне попадались более длинные названия в атрибутивных стоблцах шейп-файлов.

Re: JOIN обрезка длины строки при сохранении в SHP

Добавлено: 13 дек 2011, 08:33
Александр Мурый
Читаем на странице GDAL-драйвера ESRI Shapefile:
String fields without an assigned width are treated as 80 characters.
Дело в этом? Как в QGIS при сохранении в шейп из файла с разделителем задать количество символов в строке в атрибут. таблице?

Re: JOIN обрезка длины строки при сохранении в SHP

Добавлено: 13 дек 2011, 10:14
bolotoved
Видимо да, дело в этом. Тогда это скорее всего касается не только JOIN.

Re: JOIN обрезка длины строки при сохранении в SHP

Добавлено: 20 дек 2011, 17:14
Voltron
Тэкс... В эфире передача «Скандалы, интриги, расследования» :-).

На первый взгляд, все выглядит так, как описано в стартовом посте. Загружаем слой и CSV, соединяем их, экспортируем и получаем поле Name1 в 80 символов. Беда...

Прозвучало предположение о том, что причина всех бед — GDAL. Так ли это? Проверим. Для начала откроем в QGIS любой шейп с длинным атрибутивным полем, символов на 100-200. И сохраним его еще раз как shape-файл. А теперь сравним эти два файла. Сюрприз! Разработчики QGIS тоже не дураки, и на умолчательное поведение драйвера не полагаются. Все на месте, обвинение несостоятельно и снимается.

Тогда почему мы имеем то, что имеем? Ответ находится на странице описания драйвера CSV и в диалоге свойств слоя на вкладке «Поля». Читаем описание драйвера
The OGR CSV driver returns all attribute columns with a type of string if no field type information file (with .csvt extension) is available.
Теперь смотрим свойства слоя. Упс... длина всех полей неопределена, что равносильно использованию значений по умолчанию при записи (те самые 80 символов, да). Решение простое — создать файл с описанием полей, где и указать тип и размерность каждого поля. Тогда все экспортируется (с учетом ограничения на длину строки в 255 символов).