Bagaimana cara mengabaikan "menangani lapisan buruk" di QGIS?

11

Saya memiliki proyek QGIS (2.14.3-Essen) yang saya gunakan baik di tempat kerja maupun di rumah. Saya menyimpan semua kecuali dua lapisan dengan proyek.

Dua lapisan yang tersisa sangat besar - DEM dan hillshade dengan total lebih dari 20 GB - dan mereka disimpan di jalur yang berbeda di tempat kerja vs di rumah.

Saya ingin mengabaikan Handle Bad Layersdialog dan menjaga jalur yang rusak untuk lapisan-lapisan itu. Saya sering tidak peduli mereka jahat; Saya ingin membuat perubahan pada bagian lain dari proyek.

Apakah ada cara untuk melakukannya, untuk mengabaikan atau melewatkan dialog Handle Bad Layers jadi saya tidak kehilangan referensi ke lapisan jika saya tidak memperbaruinya?

Harun
sumber
Ini adalah sesuatu yang harus diselesaikan di hulu di QGIS. Tidak akan terlalu sulit untuk dilakukan. Saya akan merekomendasikan untuk mendapatkan ini tetap upstream (misalnya opsi tambahan dalam dialog: a) sembunyikan di sesi ini b) perbaiki jalur sumber c) hapus lapisan). Ada banyak perusahaan di sekitar yang akan dengan senang hati melakukan ini untuk Anda.
Matthias Kuhn
1
@Matthias Kuhn - Itu adalah ide yang sangat bagus, itu akan menjadi cara yang bagus untuk maju. Saya memang menggunakan salah satu konsultan dalam daftar itu (tidak yakin apakah itu hal yang dilakukan untuk menamai mereka?). Saya akan mengeksplorasi kemungkinan bersama mereka. Terima kasih
Martin Hügi
@ MartinHügi apakah Anda membuat kemajuan dalam hal ini? Sesuatu yang serupa mengangkat beberapa pengakuan di milis lists.osgeo.org/pipermail/qgis-developer/2017-May/048450.html
Matthias Kuhn
Tidak, saya belum mengembangkan ini, saya telah lupa sebenarnya karena baru saja menjadi salah satu hal yang kita hidupi. Terima kasih atas pengingatnya, saya dapat mengajukan pertanyaan kepada konsultasi kami atau apakah ini sesuatu yang sudah berlangsung? @ Harun - Bagaimana ini berhasil bagimu?
Martin Hügi
Saya terus menggunakan pekerjaan saya. Dua proyek paralel QGIS - satu untuk pekerjaan dan satu untuk rumah.
Aaron

Jawaban:

4

Buat salinan terpisah dari file proyek Anda untuk digunakan di rumah dan di kantor.

Data yang Anda simpan akan ditulis ke file sumber layer, bukan ke file proyek.

Setelah Anda menyelesaikan bagian pekerjaan rumah, Anda dapat membuatnya bekerja dan menambahkan kembali lapisan yang buruk. Jika Anda memiliki gaya sulit pada lapisan, Anda dapat menyimpannya secara terpisah dan menambahkannya juga.


Pilihan lain adalah membungkus file VRT di sekitar sumber eksternal.

Contoh sampel untuk file raster Geotif, dibuat dengan gdal_translate:

<VRTDataset rasterXSize="1656" rasterYSize="846">
  <GeoTransform> 2.0005201224994706e+005, 6.2653333397239589e+002, 0.0000000000000000e+000, 6.9906275735481549e+006, 0.0000000000000000e+000,-6.2653333397239589e+002</GeoTransform>
  <Metadata>
    <MDI key="TIFFTAG_RESOLUTIONUNIT">2 (pixels/inch)</MDI>
    <MDI key="TIFFTAG_XRESOLUTION">120</MDI>
    <MDI key="TIFFTAG_YRESOLUTION">120</MDI>
  </Metadata>
  <VRTRasterBand dataType="Byte" band="1">
    <ColorInterp>Red</ColorInterp>
    <SimpleSource>
      <SourceFilename relativeToVRT="1">testtif.tif</SourceFilename>
      <SourceBand>1</SourceBand>
      <SourceProperties RasterXSize="1656" RasterYSize="846" DataType="Byte" BlockXSize="1656" BlockYSize="1" />
      <SrcRect xOff="0" yOff="0" xSize="1656" ySize="846" />
      <DstRect xOff="0" yOff="0" xSize="1656" ySize="846" />
    </SimpleSource>
  </VRTRasterBand>
</VRTDataset>

dan sampel untuk shapefile:

<OGRVRTDataSource>
    <OGRVRTLayer name="testshp">
        <SrcDataSource>F:\Karten\vrt\testshp.shp</SrcDataSource>
            <SrcLayer>testshp</SrcLayer>
            <GeometryType>wkbPolygon</GeometryType>
            <LayerSRS>EPSG:31466</LayerSRS>
    </OGRVRTLayer>
</OGRVRTDataSource>

Ketika file sumber tidak ada, raster ditampilkan sebagai kotak hitam (Anda mungkin mengubah layer menjadi tidak terlihat), dan layer vektor menjadi tabel non-geometri, tanpa pesan kesalahan. Lapisan non-vrt tambahan dengan file sumber yang tidak dihapus akan tetap ada dan dapat diedit. Jika Anda menginstal ulang file sumber, semuanya kembali normal, bahkan perubahan ke lapisan lain.

AndreJ
sumber
1
Membuat proyek terpisah untuk rumah dan kantor adalah penyelesaian yang layak dalam kasus khusus ini. Namun, ada beberapa kasus lain, seperti ketika layanan peta turun sementara, ketika Anda ingin mengabaikan notifikasi lapisan buruk. Jadi sekali lagi saya bertanya, apakah ada cara untuk mengabaikan atau melewatkan dialog Handle Bad Layers sehingga orang tidak kehilangan referensi lapisan tertentu?
Aaron
Bisakah Anda memberikan beberapa detail lebih lanjut tentang file VRT, apa itu, dan bagaimana memulainya. Dari apa yang saya lihat, apakah VRT hanya berlaku untuk raster? Bagaimana dengan file vektor, atau lapisan PostGIS jarak jauh yang tidak tersedia jika tidak ada koneksi. Bagaimana Anda bisa mengabaikan 'Handle Bad Layers' ini?
Martin Hügi
@ MartinHügi Anda juga dapat membuat VRT untuk file vektor, tetapi masih membutuhkan pekerjaan tangan: gdal.org/drv_vrt.html dan paolocorti.net/2012/03/08/gdal_virtual_formats . Saya akan memperluas jawaban saya segera untuk beberapa contoh.
AndreJ
@AndreJ Terima kasih, jadi melihat melalui tautan-tautan itu, pemahaman saya yang terbatas adalah bahwa jenis file xml bertindak sebagai peta peralihan ke sumber data. Jadi QGIS 'berpikir' itu ada di sana, bahkan jika sumber data tidak tersedia? GDAL adalah sesuatu yang tampaknya baik untuk dikuasai, atau setidaknya memiliki pemahaman.
Martin Hügi
Ya, Anda hanya membodohi penangan kesalahan QGIS.
AndreJ
3

Kemungkinan penyelesaian adalah memodifikasi file proyek qgs Anda menggunakan skrip. Saya menemukan bahwa jika Anda mengganti sumber data dengan <datasource>.</datsource>maka akan mengabaikan pop up Handle Bad Layers.

Skrip python untuk dijalankan jika Anda tidak ingin memuat lapisan tertentu.

import fileinput

replaceNextLine = False

for line in fileinput.input('path\to\your\project.qgs', inplace=True):
    if replaceNextLine:
        print '<datasource>.</datasource>'
        replaceNextLine = False
    else:
        print line,

    if '<id>layer_name_whos_datasource_needs_to_change' in line:
        replaceNextLine = True

Script Python untuk menjalankan untuk memasukkan jalur sumber data yang sesuai.

import fileinput

replaceNextLine = False

for line in fileinput.input('path\to\your\project.qgs', inplace=True):
    if replaceNextLine:
        print '<datasource>.\path\to\your\datasource</datasource>'
        replaceNextLine = False
    else:
        print line,

    if '<id>layer_name_whos_datasource_needs_to_change' in line:
        replaceNextLine = True

Dengan melakukan ini, Anda dapat mengatur a DoNotLoad.pydengan skrip teratas dan home.pylintasan dengan ke sumber rumah Anda dan work.pylintasan dengan ke sumber pekerjaan Anda menggunakan skrip kedua sebagai pola.

Anda kemudian akan memiliki satu proyek untuk dikerjakan tetapi Anda dapat dengan mudah mengubah jalur Anda tergantung pada lingkungan Anda, atau mengubah jalur sehingga lapisan tidak dimuat, tetapi masih dalam proyek Anda (semua gaya Anda disimpan dan saya pikir Anda bahkan dapat memodifikasi styling jika Anda mau. Hanya tidak ada yang muncul di peta).

TJ Rockefeller
sumber
Terima kasih. Saya mendapatkan konsepnya, saya cukup jelas sekarang perlu menghabiskan waktu itu saya telah bermaksud untuk mulai memahami penggunaan dasar Python. Untuk saat ini saya mendapatkan konsep karena saya mengedit project.qgs secara manual dengan WordPad untuk mengubah sumber data, dan mengubahnya kembali. QGIS tidak mengabaikan lapisan buruk pegangan tetapi karena <ID> bertindak sebagai pengganti, saya bisa kembali dan mengembalikan perubahan saya kembali. Jadi ya, saya mengerti - saya pikir.
Martin Hügi
Saya kira ini adalah tempat yang baik untuk memulai wiki.python.org/moin/BeginnersGuide
Martin Hügi
@ MartinHügi jika itu membantu, saya mendapatkan pola utama untuk skrip saya dari stackoverflow ini. Pastikan untuk melihat komentar. Ada komentar teratas yang menjelaskan mengapa ada koma di akhir pernyataan cetak.
TJ Rockefeller
1

Plugin ChangeDataSource menyimpan lapisan dalam file dengan memindahkannya sementara ke grup lapisan buruk. https://geogear.wordpress.com/2016/01/29/changedatasourceplugin-plugin-release-2-0/ Ini harus melakukan apa yang Anda inginkan. Tahun lalu saya mengalami masalah yang sama dan memperhatikan bahwa ada plugin ChangeDataSource yang bekerja dengan lapisan tetapi tidak menangani lapisan yang buruk. Saya menyebutkan bahwa menangani lapisan buruk akan menjadi fitur hebat dalam komentar di blog pengembang (Enrico Ferreguti). Dalam seminggu dia telah menambahkannya!

Baswein
sumber
Plugin ini tidak berfungsi bagi saya untuk menangani lapisan buruk. Saya mencoba dua laptop berbeda - satu menjalankan Win7 dan lainnya Win10. Keduanya memiliki QGIS 2.18.0 diinstal. Saya memeriksa "Menangani lapisan buruk" dan memulai kembali QGIS setelah menginstal. Standar QGIS untuk menangani lapisan buruk terus muncul, bukan pemberitahuan plugin yang ditemukan dan menangani sumber data yang tidak valid.
Aaron
Tidak bekerja untuk saya sekarang juga. Saya akan memberi tahu pengembang.
Baswein
Saya memverifikasi bahwa plugin changeDataSource berjalan tanpa masalah. Saya memperbaiki beberapa kondisi yang tidak tertangkap dengan melemparkan pengecualian atau melaporkan kesalahan palsu dan berkomitmen untuk menyimpan versi baru. [Jika masalah Anda masih ada, tolong laporkan] ( github.com/enricofer/changeDataSource/issues ) yang menentukan kumpulan data atau langkah-langkah pengoperasian untuk mereproduksinya.
Enrico Ferreguti
Untuk mendapatkan plugin agar muncul, Anda perlu menjalankan Qgis dan kemudian buka proyek.
Baswein