วิธีการแปล (ตำแหน่ง) เลเยอร์แรสเตอร์. tif


10

ฉันเริ่มใช้ QGIS สำหรับวิทยานิพนธ์ของฉัน (ฟิสิกส์สิ่งแวดล้อม) และต้องยอมรับว่าฉันไม่รู้เรื่องนี้มาก - ฉันใช้ Mathematica หรือ Matlab เสมอ

ปัญหาของฉันคือฉันมีเลเยอร์แรสเตอร์ในรูปแบบ. tif ซึ่งหายไป (ฉันต้องย้ายไปทางทิศใต้และทิศตะวันตก 100 เมตร) ฉันจำเป็นต้องแปล (เปลี่ยนตำแหน่ง) และฉันไม่มีความคิดอย่างแน่นอนเกี่ยวกับวิธีที่ฉันสามารถทำได้

ฉันลอง Affine transform แล้ว แต่ใช้งานไม่ได้ (ไม่ให้ฉันเลือกเลเยอร์อินพุต) ฉันเคยอ่านสิ่งนี้จะแปล (เปลี่ยนตำแหน่ง) แรสเตอร์ใน Python ได้อย่างไร? แต่ฉันต้องยอมรับว่าฉันไม่เข้าใจมันมากฉันพยายามหลายครั้ง แต่ไม่ดีกับงูหลาม


ฉันคิดว่าเลเยอร์. tif นั้นอ้างอิงทางภูมิศาสตร์ในบางวิธีหรือไม่ ระบบอ้างอิงพิกัดใดที่ระบุไว้ในข้อมูลเมตา ค่อนข้างเป็นไปได้ว่าคุณจะต้องแก้ไขการตั้งค่า CRS และเลเยอร์จะจัดตำแหน่ง
underdark

ขอบคุณสำหรับความคิดเห็น! ใช่มันมีการอ้างอิงทางภูมิศาสตร์และระบบพิกัดเป็นหนึ่งที่ถูกต้อง (WGS 84 / UTM โซน 32N) .. น่าเสียดายที่การกำจัดมาจากปลั๊กอิน (เขียนไม่ดี) ที่ฉันต้องใช้และฉันไม่สามารถเปลี่ยน / แก้ไขได้ .. ดังนั้นความจำเป็นในการเปลี่ยนตำแหน่งเลเยอร์ ...

ปลั๊กอิน Affine Transform ใช้สำหรับเลเยอร์เวกเตอร์เท่านั้น
AndreJJ

คำตอบ:


9

อา! ฉันทำมันได้แล้วตามสิ่งที่ถูกกล่าวในการสนทนาที่เชื่อมโยง .... ( จะแปล (วางตำแหน่ง) แรสเตอร์ใน Python ได้อย่างไร ) เห็นได้ชัดว่ามันใช้เวลาสักพักในการคิดวิธีการใช้คอนโซลหลาม! ;) ขอบคุณอีกครั้ง! :)

ฉันใช้ GDAL / Python จากคอนโซล QGIS Python! :)

สิ่งที่ฉันเขียนคือ:

from osgeo import gdal
gdal.AllRegister()
rast_src = gdal.Open('filename.tif', 1 )
gt = rast_src.GetGeoTransform()
gtl = list(gt)
gtl[0] -= 200
gtl[3] -= 100
rast_src.SetGeoTransform(tuple(gtl))
rast_src = None

แก้ไข: เปลี่ยน "gdall.AllRegister ()" เป็น "gdal.AllRegister ()"


มีการพิมพ์ตัวอักษรหนึ่งตัวในรหัส: gdall.AllRegister ไม่ควรสะกดด้วย "L" สองตัว (มันสร้างขึ้น: "'gdall' ไม่ได้ถูกกำหนด") น่าเสียดายที่ฉันไม่สามารถแก้ไขได้เนื่องจากต้องมีความยาวอย่างน้อย 6 ตัวอักษร
Smerla

คำตอบนี้ช่วยฉันออกมาจริงๆ! สิ่งเดียวที่ฉันต้องการเพิ่มคือการตรวจสอบและตรวจสอบหน่วยของคุณก่อนทำการแปลงโดยการพิมพ์print(gtl)ฟังก์ชั่น ตัวอย่างเช่นแรสเตอร์ของฉันอยู่ใน dd mm ss และเพื่อที่จะหาว่ามีกี่เมตรในระดับทศนิยมฉันใช้ตารางที่มีอยู่ที่นี่ (ง่ายกว่าละติจูดมากกว่าลองจิจูด!): ตารางสำหรับการแปลงเมตรเป็นทศนิยม
Justin Kray

1

Rasmoverปลั๊กอินควรจะทำสิ่งที่คุณต้องการ

คุณต้องอนุญาตให้ปลั๊กอินทดลองใช้ในรายการปลั๊กอิน

ผลลัพธ์คือไฟล์แรสเตอร์เสมือนจริงซึ่งคุณสามารถแก้ไขด้วยโปรแกรมแก้ไขข้อความเพื่อปรับพารามิเตอร์หากจำเป็น


ไม่พบ ... อาจจะไม่ว่างสำหรับ 3.6 ใช่ไหม
foobarbecue

1
สามารถพบปลั๊กอินได้ที่github.com/geodrinx/rasmoverแต่ไม่มีกิจกรรมล่าสุด ดูosgeo-org.1560.x6.nabble.com/...และgis.stackexchange.com/questions/274074/... บางทีปลั๊กอิน Rasterbender อาจใช้แทนได้
AndreJ

0

ในกรณีพิเศษที่แรสเตอร์มีการฉาย UTM แล้วและคุณต้องการย้ายไปตามแนวยาวไปยังอีกโซน UTM ฉันพบว่าgdal_translateมันสามารถทำได้ ตัวอย่างเช่นอินพุตแรสเตอร์อยู่ในโซน UTM Z ใด ๆ และคุณต้องการย้ายไปยังโซน UTM 26 (เช่นมหาสมุทรแอตแลนติกที่ละติจูดส่วนใหญ่):

gdal_translate -a_srs '+proj=utm +zone=26 +datum=WGS84' input.tif output.tif

ต้นกำเนิดและพิกัดมุมในหน่วยพื้นที่รูปแบบตามที่รายงานgdalinfoยังคงเหมือนเดิม แต่พิกัดมุมในการเปลี่ยนแปลงละติจูด / ลองจิจูดและแรสเตอร์ย้ายไปยังอีกส่วนหนึ่งของโลกจริงๆ

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