เป็นไปได้หรือไม่ที่จะตั้งค่า CRS โครงการผ่านคำสั่ง Python


10

เป็นไปได้ไหมที่จะตั้งค่า CRS โครงการของโครงการใน QGIS ผ่านคำสั่ง Python?

ในกรณีของฉันผู้ใช้ควรเปิด QGIS เริ่มปลั๊กอินที่เขียนของฉันและปลั๊กอินนี้จะโหลดข้อมูลเชิงพื้นที่ซึ่งมีรหัส epsg 31467 (Gauss Krueger Zone 3) น่าเสียดายที่ CRS เริ่มต้นของ QGIS คือ WGS84 และฉันก็เลยมีปัญหากับยูนิตและสเกล

วิธีแรกของฉันคือการใช้รหัสนี้:

    my_crs = core.QgsCoordinateReferenceSystem(31467, core.QgsCoordinateReferenceSystem.EpsgCrsId)
    self.iface.mapCanvas().mapRenderer().setDestinationCrs(my_crs)

การเปลี่ยนแปลงนี้ (หลังจากข้อมูลถูกแสดงให้เห็นแล้ว) CRS เป็น Gauss Krueger Zone 3 อย่างน้อยโค้ด espg ที่มุมขวาล่างได้เปลี่ยนไป หน่วยยังคงอยู่ในระดับและขนาดผิดทั้งหมด 1: 5000 ใน Gauss Krügerคือ 1: 528822376 ใน WGS 84 (ในกรณีของฉันใน QGIS) หลังจากตั้งค่า CRS โครงการด้วยตนเองในคุณสมบัติ crs โครงการคือ GK3 จริง ๆ และสเกลและหน่วยถูกต้อง

ดังนั้นคำถามของฉันคือฉันสามารถตั้งค่า CRS โครงการในวิธีอื่นที่ฉันได้ทำไปแล้วได้หรือไม่? ฉันต้องการหลีกเลี่ยงวิธีการด้วยตนเอง


ฉันแก้ไขปัญหาด้วยการเพิ่มรหัสต่อไปนี้:

qgis.utils.iface.mapCanvas().setMapUnits(0)
qgis.utils.iface.mapCanvas().refresh()

เป็นการตั้งค่าหน่วยเป็นเมตรและเครื่องชั่งจะได้รับการอัพเดตโดยอัตโนมัติ 0 หมายถึงเมตร 1 สำหรับเท้า 2 สำหรับองศาและ 3 สำหรับไม่ทราบ

คำตอบ:


7

ใช่มันเป็นไปได้ ปลั๊กอิน Openlayers โดย Sourcepole ตั้งค่า CRS เป็น EPSG: 3857 โดยอัตโนมัติ

ดูที่ openlayers_layers.py และ openlayers_plugin.py


8

สายเล็กน้อยที่จะตอบ แต่ในกรณีที่มีคนแวะไปที่หน้านั้นจาก google โดยไม่ต้องติดตั้งปลั๊กอินhttp://www.purplelinux.co.nzจะให้ข้อมูลที่ดีเกี่ยวกับเรื่องนั้น

ตัวอย่างที่พบใน purplelinux (ซึ่งทำงานได้ดี) แนะนำสิ่งต่อไปนี้:

if iface.mapCanvas().mapRenderer().hasCrsTransformEnabled():
    my_crs = core.QgsCoordinateReferenceSystem(4326,core.QgsCoordinateReferenceSystem.EpsgCrsId)
    iface.mapCanvas().mapRenderer().setDestinationCrs(my_crs)


และคุณสามารถสร้าง CRS ได้ด้วยการโทร:

QgsCoordinateReferenceSystem("PROPERTY:ID")

ซึ่งจะเป็น:

QgsCoordinateReferenceSystem("EPSG:31467")

IMHO ตัวไหนที่ทำให้โค้ดอ่านได้ง่ายขึ้น


1
โปรดทราบว่ารหัสนี้ใช้สำหรับ QGIS 2.X และคุณจะเห็นคำตอบอื่น ๆ แสดงไว้ที่นี่สำหรับรหัส QGIS3
Mr Purple

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