เป็นไปได้ไหมที่จะเรียงลำดับหลาย ๆ ฟิลด์ในเวลาเดียวกันใน QGIS?
ตัวอย่างเช่นฉันต้องการจัดเรียงตารางตามชื่อรัฐแล้วภายในแต่ละรัฐเรียงตามชื่อเขต
นี่จะเหมือนกับตัวเลือก Advanced Sort ที่มีอยู่ใน ArcMap
เป็นไปได้ไหมที่จะเรียงลำดับหลาย ๆ ฟิลด์ในเวลาเดียวกันใน QGIS?
ตัวอย่างเช่นฉันต้องการจัดเรียงตารางตามชื่อรัฐแล้วภายในแต่ละรัฐเรียงตามชื่อเขต
นี่จะเหมือนกับตัวเลือก Advanced Sort ที่มีอยู่ใน ArcMap
คำตอบ:
จริงๆแล้วมีเคล็ดลับง่าย ๆ สมมติว่าคุณต้องการเรียงลำดับตามฟิลด์ "A" ก่อนแล้วตามด้วยฟิลด์ "B" ภายใน "A" คลิกซ้ายครั้งแรกที่ส่วนหัวของฟิลด์ "B" (คลิกหนึ่งครั้งเพื่อเรียงลำดับจากน้อยไปมากเป็นครั้งที่สองสำหรับการเรียงจากน้อยไปหามาก) ในตารางแอตทริบิวต์ จากนั้นคลิกซ้ายที่ส่วนหัวของฟิลด์ "A" (หนึ่งครั้งสำหรับ ASC, ครั้งที่ 2 สำหรับ DESC) การกระทำล่าสุดนี้จะมีการเรียงลำดับเขตข้อมูล "A" ในขณะที่รักษาการเรียงลำดับของฟิลด์ "B" ภายในค่าที่เหมือนกันของ "A" พยายาม 3 ฟิลด์และใช้งานได้ (จากนั้นก็เบื่อ) ฉันใช้ QGIS 3.6.3-Noosa
คุณสามารถใช้ปลั๊กอินเรียงลำดับและหมายเลข ช่วยให้คุณสามารถจัดเรียงตารางแอตทริบิวต์ได้สูงสุด 3 ฟิลด์จากนั้นจะสร้างฟิลด์เพิ่มเติมที่มีคำสั่งของคุณสมบัติที่เรียงลำดับ
คำเตือน: ฉันเป็นผู้เขียนปลั๊กอิน
sort()
ฟังก์ชั่นของ Python ฉันสงสัยว่าทำไมมันช้ามาก ฉันจะพยายามหาเคล็ดลับที่จะทำให้กระบวนการเร็วขึ้นในรุ่นอนาคต
ถ้าตกลงเพื่อบันทึกผลลัพธ์อย่างถาวรคุณสามารถเรียงลำดับ shapefile ด้วย GDAL
ogr2ogr -f "ESRI Shapefile" -dialect sqlite -sql "SELECT *
FROM my_shapefile ORDER BY attr_1, attr_2, attr_3" sorted.shp my_shapefile.shp
ใช้เวลาน้อยกว่า 3 นาทีด้วยไฟล์รูปร่างที่มีรูปหลายเหลี่ยมหนึ่งล้าน
ขณะนี้ปลั๊กอิน DB Manager ใน QGIS มีโหนด 'เลเยอร์เสมือน' ที่ช่วยให้คุณสามารถเขียนคำสั่ง SQL กับรูปร่างของไฟล์ที่โหลดลงในโครงการ QGIS ของคุณ
ดังนั้นเมื่อคุณมีความสามารถนี้แล้วตรรกะ SQL ในการเรียงลำดับตามเขตข้อมูลหลาย ๆ อันอยู่ในคำสั่ง ORDER BY โดยใช้ asc (จากน้อยไปมาก), desc (จากมากไปหาน้อย) และคุณสามารถรวมมันเข้าด้วยกันเพื่อจัดเรียงตามคอลัมน์ต่างๆ
โบนัสที่เพิ่มเข้ามาคือคุณจะได้เรียนรู้ SQL เพิ่มเติมดังนั้นเมื่อคุณเบื่อกับรูปร่างและส่วนใหญ่ของ PostGIS การกระโดดจะไม่ยอดเยี่ยมมาก !!!
สิ่งนี้สามารถทำได้โดยไม่ต้องใช้ปลั๊กอินหรืองานเฉพาะฐานข้อมูลอย่างน้อยรุ่น 3.2 ขึ้นไป หากต้องการจัดเรียงตามหลายคอลัมน์:
concat()
พร้อมกับเขตข้อมูลที่คุณต้องการเรียงลำดับตามลำดับที่ถูกต้อง (เช่นconcat("column1", "column2")
) ตัวอย่างผลลัพธ์ควรแสดงอยู่ด้านล่างรหัสของคุณฟังก์ชั่นนี้ถูกบันทึกผ่านทางรุ่น # 1137และครอบคลุมในล่าสุด (การพัฒนา) รุ่นของคู่มือการใช้
concat("col1", right( ('000' || tostring( "col2" )), 4))
ตอนนี้เป็นปี 2018 ดังนั้นฉันไม่อยากจะเชื่อเลยว่ายังไม่ได้รับคำตอบ
เปิดมุมมองตารางแอตทริบิวต์และคลิกขวาที่คอลัมน์ใด ๆ จากนั้นเลือก เรียงลำดับ ...
หน้าต่างไดอะล็อกกำหนดค่าการเรียงลำดับตารางแอ็ตทริบิวต์เปิดตอนนี้ด้วยตัวแก้ไขนิพจน์แบบเต็มเช่นกัน
ใช้ฟังก์ชัน COALESCE กับคอลัมน์ที่ต้องการเช่นนี้จะเรียงลำดับตารางตาม 3 คอลัมน์ (อันดับแรกตาม ID จากนั้นเป็นรุ่น VERSION และ fid)
coalesce("ID","VERSION","fid" )
การคลิกตกลงจะเป็นการจัดเรียงตาราง
คุณทำไม่ได้ (อย่างน้อยก็ในตอนนี้) ขออภัย!
ดูเอกสารประกอบของ QGISและเลื่อนลงไปที่บรรทัดสุดท้าย
การแก้ไขที่น่ารังเกียจคือการดึง DBF ของ Shapefile ลงใน Excel เรียงมันและบันทึกผลลัพธ์ อีกทางเลือกหนึ่งนำเข้า Shapefile ของคุณลงใน PostGIS หรือ SpatialLite ซึ่งคุณมีฟังก์ชันการเรียงลำดับที่ดีกว่า โดยทั่วไปคุณจะต้องผ่าน QGIS สำหรับการเรียงลำดับขั้นสูง
ตามที่แนะนำโดย @Sylvester Sneekly หากข้อมูลของคุณถูกโหลดลงใน RDBMS เช่น PosGIS หรือ SpatialLite คุณสามารถพิจารณาสร้างมุมมองฐานข้อมูลใน RDBMS ที่ตั้งค่าข้อมูลแบบตารางจากนั้นโหลดมุมมองที่ถูกเรียงไว้ล่วงหน้าเป็นเลเยอร์