Использование QGIS для подготовки межевого плана: различия между версиями

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Нет описания правки
мНет описания правки
 
(не показано 20 промежуточных версий 2 участников)
Строка 1: Строка 1:
{{Статья|Черновик}}
{{Статья|Опубликована|qgis-openland}}
= Использование QGIS для подготовки межевого плана =
 
В данной статье рассматривается возможность использования открытого программного обеспечения в качестве инструмента кадастрового инженера при подготовке документов для учёта земельных участков.
{{Аннотация|В данной статье рассматривается возможность использования открытого программного обеспечения в качестве инструмента кадастрового инженера при подготовке документов межевого плана.}}


== Цель создания ==
== Цель создания ==
Для разработки системы были две основные предпосылки:
Для разработки системы openLand были две основные предпосылки:


* технологическая, выраженная в стремление использовать открытую Quantum GIS, как перспективную и динамически развивающуюся ГИС;
* технологическая, выраженная в стремление использовать открытую Quantum GIS, как перспективную и динамически развивающуюся ГИС;
* экономическая, выраженная в желании использования свободного программного обеспечения, с нулевой стоимостью приобретения и выгодной ценой владения ПО.
* экономическая, выраженная в желании использовать свободное программное обеспечение, с нулевой стоимостью приобретения и выгодной ценой владения ПО.


Указанными предпосылками был определён выбор программного обеспечения для работы и составляющие компоненты системы:
Указанными предпосылками был определён выбор программного обеспечения для работы и составляющие компоненты системы:


# ГИС Quantum GIS;
# СУБД PostgreSQL с пространственным расширением PostGIS;
# СУБД PostgreSQL с пространственным расширением PostGIS;
# ГИС Quantum GIS;
# Библиотека libxslt;
# Библиотека libxslt;
# Текстовый редактор LibreOffice Writer.
# Офисный пакет LibreOffice (текстовый процессор Writer).


Составляющие элементы системы:
Составляющие элементы системы:
Строка 23: Строка 23:
# Утилита командной строки библиотеки libxslt;
# Утилита командной строки библиотеки libxslt;
# Файл проекта QGIS.
# Файл проекта QGIS.
Все перечисленные компоненты системы являются кроссплатформенными, соответственно в целом, система также является кроссплатформенной.


== Состав системы ==
== Состав системы ==
=== Серверная часть системы ===
=== Серверная часть системы ===
База данных (БД) традиционно состоит из таблиц, условно разделенных на три группы, на три схемы в терминологии используемой СУБД.  
База данных (БД) традиционно состоит из взаимосвязанных таблиц, условно разделенных на три группы, на три схемы в терминологии используемой СУБД.  


# ''class'' — набор классификаторов, структура и состав которых определены нормативными документами. Были использованы классификаторы XML - схемы, используемой для формирования XML - документа – межевого плана земельного участка, предоставляемого в орган кадастрового учета в форме электронного документа. <br/> Кроме классификаторов, обусловленных нормативными документами, схема содержит некоторые служебные таблицы, например:
1. ''class'' — набор классификаторов, структура и состав которых определены нормативными документами. Были использованы классификаторы XML - схемы, используемой для формирования XML - документа – межевого плана земельного участка, предоставляемого в орган кадастрового учета в форме электронного документа. <br/> Кроме классификаторов, обусловленных нормативными документами, схема содержит некоторые служебные таблицы, например:
## ''database_version'' — таблица с номером версии данной БД, для задач контроля и обновления структуры<nowiki>;</nowiki>
* ''database_version'' — таблица с номером версии данной БД, для задач контроля и обновления структуры<nowiki>;</nowiki>
## ''sistema_koordinat'' — таблица содержащая параметры местных систем координат, необходимых для работы, в формате выражения ''proj''.Таблицы данной схемы недоступны обычным пользователям для редактирования. Права на редактирование этих классификаторов имеют только пользователи с правами администратора.
* ''sistema_koordinat'' — таблица, содержащая параметры местных систем координат, необходимых для работы, в формате выражения ''proj''.  
# ''msk ''— схема содержит пространственные таблицы, необходимые для проведения кадастровых работ: «Район», «Квартал», «Участок», «Граница», «Точка». В поле ''geom'' хранится пространственная составляющая каждого объекта. Значения координат хранятся в метрах, а система координат для каждого объекта (строки таблицы) определятся полем ''id_msk''. Данное поле имеет формат GUID и для каждой таблицы схемы ''msk'', является внешним ключом на таблицу ''sistema_koordinat'', которая, в свою очередь, содержит параметры используемых в системе МСК.  
Таблицы схемы ''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'' пустое, то есть нулевой квартал не имеет пространственной составляющей. Принадлежность земельных участков (ЗУ) нулевому кварталу определяется только атрибутивной информацией.
Для таблицы «Квартал» имеется исключение — у нулевых кварталов каждого кадастрового района поле ''geom'' пустое, то есть нулевой квартал не имеет пространственной составляющей. Принадлежность земельных участков (ЗУ) нулевому кварталу определяется только атрибутивной информацией.
# ''public'' — данная схема содержит таблицы с атрибутивной информацией. Основная часть этих таблиц определяет атрибуты административно-территориального деления (АТД) для ЗУ, то есть являются справочниками всевозможных названий элементов АТД. Непосредственно сам адрес, как сущность, представлен в виде комбинации идентификаторов строк данных справочников.
 
3. ''public'' — данная схема содержит таблицы с атрибутивной информацией. Основная часть этих таблиц определяет атрибуты административно-территориального деления (АТД) для ЗУ, то есть являются справочниками всевозможных названий элементов АТД. Непосредственно сам адрес, как сущность, представлен в виде комбинации идентификаторов строк данных справочников.


<center>[[Файл:Address.png]]</center>
<center>[[Файл:Address.png]]</center>


Кроме таблиц АТД имеются таблицы «Многоконтурный» и «Части». Эти таблицы содержат информацию о взаимосвязи отдельных контуров или частей с многоконтурными ЗУ и участков с частями. Часть функционала системы также находится на серверной части и реализована в виде триггерных функций и значений полей по умолчанию.
Кроме таблиц АТД имеются таблицы «Многоконтурный» и «Части». Эти таблицы содержат информацию о взаимосвязи отдельных контуров или частей с многоконтурными ЗУ и участков с частями.  


Например, фиксируется имя пользователя и время создания ЗУ через значения полей по умолчанию.
Часть функционала системы также находится на серверной части и реализована в виде триггерных функций и значений полей по умолчанию. Например, фиксируется имя текущего пользователя БД и время создания ЗУ через значения полей по умолчанию.
 
<syntaxhighlight lang="sql">
''CREATE TABLE msk.uchastok (''
CREATE TABLE msk.uchastok (
 
  id SERIAL,  
''id SERIAL, ''
  create_user VARCHAR(20) DEFAULT "current_user"(),
  create_date TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT now(),
</syntaxhighlight>


''…''
Другой пример — триггер на создание ЗУ, проверяющий входимость центроида создаваемого участка в существующий полигон кадастрового квартала (КК). Если такой полигон КК существует, создаваемый ЗУ автоматически получает атрибут внешнего ключа к данному кварталу.
 
''create_user VARCHAR(20) DEFAULT "current_user"(), ''
 
''create_date TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT now(),''
 
''…''
 
Другой пример — триггер на создание ЗУ, проверяющий входимость центроида создаваемого участка в существующий полигон кадастрового квартала (КК). Если такой полигон КК существует, создаваемый ЗУ автоматически относится к данному кварталу.


<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 на языке программирования Python и файл проекта QGIS.  


Проект openLand.qgs:
Проект openLand.qgs:
Строка 89: Строка 82:
* является связывающим звеном между кодом модуля и базой данных;
* является связывающим звеном между кодом модуля и базой данных;
* определяет стили отображения пространственных элементов в соответствии с принятыми условными обозначениями;
* определяет стили отображения пространственных элементов в соответствии с принятыми условными обозначениями;
* определяет ряд действий над пространственными объектами используя встроенные возможности ГИС (инструмент «Выполнить действия объекта»);
* определяет ряд действий над пространственными объектами, используя встроенные возможности ГИС (инструмент «Выполнить действия объекта»);
* содержит описание макетов документов для печати: «Схема геодезических построений», «Схема расположения ЗУ», «Чертёж ЗУ и ЧЗУ».
* содержит описание макетов документов для печати: «Схема геодезических построений», «Схема расположения ЗУ», «Чертёж ЗУ и ЧЗУ».


Строка 95: Строка 88:


* импорт данных кадастрового плана территории и выписки о ЗУ в формате XML;
* импорт данных кадастрового плана территории и выписки о ЗУ в формате XML;
* автоматизация действий с объектами;
* автоматизация действий с объектами (объединение или раздел ЗУ);
* редактирование геометрии и атрибутов объектов;
* редактирование геометрии и атрибутов объектов;
* формирования межевого плана в формате XML.
* формирования межевого плана в формате XML.


Система подготовки печатной формы межевого плана основана на формировании документа в формате ODF (OpenDocument Format). Документы, содержащие графическую часть (чертежи и схемы) формируются непосредственно в ГИС, через макеты. Остальные документы (исходные данные, сведения о выполненных измерениях и расчетах, сведения об образуемых земельных участках и их частях) формируются на основании подготовленного XML файла межевого плана. То есть, XML форма межевого плана первична, а печатный вариант вторичен.  
<center>[[Файл:Import-xml-kpt-dialog.png]]</center>
<br />
<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>


Межевой план в формате файла ODF из формата XML формируется с использованием утилиты XSLT трансформации. Утилита командной строки из библиотеки LIBXSLT.
== Ссылки ==
* [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, как перспективную и динамически развивающуюся ГИС;
  • экономическая, выраженная в желании использовать свободное программное обеспечение, с нулевой стоимостью приобретения и выгодной ценой владения ПО.

Указанными предпосылками был определён выбор программного обеспечения для работы и составляющие компоненты системы:

  1. ГИС Quantum GIS;
  2. СУБД PostgreSQL с пространственным расширением PostGIS;
  3. Библиотека libxslt;
  4. Офисный пакет LibreOffice (текстовый процессор Writer).

Составляющие элементы системы:

  1. База данных PostgreSQL;
  2. Модуль на Python;
  3. Набор локальных файлов формата SHP;
  4. Утилита командной строки библиотеки libxslt;
  5. Файл проекта QGIS.

Все перечисленные компоненты системы являются кроссплатформенными, соответственно в целом, система также является кроссплатформенной.

Состав системы

Серверная часть системы

База данных (БД) традиционно состоит из взаимосвязанных таблиц, условно разделенных на три группы, на три схемы в терминологии используемой СУБД.

1. class — набор классификаторов, структура и состав которых определены нормативными документами. Были использованы классификаторы XML - схемы, используемой для формирования XML - документа – межевого плана земельного участка, предоставляемого в орган кадастрового учета в форме электронного документа.
Кроме классификаторов, обусловленных нормативными документами, схема содержит некоторые служебные таблицы, например:

  • database_version — таблица с номером версии данной БД, для задач контроля и обновления структуры;
  • sistema_koordinat — таблица, содержащая параметры местных систем координат, необходимых для работы, в формате выражения proj.

Таблицы схемы class недоступны обычным пользователям для редактирования. Права на редактирование этих классификаторов имеют только пользователи СУБД с правами администратора.

2. msk — схема содержит пространственные таблицы, необходимые для проведения кадастровых работ: «Район», «Квартал», «Участок», «Граница», «Точка». В поле geom хранится пространственная составляющая каждого объекта. Значения координат хранятся в метрах, а система координат для каждого объекта (строки таблицы) определятся полем id_msk. Данное поле имеет формат GUID и для каждой таблицы схемы msk, является внешним ключом на таблицу sistema_koordinat, которая, в свою очередь, содержит параметры используемых в системе МСК.

Id-msk.png

Таким образом, например в таблице «Квартал», хранятся полигоны совершенно разных районов работ и МСК. Для работы пользователя с определенной МСК, в ГИС необходимо только сделать выборку объектов с нужным id_msk по всем пространственным таблицам и интерактивно указать МКС для векторных слоёв.

Для начала работы с новой территорией (новой МСК) не нужно изменять структуру данных БД, достаточно только лишь добавить новую запись в таблицу sistema_koordinat с необходимыми параметрами, обновить выборку в ГИС и в результате получить «чистый лист» на котором можно создавать объекты уже сразу в новой МСК.

Для таблицы «Квартал» имеется исключение — у нулевых кварталов каждого кадастрового района поле geom пустое, то есть нулевой квартал не имеет пространственной составляющей. Принадлежность земельных участков (ЗУ) нулевому кварталу определяется только атрибутивной информацией.

3. public — данная схема содержит таблицы с атрибутивной информацией. Основная часть этих таблиц определяет атрибуты административно-территориального деления (АТД) для ЗУ, то есть являются справочниками всевозможных названий элементов АТД. Непосредственно сам адрес, как сущность, представлен в виде комбинации идентификаторов строк данных справочников.

Address.png

Кроме таблиц АТД имеются таблицы «Многоконтурный» и «Части». Эти таблицы содержат информацию о взаимосвязи отдельных контуров или частей с многоконтурными ЗУ и участков с частями.

Часть функционала системы также находится на серверной части и реализована в виде триггерных функций и значений полей по умолчанию. Например, фиксируется имя текущего пользователя БД и время создания ЗУ через значения полей по умолчанию.

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.
Import-xml-kpt-dialog.png


Export-xml-rezult.png

Процедура подготовки печатной формы межевого плана основана на формировании документа в формате 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

Ссылки