QGIS'de “kötü katmanları işlemek” nasıl yok sayılır?


11

Hem işte hem de evde kullandığım bir QGIS (2.14.3-Essen) projem var. Projeyle birlikte iki katmanı da hariç tutuyorum.

Kalan iki katman çok büyük - bir DEM ve toplam 20 GB'den fazla bir tepe çizgisi - ve işyerinde veya evde farklı yollarda saklanıyorlar.

Handle Bad LayersDiyaloğu görmezden gelmek ve bu katmanlar için kırılmış yolları tutmak istiyorum . Sık sık kötü olduklarını umursamıyorum; Projenin diğer kısımlarında değişiklik yapmak istiyorum.

Bunu yapmanın, Kötü Katmanları Ele Al iletişim kutusunu yoksaymak veya atlamak için bir yol var mı, böylece katmanları güncellemezsem katmanlara olan referansı kaybetmem?


Bu, QGIS'de yukarı doğru çözülmesi gereken bir şeydir. Bunu yapmak çok zor olmazdı. Bu sabit yukarı akış (örneğin iletişim kutusundaki ek seçenekler: a) bu oturumda gizlemek b) kaynak yolunu düzeltmek c) katman kaldırmak) tavsiye ederim. Orada etrafında birçok firmanın bu sizin için yapmaktan mutlu olacağını.
Matthias Kuhn

1
@Matthias Kuhn - Bu çok iyi bir fikir, ileriye giden iyi bir yol olabilir. Bu listedeki danışmanlardan birini kullanıyorum (isimlendirmenin bitip bitmediğinden emin değil misiniz?). Olasılığı onlarla keşfedeceğim. Teşekkürler
Martin Hügi

@ MartinHügi bu konuda ilerleme kaydettiniz mi? Benzer bir şey, posta listesi listelerinde bazı onaylar aldı. Osgeo.org/pipermail/qgis-developer/2017-May/048450.html
Matthias Kuhn

Hayır, bunu ilerletmedim, aslında yaşadığımız şeylerden biri haline geldiğinden unutmuştum. Hatırlatma için teşekkürler, soruyu danışmanımıza sorabilir miyim yoksa devam etmekte olan bir şey mi? @Aaron - Bu sizin için nasıl çalıştı?
Martin Hügi

Geçici çözümümü kullanmaya devam ediyorum. Biri iş, diğeri ev için olmak üzere iki paralel QGIS projesi.
Aaron

Yanıtlar:


4

Evde ve işte kullanmak için proje dosyanızdan ayrı kopyalar çıkarmanız yeterlidir .

Kaydettiğiniz veriler, proje dosyasına değil katman kaynak dosyalarına yazılır.

Ödev bölümünü bitirdikten sonra, işe alıp kötü katmanları yeniden ekleyebilirsiniz. Katmanlarda zor bir stiliniz varsa, ayrı olarak kaydedip de ekleyebilirsiniz.


Başka bir seçenek, bir VRT dosyasını dış kaynağın etrafına sarmaktır.

Geotif tarama dosyası için aşağıdakilerle oluşturulan örnek bir örnek 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>

ve şekil dosyası için bir örnek:

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

Kaynak dosyalar mevcut olmadığında, tarama siyah bir kare olarak görüntülenir (katmanı görünmez hale getirebilirsiniz) ve vektör katmanı herhangi bir hata mesajı vermeden geometri olmayan bir tablo haline gelir. Kaldırılmayan kaynak dosyaları olan ek vrt olmayan katmanlar kalacaktır ve düzenlenebilir. Kaynak dosyaları yeniden yüklerseniz, diğer katmanlardaki değişiklikler bile her şey normale döner.


1
Ev ve ofis için ayrı projeler yapmak bu özel durumda iyi bir çözümdür. Ancak, bir harita hizmetinin geçici olarak devre dışı bırakılması, kötü katmanlar bildirimini yok saymak isteyebileceğiniz durumlar gibi başka durumlar da vardır. Tekrar soruyorum, Kötü Katmanları Ele Al iletişim kutusunu yok saymanın veya atlamanın bir yolu var mı, böylece belirli katmanlar referansı kaybetmez mi?
Aaron

VRT dosyaları, ne oldukları ve nasıl başlayacakları hakkında daha fazla ayrıntı verebilir misiniz? Araştırdıklarımdan VRT'ler sadece rasterler için mi geçerli? Vektör dosyaları veya bağlantı yoksa kullanılamayan uzak PostGIS katmanları hakkında. Bu 'Kötü Katmanları İşleme' seçeneğini nasıl yoksayabilirsiniz?
Martin Hügi

@ MartinHügi ayrıca vektör dosyaları için VRT oluşturabilirsiniz, ancak yine de el işi gerektirir: gdal.org/drv_vrt.html ve paolocorti.net/2012/03/08/gdal_virtual_formats . Bazı örnekler için cevabımı yakında genişleteceğim.
AndreJ

@AndreJ Teşekkürler, bu bağlantılara baktığımda, sınırlı anlayışım, bir xml dosyasının bir çeşit verinin kaynağına bir eşleme haritası gibi davranmasıdır. Yani QGIS, veri kaynağı mevcut olmasa bile orada olduğunu düşünüyor? GDAL, üstesinden gelmek veya en azından bir anlayışa sahip olmak için iyi olacak gibi görünen bir şeydir.
Martin Hügi

Evet, sadece QGIS hata işleyicisini kandırıyorsunuz.
AndreJ

3

Olası bir çözüm, bir komut dosyası kullanarak qgs proje dosyanızı değiştirmek olacaktır. Veri kaynağını bununla değiştirirseniz, <datasource>.</datsource>Kötü Katmanları Tanıyalım penceresini yok sayacağını fark ettim.

Belirli katmanları yüklemek istemiyorsanız Python betiği.

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

Uygun veri kaynağı yolunu eklemek için çalıştırılacak Python betiği.

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

Bunu DoNotLoad.pyyaparak, üst komut dosyasıyla ve home.pyev kaynaklarınıza work.pygiden yollarla ve ikinci komut dosyasını desen olarak kullanarak iş kaynaklarınıza giden yollarla bir a ayarlayabilirsiniz .

Daha sonra üzerinde çalışılacak tek bir projeniz olacak, ancak bulunduğunuz ortama bağlı olarak yollarınızı kolayca değiştirebilir veya katmanları yüklenmeyecek, ancak yine de projenizde olacak şekilde yolları değiştirebilirsiniz (tüm stiliniz kaydedilir ve eğer isterseniz stilini bile değiştirebilirsiniz. Haritada hiçbir şey görünmez).


Teşekkürler. Kavramı anladım, şimdi açıkça Python'un temel kullanımını anlamaya başlamak için dolaşmak istediğim zamanı harcamam gerekiyor. Şimdilik bu konsepti alıyorum çünkü datasource değerini değiştirmek için project.qgs dosyasını elle düzenledim ve geri değiştirdim. QGIS tutamaçlı kötü katmanları yok saymadı, ancak <ID> bir yer tutucu olarak hareket ettiğinde geri dönüp değişikliğimi geri alabildim. Evet, anladım - sanırım.
Martin Hügi

Sanırım bu başlamak için iyi bir yer wiki.python.org/moin/BeginnersGuide
Martin Hügi

@ MartinHügi yardımcı olursa, betiğimin ana kalıbını bu stackoverflow yanıtından aldım stackoverflow.com/a/290494/4708150 Bu betiğin mantığını daha ayrıntılı bir şekilde açıklar. Yorumlara baktığınızdan emin olun. Yazdırma ifadesinin sonunda neden virgül bulunduğunu açıklayan en çok oy alan bir yorum var.
TJ Rockefeller

1

ChangeDataSource eklentisi, geçici bir tanıtıcı katmanlar grubuna geçici olarak taşıyarak dosyadaki katmanları tutar. https://geogear.wordpress.com/2016/01/29/changedatasourceplugin-plugin-release-2-0/ İstediğinizi yapmalısınız. Geçen yıl benzer bir sorun yaşıyordum ve katmanlarla çalışan ancak kötü katmanları işlemeyen ChangeDataSource eklentisi olduğunu fark ettim. Kötü katmanları kullanmanın geliştiricinin (Enrico Ferreguti) blogundaki yorumlarda harika bir özellik olacağını belirttim. Bir hafta içinde ekledi!


Bu eklenti kötü katmanları işlemem için işe yaramadı. Biri Win7 ve diğeri Win10 olmak üzere iki farklı dizüstü bilgisayarda denedim. Her ikisinde de QGIS 2.18.0 yüklü. "Kötü katmanları işlemek" i işaretledim ve kurulumdan sonra QGIS'i yeniden başlattım. Eklentinin bulduğu ve geçersiz veri kaynaklarını işlediği bildirimi değil, QGIS hatalı katmanları işleme varsayılanı açılmaya devam etti.
Aaron

Benim için de çalışmıyor. Geliştiriciye haber vereceğim.
Baswein

ChangeDataSource eklentisinin sorunsuz çalıştığını doğruladım. Bazı yakalanmamış durumları istisnalar atarak veya yanlış hata bildirerek düzelterim ve yeni bir sürümü depolamayı taahhüt ederim. [Sorunlarınız devam ederse lütfen rapor edin] ( github.com/enricofer/changeDataSource/issues ) veri kümelerini veya bunları yeniden oluşturmak için çalıştırma adımlarını belirtin .
Enrico Ferreguti

Eklentinin açılmasını sağlamak için Qgis'i çalıştırmanız ve ardından projeyi açmanız gerekir.
Baswein
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.