วิธีการซูมไปยังคุณสมบัติที่เลือกด้วย pyQGIS


10

ฉันต้องการสร้างฟังก์ชั่นที่เลือกคุณสมบัติและซูมเข้าไป (คล้ายใน QGIS) ดังนั้นจึงมีฟังก์ชั่นดังต่อไปนี้:

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)

คุณสมบัติที่เลือกจะถูกเน้นบนแผนที่ แต่ฉันไม่รู้ว่าจะทำ "ซูม" กับคุณสมบัติที่เลือกหรือโฟกัสบางอย่างในแผนที่ได้อย่างไร

คำตอบ:


14

คุณต้องตั้งค่าขอบเขตของภาพวาดแผนที่เป็นขอบเขตของตัวเลือก:

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

ขอบคุณ! และฉันจะเชื่อมโยง iface กับแผนที่ QGIS ที่เปิดจริงได้อย่างไร
Martin

คุณกำลังทำงานกับปลั๊กอินหรือแอปแบบสแตนด์อโลนอยู่หรือไม่?
Nathan W

ใช่เข้าใจแล้ว ฉันกำลังทำงานกับปลั๊กอิน gis.utils.ifaceฉันลืม ตอนนี้มันทำงานได้อย่างสมบูรณ์แบบ ขอขอบคุณอีกครั้ง!
Martin

5

คุณสมบัติการซูมไปยังที่เลือกสามารถทำได้โดยการเรียกใช้ตัวเลือก "ซูมเพื่อเลือก" ของเมนูมุมมอง

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

หมายเหตุ: หมายเลขดัชนีอาจแตกต่างกันไปตามรุ่น QGIS ที่แตกต่างกัน


หรือมากกว่าโดยตรง:

iface.actionZoomToSelected().trigger()

2
ฉันจะไม่ใช้วิธีนี้ เกิดอะไรขึ้นถ้าใน qgis เวอร์ชั่นใหม่ฟังก์ชั่นจะย้ายไปที่ดัชนี 13 การแก้ไขปัญหาประเภทนี้ไม่สนุกอย่างแน่นอน ...
mozzbozz

@mozzbozz ฉันเห็นด้วย คำตอบแรกคือตัวเลือกที่ดีที่สุด นี่อาจเป็นทางเลือกที่สอง แก้ไขคำตอบตามคำแนะนำของคุณ ขอบคุณ!
Sjs

3
หากคุณต้องการที่จะเรียกตัวเลือกที่ผมคิดว่าiface.actionZoomToSelected().trigger()เป็นความปลอดภัยมากขึ้นเล็ก ๆ น้อย ๆ :)
โจเซฟ

@Joseph คุณได้โปรดแก้ไขคำตอบตามที่คุณแนะนำ?
Sjs

1
@ โจเซฟฉันไม่รังเกียจหรอก;) มีความสุขที่คุณทำให้คำตอบดูดียิ่งขึ้น!
Sjs

0

# QMessageBox แรกแสดงคุณสมบัติที่เลือกทั้งหมด:

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

# ซูมครั้งที่สองไปยังคุณสมบัติที่เลือก:

iface.actionZoomToSelected().trigger();
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.