Нужна помощь с "геометрией"
-
- Интересующийся
- Сообщения: 16
- Зарегистрирован: 24 апр 2013, 13:33
- Репутация: 2
Нужна помощь с "геометрией"
Здравствуйте
С наступившим всех!
Разрабатываю плагин для QGIS.
Стоит такая задача. Геометрия в XML файле описана в виде точек:
<Point>
<UIDP>10</UIDP>
<PN>7</PN>
<DeterminationMethod>
<Survey></Survey>
</DeterminationMethod>
<X>5345406.27</X>
<Y>6275515.35</Y>
<MX>0</MX>
<MY>0</MY>
</Point>
И линий:
<PL>
<ULID>1</ULID>
<Points>
<P>10</P>
<P>11</P>
<P>12</P>
<P>2</P>
<P>3</P>
<P>4</P>
</Points>
<Length>36.0256882174956</Length>
</PL>
Отрисовать все это в QGIS не проблема, сделал слой точки(точки) и слой линии(линии).Как организовать связь между слоем линии и точки что б при редактировании точки изменялись линии в состав которых входит эта точка. Или хотя бы получать сообщение о изменении в слое "точки" что б дернуть метод и изменить, перерисовать линии.
С наступившим всех!
Разрабатываю плагин для QGIS.
Стоит такая задача. Геометрия в XML файле описана в виде точек:
<Point>
<UIDP>10</UIDP>
<PN>7</PN>
<DeterminationMethod>
<Survey></Survey>
</DeterminationMethod>
<X>5345406.27</X>
<Y>6275515.35</Y>
<MX>0</MX>
<MY>0</MY>
</Point>
И линий:
<PL>
<ULID>1</ULID>
<Points>
<P>10</P>
<P>11</P>
<P>12</P>
<P>2</P>
<P>3</P>
<P>4</P>
</Points>
<Length>36.0256882174956</Length>
</PL>
Отрисовать все это в QGIS не проблема, сделал слой точки(точки) и слой линии(линии).Как организовать связь между слоем линии и точки что б при редактировании точки изменялись линии в состав которых входит эта точка. Или хотя бы получать сообщение о изменении в слое "точки" что б дернуть метод и изменить, перерисовать линии.
-
- Интересующийся
- Сообщения: 16
- Зарегистрирован: 24 апр 2013, 13:33
- Репутация: 2
Re: Нужна помощь с "геометрией"
Как положено сам себе и отвечаю
Только этот сигнал и работает
QObject.connect(layer, SIGNAL("layerModified()"), layerModified)
QObject.connect(layer, SIGNAL("featureAdded()"), featureAdded) #Устанавливается, но не работает
QObject.connect(layer, SIGNAL("featureDeleted()"), featureDeleted) #Устанавливается, но не работает
def layerModified():
QgsMessageLog.logMessage(u'Слой изменён.',Сообщение')
return
def GeometryChanged(fID, fGeom):
QgsMessageLog.logMessage(u'Изменена геометрия объекта.',u'Сообщение')
return
def featureAdded():
QgsMessageLog.logMessage(u'Создан новый объект.',u'Сообщениеx')
return
def featureDeleted():
QgsMessageLog.logMessage(u'Объект удалён.',u'Сообщение')
return

Только этот сигнал и работает

QObject.connect(layer, SIGNAL("layerModified()"), layerModified)
QObject.connect(layer, SIGNAL("featureAdded()"), featureAdded) #Устанавливается, но не работает
QObject.connect(layer, SIGNAL("featureDeleted()"), featureDeleted) #Устанавливается, но не работает
def layerModified():
QgsMessageLog.logMessage(u'Слой изменён.',Сообщение')
return
def GeometryChanged(fID, fGeom):
QgsMessageLog.logMessage(u'Изменена геометрия объекта.',u'Сообщение')
return
def featureAdded():
QgsMessageLog.logMessage(u'Создан новый объект.',u'Сообщениеx')
return
def featureDeleted():
QgsMessageLog.logMessage(u'Объект удалён.',u'Сообщение')
return
-
- Гуру
- Сообщения: 588
- Зарегистрирован: 30 мар 2009, 21:53
- Репутация: 55
- Откуда: Королев
Re: Нужна помощь с "геометрией"
Win7 x86_64. QGIS 2.1.0-Master 9b0652f
Все отлично работает.
Добавил слой, в питоновской консоле набрал:
После любое добавление нового объекта выводит в логе сообщение.
Все отлично работает.
Добавил слой, в питоновской консоле набрал:
Код: Выделить всё
lyr = iface.activeLayer()
def added(): QgsMessageLog.logMessage(u'Добавлена геометрия',u'Сообщение')
lyr.featureAdded.connect(added)
-
- Интересующийся
- Сообщения: 16
- Зарегистрирован: 24 апр 2013, 13:33
- Репутация: 2
Re: Нужна помощь с "геометрией"
К сожалению работает только этот сигнал.Все отлично работает.
От него в моем случае толку немного. Невозможно понять не только какой объект изменился, но даже в каком слое произошли изменения.QObject.connect(layer, SIGNAL("layerModified()"), layerModified)
Есть сигнал geometryChanged, но он не работает и в обозримом будущем скорее всего не заработает.
http://hub.qgis.org/issues/6573
-
- Гуру
- Сообщения: 588
- Зарегистрирован: 30 мар 2009, 21:53
- Репутация: 55
- Откуда: Королев
Re: Нужна помощь с "геометрией"
Вы бы хоть сказали на какой версии у вас не работает.
У меня прелестно работает на трех версиях: 2.0.1 и 2.1-Master для венды и 2.1 для линукса.
Да, на geometryChanged в венде можно подписаться только в старом стиле. Все остальные сигналы подключаются и работают и в новом стиле.
У меня прелестно работает на трех версиях: 2.0.1 и 2.1-Master для венды и 2.1 для линукса.
Да, на geometryChanged в венде можно подписаться только в старом стиле. Все остальные сигналы подключаются и работают и в новом стиле.
-
- Новоприбывший
- Сообщения: 1
- Зарегистрирован: 21 янв 2014, 17:15
- Репутация: 0
Re: Нужна помощь с "геометрией"
Хочу подключить geometryChanged питоне в (QGIS 2.1-0c6d9ef в linux):
Но при выполнении строки возникает ошибка: QgsFeatureId не определено. Какой модуль нужно подключить для его использования?
Сейчас подключены:
Код: Выделить всё
QObject.connect(layer, SIGNAL("geometryChanged(QgsFeatureId, QgsGeometry)"), GeometryChanged(QgsFeatureId, QgsGeometry))
Сейчас подключены:
Код: Выделить всё
import os.path, sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.core import *
import logging
-
- Гуру
- Сообщения: 588
- Зарегистрирован: 30 мар 2009, 21:53
- Репутация: 55
- Откуда: Королев
Re: Нужна помощь с "геометрией"
Вы используете неверный синтаксис.
При подключении сигналов в старом стиле последний аргумент - название функции или метода. Поэтому ваш код должен быть таким:
При подключении сигналов в старом стиле последний аргумент - название функции или метода. Поэтому ваш код должен быть таким:
Код: Выделить всё
QObject.connect(layer, SIGNAL("geometryChanged(QgsFeatureId, QgsGeometry)"), GeometryChanged)
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя