Memuat data OpenStreetMap di QGIS?

36

Di QGIS 1.8 saya menggunakan plugin openstreetmap untuk meminta data dari server, atau membuka file .osm XML, yang menghasilkan 3 layer (poligon, polyline, dan titik) di QGIS.

Ini luar biasa (memberi atau mengambil bug 64bit yang sangat memengaruhi area yang baru dipetakan yang saya kerjakan), tetapi bagaimana saya melakukannya di QGIS 2.x?

Saya tidak dapat menemukan dokumentasi yang diperbarui tentang hal itu.

Di menu vektor, saya sudah mencoba mengimpor dari server osm, saya mendapatkan file .osm, tapi kemudian saya macet. Ada pilihan menu untuk memuat file XML, tetapi menghasilkan spatialite db, yang tampaknya hanya memiliki tabel non-geometri ketika saya mencoba menambahkannya sebagai lapisan spatialite. Jika saya membuka tabel atribut, saya bisa melihat id node, cara dan sebagainya, tapi saya tidak tahu bagaimana cara memanfaatkannya.

Saya juga mencoba menambahkan layer vektor dari file XML .osm. Saya mendapatkan jendela gpsbabel yang tidak menunjukkan apa-apa, akhirnya pesan sumber data tidak valid di QGIS.

Laurent S
sumber
2
Tom, saya menulis petunjuk langkah demi langkah untuk mendapatkan data OSM dalam QGIS. Semoga ini mudah diikuti untuk pemula. qgistutorials.com/en/docs/downloading_osm_data.html
spatialthoughts
Ini adalah gaya yang layak (dengan instruksi pengaturan yang bagus): github.com/yannos/Beautiful_OSM_in_QGIS Ini ditujukan untuk PostGIS (bukan Spatialite).
kontextify
Meskipun tautan ini dapat menjawab pertanyaan, lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini dan memberikan tautan untuk referensi. Jawaban hanya tautan dapat menjadi tidak valid jika halaman tertaut berubah. - Dari Ulasan
csk

Jawaban:

40

Pembaruan untuk QGIS 3.x : Pengimpor OSM lama dari QGIS 2 dijatuhkan di QGIS 3 karena banyak bug yang tidak terselesaikan. Plugin QuickOSM juga memungkinkan untuk membaca file mentah osm. Anda dapat menggunakan Layer pengguna - Tambahkan Layer - Tambahkan Layer Vektor sebagai gantinya. Dalam hal ini, data OSM dibuka dengan GDAL sebagaimana didokumentasikan oleh http://gdal.org/drv_osm.html


Di QGIS 2.x , Ada 3 langkah yang terlibat

  1. Dapatkan File OSM, Anda bisa mendapatkannya menggunakan josm atau overpass atau sumber lainnya. Itu harus xml yang valid. Anda juga dapat mengunduhnya dari qgis Vector> OpenStreetMap> Unduh menu Data OSM , tetapi terkadang tidak memberikan hasil. Saya akan merekomendasikan menggunakan turbo layang .
  2. Vektor> OpenStreetMap> Impor Topologi dari XML , ini seperti yang Anda katakan akan menghasilkan basis data spasial dengan tabel non-geometri. Ini menurut saya topologi.
  3. Akhirnya, Anda bisa mendapatkan data dengan Vector> OpenStreetMap> Ekspor Topologi ke Spatialite , di sini Anda perlu memberikan file db yang dibuat di atas dan seperti di qgis 1.8 Anda akan memiliki opsi untuk memilih titik, garis atau poligon . Di bawah itu di bagian tag yang diekspor Anda dapat memuat semua tag yang terdapat dalam file dan hanya memilih yang Anda butuhkan. Ini adalah fitur tambahan daripada di 1.8.

Lapisan akan ditambahkan ke peta, jika Anda ingin semua node, cara Anda dapat mengulangi langkah 3 dengan opsi lain.

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

neogeomat
sumber
4
Ini terasa sangat rumit, tetapi berhasil. Demi kejelasan, setelah langkah 3, Anda masih perlu menambahkan lapisan spasial, sambungkan ke db yang Anda buat, dan pilih layer yang dibuat pada langkah 3 untuk akhirnya melihat hasilnya. Terima kasih atas bantuan Anda!
Laurent S
Bagi saya, layer-layer itu secara otomatis dibuat dan ditambahkan. Koneksi ke database dibuat pada langkah 2 (kecuali jika Anda tidak mencentangnya).
AndreJ
15

Saya menemukan mengunduh data OSM menggunakan plugin dan melalui gerakan impor dan ekspor sangat membosankan. Itu sebabnya saya menulis solusi yang berbeda: http://anitagraser.com/2014/05/31/a-guide-to-googlemaps-like-maps-with-osm-in-qgis/

Ringkasan:

File OSM mentah bisa sangat besar. Itu sebabnya pasti lebih baik untuk mengunduh format .pbf biner terkompresi daripada format XML .osm. Sebagai sumber unduhan, saya akan merekomendasikan Geofabrik .

Untuk langkah preprocessing pertama: mengekstraksi bidang yang diminati, kita dapat menggunakan 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

Sementara QGIS juga dapat memuat file .osm, saya menemukan bahwa kinerja dan akses ke atribut jauh lebih baik jika file .osm dikonversi ke spasial.

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

Di QGIS, kita bisa memuat poin, garis, dan multipoligon menggunakan Add SpatiaLite Layer. Saat kami memuat tabel spatialite, ada beberapa masalah:

  • Tidak ada poligon tanah. Sebaliknya, ada fitur garis "garis pantai".
  • Kebanyakan poligon sungai hilang. Sebaliknya ada fitur garis "tepi sungai".

Membuat poligon sungai yang hilang bukanlah masalah besar:

  1. pilih semua garis di mana jalur air = tepi sungai.
  2. gunakan alat Polygonize dari kotak alat pemrosesan untuk secara otomatis membuat poligon dari area yang tertutup oleh garis tepi sungai yang dipilih. (Perhatikan bahwa Memproses secara default hanya beroperasi pada fitur yang dipilih tetapi pengaturan ini dapat diubah dalam pengaturan Pemrosesan.)

Membuat poligon darat (atau poligon laut jika Anda lebih suka itu karena alasan tertentu) sedikit lebih terlibat karena sebagian besar waktu garis pantai tidak akan ditutup karena alasan sederhana bahwa kita sering memotong sebidang tanah dari benua utama . Karena itu, sebelum kita dapat menggunakan alat Polygonize, kita harus menutup area tersebut. Untuk melakukan itu, saya sarankan untuk terlebih dahulu memilih garis pantai menggunakan "other_tags" LIKE '% "natural" => "garis pantai"%' dan buat layer baru dari pilihan ini (simpan pilihan sebagai ...) dan edit (jangan lupa) untuk mengaktifkan gertakan!) untuk menambahkan garis untuk menutup area. Lalu poligonkan.

underdark
sumber
Jika Anda menjalankan komputer yang cukup andal, dan Anda ingin tahap ogr2ogr selesai sebelum zaman es berikutnya, tambahkan --config OGR_SQLITE_SYNCHRONOUS OFF.
scruss
6

Jika Anda tidak menyukai plugin, ambil data OSM yang Anda butuhkan dengan Overpass API, dan tambahkan hasilnya ke QGIS dengan Add Vector Layer(enabeling All filesfilter).

QGIS 2.0 menggunakan importir ogr2ogr OSM GDAL 1.10 yang melakukan pekerjaan dengan baik.

Dukungan relasi tampaknya lebih baik daripada plugin saat ini.

Pastikan Anda mengunduh cara dan relasi sepenuhnya , itu semua simpul cara, dan semua anggota relasi, dengan semua simpul mereka.

AndreJ
sumber
4

Anda tahu, Anda tidak perlu memasukkan data ke SpatialLite. Anda bisa saja:

  1. Unduh data (Vektor> OpenStreetMap> Unduh Data, buat file .osm)
  2. Muat data (file .osm) sebagai lapisan vektor (Lapisan> Tambahkan Lapisan Vektor). Setelah Anda memilih file, ia akan menanyakan kepada Anda layer mana yang ingin Anda tambahkan (karena GDAL membuat file terpisah untuk setiap jenis: Point, Line, MultiLine, MultiPolygon, GeomCollection). Pilih apa yang Anda inginkan dan muat.
neuhausr
sumber
Ini berfungsi dalam beberapa cara, tetapi tampaknya tidak memisahkan lapisan berdasarkan tag. Jadi pada dasarnya jalan dan sungai berakhir di layer Line yang sama, yang tidak terlalu membantu jika Anda ingin menjalankan analisis pada data yang dihasilkan.
Laurent S
Dari pertanyaan Anda, tidak jelas apa yang Anda lakukan dengan data setelah diimpor. Tentu saja Anda dapat memilih fitur apa pun yang Anda inginkan dari data dalam QGIS. Seperti disebutkan di atas, jika Anda tahu Anda hanya menginginkan data tertentu (dan itu tidak di daerah yang terlalu besar), mengunduh data dengan Overpass mungkin akan lebih baik, karena Anda dapat memilih sebelumnya untuk fitur tertentu saja. Saya menemukan Overpass Turbo sebagai cara yang ramah pengguna untuk mengembangkan kueri. Berikut adalah contoh dari semua jalan raya di kotak pembatas: overpass-turbo.eu/s/2VX
neuhausr