ทำแผนที่กว่าล้านจุดโดยใช้ QGIS


9

ฉันกำลังพยายามแมป CSV ที่มีจุด lat / lon กว่าล้านจุดในสหรัฐอเมริกาโดยไม่มีข้อมูลเมตา ฉันไม่เคยพยายามแมปข้อมูลจำนวนมากนี้และต้องการทราบขั้นตอนที่ฉันควรทำ ฉันรู้ว่ามันเป็นข้อมูลที่มากเกินไปสำหรับ QGIS ดังนั้นฉันจึงพยายามแยกมันออกเป็น 100,000 บรรทัด CSV แต่แล้วก็มีไฟล์จำนวนมากที่ฉันไม่รู้ว่าจะทำอย่างไร ฉันคิดว่ามันจะเป็นการดีที่สุดที่จะรวบรวมคะแนนจากการสำรวจสำมะโนประชากร แต่ไม่ทราบวิธีที่ดีที่สุดในการใช้ Javascript (ฉันไม่เคยใช้ Python) หรือเครื่องมือบรรทัดคำสั่ง? ข้อเสนอแนะใด ๆ


2
การใช้ PostGIS คุณสามารถโหลด CSV ลงในฐานข้อมูลได้อย่างง่ายดายจากนั้นแปลงคอลัมน์ lat / lon เป็นรูปทรงเรขาคณิตและคุณก็ทำได้! จากนั้นคุณสามารถทำสรุป / รวมทั้งหมดโดยบล็อกการสำรวจสำมะโนประชากรที่คุณต้องการใน PostGIS ... คุณต้องการทำอะไรกับ Turf?
DPSSpatial

2
สวัสดียินดีต้อนรับสู่ GIS stackexchange ฉันขอแนะนำให้คุณดูที่ PostgreSQL / PostGIS เอ็นจิ้นฐานข้อมูลที่เปิดใช้งานเชิงพื้นที่ซึ่งเชื่อมต่อกับ QGIS ได้ดี เมื่อข้อมูลของคุณถูกโหลดลงในฐานข้อมูลมันจะค่อนข้างง่ายที่จะเข้าร่วมและรวมตัวอย่างเช่นสำมะโนประชากรหรือเพื่อทำการรวมกลุ่มกับมัน
ฟาเอล

ฉันคิดว่าความคิดเห็นของราฟาเอลเป็นคำตอบที่ดีที่สุด 1 ล้านคะแนนนั้นใช้งานง่ายเมื่อโหลดลงใน PostGIS และเครื่องมือส่วนต่อประสาน QGIS-PostGIS นั้นดีมาก
อเล็กซานเด

ขอบคุณ @mapBaker และ @raphael! ฉันไม่ได้คิดถึงการใช้ Postgis เช่นนั้น ฉันนำเข้า CSV ใน QGUS อย่างไรก็ตามมีการแปลงเป็น PostGIS หรือไม่
user63623

@raphael คุณรู้วิธีที่ดีในการแปลง X, Y เป็นเรขาคณิตใน PostGIS เมื่อมีมากกว่า 1 ล้านบันทึกหรือไม่ ฉันพยายามทำซ้ำสิ่งนี้โดยใช้วิธี ST_MakePoint แต่หน่วยความจำถูกระเบิด - ST_GeomFromText สามารถใช้คอลัมน์ X และ Y ที่มีอยู่ได้หรือไม่
DPSSpatial

คำตอบ:


9

ฉันอยากจะแนะนำให้ใช้ PostgreSQL / PostGIS เนื่องจาก QGIS รองรับโดยธรรมชาติมีฟังก์ชั่นในตัวที่ใช้งานง่ายเพื่อเข้าร่วมกับข้อมูลเชิงพื้นที่อื่น ๆ (เช่นระบบสำรวจสำมะโนประชากร) และการใช้ฐานข้อมูลควร จำกัด ปัญหาหน่วยความจำด้วยชุดข้อมูลขนาดใหญ่ ชุดขั้นตอนที่แนะนำของฉันอยู่ด้านล่าง ในการดำเนินการคำสั่ง SQL คุณสามารถใช้PGAdminหรือ QGIS อดีตจะให้ข้อผิดพลาดที่ให้ข้อมูลเพิ่มเติมเกี่ยวกับแบบสอบถามแบบสอบถามหลังจะช่วยให้คุณโหลดผลลัพธ์ของแบบสอบถามเป็นเลเยอร์บนแผนที่ ในการเข้าถึงหลังไปที่Database > DB Manager > DB Managerและคลิกที่ปุ่มที่สอง

  1. เริ่มต้นตั้งค่า PostGISรวมถึงโปรแกรมติดตั้งด่วน
  2. สร้างตารางในฐานข้อมูลของคุณโดยใช้CREATE TABLEคำสั่ง ( ตัวอย่าง ) ในหน้าต่าง QGIS SQL หรือในหน้าต่าง SQL ของ PGAdmin
  3. นำเข้า csv ของคุณด้วยคำสั่ง COPY sql หรือฟังก์ชั่นการนำเข้าที่สร้างขึ้นใน PGAdmin โดยคลิกขวาบนโต๊ะของคุณใน PGAdmin และคลิกที่Import...(หลังนี้อาจมีความละเอียดอ่อนดังนั้นฉันขอแนะนำ COPY สำหรับชุดข้อมูลขนาดใหญ่)
  4. เพิ่มคอลัมน์รูปทรงเรขาคณิตลงในตารางของคุณโดยเรียกใช้งาน SQL ต่อไปนี้ในหน้าต่าง PGAdmin หรือหน้าต่าง QGIS SQL

    ALTER TABLE some_table ADD COLUMN geom geometry(Point,4326);
    
  5. สร้างรูปทรงเรขาคณิตของจุดโดยใช้สิ่งที่ชอบ

    UPDATE yourtable SET geom = ST_SetSRID(ST_MakePoint( x, y), 4326);
    
  6. แสดงชุดย่อยของข้อมูลโดยใช้SELECTคำสั่งกับสิ่งที่ชอบLIMIT 50000

  7. หรือเข้าร่วมกับข้อมูลสำมะโนประชากรด้วย

    เลือก c.gid, c.geom
    จากการสำรวจสำมะโนประชากร c
    ภายในเข้าร่วม yourdata บน ST_ ภายใน (yourdata.geom, c.geom)

ฟังก์ชั่นอ้างอิง:
ST_Within
ST_MakePoint
ST_SetSRID


ขอบคุณสำหรับการตอบกลับ. ฉันลองขั้นตอนที่ 3 แต่ฉันไม่สามารถแก้ไขตารางใน QGIS มีวิธีอื่นในการเพิ่มคอลัมน์โดยไม่ใช้ปลั๊กอินหรือไม่?
user63623

@ user63623 ฉันได้อัปเดตคำตอบเพื่อรวมขั้นตอนพิเศษที่ควรแก้ไขปัญหาของคุณ
ฟาเอล

ขอบคุณฉันคิดว่ามีขั้นตอนที่ขาดหายไประหว่าง 1 และ 2 เมื่อคุณนำเข้าเลเยอร์ csv ไปยัง QGIS คุณต้องบันทึกเป็นไฟล์ shp เพื่อสร้างฐานข้อมูล ขวา? มันค้างเมื่อฉันลองที่ ฉันลองใช้ PGAdmin ด้วย แต่ฉันไม่พบฟังก์ชันการนำเข้า
user63623

ใน PGAdmin ก่อนอื่นคุณต้องสร้างตารางของคุณโดยใช้คำสั่ง sql ดังนี้: stackoverflow.com/questions/9826833/create-table-in-postgresqlพร้อมคอลัมน์ทั้งหมดจาก csv ที่กำหนดไว้อย่างถูกต้อง จากนั้นคุณสามารถคลิกขวาที่ tablename> Import...เพื่อเข้าสู่วิซาร์ดการนำเข้าหรือใช้คำสั่ง COPY postgresql.org/docs/current/static/sql-copy.htmlคำสั่ง COPY ฉันจะอัปเดตคำตอบ
raphael

3

ฉันเพิ่งทำงานกับชุดข้อมูลจำนวน 1.4 ล้านคะแนนที่นำเข้าจาก CSV ฉันแน่ใจว่าจะลบเขตข้อมูลที่ไม่เกี่ยวข้องใน csv มันใช้งานได้ดีสำหรับฉันแม้ว่ากระบวนการบางอย่างใช้เวลาเล็กน้อยในการดำเนินการ (QGIS 2.12, Windows 7 64 บิต, RAM 8 Gb)


2

ผู้สมัคร R fwiw ใน pseudocode:

library(rgdal) ## for spatial export
library(readr) ## for fast file read

x <- read_csv("file.csv") 
names(x)  ## some as yet unknown columns

coordinates(x) <- c("x", "y")  ## your coordinate names may be different

writeOGR(x, ".", layer = "filepoints", driver = "MapInfo File")

สิ่งนี้จะทำให้คุณมี filepoints.tab ในไดเรกทอรีทำงานที่คุณสามารถอ่านด้วย QGIS หรือเลือก "ESRI Shapefile" เพื่อสร้าง filepoints.shp หรือรูปแบบที่คุณต้องการ QGIS ใช้ GDAL เหมือนที่ rgdal ทำดังนั้นจึงมีการทับซ้อนกันมากมาย มีกลไก Python ที่คล้ายคลึงกัน

เนื่องจากคุณไม่มีข้อมูลเมตาคุณสามารถมีชุดหลังจากกำหนดพิกัด (x) เพื่อตั้ง proj4string (x) <- CRS ("+ proj = some + etc") แต่เราสามารถเดาได้เฉพาะข้อมูลของคุณ

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