PyQGIS ile seçilen bir özelliğe nasıl zum yapılır


10

Bir özellik seçip ona zum yapan bir işlev oluşturmak istiyorum (QGIS'de benzer). Bu nedenle aşağıdaki fonksiyon vardır:

QgsMapLayerRegistry.instance().addMapLayer(self.vlayer)

def zoomTo(self):
    layer = self.vlayer
    atable = self.ui.table

    selectList=[]
    for i in atable.selectionModel().selectedRows():
        ID = atable.item(i.row(),0).text()
        selectList.append(int(ID))

    layer.setSelectedFeatures(selectList)

Seçilen özellikler haritada vurgulanır. Ancak seçilen özelliklere nasıl "yakınlaştırma" yapılacağını veya haritanın ortasına odaklanmayı bilmiyorum.

Yanıtlar:


14

Harita tuvalinin genişliklerini seçimlerin genişliklerine ayarlamanız gerekir:

box = layer.boundingBoxOfSelected()
iface.mapCanvas().setExtent(box)
iface.mapCanvas().refresh()

Teşekkür ederim! Ve iface'yi gerçek açık QGIS haritasıyla nasıl ilişkilendirebilirim?
Martin

Bir eklenti veya bağımsız bir uygulama üzerinde mi çalışıyorsunuz?
Nathan W

Evet anladım. Bir eklenti üzerinde çalışıyorum. Ben unuttum gis.utils.iface. Şimdi mükemmel çalışıyor. Tekrar teşekkürler!
Martin

5

Seçilen özelliklere yakınlaştırma, Görünüm menüsünün "Seçime Yakınlaştır" seçeneği tetiklenerek de yapılabilir.

eMenu = self.iface.viewMenu()
eMenu.actions() [12].trigger()

Not: Dizin numarası farklı QGIS sürümlerine göre değişebilir.


Veya doğrudan:

iface.actionZoomToSelected().trigger()

2
Bu yöntemi kullanmazdım. Yeni bir qgis sürümünde işlevler dizin 13'e taşınırsa ne olur? Bu tür sorunları gidermek kesinlikle çok eğlenceli değil ...
mozzbozz

@mozzbozz Kabul ediyorum. İlk cevap en iyi seçimdir. Bu ikinci bir alternatif seçenek olabilir. Cevabı önerinize göre düzenledi. Teşekkürler!
17'de Sjs

3
Seçeneği tetiklemek istiyorsanız, sanırım iface.actionZoomToSelected().trigger()biraz daha güvenli :)
Joseph

@Joseph u pls cevabını önerinize göre düzenleyebilir mi?
17'de Sjs

1
@Joseph buna aldırmam;) Cevabın daha iyi görünmesini sağladığınız için mutluyum!
17'de Sjs

0

# İlk olarak bir QMessageBox seçilen tüm özellikleri görüntüler:

lyr = iface.activeLayer();
fts = lyr.selectedFeatures();
ftsCount = lyr.selectedFeatureCount();
sFts = str(ftsCount);
msgBox = QMessageBox();
msgBox.setText(sFts +' selected features');
msgBox.exec_();

# Seçilen özelliklere ikinci zoom:

iface.actionZoomToSelected().trigger();
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.