Python kullanarak QGIS'de “Özniteliğe Göre Seç”?


16

Python komutu kullanarak QGIS'de "Özniteliğe Göre Seç" işlevini kullanmanın bir yolu var mı? Eklentimde kullanıcı bir GUI aracılığıyla bir değer girmeli ve bu değer, bu özelliğe sahip tüm özellikleri seçen bir işlevde kullanılmalıdır. Sütun adı kodda sabittir, işlev yalnızca doğru değeri aramalıdır.

Mevcut çözümümde fonksiyon QGIS'i bir PostgreSQL veritabanına bağlar ve bir SQL deyimi çalıştırır. Bu sonuçtan bir tablo oluşturur ve tablo QGIS'de Shapefile olarak görselleştirilir.

Prensipte, özellikleri vurgulamak ve seçimin yeni bir Shapefile dosyasını oluşturmak yeterli değildir. "Özniteliğe Göre Seç" işlevinin kullanılması gereksiz veritabanı bağlantısını da atlar.

Özelliklerin vurgulanması için python'da "Özniteliğe Göre Seç" işlevini kullanmanın bir yolu var mı? QGIS'deki işlevi kullanarak, sorgu ile eşleşmeyen tüm özellikler de tamamlanacak olan geçici olarak boş bırakılır.


1
Bu cevaplar için bir qgis 3 güncellemesi gerekir.
MonsterMushroom

Yanıtlar:


8

Evet. Tüm özellikleri python bağlamaları ile alabilir ve kendi eklentinize ekstra filtreleme uygulayabilirsiniz. Özet ve bazı örnekler için bu PyQGIS Coobook alıntısına bakın . Ardından, eşleşen olmayan sonuçları döndürülen sözlükten hariç tutabilirsiniz.

Görselleştirmeye gelince select(), uygun argümanları olmadığı için muhtemelen başka bir katman oluşturmanız gerekecektir. Fiziksel dosyalar oluşturmak zorunda kalmamak için bir bellek katmanı kullanabilirsiniz (daha fazla yemek kitabındakini).

Düzenle:

Aslında, seçimi oluşturduğunuz alt kümeye değiştirmek için selectedFeaturesIds()ile birlikte kullanabilirsiniz setSelectedFeatures(ids). Doğrudan uygulamadan alıntı:

/** Get a copy of the user-selected features */  
QList<QgsFeature> selectedFeatures();

/** Return reference to identifiers of selected features */
const QSet<qint64> &selectedFeaturesIds() const;

/** Change selection to the new set of features */
void setSelectedFeatures(const QSet<qint64> &ids);

Ne yazık! QGIS'de mümkün olduğunu düşündüm, çünkü ArcGIS'de arcpy kullanarak da mümkün. Yine de cevabınız için teşekkürler!
userHH

Belki bir yolu vardır; Sadece bilmiyorum. Sitenin diğer kullanıcılarına biraz zaman verin - belki birisi yapar.
lynxlynxlynx

Bence bu mümkün olmalı. QGIS'de, seçimle eşleşen tüm özellikler görselleştirilir, diğer tüm özellikler geçici olarak boşaltılır.
userHH

Öyle, buldum. QGIS bunu çekirdekte yapıyor, ancak seçimi düzgün bir şekilde ayarlamak için yeterince arabirim sergiliyor gibi görünüyor.
lynxlynxlynx

Bana bir link gönderir misiniz?
userHH

9

QGIS 2.2'den başlayarak bu çok doğal bir şekilde desteklenmektedir . Bu QgsFeatureRequest.setFilterExpression( unicode )yöntem kullanılarak QGIS ifade motoru üzerinden yapılabilir .

# The important part: get the feature iterator with an expression
it = l.getFeatures( QgsFeatureRequest().setFilterExpression ( u'"Counties" = \'Norwich\'' ) )
# Set the selection
l.setSelectedFeatures( [ f.id() for f in it ] )

Bununla ilgili en iyi şey: Yakın zamanda bir QGIS sürümünüz varsa (2.10 ve üstü), bu doğrudan okunabilir durumda iken diğer çözümlere göre çok daha performanslı bir şekilde doğrudan veritabanında filtrelenecektir.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.