Нанесение нумерации на узлы

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
klerk184
Участник
Сообщения: 71
Зарегистрирован: 23 июн 2016, 11:56
Репутация: 0

Нанесение нумерации на узлы

Сообщение klerk184 » 29 авг 2016, 10:06

Всем добрый день!

Вопрос следующий, можно ли как то нанести нумерацию узлов объектов, на слой? пример нарисовал.
2016-08-29_14-01-15.png
2016-08-29_14-01-15.png (54.37 КБ) 7331 просмотр
Подобное я делал на мапинфо, там есть такая возможность, есть для этого косметический слой. Если я правильно понимаю, то в qgis только через создание точек?

Мне нужно это реализовать программно, т.е. чтоб работало через плагин. Плагин уже начал делать.
Последний раз редактировалось klerk184 06 сен 2016, 07:54, всего редактировалось 1 раз.

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2241
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1514
Откуда: Казань

Re: Нанесение нумерации на узлы

Сообщение Игорь Белов » 29 авг 2016, 12:42

В тулбоксе в геоалгоритмах QGIS найдите "Extract nodes" и запустите. На входе укажете слой линий, на выходе получите слой узлов.

В калькуляторе полей создайте целочисленное поле и заполните его выражением "$id + 1".

Выведите подписи.
Вложения
img_20160829_123908.png
img_20160829_123908.png (31.36 КБ) 7296 просмотров
The purpose of computing is insight, not numbers

klerk184
Участник
Сообщения: 71
Зарегистрирован: 23 июн 2016, 11:56
Репутация: 0

Re: Нанесение нумерации на узлы

Сообщение klerk184 » 30 авг 2016, 05:53

Игорь Белов писал(а):В тулбоксе в геоалгоритмах QGIS найдите "Extract nodes" и запустите. На входе укажете слой линий, на выходе получите слой узлов.

В калькуляторе полей создайте целочисленное поле и заполните его выражением "$id + 1".

Выведите подписи.

Этот вариант пользовательский. Мне то нужно это реализовать в своем плагине, чтоб нажал кнопку, и указанные слои нумеровались.

Может кто подскажет, на какие API Python'a стоит обратить внимание? Буду очень благодарен.

Аватара пользователя
Эдуард Казаков
Гуру
Сообщения: 549
Зарегистрирован: 23 апр 2014, 17:11
Репутация: 535
Откуда: Planet Earth
Контактная информация:

Re: Нанесение нумерации на узлы

Сообщение Эдуард Казаков » 30 авг 2016, 12:03

Работайте по алгоритму, который описал Игорь, только через PyQGIS API.
Что-то типа:

Код: Выделить всё

import processing
...
# извлечение узлов
processing.runalg('qgis:extractnodes',...)

# калькулятор атрибутов
processing.runalg('qgis:fieldcalculator',...)

# для слоя извлеченных узлов с расчитанными атрибутами задать подписи.
palyr = QgsPalLayerSettings()
palyr.readFromLayer(field_calculator_output_layer)
palyr.enabled = True
palyr.fieldName = 'Node containing field'
palyr.placement= QgsPalLayerSettings.OverPoint
palyr.setDataDefinedProperty(QgsPalLayerSettings.Size,True,True,'8','')
palyr.writeToLayer(field_calculator_output_layer)

# делаем сам слой прозрачным
field_calculator_output_layer.setLayerTransparency(100)

iface.mapCanvas().refresh()
Последний раз редактировалось Эдуард Казаков 30 авг 2016, 13:58, всего редактировалось 1 раз.

axinax
Интересующийся
Сообщения: 36
Зарегистрирован: 22 авг 2015, 01:01
Репутация: 2

Re: Нанесение нумерации на узлы

Сообщение axinax » 30 авг 2016, 13:05

processing это что за библиотека? Не могу найти ее Qgis API

Аватара пользователя
Эдуард Казаков
Гуру
Сообщения: 549
Зарегистрирован: 23 апр 2014, 17:11
Репутация: 535
Откуда: Planet Earth
Контактная информация:

Re: Нанесение нумерации на узлы

Сообщение Эдуард Казаков » 30 авг 2016, 13:25

Это то, что доступно в processing toolbox в штатном плагине processing.
Можете побаловаться через консоль в самом qgis, а потом то же самое использовать в своём плагине

https://docs.qgis.org/2.2/en/docs/user_ ... nsole.html

klerk184
Участник
Сообщения: 71
Зарегистрирован: 23 июн 2016, 11:56
Репутация: 0

Re: Нанесение нумерации на узлы

Сообщение klerk184 » 02 сен 2016, 10:49

Добрый день, пытаюсь реализовать алгоритм через плагин, что-то не выходит

import processing сделал

Код: Выделить всё

def buttonRun(self):
		uri = QgsDataSourceURI()
		#задаем имя хоста, порта, название базы данных, имя пользователя и пароль
		uri.setConnection("localhost", "1313", "postgres", "postgres", "2709")
		#задается схема, название таблицы, поле геометрии и, опционально, подмножество (условие WHERE)
		uri.setDataSource("public", "LI_DATA_LSK", "geom", "")
		LSK =  QgsVectorLayer(uri.uri(), "LI_DATA_LSK", "postgres")
		
		uri = QgsDataSourceURI()
		#задаем имя хоста, порта, название базы данных, имя пользователя и пароль
		uri.setConnection("localhost", "1313", "postgres", "postgres", "2709")
		#задается схема, название таблицы, поле геометрии и, опционально, подмножество (условие WHERE)
		uri.setDataSource("public", "LI_DATA_LSKPR", "geom", "")
		LSKPR = QgsVectorLayer(uri.uri(), "LI_DATA_LSKPR", "postgres")
		##LSK=name
		##lskpr=vector
		##lsk=vector
		##nodes=output vector
		outputs_QGISEXTRACTNODES_2=processing.runalg('qgis:extractnodes', LSK,None)
		outputs_QGISEXTRACTNODES_1=processing.runalg('qgis:extractnodes', LSKPR,None)
		outputs_QGISMERGEVECTORLAYERS_1=processing.runalg('qgis:mergevectorlayers', [outputs_QGISEXTRACTNODES_1['OUTPUT'],outputs_QGISEXTRACTNODES_2['OUTPUT']],None)
		outputs_QGISDELETEDUPLICATEGEOMETRIES_1=processing.runalg('qgis:deleteduplicategeometries', outputs_QGISMERGEVECTORLAYERS_1['OUTPUT'],"C:/NODES.shp")
		
		vlayer = QgsVectorLayer("C:/NODES.shp", "nodes", "ogr")
		#добавляем загруженный слой в "панель слоев"
		QgsMapLayerRegistry.instance().addMapLayer(vlayer)
Что я делаю не так?

Аватара пользователя
Эдуард Казаков
Гуру
Сообщения: 549
Зарегистрирован: 23 апр 2014, 17:11
Репутация: 535
Откуда: Planet Earth
Контактная информация:

Re: Нанесение нумерации на узлы

Сообщение Эдуард Казаков » 02 сен 2016, 13:36

Ошибка или что не так?
Временные файлы генерируются? Что в них?

klerk184
Участник
Сообщения: 71
Зарегистрирован: 23 июн 2016, 11:56
Репутация: 0

Re: Нанесение нумерации на узлы

Сообщение klerk184 » 05 сен 2016, 04:30

Разобрался, если указываю на диск D и тогда все нормально. Как можно сделать так, чтоб можно было на диск С ?

Vladimir_R
Активный участник
Сообщения: 145
Зарегистрирован: 14 апр 2010, 14:11
Репутация: 44
Откуда: Екатеринбург

Re: Нанесение нумерации на узлы

Сообщение Vladimir_R » 05 сен 2016, 07:18

Плохая идея писать в корень системного диска.
Если же такая необходимость сохраняется, то можете изменить настройки целостности https://blog.windowsnt.lv/2011/11/23/lo ... e-russian/.

klerk184
Участник
Сообщения: 71
Зарегистрирован: 23 июн 2016, 11:56
Репутация: 0

Re: Нанесение нумерации на узлы

Сообщение klerk184 » 05 сен 2016, 10:58

Да файл решил создавать в ТЕМПы.

Не могу понять следующее, не срабатывает процедура калькулятора полей, посмотрите пожалуйста, может кто знает в чем дело

Код: Выделить всё

	def buttonRun(self):
		#записываем в переменные слои
		LSK = [lyr for lyr in QgsMapLayerRegistry.instance().mapLayers().values() if lyr.name() == "LI_DATA_LSK"][0].name()
		LSKPR = [lyr for lyr in QgsMapLayerRegistry.instance().mapLayers().values() if lyr.name() == "LI_DATA_LSKPR"][0].name()
		
		##LSK=name
		##lskpr=vector
		##lsk=vector
		##nodes=output vector
		outputs_QGISEXTRACTNODES_2=processing.runalg('qgis:extractnodes', LSK,None)
		outputs_QGISEXTRACTNODES_1=processing.runalg('qgis:extractnodes', LSKPR,None)
		outputs_QGISMERGEVECTORLAYERS_1=processing.runalg('qgis:mergevectorlayers', [outputs_QGISEXTRACTNODES_1['OUTPUT'],outputs_QGISEXTRACTNODES_2['OUTPUT']],None)
		outputs_QGISDELETEDUPLICATEGEOMETRIES_1=processing.runalg('qgis:deleteduplicategeometries', outputs_QGISMERGEVECTORLAYERS_1['OUTPUT'],"C:\Windows\Temp\nodes.shp")	
		vlayer = QgsVectorLayer("C:\Windows\Temp\nodes.shp", "nodes", "ogr")
		#добавляем загруженный слой в "панель слоев"
		QgsMapLayerRegistry.instance().addMapLayer(vlayer)
		#записываем в переменную добавленный слой
		layerNodes = [lyr for lyr in QgsMapLayerRegistry.instance().mapLayers().values() if lyr.name() == "nodes"][0].name()
		#процедура калькулятора полей, создание поля Number и проставление чисел
		outputs_QGISFIELDCALCULATOR_1=processing.runalg('qgis:fieldcalculator', layerNodes,'Number',1,3.0,3.0,True,'$id + 1',None)
	
Вопрос закрыт. Всем спасибо!

VeterR63
Интересующийся
Сообщения: 38
Зарегистрирован: 12 ноя 2012, 09:19
Репутация: 0

Re: Нанесение нумерации на узлы

Сообщение VeterR63 » 21 сен 2016, 21:39

klerk184,
привет. Полезный плагин пишете.
Планируете поделится с сообществом или для личных нужд?

klerk184
Участник
Сообщения: 71
Зарегистрирован: 23 июн 2016, 11:56
Репутация: 0

Re: Нанесение нумерации на узлы

Сообщение klerk184 » 26 сен 2016, 04:55

VeterR63 писал(а):klerk184,
привет. Полезный плагин пишете.
Планируете поделится с сообществом или для личных нужд?
Пока не думал на эту тему)

В данный момент застрял на API. Не могу разобраться, как задавать стили отображения слоев.)

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя