Типы полей атрибутов
-
- Участник
- Сообщения: 96
- Зарегистрирован: 31 май 2012, 11:55
- Репутация: 9
- Откуда: Минск
Типы полей атрибутов
Добрый день.
1. Вопрос про типы полей.
в Qgis был сделан shape. Основной тип для полей - integer/double.
Открываю этот shape параллельно в ArcGIS - половина полей стала float.
Это разные подходы к описанию полей в Qgis и ArcGIS?
2. Имеется слой с полями float, short, long integer в ArcGIS в базе данных.
При редактировании для части полей значения не заполняются. Выгружаем данные из БД в shape - в результате для всех ячеек незаполненных числовых полей значение стало 0. При попытке удалить и сохранить - ругается и ссылается, что поле не может быть пустым без значений.
Открываем этот shape в Qgis - поля из float превращаются в integer. Значение "0" спокойно удаляется и сохраняется (становится NULL).
В итоге этот shape в ArcMap открывается со значением 0, в Qgis - NULL.
Собственно проблема: данные редактируются в ArcMAP и выгружаются из БД в shape для передачи заказчику, который работает в Qgis. Значение 0 и NULL - не одинаковы, это критично! Для ячеек, где отсутствуют данные, должен стоять NULL.
Вижу вариант - выгружаю в shp и через калькулятор полей удаляю 0. Но слоев больше 20 и в каждом с 1-2 десятка полей (поля разные для слоев). Много лишней работы.
Может у кого-нибудь есть идеи, как обойти проблему.
Спасибо.
1. Вопрос про типы полей.
в Qgis был сделан shape. Основной тип для полей - integer/double.
Открываю этот shape параллельно в ArcGIS - половина полей стала float.
Это разные подходы к описанию полей в Qgis и ArcGIS?
2. Имеется слой с полями float, short, long integer в ArcGIS в базе данных.
При редактировании для части полей значения не заполняются. Выгружаем данные из БД в shape - в результате для всех ячеек незаполненных числовых полей значение стало 0. При попытке удалить и сохранить - ругается и ссылается, что поле не может быть пустым без значений.
Открываем этот shape в Qgis - поля из float превращаются в integer. Значение "0" спокойно удаляется и сохраняется (становится NULL).
В итоге этот shape в ArcMap открывается со значением 0, в Qgis - NULL.
Собственно проблема: данные редактируются в ArcMAP и выгружаются из БД в shape для передачи заказчику, который работает в Qgis. Значение 0 и NULL - не одинаковы, это критично! Для ячеек, где отсутствуют данные, должен стоять NULL.
Вижу вариант - выгружаю в shp и через калькулятор полей удаляю 0. Но слоев больше 20 и в каждом с 1-2 десятка полей (поля разные для слоев). Много лишней работы.
Может у кого-нибудь есть идеи, как обойти проблему.
Спасибо.
-
- Гуру
- Сообщения: 5354
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1021
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Типы полей атрибутов
не используйте shp'ы
-
- Участник
- Сообщения: 96
- Зарегистрирован: 31 май 2012, 11:55
- Репутация: 9
- Откуда: Минск
Re: Типы полей атрибутов
Не вариант. Конечный результат должен быть в .shp.
-
- Гуру
- Сообщения: 5354
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1021
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Типы полей атрибутов
а чем выгружаете?
Работайте с БД из QGIS.
Почему? Если Заказчик работает в QGIS, то там есть куча более удобных форматов, например SpatiaLite.Конечный результат должен быть в .shp.
Работайте с БД из QGIS.
-
- Активный участник
- Сообщения: 133
- Зарегистрирован: 17 май 2011, 06:22
- Репутация: 50
- Откуда: Нижний Новгород
Re: Типы полей атрибутов
Тут такое дело - формат sрape не подразумевает значение NULL как таковое, так как в структуре файла ЗАРЕЗЕРВИРОВАНО место под хранимый тип данных для КАЖДОЙ ячейки строки (т.е. пустое значение все равно должно быть чем то заполнено - по умолчанию это 0, для строки - строка указанной длины с пустым значением char).alphart писал(а):Не вариант. Конечный результат должен быть в .shp.
Т.е. разные программы могут по разному интерпретировать работу с шейпами, но ESRI, являясь родительницей как формата shp, так и программы ArcGis - работает наиболее корректно. Все остальные интерпретируют свою работу с шейпами в задуманном для себя виде.
-
- Участник
- Сообщения: 96
- Зарегистрирован: 31 май 2012, 11:55
- Репутация: 9
- Откуда: Минск
Re: Типы полей атрибутов
Видимо придется заменять значения в Qgis.
Всем спасибо за участие.
Всем спасибо за участие.
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: Типы полей атрибутов
2alphart Я думаю это самый правильный вариант или скриптом через gdal
2Monstria Вы не правы. За атрибуты в формате ESRI Shape отвечает dbf - формат dBase IV к которому никакого отношения ESRI не имеет и даже не совсем корректно с ним работает. Кроме того, спецификация части формата shape file открыта и эталонная реализация, по моему мнению у gdal. А вот ESRI в 10-й версии уже поменяло поведение и сейчас кодировка по-умолчанию вместо системной - UTF8. Так что ESRI довольно небрежны с этим форматом.
2Monstria Вы не правы. За атрибуты в формате ESRI Shape отвечает dbf - формат dBase IV к которому никакого отношения ESRI не имеет и даже не совсем корректно с ним работает. Кроме того, спецификация части формата shape file открыта и эталонная реализация, по моему мнению у gdal. А вот ESRI в 10-й версии уже поменяло поведение и сейчас кодировка по-умолчанию вместо системной - UTF8. Так что ESRI довольно небрежны с этим форматом.
-
- Активный участник
- Сообщения: 133
- Зарегистрирован: 17 май 2011, 06:22
- Репутация: 50
- Откуда: Нижний Новгород
Re: Типы полей атрибутов
О да... лоханулсяДмитрий Барышников писал(а):2alphart Я думаю это самый правильный вариант или скриптом через gdal
2Monstria Вы не правы. За атрибуты в формате ESRI Shape отвечает dbf - формат dBase IV к которому никакого отношения ESRI не имеет и даже не совсем корректно с ним работает.

Именно для хранения атрибутов используется dbf, но суть то не меняется - ну нельзя в dbf хранить пустые значения

-
- Гуру
- Сообщения: 731
- Зарегистрирован: 12 янв 2011, 22:40
- Репутация: 304
- Ваше звание: ∀
Re: Типы полей атрибутов
Изначально NULL в DBF не предусмотрено, потому Esri их и не поддерживает. А вот shapelib пользуется тем, что в DBF значения полей хранятся в текстовом виде, и поддерживает специальные значения, обозначающие NULL (для каждого типа данных свои).
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя