29-12-2010, 11:12,
|
|
borys
Moderator
|
Liczba postów: 603
2
Dołączył: 27-08-2009
Reputacja:
2
|
|
RE: Python
Systemowa jak systemowa. Jest to zmienna iface modułu qgis.utils: http://trac.osgeo.org/qgis/browser/trunk...n/utils.py
którego nie zaimportowałeś, jak głosi komunikat. Ale dla wtyczki i tak się tak nie da, zamiast tego wskaźnik do interfejsu jest przekazywany przez QGISa do jej pseudo-konstruktora, czyli metody MojaWtyczka.__init__(iface) . Zazwyczaj wtyczki zaczynamy tak:
class MojaWtyczka():
def __init__(self, iface):
self.iface = iface
Ponieważ iface jest tu zmienną lokalną i działa tylko wewnątrz metody __init__, to od razu go podstawiamy pod self.iface, czyli pole iface klasy MojaWtyczka. Później, wewnątrz obiektu wtyczki masz do niej dostęp przez self.iface (a z zewnątrz oczywiście przez mojawtyczka.iface ).
|
|
29-12-2010, 14:10,
|
|
Rayo
geoboss
|
Liczba postów: 352
47
Dołączył: 09-12-2009
Reputacja:
3
|
|
RE: Python
Wtyczkę mam napisaną w ten sposób, że główny program odwołuje się do modułu, w którym mam definicje poszczególnych funkcji. W tej chwili informację o iface podaję jako zmienne dla poszczególnych funkcji w module. Można to jakoś uprościć, żeby zmienna ta była widziana bezpośrednio w module?
MojaWtyczka.iface nie bardzo mi odpowiada, bo jeśli będę chciał zastosować ten sam moduł w innej wtyczce, to będę musiał zmieniać na MojaWtyczka2.iface.
|
|
29-12-2010, 14:28,
(Ten post był ostatnio modyfikowany: 29-12-2010, 14:28 {2} przez borys.)
|
|
borys
Moderator
|
Liczba postów: 603
2
Dołączył: 27-08-2009
Reputacja:
2
|
|
RE: Python
A spróbuj w tym module utworzyć zmienną iface, zaimportować ją i i podstawić w konstruktorze wtyczki:
Kod: from mojmoduł import iface
class MojaWtyczka():
def __init__(self, ifaceeee):
global iface
iface = ifaceeee
Może podziała, albo jak nie to jakoś tą drogą
|
|
02-01-2011, 23:16,
|
|
Rayo
geoboss
|
Liczba postów: 352
47
Dołączył: 09-12-2009
Reputacja:
3
|
|
RE: Python
Jak można odczytać sygnał emitowany przez daną klasę?
Np stawiam nowy obiekt poprzez
QgsVectorLayer.addFeature()
i chciałbym odczytać ID dodanego obiektu.
W dokumentacji jest sygnał featureAdded, ale nie wiem jak go odczytać.
|
|
22-02-2011, 16:14,
(Ten post był ostatnio modyfikowany: 22-02-2011, 16:15 {2} przez Rayo.)
|
|
Rayo
geoboss
|
Liczba postów: 352
47
Dołączył: 09-12-2009
Reputacja:
3
|
|
RE: Python
W jaki sposób wyszukać na warstwie obiekty o danych atrybutach? Ja robię to tak, że w pętli sprawdzam dany atrybut kolejno każdego obiektu i porównuję z zadanym warunkiem. Jest to jednak wolne przy dużej ilości obiektów, a poza tym nie chce mi się wierzyć, że nie ma na to gotowego sposobu.
Zastanawiałem się nad warstwa.select(), ale nie wiem jak podać warunki.
|
|
22-02-2011, 21:11,
|
|
Rayo
geoboss
|
Liczba postów: 352
47
Dołączył: 09-12-2009
Reputacja:
3
|
|
RE: Python
Jeszcze jedno pytanie. Jaka jest różnica między klasami QgsVectorDataProvider a QgsVectorLayer?
Część metod jest identyczna dla nich obu: wyszukiwanie obiektów, zliczanie itd. Której klasy należy używać dla wtyczek wyszukujących obiekty po atrybutach, obiekty przecinające się itp.?
|
|
28-02-2011, 21:18,
|
|
Rayo
geoboss
|
Liczba postów: 352
47
Dołączył: 09-12-2009
Reputacja:
3
|
|
RE: Python
Jeśli chodzi o wolne wyszukiwanie obiektów w pętli to problem rozwiązany - QGIS strasznie zwalnia nie przy wyszukiwaniu, a przy zaznaczeniu dużej ilości obiektów na warstwie (i tego należy unikać). Dzieje się tak nie tylko przy zaznaczaniu poprzez Pythona, ale "ręcznie" również. Otwarcie tabeli atrybutów z paroma tysiącami obiektów trwa strasznie długo. Ta sama tabela bez zaznaczonych obiektów otwiera się bezproblemowo.
|
|
04-05-2011, 12:01,
(Ten post był ostatnio modyfikowany: 04-05-2011, 12:53 {2} przez Rayo.)
|
|
Rayo
geoboss
|
Liczba postów: 352
47
Dołączył: 09-12-2009
Reputacja:
3
|
|
RE: Python
Jak w Pythonie można obliczyć obwód poligonu?
Długość i powierzchnię obiektu można wyliczyć za pomocą metod length() i area() klasy QgsGeometry, ale do liczenia obwodu nic nie mogę znaleźć..
Zrobiłem mały eksperyment i wyliczyłem długość dla poligonu (metoda length()). W wyniku otrzymałem obwód
Działa też dla obiektów złożonych i "dziurawych".
|
|
|