กำลังโหลดไฟล์ CSV ภายใน QGIS หรือไม่


9

ฉันใช้ QGIS เพื่อแสดงผลลัพธ์จากการจำลอง Matlab ของฉัน Matlab สร้างไฟล์ CSV ซึ่งเชื่อมต่อกับ shapefile ภายใน QGIS

ในขณะนี้ฉันต้องปิดและเปิด QGIS ใหม่เพื่อแสดงผลลัพธ์ใหม่จากการจำลอง Matlab

เป็นไปได้ไหมที่จะรีโหลดตารางแอตทริบิวต์ของไฟล์ CSV โดยไม่ต้องปิดและเปิด QGIS อีกครั้ง?


ขอบคุณ @Jason เคล็ดลับของคุณชอบความมีเสน่ห์สำหรับฉัน - ใช้ QGIS 3.10 ตัวเลือกอยู่ภายใต้คุณสมบัติ -> แหล่งที่มา! [propertiescreatespatialindex ] ( i.stack.imgur.com/5G3y5.png )
Hannes Buhrmann

คำตอบ:


3

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

  • นำเข้า shapefile ของคุณลงในอวกาศ
  • นำเข้า CSV ลงใน spatialite (โดยใช้ตัวเลือก "Virtual TXT / CSV)
  • สร้างมุมมองเชิงพื้นที่ใน spatialite โดยรวมตาราง spatial (shapefile) กับตาราง CSV เสมือน

ตอนนี้คุณสามารถแสดงมุมมองใน QGIS เช่นเดียวกับเลเยอร์เชิงพื้นที่และใช้ค่าที่รวมเข้าด้วยกันจาก spatialite แต่ทุกครั้งที่มีการสร้าง CSV คุณจะต้อง DROP ตาราง CSV เสมือนและเชื่อมโยงอีกครั้ง จากนั้นการรีเฟรชใน QGIS จะแสดงค่าใหม่ ใช้เวลาสักครู่และยิ่งไปกว่านั้นคุณสามารถกำหนดมุมมองได้มากมายและเก็บมุมมองก่อนหน้าไว้หากจำเป็น ...

HTH


2

สำหรับทุกคนที่ยังคงมองหาคำตอบนี้โดยไม่ใช้รูปแบบ spatialite ฉันพบสิ่งที่ใช้งานได้

หากคุณมี csv และใช้การเข้าร่วมเพื่อเข้าร่วมกับเลเยอร์เชิงพื้นที่หนึ่งในตัวเลือกของการเข้าร่วมคือการแคชเลเยอร์ คุณสามารถไปที่ตัวเลือกนี้หากคุณไปที่คุณสมบัติของเลเยอร์ของคุณจากนั้นไปที่ข้อมูลที่เข้าร่วมและคลิกแก้ไขการเข้าร่วม หากคุณปิดใช้งานตัวเลือกแคชคุณสามารถโหลดชั้นข้อมูลใหม่หลังจากที่ csv เปลี่ยนไปแล้วเรียกใช้การทาสีใหม่ของแผนที่เพื่อรับมุมมองแผนที่ที่รีเฟรช

คุณสามารถทำการรีโหลดและทาสีใหม่ใน Python Console ก่อนอื่นคุณต้องกำหนดชื่อแผนที่ผ้าใบ csv และเลเยอร์:

mc = iface.mapCanvas()
layer=mc.currentLayer()
csv_layer=mc.currentLayer()

ต้องแน่ใจว่าเลเยอร์ใช้งานได้เมื่อคุณตั้งชื่อพวกมันในคอนโซลเมื่อใช้เมธอด currentLayer (ต้องเป็น 'เลเยอร์ปัจจุบัน')

จากนั้นหากคุณตั้งค่าแคชเป็นปิดสำหรับการเข้าร่วมของคุณคุณสามารถแก้ไข csv จากนั้นใช้คำสั่งสองคำสั่งต่อไปนี้ในคอนโซล Python เพื่อวาดแผนที่ของคุณใหม่:

csv_layer.reload()
layer.triggerRepaint()

สิ่งนี้ใช้ได้สำหรับฉัน แต่ฉันมีข้อมูล 100 แถวเท่านั้น อาจเป็นไปได้ว่าการดำเนินการจะช้าโดยไม่ต้องแคชเมื่อคุณมีชุดข้อมูลที่ใหญ่กว่า


0

เปิดคุณสมบัติเลเยอร์ของ shapefile แล้วไปที่General- Coordinate reference systemคลิกCreate spatial indexใช่ เมื่อเสร็จสิ้นแล้ว Shapefile จะถูกรีเฟรช

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