วิธีรับละติจูด / ลองจิจูดในปริญญานาทีวินาที (DMS) โดยใช้เครื่องคำนวณภาคสนาม QGIS ได้อย่างไร


9

ฉันได้คำต่อไปนี้ขึ้นมาเพื่อแปลง 5.1234 เป็น 5 ° 7`24.24 "

toint ($ x) || '°' | | toint ((($ x) - toint ($ x)) * 60) || '`' || substr ((tostring ((((x $)) - toint ($ x)) * 60) - toint (($ x) - toint ($ x)) * 60)) * 60), 1,5) || " '

นี่คือปัญหา: สำหรับบางประเด็นเช่น 5.1234 ใช้งานได้ แต่สำหรับคนอื่นมันไม่ได้ ฉันสงสัยว่าปัญหาคือการแปลงจำนวนเต็มซึ่งปัดเศษทศนิยมแทนการตัดทอน

มีตัวเลือกอื่น ๆ อีกไหม? ขอบคุณ


ฉันสามารถแนะนำวิธีแก้ปัญหา ไม่เหมาะสม แต่ถ้าคุณติดอยู่ในตอนนี้คุณสามารถทำงานให้เสร็จได้ คลิกขวาและบันทึกเป็น CSV เปิด CSV ใน Excel หรือ Google Docs ป้อนสูตรของคุณ (ซึ่งควรจะสะอาดกว่าและง่ายกว่า) ลบฟิลด์ทั้งหมดยกเว้นตัวระบุที่ไม่ซ้ำกันและสตริง DMS ที่ถูกแปลง บันทึกไว้ ทำตารางเข้าร่วมกับเลเยอร์ที่มีอยู่และคุณได้รับการตั้งค่า
spatial Thoughts

1
ระวังด้วยอินพุตที่เป็นลบ
whuber

เพียงเพื่อเพิ่มไปยังคำตอบของ spatial butt: การปัดเศษลงในระดับที่ใกล้ที่สุดจะทำงานใน Excel โดยใช้ฟังก์ชัน FLOOR ()
Micha

คำตอบ:


3

ฉันชอบการแสดงออกที่คุณใส่กัน - อาจไม่มีวิธีแก้ปัญหาใน QGIS 1.8 แต่ใน QGIS 1.9 dev มีfloor()ฟังก์ชั่นการปัดเศษซึ่งรอบลง สำหรับ D ° M'S '':

(CASE WHEN $x < 0 THEN '-' ELSE '' END) || floor (abs($x)) || '° ' || floor(((abs($x)) - floor (abs($x))) * 60) ||'\'' || substr( (tostring((((abs($x)) - floor (abs($x))) * 60) - floor(((abs($x)) - floor (abs($x))) * 60)) * 60),1,5) || '"'

บันทึกเครื่องหมายอัญประกาศเดี่ยวที่หลบหนี ( \')

สำหรับ D ° M.MMM ':

(CASE WHEN $x < 0 THEN '-' ELSE '' END) || floor (abs($x)) || '° ' || ((abs($x) - floor(abs($x))) * 60) ||'\''

หากต้องการ จำกัด จำนวนทศนิยมที่แสดงให้แทนที่ # ในนิพจน์ด้านล่างด้วยจำนวนหลัก:

(CASE WHEN $x < 0 THEN '-' ELSE '' END) || floor (abs($x)) || '° ' ||  format_number( (abs($x) - floor(abs($x))) * 60, #) ||'\'

เพียงแค่อยากรู้อยากเห็นสูตรจะมีลักษณะอย่างไรสำหรับองศา, นาที?
คทา

เพิ่มตัวอย่าง สามารถใช้งานได้ใน QGIS 2.6 (และอาจเป็นอะไรก็ได้ที่ 2.0 ขึ้นไป) แต่อาจมีฟังก์ชั่นการจัดรูปแบบที่หรูหรากว่าในตอนนี้
Simbamangu

1
ข้อผิดพลาดเพียงข้อเดียว: สูตรของคุณใช้ได้กับค่าบวกของการ Easting และ Northing เท่านั้น เชิงลบมีขนาดเล็กเกินไป และฉันสงสัยว่า 0.5 ° E และ 0.5 ° W อาจแตกต่างกันอย่างไร ชั้น (+/- 0.5) จะเป็น 0 เสมอไม่ใช่ -0
AndreJJ

Aaargh ข้อผิดพลาดของการทดสอบไม่เพียงพอ ... และนี่คือฉันกำลังทำงานในซีกโลกใต้ (ติดลบ) ด้วย กำลังอัปเดตในไม่ช้า
Simbamangu

1

ผู้ประกอบการโมดูโลสามารถใช้ในการตัดทอน แต่การแสดงออกที่เกิดขึ้นจะน่าเกลียดมาก มันสวยกว่าที่จะใช้การแทนที่สตริง แต่น่าเสียดายที่ QGIS ไม่เปิดเผยโครงสร้างหรือฟังก์ชั่นที่คล้ายกัน ใช้regexp_replace($x, '\\..*', '')เพื่อรับส่วนทั้งหมดและregexp_replace($x, '^[0-9]*\\.', '')เพื่อให้ได้ส่วนทศนิยม ใช้torealแทนtointการคำนวณด้วยนิพจน์ที่สองเพื่อให้แน่ใจว่าจะไม่มีการปัดเศษ


2
ไม่ได้มีฟังก์ชั่น strpos แต่ทำในตอนนี้;) github.com/qgis/Quantum-GIS/commit/ …
Nathan W

tsk tsk tsk, เสียงก้องช่องว่างมาก
lynxlynxlynx

ใช่ไม่สนใจเลยว่าบิตแรกมันเป็นเพียงการทำความสะอาดที่ไม่เกี่ยวข้องกับฟังก์ชั่นใหม่
Nathan W

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