Re: Объединение слоев и полигонов
Добавлено: 05 фев 2019, 14:31
Отступ )
Геоинформационные системы (ГИС) и Дистанционное зондирование Земли
https://gis-lab.info/forum/
Классно, поигрался, объединяет! Но только не всё. Возможно районы у меня в списке лежат не рядом - не так как примыкают между собой на карте... половина районов клеится в один полигон, а половина не клеится.
Скорее всего, ошибки топологии.Yuraz писал(а): ↑05 фев 2019, 16:18половина районов клеится в один полигон, а половина не клеится.
Дмитрий, не могу ЛС написать, можете написать на 1bmjwxcp9kck@mail.ru ?
Код: Выделить всё
# -*- coding: utf-8 -*-
buffer = 0.1
# склеиваем геометрии из выделенных слоев в одну
sql = ''
tpl = u' select geometry from "%s" where st_isvalid(geometry) and not st_isempty(geometry) \n'
cte = u' with cte as (%s) \n select 1, st_union(cte.geometry) as geometry from CTE group by "1"'
for layer in iface.legendInterface().selectedLayers():
if sql != '':
sql = sql + u' union all \n'
sql = sql + tpl % (layer.name())
# слой с объединенной геометрией
layer = QgsVectorLayer("?query="+cte % (sql), 'UnionLayer', "virtual")
QgsMapLayerRegistry.instance().addMapLayer(layer, True)
# подправляем артефакты
sql = 'select st_buffer(st_buffer(geometry, %f), -%f) from UnionLayer' % (buffer, buffer)
# результирующий слой
layer = QgsVectorLayer("?query="+sql, 'ResultLayer', "virtual")
QgsMapLayerRegistry.instance().addMapLayer(layer, True)