กำลังโหลดข้อมูล OpenStreetMap ใน QGIS?


36

ใน QGIS 1.8 ฉันใช้ปลั๊กอิน openstreetmap เพื่อขอข้อมูลจากเซิร์ฟเวอร์หรือเปิดไฟล์. osm XML ซึ่งสร้าง 3 ชั้น (รูปหลายเหลี่ยมโพลีไลน์และคะแนน) ใน QGIS

นี่เป็นสิ่งที่ยอดเยี่ยม (ให้หรือรับข้อผิดพลาด 64 บิตซึ่งส่งผลกระทบอย่างสูงต่อพื้นที่ที่แมปที่ฉันทำอยู่) แต่ฉันจะทำเช่นนั้นใน QGIS 2.x ได้อย่างไร

ฉันไม่พบเอกสารที่อัปเดตเกี่ยวกับเรื่องนี้

ในเมนูเวกเตอร์ฉันได้ลองนำเข้าจากเซิร์ฟเวอร์ osm ฉันได้รับไฟล์. osm แล้ว แต่ฉันก็ติดอยู่ มีตัวเลือกเมนูสำหรับการโหลดไฟล์ XML แต่มันสร้างฐานข้อมูลเชิงพื้นที่ซึ่งเห็นได้ชัดว่ามีตารางที่ไม่ใช่รูปทรงเรขาคณิตเมื่อฉันพยายามที่จะเพิ่มเป็นชั้น spatialite ถ้าฉันเปิดตารางแอ็ตทริบิวต์ฉันสามารถดูรหัสโหนดวิธีและอื่น ๆ แต่ฉันไม่สามารถหาวิธีใช้งานจริงได้

ฉันได้ลองเพิ่มเวกเตอร์เลเยอร์จากไฟล์. osm XML แล้ว ฉันได้รับหน้าต่าง gpsbabel ที่ไม่แสดงอะไรเลยและในที่สุดก็เป็นข้อความแหล่งข้อมูลที่ไม่ถูกต้องใน QGIS


2
ทอมฉันเขียนคำแนะนำทีละขั้นตอนเพื่อรับข้อมูล OSM ใน QGIS หวังว่านี่เป็นเรื่องง่ายที่จะติดตามสำหรับผู้เริ่มต้น qgistutorials.com/en/docs/downloading_osm_data.html
spatial Thoughts

นี่คือรูปแบบที่เหมาะสม (พร้อมคำแนะนำในการตั้งค่าที่ดี): github.com/yannos/Beautiful_OSM_in_QGISมันเหมาะสำหรับ PostGIS (ไม่ใช่ Spatialite)
kontextify

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

คำตอบ:


40

อัปเดตสำหรับ QGIS 3.x : ผู้นำเข้า OSM เก่าจาก QGIS 2 ถูกทิ้งใน QGIS 3 เนื่องจากข้อบกพร่องที่ไม่ได้แก้ไขจำนวนมาก ปลั๊กอิน QuickOSM ยังช่วยให้สามารถอ่านไฟล์ raw osm ได้ คุณสามารถใช้เลเยอร์ผู้ใช้ - เพิ่มเลเยอร์ - เพิ่มเลเยอร์เวกเตอร์แทน ในกรณีนั้นข้อมูล OSM จะถูกเปิดด้วย GDAL ตามที่ระบุไว้ในเอกสารโดยhttp://gdal.org/drv_osm.html


ในQGIS 2.xมี 3 ขั้นตอนที่เกี่ยวข้อง

  1. รับไฟล์ OSM คุณสามารถรับได้โดยใช้ josm หรือ overpass หรือแหล่งอื่น ๆ ต้องเป็น xml ที่ถูกต้อง คุณยังสามารถดาวน์โหลดได้จาก qgis Vector> OpenStreetMap> ดาวน์โหลดเมนูOSM Dataแต่บางครั้งก็ไม่ได้ผล ฉันจะแนะนำให้ใช้เทอร์โบสะพานลอย
  2. เวกเตอร์> OpenStreetMap> นำเข้าโทโพโลยีจาก XMLสิ่งนี้อย่างที่คุณบอกว่าจะสร้างฐานข้อมูลเชิงพื้นที่ที่มีตารางที่ไม่ใช่รูปทรงเรขาคณิต ฉันคิดว่านี่เป็นโทโพโลยี
  3. สุดท้ายคุณก็สามารถรับข้อมูลโดยเวกเตอร์> OpenStreetMap> ส่งออกโทโพโลยีการ Spatialiteที่นี่คุณจะต้องให้ไฟล์ฐานข้อมูลข้างต้นและทำเช่นเดียวกับใน QGIS 1.8 คุณจะมีตัวเลือกในการเลือกจุดเส้นหรือรูปหลายเหลี่ยม ด้านล่างในส่วนแท็กที่ส่งออกคุณสามารถโหลดแท็กทั้งหมดที่มีอยู่ในไฟล์และเลือกเฉพาะแท็กที่คุณต้องการ นี่คือคุณสมบัติเพิ่มเติมกว่าใน 1.8

เลเยอร์จะถูกเพิ่มลงในแผนที่หากคุณต้องการโหนดทั้งหมดวิธีที่คุณสามารถทำซ้ำขั้นตอนที่ 3 ด้วยตัวเลือกอื่น ๆ

http://wiki.openstreetmap.org/wiki/QGIS#QGIS2_OpenStreetMap_Vectors


4
สิ่งนี้ให้ความรู้สึกที่ซับซ้อนอย่างเหลือเชื่อ แต่ก็ใช้งานได้ เพื่อความชัดเจนหลังจากขั้นตอนที่ 3 คุณยังคงต้องเพิ่มเลเยอร์ spatialite เชื่อมต่อกับฐานข้อมูลที่คุณสร้างขึ้นและเลือกเลเยอร์ที่สร้างในขั้นตอนที่ 3 เพื่อดูผลลัพธ์ในที่สุด ขอบคุณสำหรับความช่วยเหลือของคุณ!
Laurent S

สำหรับฉันเลเยอร์ถูกสร้างและเพิ่มโดยอัตโนมัติ การเชื่อมต่อกับฐานข้อมูลถูกสร้างขึ้นในขั้นตอนที่ 2 (เว้นแต่คุณจะไม่ได้เลือก)
AndreJ

15

ฉันพบว่าการดาวน์โหลดข้อมูล OSM โดยใช้ปลั๊กอินและผ่านการเคลื่อนไหวการนำเข้าและส่งออกน่าเบื่อมาก นั่นเป็นเหตุผลที่ฉันเขียนโซลูชันที่แตกต่าง: http://anitagraser.com/2014/05/31/a-guide-to-googlemaps-like-maps-with-osm-in-qgis/

สรุป:

ไฟล์ OSM แบบ Raw อาจมีขนาดค่อนข้างใหญ่ นั่นเป็นเหตุผลว่าทำไมจึงเป็นที่นิยมมากกว่าในการดาวน์โหลดรูปแบบไบนารีที่บีบอัด. pbfแทนที่จะเป็นรูปแบบ XML. osm ในฐานะที่เป็นแหล่งที่มาของการดาวน์โหลดผมอยากแนะนำให้Geofabrik

สำหรับขั้นตอนก่อนการประมวลผลครั้งแรก: การแยกพื้นที่ที่น่าสนใจเราสามารถใช้ Osmosis:

C:\Users\anita_000\Geodata\OSM_Noirmoutier>..\bin\osmosis.bat --read-pbf pays-de-la-loire-latest.osm.pbf --bounding-box left=-2.59 bottom=46.58 right=-1.44 top=47.07 --write-xml noirmoutier.osm

แม้ว่า QGIS ยังสามารถโหลดไฟล์. osm ได้ แต่ฉันพบว่าประสิทธิภาพและการเข้าถึงแอตทริบิวต์นั้นดีขึ้นมากหากไฟล์. osm ถูกแปลงเป็น spatialite

C:\Users\anita_000\Geodata\OSM_Noirmoutier>ogr2ogr -f "SQLite" -dsco SPATIALITE=YES noirmoutier.db noirmoutier.osm

ใน QGIS เราสามารถโหลดคะแนนบรรทัดและมัลติโพลิกอนโดยใช้ Add SpatiaLite Layer เมื่อเราโหลดตาราง spatialite มีปัญหาบางอย่าง:

  • ไม่มีรูปหลายเหลี่ยมที่ดิน แต่มีคุณสมบัติของเส้น“ ชายฝั่งทะเล”
  • รูปหลายเหลี่ยมแม่น้ำส่วนใหญ่หายไป แทนที่จะมีคุณสมบัติของสาย“ ริมฝั่งแม่น้ำ”

การสร้างรูปหลายเหลี่ยมแม่น้ำที่หายไปไม่ใช่เรื่องใหญ่:

  1. เลือกทุกบรรทัดที่ริมน้ำ = ริมฝั่งแม่น้ำ
  2. ใช้เครื่องมือรูปหลายเหลี่ยมจากกล่องเครื่องมือประมวลผลเพื่อสร้างรูปหลายเหลี่ยมโดยอัตโนมัติจากพื้นที่ที่ล้อมรอบด้วยเส้นฝั่งแม่น้ำที่เลือก (โปรดทราบว่าการประมวลผลตามค่าเริ่มต้นทำงานเฉพาะกับคุณสมบัติที่เลือก แต่การตั้งค่านี้สามารถเปลี่ยนแปลงได้ในการตั้งค่าการประมวลผล)

การสร้างรูปหลายเหลี่ยมของที่ดิน (หรือรูปหลายเหลี่ยมของทะเลหากคุณต้องการด้วยเหตุผลบางอย่าง) นั้นมีความเกี่ยวข้องมากขึ้นเล็กน้อยเนื่องจากเวลาส่วนใหญ่แนวชายฝั่งจะไม่ถูกปิดด้วยเหตุผลง่าย ๆ ที่เรามักจะตัดที่ดินออกจากทวีปหลัก . ดังนั้นก่อนที่เราจะใช้เครื่องมือรูปหลายเหลี่ยมเราต้องปิดพื้นที่ ในการทำเช่นนั้นฉันขอแนะนำให้เลือกแนวชายฝั่งโดยใช้ "other_tags" LIKE '% "natural" => "แนวชายฝั่ง"%' และสร้างเลเยอร์ใหม่จากตัวเลือกนี้ (บันทึกส่วนที่เลือกเป็น ... ) และแก้ไข (อย่าลืม เพื่อเปิดใช้งานการจัดชิด!) เพื่อเพิ่มบรรทัดเพื่อปิดพื้นที่ จากนั้นรูปหลายเหลี่ยม


หากคุณกำลังใช้งานคอมพิวเตอร์ที่เชื่อถือได้อย่างเป็นธรรมและคุณต้องการเวที ogr2ogr --config OGR_SQLITE_SYNCHRONOUS OFFจะเสร็จสมบูรณ์ก่อนยุคน้ำแข็งต่อไปเพิ่ม
scruss

6

หากคุณไม่ชอบปลั๊กอินให้ดึงข้อมูล OSM ที่คุณต้องการด้วย Overpass API และเพิ่มผลลัพธ์ลงใน QGIS ด้วยAdd Vector Layer( All filesตัวกรองการติดฉลาก)

QGIS 2.0 ใช้ ogr2ogr OSM ผู้นำเข้าของ GDAL 1.10 ซึ่งทำได้ดี

ดูเหมือนว่าการสนับสนุนความสัมพันธ์จะดีกว่าปลั๊กอินในขณะนี้

เพียงให้แน่ใจว่าคุณดาวน์โหลดวิธีการและความสัมพันธ์อย่างสมบูรณ์นั่นคือโหนทั้งหมดของวิธีการและสมาชิกทั้งหมดของความสัมพันธ์กับโหนดทั้งหมดของพวกเขา


4

คุณรู้ว่าคุณไม่จำเป็นต้องใส่ข้อมูลลงใน SpatialLite คุณสามารถ:

  1. ดาวน์โหลดข้อมูล (เวกเตอร์> OpenStreetMap> ดาวน์โหลดข้อมูลสร้างไฟล์. osm)
  2. โหลด data (.osm file) เป็น vector layer (Layer> Add Vector Layer) หลังจากที่คุณเลือกไฟล์มันจะถามว่าคุณต้องการเพิ่มเลเยอร์ใด (เนื่องจาก GDAL สร้างไฟล์แยกต่างหากสำหรับแต่ละประเภท: จุด, เส้น, หลายเส้น, หลายจุด, GeomCollection) เลือกสิ่งที่คุณต้องการและโหลดขึ้นมา

วิธีนี้ใช้ได้ผล แต่ดูเหมือนจะไม่แยกเลเยอร์ตามแท็ก โดยทั่วไปแล้วถนนและแม่น้ำจะอยู่ในเลเยอร์บรรทัดเดียวกันซึ่งไม่เป็นประโยชน์หากคุณต้องการเรียกใช้การวิเคราะห์กับข้อมูลที่เกิดขึ้น
Laurent S

ไม่ชัดเจนจากคำถามของคุณว่าคุณทำอะไรกับข้อมูลเมื่อนำเข้าแล้ว แน่นอนคุณสามารถเลือกคุณลักษณะที่คุณต้องการจากข้อมูลภายใน QGIS ดังที่ได้กล่าวไว้ข้างต้นหากคุณรู้ว่าคุณต้องการข้อมูลบางอย่างเท่านั้น (และไม่ใช่พื้นที่ที่มีขนาดใหญ่เกินไป) การดาวน์โหลดข้อมูลด้วย Overpass น่าจะดีกว่าเนื่องจากคุณสามารถเลือกคุณลักษณะบางอย่างล่วงหน้าได้ ฉันพบว่า Overpass Turbo เป็นวิธีที่เป็นมิตรต่อผู้ใช้ในการพัฒนาคิวรี นี่คือตัวอย่างของทางหลวงทั้งหมดในกล่องที่มีขอบเขต: overpass-turbo.eu/s/2VX
neuhausr
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.