Нанесение нумерации на узлы
-
- Участник
- Сообщения: 71
- Зарегистрирован: 23 июн 2016, 11:56
- Репутация: 0
Нанесение нумерации на узлы
Всем добрый день!
Вопрос следующий, можно ли как то нанести нумерацию узлов объектов, на слой? пример нарисовал. Подобное я делал на мапинфо, там есть такая возможность, есть для этого косметический слой. Если я правильно понимаю, то в qgis только через создание точек?
Мне нужно это реализовать программно, т.е. чтоб работало через плагин. Плагин уже начал делать.
Вопрос следующий, можно ли как то нанести нумерацию узлов объектов, на слой? пример нарисовал. Подобное я делал на мапинфо, там есть такая возможность, есть для этого косметический слой. Если я правильно понимаю, то в qgis только через создание точек?
Мне нужно это реализовать программно, т.е. чтоб работало через плагин. Плагин уже начал делать.
Последний раз редактировалось klerk184 06 сен 2016, 07:54, всего редактировалось 1 раз.
- Игорь Белов
- Гуру
- Сообщения: 2241
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1514
- Откуда: Казань
Re: Нанесение нумерации на узлы
В тулбоксе в геоалгоритмах QGIS найдите "Extract nodes" и запустите. На входе укажете слой линий, на выходе получите слой узлов.
В калькуляторе полей создайте целочисленное поле и заполните его выражением "$id + 1".
Выведите подписи.
В калькуляторе полей создайте целочисленное поле и заполните его выражением "$id + 1".
Выведите подписи.
- Вложения
-
- img_20160829_123908.png (31.36 КБ) 7299 просмотров
The purpose of computing is insight, not numbers
-
- Участник
- Сообщения: 71
- Зарегистрирован: 23 июн 2016, 11:56
- Репутация: 0
Re: Нанесение нумерации на узлы
Игорь Белов писал(а):В тулбоксе в геоалгоритмах QGIS найдите "Extract nodes" и запустите. На входе укажете слой линий, на выходе получите слой узлов.
В калькуляторе полей создайте целочисленное поле и заполните его выражением "$id + 1".
Выведите подписи.
Этот вариант пользовательский. Мне то нужно это реализовать в своем плагине, чтоб нажал кнопку, и указанные слои нумеровались.
Может кто подскажет, на какие API Python'a стоит обратить внимание? Буду очень благодарен.
- Эдуард Казаков
- Гуру
- Сообщения: 549
- Зарегистрирован: 23 апр 2014, 17:11
- Репутация: 535
- Откуда: Planet Earth
- Контактная информация:
Re: Нанесение нумерации на узлы
Работайте по алгоритму, который описал Игорь, только через 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 раз.
-
- Интересующийся
- Сообщения: 36
- Зарегистрирован: 22 авг 2015, 01:01
- Репутация: 2
Re: Нанесение нумерации на узлы
processing это что за библиотека? Не могу найти ее Qgis API
- Эдуард Казаков
- Гуру
- Сообщения: 549
- Зарегистрирован: 23 апр 2014, 17:11
- Репутация: 535
- Откуда: Planet Earth
- Контактная информация:
Re: Нанесение нумерации на узлы
Это то, что доступно в processing toolbox в штатном плагине processing.
Можете побаловаться через консоль в самом qgis, а потом то же самое использовать в своём плагине
https://docs.qgis.org/2.2/en/docs/user_ ... nsole.html
Можете побаловаться через консоль в самом qgis, а потом то же самое использовать в своём плагине
https://docs.qgis.org/2.2/en/docs/user_ ... nsole.html
-
- Участник
- Сообщения: 71
- Зарегистрирован: 23 июн 2016, 11:56
- Репутация: 0
Re: Нанесение нумерации на узлы
Добрый день, пытаюсь реализовать алгоритм через плагин, что-то не выходит
import processing сделал
Что я делаю не так?
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: Нанесение нумерации на узлы
Ошибка или что не так?
Временные файлы генерируются? Что в них?
Временные файлы генерируются? Что в них?
-
- Участник
- Сообщения: 71
- Зарегистрирован: 23 июн 2016, 11:56
- Репутация: 0
Re: Нанесение нумерации на узлы
Разобрался, если указываю на диск D и тогда все нормально. Как можно сделать так, чтоб можно было на диск С ?
-
- Активный участник
- Сообщения: 145
- Зарегистрирован: 14 апр 2010, 14:11
- Репутация: 44
- Откуда: Екатеринбург
Re: Нанесение нумерации на узлы
Плохая идея писать в корень системного диска.
Если же такая необходимость сохраняется, то можете изменить настройки целостности https://blog.windowsnt.lv/2011/11/23/lo ... e-russian/.
Если же такая необходимость сохраняется, то можете изменить настройки целостности https://blog.windowsnt.lv/2011/11/23/lo ... e-russian/.
-
- Участник
- Сообщения: 71
- Зарегистрирован: 23 июн 2016, 11:56
- Репутация: 0
Re: Нанесение нумерации на узлы
Да файл решил создавать в ТЕМПы.
Не могу понять следующее, не срабатывает процедура калькулятора полей, посмотрите пожалуйста, может кто знает в чем дело
Вопрос закрыт. Всем спасибо!
Не могу понять следующее, не срабатывает процедура калькулятора полей, посмотрите пожалуйста, может кто знает в чем дело
Код: Выделить всё
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)
-
- Интересующийся
- Сообщения: 38
- Зарегистрирован: 12 ноя 2012, 09:19
- Репутация: 0
Re: Нанесение нумерации на узлы
klerk184,
привет. Полезный плагин пишете.
Планируете поделится с сообществом или для личных нужд?
привет. Полезный плагин пишете.
Планируете поделится с сообществом или для личных нужд?
-
- Участник
- Сообщения: 71
- Зарегистрирован: 23 июн 2016, 11:56
- Репутация: 0
Re: Нанесение нумерации на узлы
Пока не думал на эту тему)VeterR63 писал(а):klerk184,
привет. Полезный плагин пишете.
Планируете поделится с сообществом или для личных нужд?
В данный момент застрял на API. Не могу разобраться, как задавать стили отображения слоев.)
Кто сейчас на конференции
Сейчас этот форум просматривают: Semrush [Bot] и 2 гостя