автоматически генерируются значения в поле типа
ГИС-натуралист
Блог про применение ГИС-технологий в изучении и охране природы
воскресенье, 30 октября 2016 г.
Работая с геоданными, я частенько сталкивался с проблемой, что при создании какого то векторного объекта хочется автоматически заполнять некие поля атрибутивной таблицы, чтоб не тратить время на их ручное заполнение. Особенно раздражали случаи, когда значения этих полей нужно заполнить одним значением, порядковым номером объекта или каким то значением, которое можно автоматически сгенерировать при помощи калькулятора полей. Недавно некий Germán Carrillo написал модуль QGIS, решающий именно эту задачу.
В базах геоданных таких как PostgreSQL/PostGIS или SQLite/SpatiaLite эту задачу можно решить созданием специальных триггеров, заполняющих поля по правилам, но фишка рассматриваемого модуля, что мы можем работать с привычными векторными данными в формате Shapefile, а не с базой данных. Но если вы решите в свой проект подключить векторный слой из PostGIS, SpatiaLite или WFS-T, то AutoFields работает и с этими форматами.
Модуль AutoFields можно установить из официального репозитория модулей QGIS 2.*.
После установки, окно работы с модулем добавляется в окно QGIS и содержит 3 вкладки: «Configuration», «List of AutoFields» и «About».
Модуль позволяет одновременно работать с несколькими векторными слоями в одном проекте и с несколькими полями в каждом слое. Автоматическое заполнение полей настраивается при помощи калькулятора полей. Кроме имеющихся функций калькулятора, можно так же использовать свои функции написанные на Python и PyQGIS (пример смотрите ниже).
При добавлении новых объектов в слой, значения полей записываются при сохранении изменений слоя. При изменении ранее созданных объектов, значения полей пересчитываются сразу, непосредственно в процессе изменения.
Для примера рассмотрим автоматическое заполнение поля с порядковым номером создаваемого объекта и площади создаваемого объекта.
Для начала нужно во вкладке «Configuration» плагина выделить слой для которого будем автоматически рассчитывать атрибуты. В нашем примере выделим слой «Logging».
Отметим флажком «Existing Field» и в выпадающем списке выберем поле «num». Перемещаемся вниз вкладки, и выбираем пункт «Custom Expression» и жмем кнопку возле него.
Далее, аналогичным образом добавляем AutoFields к полям shape_area и area_ha. Для поля shape_area выберем не «Custom Expression», а «Area».
Настроим свойства слоя так, чтоб отображалась подпись — площадь полигона в гектарах и подпись «га». Для этого заходим в свойства слоя «Logging» на вкладку «Подписи» и из верхнего выпадающего меню выбираем пункт «Показать подписи для этого слоя».
Устанавливаем светлый буфер вокруг подписи, для лучшей видимости. Сохраняем изменения и видим подписи на карте.
Сохраняем наш проект и считаем что он готов к дальнейшей работе. Далее если мы будем изменять имеющиеся объекты или создавать новые то значения атрибутов будут пересчитываться автоматически.
Для примера изменим один из имеющихся полигонов. Включим режим редактирования и изменим один из полигонов потянув за узел. Мы сразу видим по подписи, как меняется рассчитанное значение площади полигона.
Теперь попробуем создать новый полигон. Для этого на панели инструментов «инструменты оцифровки» выбираем кнопку «Добавить объект».
Видим вновь созданные полигон без подписи, т. к. значение поля еще не рассчитано и ни чего не содержит.
Нажимаем кнопку «Применить изменения», и при сохранении изменений автоматически рассчитываются AutoField — поля.
Вы можете работать так же с линейными и точечными объектами. Например, для точек можно автоматически рассчитывать координаты точки, для линейных слоев (реки, дороги) — длину объекта, координаты начала и конца линии и другие характеристики.
Так же вы можете использовать свои функции написанные на Python. В видео ниже приведен пример, когда в точечном слое автоматически заполняется поле высоты, значения которого берется из другого растрового (DEM) слоя высот.
Посмотрев приведенное видео наверняка захочется провернуть такое же на своих данных. Автор модуля заботливо позаботился о будущих пользователя и выложил в открытый доступ Python-код использованный в примере.
Так же рекомендую прочитать документацию и посмотреть видео на справочной странице модуля:
http://geotux.tuxfamily.org/index.php/en/geo-blogs/item/333-autofields-plugin-for-qgis
Если Вы хотите в совершенстве овладеть функционалом QGIS, приглашаю посетить страницу моего онлайн курса «QGIS от новичка до профессионала» и ознакомится с его программой.
В курс включен концентрат моего 9-ти летнего опыта работы с QGIS для решения самых разных задач.
Если статья для тебя полезна, подписывайся на мои каналы и группы в соцсетях:
Программное приведение типа значения поля ввода и колонки табличного поля формы 1С8
При создании формы возникает вопрос настройки типа значения поля ввода. Не всегда заранее точно известен используемый тип, поскольку это может зависеть от метаданных конфигурации и условий использования.
Если, как минимум, известно, что в поле потребуется вводить и использовать элемент Справочника или Документ, то можно настроить тип на общий вид значения, например СправочникСсылка или ДокументСсылка. Далее решить вопрос программно при открытии формы, для уточнения используемого типа.
Если требуется использовать элемент справочника Номенклатура, но в разных конфигурациях этот объект метаданных может называться по-разному, например Товары или же Номенклатура, то программное определение наименования типа при открытии формы упростит жизнь пользователю.
Следовательно, настроим автоматический выбор и первичное преобразование полей на форме к типу значения Справочник.Номенклатура, если такой есть в метаданных конфигурации. В противном случае, выбираем в качестве начального значения первый в списке имён справочников.
Для примера разработана управляемая форма и форма в обычном режиме (см. скриншоты публикации).
Обычный режим
Ниже приведен алгоритм на языке 1С8 для формы в обычном режиме. На форме есть поле список ВыбранныйТип, для которого настроено событие ПриИзменении. В поле ВыбранныйТип пользователь выбирает тип, который желает использовать для преобразования полей. При открытии формы считываем список справочников из метаданных конфигурации. Ищем справочник Номенклатура в списке, далее инициализируем на форме поле ВыбранныйТип полученным списком имён и найденным значением. Запускаем событие ВыбранныйТипПриИзменении, для преобразования типа полей ввода. В переменную модуля формы СтрокаТипЗнч сохраним полное имя выбранного типа для использования в других процедурах.
Далее необходимо выполнить преобразование типа значения колонки табличного поля. Для этого воспользуемся событием НачалоВыбора.
Код преобразования приведен ниже. В нём используется ранее инициализированная переменная СтрокаТипЗнч для получения имени выбранного типа. Алгоритм можно найти в справке по ключевому слову ПривестиЗначение.
Новый тип назначается полям динамически после каждого выбора значения в списке ВыбранныйТип.
Управляемые формы
Для управляемых форм алгоритм изменяется незначительно. Для преобразования используется свойство ОграничениеТипа. Работа с метаданными только на сервере. Для быстрого доступа к колонке табличного поля при срабатывании события НачалоВыбора сохраним в переменной на клиенте СсылкаЭлементКолонкаТП ссылку с адресом элемента.
Рассмотренный пример алгоритма можно протестировать, скачав обработку по ссылке из публикации. Работа выполнялась на 1С:Предприятие 8.3 (8.3.15.1747), с использованием конфигураций «Управление торговлей», редакция 10.3 (10.3.46.3), Управление торговлей, редакция 11 (11.4.7.150). В составе обработки одновременно присутствует управляемая форма и форма обычного режима.
Спасибо за внимание! Критика приветствуется.
Справка по функциям калькулятора полей QGIS
Справка по функциям калькулятора полей QGIS
Содержание
Список функций
Операторы
Оператор +
Возвращает сумму значений полей
Возвращает разность значений полей
Оператор *
Возвращает произведение значений полей
Оператор /
Возвращает частное значений полей
Оператор %
Выбрать из некоторого количества объектов, объекты с характеристикой кратной 50 по атрибуту ELEV:
«ELEV» % 50 = 0 или NOT(«ELEV» % 50)
Оператор ^
Возвращает результат возведения числа a в степень b.
Оператор =
Оператор >
Синтаксис зависит от задач.
В случае, если нам нужно проверить справедливость выражения (если выражение верно, возвращается 1, если нет — 0):
Нижеследующее условное выражение возвращает значение «маленький» в случае, если значение поля «Количество» Оператор
Оператор <>
Оператор
Оператор >=
Оператор ||
Оператор конкатенации: объединяет выражения из разных полей.
Оператор LIKE
Оператор для поиска значений по образцу с учетом регистра.
CASE WHEN a LIKE b THEN c ELSE d END
Выражение, возвращающее значение «город», если значение поля «Населенный пункт» начинается с «г.», в противном случае, возвращает значение «поселок».
CASE WHEN «Населенный пункт» LIKE ‘г.%’ THEN ‘город’ ELSE ‘поселок’ END
Оператор ILIKE
Оператор для поиска значений по образцу без учета регистра.
CASE WHEN a ILIKE b THEN c ELSE d END
Выражение, возвращающее значение «город», если значение поля «Населенный пункт» начинается с «г.», в противном случае, возвращает значение «поселок».
CASE WHEN «Населенный пункт» ILIKE ‘г.%’ THEN ‘город’ ELSE ‘поселок’ END
Оператор IS
Оператор OR
Условный оператор, отбирающий значения, которые удовлетворяют хотя бы одному условию из перечня.
Оператор AND
Условный оператор, отбирающий такие значения, которые удовлетворяют двум (или более) условиям.
CASE WHEN a оператор сравнения b AND c оператор сравнения d THEN n ELSE m END
С помощью данного выражения все значения поля «Размер» разбиваются на три класса: малый (от 0 до 15 включительно), средний (от 16 до 30 включительно), и крупный (более 30).
CASE WHEN «Размер» >= ‘0’ AND «Размер» = ’16’ AND «Размер» ’30’ THEN ‘крупный’ END
Оператор NOT
Математические
Математические функции, такие как квадратный корень, sin и cos.
Функция sqrt()
Функция sin()
Функция cos()
Функция tan()
ArcGIS Help
При создании классов пространственных объектов или таблиц вы выбираете для каждого поля тип данных. Список доступных типов данных очень большой и включает в себя такие типы, как текст (text), дата (date), большие бинарные объекты (BLOB) и глобально определяемые уникальные идентификаторы (GUID). Правильный выбор типа данных позволит вам корректно хранить ваши данные и облегчит выполнение анализа, управление данными и упростит решение бизнес-задач.
В данном разделе будут описаны типы данных, которые доступны при создании класса пространственных объектов или таблицы в ArcGIS. Если вы храните данные в базе данных или геоданных в системе управления базами данных (СУБД), типы данных ArcGIS и СУБД могут не совпадать. При преобразовании типа данных ArcGIS происходит его замещение максимально схожим типом данных, который доступен в СУБД. Данный процесс называется преобразованием типа данных. В течение этого процесса возможно, что значения, которые будут храниться в СУБД с другим типом данных, будут использовать для атрибута данных (data attribute) иные критерии. В результате, типы данных, которые вы видите в свойствах таблицы или класса объектов в ArcGIS for Desktop могут отличаться от заданных. Более подробно о процессе преобразования типов данных с помощью используемой системы управления базами данных, см. в разделе Типы данных в СУБД.
Кроме того, другие форматы хранения данных, такие как шейп-файлы или таблицы dbf, имеют другие ограничения по типам данных. Убедитесь, что знаете обо всех ограничениях на типы данных и размер в конечном формате, при изменении типов хранения данных.
Количества
Вы можете хранить числа с помощью одного из четырех численных типов данных:
При выборе типа данных вам сначала нужно понять, будете вы хранить целые числа или дробные. Если вам нужно хранить только целые числа, например, 12 или 12,345,678, то используйте тип короткие целые (short integer) или длинные целые (long integer). Если вам нужно хранить дробные числа, которые имеют десятичные доли, например, 0.23 или 1234.5678, то используйте числа с плавающей точкой (float) или числа с двойной точностью (double).
Диапазон хранимых значений
Численные значения без дробных значений в рамках заданного интервала; кодированные значения
Численные значения без дробных значений в рамках заданного интервала
Численные значения с дробными значениями в рамках заданного интервала
Численные значения с дробными значениями в рамках заданного интервала
Таблица типов данных ArcGIS
При определении численных полей для таблицы в файловой или персональной базе геоданных вам нужно указать только тип данных. При определении численных полей таблицы в базе данных или в многопользовательскойЮ рабочей группы или настольной базе геоданных также укажите разрядность (максимальную длину поля) и масштаб (количество десятичных знаков после запятой).
Определение точности (precision) и количества десятичных знаков (scale) позволяет вам ограничить диапазон значений и установить допустимые форматы значений, которые могут быть использованы в определенном поле. Все это обеспечивает для вас более полное управление системой. Например, если вы определили тип чисел с плавающей точкой (float) с точностью (precision), равной 4, и количеством десятичных знаков (scale), равным 2, то вы сможете ввести в это поле 12.34. Если вы попытаетесь ввести в это поле 12.345, то будет выведено сообщение об ошибке, поскольку данное значение превышает установленный порог количества цифр и разрешенного числа знаков после запятой. С другой стороны, если вы определите тип данных с плавающей точкой (float) с точностью (precision), равной 5, и количеством десятичных знаков (scale), равным 3, то вы сможете ввести в это поле 12.345.
Типы данных и их возможные значения разрядности (precision) и количества десятичных знаков (scale) перечислены в расположенной ниже таблице. Использование данной таблицы поможет при выборе типа данных, количества десятичных знаков и разрядности:
Тип данных | Разрядность (длина поля) | Количество десятичных знаков (Scale) (число знаков после запятой) | |
---|---|---|---|
Диапазон | Тип данных | Разрядность (длина поля) | Количество десятичных знаков (число знаков после запятой) |
---|---|---|---|
Примеры диапазонов, типов данных, разрядности и длины
*Отрицательные числа требуют наличия дополнительного значащего символа для хранения знака (-) минус.
Компьютеры могут хранить только ограниченное число цифр, что определяется в зависимости от выделенного дискового пространства. Поля с типом данных числа с плавающей точкой двойной точности в базах данных и геоданных могут хранить числа, которые состоят не более, чем из 15 цифр, потому что это самое длинное число, которое может быть определено посредством 8 байт дискового пространства. Числа, имеющие более 15 цифр, округляются и хранятся в формате, который похож на экспоненциальное представление, с помощью которого числа определяются приблизительно. Например, если введено 20-разрядное число 12 345 678 901 234 567 890, оно округляется и хранится как 15-разрядное число 1.23456789012346E+19. Кодовое число в конце, E+19, определяет место десятичной точки.
Числа с плавающей точкой (Float) в файловой и персональной базах геоданных могут хранить точно только те числа, которые состоят не более чем из 6 цифр. Например, вы не сможете хранить точно число 123456,7 в поле с типом float, потому что это число содержит больше шести цифр. Вы сможете ввести это число в поле с типом float в файловой или персональной базе геоданных, но оно будет округлено до 123457, т.е. до числа, содержащего разрешенные 6 цифр. Если вам необходимо хранить это число точно, то вы бы могли хранить его в поле с типом double. Поля с плавающей точкой в многопользовательских, рабочей группы и настольных базах геоданных и в базах данных не позволят ввести больше цифр, чем значение разрядности поля, т.е. округление производиться не будет.
Текст
Чтобы более подробно познакомиться с подтипами и атрибутивными доменами, можно обратиться к соответствующим разделам.
Символы, которые используются для текстового представления, могут различаться в зависимости от языка. Для обеспечения легкой конвертации текста между языками ArcGIS использует Unicode для кодирования символов.
Тип данных дата (date) позволяет хранить даты, время или даты и время. Форматом по умолчанию для представления информации является mm/dd/yyyy hh:mm:ss (мм/дд/гггг чч:мм:сс) с указанием времени до или после полудня (AM или PM). При вводе полей даты в таблицу с помощью ArcGIS данные преобразуются в этот формат.
Большой двоичный объект (BLOB) представляет собой некоторую часть данных, хранимую в виде длинной последовательности двоичных чисел. ArcGIS хранит в виде больших двоичных объектов (BLOB) аннотации и объекты-размеры (dimension), а также такие элементы, как изображения, мультимедиа или фрагменты кода. В этом поле также могут храниться биты кода. Вам будет нужно использовать пользовательский загрузчик или вьювер или приложение третьих лиц для загрузки объектов в поле типа BLOB или просмотра его содержания.
Идентификаторы объектов
Поле ObjectID автоматически поддерживается в ArcGIS и гарантирует, что у каждой записи в таблице будет свой уникальный идентификатор. Если открыть таблицу или атрибутивную таблицу слоя, вы увидите поле ObjectID сразу после псевдонимов OID или ObjectID для таблиц и FID для слоев. От наличия этого поля зависят такие ключевые функции, как прокрутка и отображение выбранных наборов.
При добавлении таблицы базы данных в ArcMap требуется идентификатор объекта. Если ArcGIS не удается найти ненулевое целое поле для использования в качестве идентификатора объекта, пользователю будет предложено выбрать поле, которое будет использоваться в качестве идентификатора объекта. Более подробно см. в разделе Выбор поля уникального идентификатора для слоя запроса.
Глобальные идентификаторы
Базы данных с собственным типом данных GUID, например, персональные базы геоданных и Microsoft SQL Server, хранят значения Global ID и GUID в виде 16 байтов. Базы данных, не имеющие «родной» тип данных GUID, хранят их в виде 38 байт.
Некоторые примечания по работе с глобальными идентификаторами
Поля типа растра
В отличие от гиперссылки, которая просто связывает поле объекта с изображением, поле типа raster позволяет хранить растровые данные в рамках или при базе геоданных. Более подробно см. в разделе Добавление наборов растровых данных в качестве атрибутов классов объектов.
Геометрия
В ArcGIS тип данных геометрия (geometry) определяет типы геометрии объектов — точка, линия, полигон, мультиточка или мультипатч — которые хранятся в определенной таблице. Поле, хранящееся как тип geometry, при создании из ArcGIS получает имя SHAPE.
Новый полигональный класс пространственных объектов
В разделе Свойства поля диалогового окна Новый класс пространственных объектов тип геометрии будет указан как Polygon.
Тип данных и тип геометрии
Если бы вы создали класс пространственных объектов с типом объектов — линия, точка, мультиточка, мультипатч, объект-размер (dimension) или аннотация — то тип геометрии для поля SHAPE поменялся бы соответствующим образом — на линия, точка, мультиточка, мультипатч или полигон для объектов-размеров (dimension) или аннотаций.
- автоматическая стиральная машина для дачи без водопровода
- автоматические ворота для дачи с дистанционным открытием