Использование QGIS для подготовки межевого плана: различия между версиями
Dab (обсуждение | вклад) Нет описания правки |
мНет описания правки |
||
(не показано 18 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
{{Статья| | {{Статья|Опубликована|qgis-openland}} | ||
В данной статье рассматривается возможность использования открытого программного обеспечения в качестве инструмента кадастрового инженера при подготовке документов | {{Аннотация|В данной статье рассматривается возможность использования открытого программного обеспечения в качестве инструмента кадастрового инженера при подготовке документов межевого плана.}} | ||
== Цель создания == | == Цель создания == | ||
Для разработки системы были две основные предпосылки: | Для разработки системы openLand были две основные предпосылки: | ||
* технологическая, выраженная в стремление использовать открытую Quantum GIS, как перспективную и динамически развивающуюся ГИС; | * технологическая, выраженная в стремление использовать открытую Quantum GIS, как перспективную и динамически развивающуюся ГИС; | ||
* экономическая, выраженная в желании | * экономическая, выраженная в желании использовать свободное программное обеспечение, с нулевой стоимостью приобретения и выгодной ценой владения ПО. | ||
Указанными предпосылками был определён выбор программного обеспечения для работы и составляющие компоненты системы: | Указанными предпосылками был определён выбор программного обеспечения для работы и составляющие компоненты системы: | ||
# ГИС Quantum GIS; | |||
# СУБД PostgreSQL с пространственным расширением PostGIS; | # СУБД PostgreSQL с пространственным расширением PostGIS; | ||
# Библиотека libxslt; | # Библиотека libxslt; | ||
# | # Офисный пакет LibreOffice (текстовый процессор Writer). | ||
Составляющие элементы системы: | Составляющие элементы системы: | ||
Строка 23: | Строка 23: | ||
# Утилита командной строки библиотеки libxslt; | # Утилита командной строки библиотеки libxslt; | ||
# Файл проекта QGIS. | # Файл проекта QGIS. | ||
Все перечисленные компоненты системы являются кроссплатформенными, соответственно в целом, система также является кроссплатформенной. | |||
== Состав системы == | == Состав системы == | ||
=== Серверная часть системы === | === Серверная часть системы === | ||
База данных (БД) традиционно состоит из таблиц, условно разделенных на три группы, на три схемы в терминологии используемой СУБД. | База данных (БД) традиционно состоит из взаимосвязанных таблиц, условно разделенных на три группы, на три схемы в терминологии используемой СУБД. | ||
1. ''class'' — набор классификаторов, структура и состав которых определены нормативными документами. Были использованы классификаторы XML - схемы, используемой для формирования XML - документа – межевого плана земельного участка, предоставляемого в орган кадастрового учета в форме электронного документа. <br/> Кроме классификаторов, обусловленных нормативными документами, схема содержит некоторые служебные таблицы, например: | |||
* ''database_version'' — таблица с номером версии данной БД, для задач контроля и обновления структуры<nowiki>;</nowiki> | |||
* ''sistema_koordinat'' — таблица, содержащая параметры местных систем координат, необходимых для работы, в формате выражения ''proj''. | |||
Таблицы схемы ''class'' недоступны обычным пользователям для редактирования. Права на редактирование этих классификаторов имеют только пользователи СУБД с правами администратора. | |||
2. ''msk ''— схема содержит пространственные таблицы, необходимые для проведения кадастровых работ: «Район», «Квартал», «Участок», «Граница», «Точка». В поле ''geom'' хранится пространственная составляющая каждого объекта. Значения координат хранятся в метрах, а система координат для каждого объекта (строки таблицы) определятся полем ''id_msk''. Данное поле имеет формат GUID и для каждой таблицы схемы ''msk'', является внешним ключом на таблицу ''sistema_koordinat'', которая, в свою очередь, содержит параметры используемых в системе МСК. | |||
<center>[[Файл:Id-msk.png]]</center> | <center>[[Файл:Id-msk.png]]</center> | ||
Таким образом, например в таблице «Квартал», хранятся полигоны совершенно разных районов работ и МСК. Для работы пользователя с определенной МСК, в ГИС необходимо только сделать выборку объектов с нужным ''id_msk'' по всем пространственным таблицам. | Таким образом, например в таблице «Квартал», хранятся полигоны совершенно разных районов работ и МСК. Для работы пользователя с определенной МСК, в ГИС необходимо только сделать выборку объектов с нужным ''id_msk'' по всем пространственным таблицам и интерактивно указать МКС для векторных слоёв. | ||
Для начала работы с новой территорией (новой МСК) не нужно изменять структуру данных БД, достаточно только лишь добавить новую запись в таблицу ''sistema_koordinat'' с необходимыми параметрами, обновить выборку в ГИС и в результате получить «чистый лист» на котором можно создавать объекты уже сразу в новой МСК. | Для начала работы с новой территорией (новой МСК) не нужно изменять структуру данных БД, достаточно только лишь добавить новую запись в таблицу ''sistema_koordinat'' с необходимыми параметрами, обновить выборку в ГИС и в результате получить «чистый лист» на котором можно создавать объекты уже сразу в новой МСК. | ||
Для таблицы «Квартал» имеется исключение — | Для таблицы «Квартал» имеется исключение — у нулевых кварталов каждого кадастрового района поле ''geom'' пустое, то есть нулевой квартал не имеет пространственной составляющей. Принадлежность земельных участков (ЗУ) нулевому кварталу определяется только атрибутивной информацией. | ||
3. ''public'' — данная схема содержит таблицы с атрибутивной информацией. Основная часть этих таблиц определяет атрибуты административно-территориального деления (АТД) для ЗУ, то есть являются справочниками всевозможных названий элементов АТД. Непосредственно сам адрес, как сущность, представлен в виде комбинации идентификаторов строк данных справочников. | |||
<center>[[Файл:Address.png]]</center> | <center>[[Файл:Address.png]]</center> | ||
Кроме таблиц АТД имеются таблицы «Многоконтурный» и «Части». Эти таблицы содержат информацию о взаимосвязи отдельных контуров или частей с многоконтурными ЗУ и участков с частями | Кроме таблиц АТД имеются таблицы «Многоконтурный» и «Части». Эти таблицы содержат информацию о взаимосвязи отдельных контуров или частей с многоконтурными ЗУ и участков с частями. | ||
Например, фиксируется имя пользователя и время создания ЗУ через значения полей по умолчанию. | Часть функционала системы также находится на серверной части и реализована в виде триггерных функций и значений полей по умолчанию. Например, фиксируется имя текущего пользователя БД и время создания ЗУ через значения полей по умолчанию. | ||
<syntaxhighlight lang="sql"> | |||
CREATE TABLE msk.uchastok ( | |||
id SERIAL, | |||
… | |||
create_user VARCHAR(20) DEFAULT "current_user"(), | |||
create_date TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT now(), | |||
… | |||
</syntaxhighlight> | |||
Другой пример — триггер на создание ЗУ, проверяющий входимость центроида создаваемого участка в существующий полигон кадастрового квартала (КК). Если такой полигон КК существует, создаваемый ЗУ автоматически получает атрибут внешнего ключа к данному кварталу. | |||
Другой пример — триггер на создание ЗУ, проверяющий входимость центроида создаваемого участка в существующий полигон кадастрового квартала (КК). Если такой полигон КК существует, создаваемый ЗУ автоматически | |||
<syntaxhighlight lang="sql"> | |||
… | … | ||
IF (NEW.geom IS NOT NULL) AND (NEW.id_kvartal IS NULL) AND (NEW.id_msk IS NOT NULL) THEN | IF (NEW.geom IS NOT NULL) AND (NEW.id_kvartal IS NULL) AND (NEW.id_msk IS NOT NULL) THEN | ||
ngeom = public.st_centroid(NEW.geom); | |||
ngeom = public.st_centroid(NEW.geom); | idmsk = NEW.id_msk; | ||
SELECT id, kn FROM "msk".kvartal | |||
idmsk = NEW.id_msk; | WHERE public.st_within(ngeom, geom) | ||
AND kvartal.id_msk=idmsk INTO idkn; | |||
NEW.id_kvartal = idkn; | |||
SELECT id, kn FROM "msk".kvartal | |||
WHERE public.st_within(ngeom, geom) | |||
AND kvartal.id_msk=idmsk INTO idkn; | |||
NEW.id_kvartal = idkn; | |||
… | … | ||
</syntaxhighlight> | |||
=== Клиентская часть системы === | === Клиентская часть системы === | ||
Основными элементами клиентской части системы | Основными элементами клиентской части системы являются модуль openLand на языке программирования Python и файл проекта QGIS. | ||
Проект openLand.qgs: | Проект openLand.qgs: | ||
Строка 89: | Строка 82: | ||
* является связывающим звеном между кодом модуля и базой данных; | * является связывающим звеном между кодом модуля и базой данных; | ||
* определяет стили отображения пространственных элементов в соответствии с принятыми условными обозначениями; | * определяет стили отображения пространственных элементов в соответствии с принятыми условными обозначениями; | ||
* определяет ряд действий над пространственными объектами используя встроенные возможности ГИС (инструмент «Выполнить действия объекта»); | * определяет ряд действий над пространственными объектами, используя встроенные возможности ГИС (инструмент «Выполнить действия объекта»); | ||
* содержит описание макетов документов для печати: «Схема геодезических построений», «Схема расположения ЗУ», «Чертёж ЗУ и ЧЗУ». | * содержит описание макетов документов для печати: «Схема геодезических построений», «Схема расположения ЗУ», «Чертёж ЗУ и ЧЗУ». | ||
Строка 95: | Строка 88: | ||
* импорт данных кадастрового плана территории и выписки о ЗУ в формате XML; | * импорт данных кадастрового плана территории и выписки о ЗУ в формате XML; | ||
* автоматизация действий с объектами; | * автоматизация действий с объектами (объединение или раздел ЗУ); | ||
* редактирование геометрии и атрибутов объектов; | * редактирование геометрии и атрибутов объектов; | ||
* формирования межевого плана в формате XML. | * формирования межевого плана в формате XML. | ||
Строка 103: | Строка 96: | ||
<center>[[Файл:Export-xml-rezult.png]]</center> | <center>[[Файл:Export-xml-rezult.png]]</center> | ||
Процедура подготовки печатной формы межевого плана основана на формировании документа в формате ODF (OpenDocument Format). Документы, содержащие графическую часть (чертежи и схемы) формируются непосредственно в ГИС, через макеты, и могут быть экспортированы в PDF, SVG или растровые документы. Остальные документы (исходные данные, сведения о выполненных измерениях и расчетах, сведения об образуемых земельных участках и их частях) формируются на основании подготовленного XML файла межевого плана. То есть, XML форма межевого плана первична, а печатный вариант формируется на данных XML файла. | |||
Межевой план в формате ODF формируется из файла формата XML с использованием утилиты XSLT трансформации xsltproc библиотеки LIBXSLT. | |||
Шаблон документа изначально представлен в виде файла V03_STD_MP.zip - это именно шаблон будущего ODF, то есть стили, таблицы, оформление, но без данных. Промежуточный файл с данными content.xml формируется из файла XML межевого плана, после чего шаблон и данные компонуются в документ формата ODF. Компоновка осуществляется с использованием стандартного алгоритма zip. | |||
<syntaxhighlight lang="python"> | |||
… | |||
self.fileXmlName = QFileDialog.getOpenFileName(self, u'Укажите XML файл для создания документа', self.pathIn, u'XML файлы(*.xml *.XML)') | |||
… | |||
self.fileOdtName = QFileDialog.getSaveFileName(self, u'Сохранить документ как ', tmp, u'ODT файлы(*.odt *.ODT)') | |||
… | |||
shutil.copyfile(self.pathTpl + '\\V03_STD_MP.zip', 'openlandtempdoc.zip') | |||
if 'Windows' in platform.system(): | |||
os.system('xslt01.cmd ' + self.fileXmlName) | |||
else: | |||
self.highlightLine(u'Ошибка! Для текущей операционной системы не установлен сценарий обработки XSLT трансформации.') | |||
z = ZipFile('openlandtempdoc.zip', 'a') | |||
z.write('content.xml') | |||
z.close() | |||
os.remove('content.xml') | |||
shutil.move('openlandtempdoc.zip', self.fileOdtName) | |||
self.listWidgetEvents.addItem(u'Создан документ для печати ' + self.fileOdtName) | |||
… | |||
</syntaxhighlight> | |||
Сценарий обработки XLST трансформации xslt01.cmd в версии операционной системы Windows. | |||
<syntaxhighlight lang="dos"> | |||
bin\xsltproc -o content.xml xslt\STD_MP.xslt %1 | |||
</syntaxhighlight> | |||
== Ссылки == | |||
* [http://openlandgis.ru Модуль openLand для QGIS] | |||
* [http://openlandgis.ru/for-admin Установка, настройка, администрирование openLand] | |||
* [http://openlandgis.ru/documentation Руководство пользователя openLand] | |||
* [http://ru.wikipedia.org/wiki/OpenDocument OpenDocument Format] |
Текущая версия от 11:21, 24 апреля 2013
по адресу http://gis-lab.info/qa/qgis-openland.html
В данной статье рассматривается возможность использования открытого программного обеспечения в качестве инструмента кадастрового инженера при подготовке документов межевого плана.
Цель создания
Для разработки системы openLand были две основные предпосылки:
- технологическая, выраженная в стремление использовать открытую Quantum GIS, как перспективную и динамически развивающуюся ГИС;
- экономическая, выраженная в желании использовать свободное программное обеспечение, с нулевой стоимостью приобретения и выгодной ценой владения ПО.
Указанными предпосылками был определён выбор программного обеспечения для работы и составляющие компоненты системы:
- ГИС Quantum GIS;
- СУБД PostgreSQL с пространственным расширением PostGIS;
- Библиотека libxslt;
- Офисный пакет LibreOffice (текстовый процессор Writer).
Составляющие элементы системы:
- База данных PostgreSQL;
- Модуль на Python;
- Набор локальных файлов формата SHP;
- Утилита командной строки библиотеки libxslt;
- Файл проекта QGIS.
Все перечисленные компоненты системы являются кроссплатформенными, соответственно в целом, система также является кроссплатформенной.
Состав системы
Серверная часть системы
База данных (БД) традиционно состоит из взаимосвязанных таблиц, условно разделенных на три группы, на три схемы в терминологии используемой СУБД.
1. class — набор классификаторов, структура и состав которых определены нормативными документами. Были использованы классификаторы XML - схемы, используемой для формирования XML - документа – межевого плана земельного участка, предоставляемого в орган кадастрового учета в форме электронного документа.
Кроме классификаторов, обусловленных нормативными документами, схема содержит некоторые служебные таблицы, например:
- database_version — таблица с номером версии данной БД, для задач контроля и обновления структуры;
- sistema_koordinat — таблица, содержащая параметры местных систем координат, необходимых для работы, в формате выражения proj.
Таблицы схемы class недоступны обычным пользователям для редактирования. Права на редактирование этих классификаторов имеют только пользователи СУБД с правами администратора.
2. msk — схема содержит пространственные таблицы, необходимые для проведения кадастровых работ: «Район», «Квартал», «Участок», «Граница», «Точка». В поле geom хранится пространственная составляющая каждого объекта. Значения координат хранятся в метрах, а система координат для каждого объекта (строки таблицы) определятся полем id_msk. Данное поле имеет формат GUID и для каждой таблицы схемы msk, является внешним ключом на таблицу sistema_koordinat, которая, в свою очередь, содержит параметры используемых в системе МСК.
Таким образом, например в таблице «Квартал», хранятся полигоны совершенно разных районов работ и МСК. Для работы пользователя с определенной МСК, в ГИС необходимо только сделать выборку объектов с нужным id_msk по всем пространственным таблицам и интерактивно указать МКС для векторных слоёв.
Для начала работы с новой территорией (новой МСК) не нужно изменять структуру данных БД, достаточно только лишь добавить новую запись в таблицу sistema_koordinat с необходимыми параметрами, обновить выборку в ГИС и в результате получить «чистый лист» на котором можно создавать объекты уже сразу в новой МСК.
Для таблицы «Квартал» имеется исключение — у нулевых кварталов каждого кадастрового района поле geom пустое, то есть нулевой квартал не имеет пространственной составляющей. Принадлежность земельных участков (ЗУ) нулевому кварталу определяется только атрибутивной информацией.
3. public — данная схема содержит таблицы с атрибутивной информацией. Основная часть этих таблиц определяет атрибуты административно-территориального деления (АТД) для ЗУ, то есть являются справочниками всевозможных названий элементов АТД. Непосредственно сам адрес, как сущность, представлен в виде комбинации идентификаторов строк данных справочников.
Кроме таблиц АТД имеются таблицы «Многоконтурный» и «Части». Эти таблицы содержат информацию о взаимосвязи отдельных контуров или частей с многоконтурными ЗУ и участков с частями.
Часть функционала системы также находится на серверной части и реализована в виде триггерных функций и значений полей по умолчанию. Например, фиксируется имя текущего пользователя БД и время создания ЗУ через значения полей по умолчанию.
CREATE TABLE msk.uchastok (
id SERIAL,
…
create_user VARCHAR(20) DEFAULT "current_user"(),
create_date TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT now(),
…
Другой пример — триггер на создание ЗУ, проверяющий входимость центроида создаваемого участка в существующий полигон кадастрового квартала (КК). Если такой полигон КК существует, создаваемый ЗУ автоматически получает атрибут внешнего ключа к данному кварталу.
…
IF (NEW.geom IS NOT NULL) AND (NEW.id_kvartal IS NULL) AND (NEW.id_msk IS NOT NULL) THEN
ngeom = public.st_centroid(NEW.geom);
idmsk = NEW.id_msk;
SELECT id, kn FROM "msk".kvartal
WHERE public.st_within(ngeom, geom)
AND kvartal.id_msk=idmsk INTO idkn;
NEW.id_kvartal = idkn;
…
Клиентская часть системы
Основными элементами клиентской части системы являются модуль openLand на языке программирования Python и файл проекта QGIS.
Проект openLand.qgs:
- является связывающим звеном между кодом модуля и базой данных;
- определяет стили отображения пространственных элементов в соответствии с принятыми условными обозначениями;
- определяет ряд действий над пространственными объектами, используя встроенные возможности ГИС (инструмент «Выполнить действия объекта»);
- содержит описание макетов документов для печати: «Схема геодезических построений», «Схема расположения ЗУ», «Чертёж ЗУ и ЧЗУ».
Код модуля непосредственно реализует большую часть функционала системы для выполнения кадастровых работ, например:
- импорт данных кадастрового плана территории и выписки о ЗУ в формате XML;
- автоматизация действий с объектами (объединение или раздел ЗУ);
- редактирование геометрии и атрибутов объектов;
- формирования межевого плана в формате XML.
Процедура подготовки печатной формы межевого плана основана на формировании документа в формате ODF (OpenDocument Format). Документы, содержащие графическую часть (чертежи и схемы) формируются непосредственно в ГИС, через макеты, и могут быть экспортированы в PDF, SVG или растровые документы. Остальные документы (исходные данные, сведения о выполненных измерениях и расчетах, сведения об образуемых земельных участках и их частях) формируются на основании подготовленного XML файла межевого плана. То есть, XML форма межевого плана первична, а печатный вариант формируется на данных XML файла.
Межевой план в формате ODF формируется из файла формата XML с использованием утилиты XSLT трансформации xsltproc библиотеки LIBXSLT. Шаблон документа изначально представлен в виде файла V03_STD_MP.zip - это именно шаблон будущего ODF, то есть стили, таблицы, оформление, но без данных. Промежуточный файл с данными content.xml формируется из файла XML межевого плана, после чего шаблон и данные компонуются в документ формата ODF. Компоновка осуществляется с использованием стандартного алгоритма zip.
…
self.fileXmlName = QFileDialog.getOpenFileName(self, u'Укажите XML файл для создания документа', self.pathIn, u'XML файлы(*.xml *.XML)')
…
self.fileOdtName = QFileDialog.getSaveFileName(self, u'Сохранить документ как ', tmp, u'ODT файлы(*.odt *.ODT)')
…
shutil.copyfile(self.pathTpl + '\\V03_STD_MP.zip', 'openlandtempdoc.zip')
if 'Windows' in platform.system():
os.system('xslt01.cmd ' + self.fileXmlName)
else:
self.highlightLine(u'Ошибка! Для текущей операционной системы не установлен сценарий обработки XSLT трансформации.')
z = ZipFile('openlandtempdoc.zip', 'a')
z.write('content.xml')
z.close()
os.remove('content.xml')
shutil.move('openlandtempdoc.zip', self.fileOdtName)
self.listWidgetEvents.addItem(u'Создан документ для печати ' + self.fileOdtName)
…
Сценарий обработки XLST трансформации xslt01.cmd в версии операционной системы Windows.
bin\xsltproc -o content.xml xslt\STD_MP.xslt %1