Jak zignorować „obsługę złych warstw” w QGIS?

11

Mam projekt QGIS (2.14.3-Essen), z którego korzystam zarówno w pracy, jak i w domu. W projekcie trzymam wszystkie oprócz dwóch warstw.

Dwie pozostałe warstwy są bardzo duże - DEM i cień o łącznej wartości ponad 20 GB - i są przechowywane na różnych ścieżkach w pracy lub w domu.

Chciałbym zignorować Handle Bad Layersdialog i zachować zepsute ścieżki dla tych warstw. Często mnie to nie obchodzi, że są złe; Chcę wprowadzić zmiany w innych częściach projektu.

Czy istnieje sposób, aby to zrobić, zignorować lub pominąć okno dialogowe Obsługa złych warstw, aby nie stracić odniesienia do warstw, jeśli ich nie zaktualizuję?

Aaron
źródło
Jest to coś, co powinno zostać rozwiązane wcześniej w QGIS. Nie byłoby to trudne. Poleciłbym to naprawić w górę (np. Dodatkowe opcje w oknie dialogowym: a) ukryj w tej sesji b) napraw ścieżkę źródłową c) usuń warstwę). Istnieje wiele firm , które chętnie to dla Ciebie zrobią.
Matthias Kuhn
1
@Matthias Kuhn - To bardzo dobry pomysł, byłby to dobry krok naprzód. Korzystam z jednej z firm konsultingowych z tej listy (nie jesteś pewien, czy jest to zrobione, aby je nazwać?). Zbadam z nimi tę możliwość. Dzięki
Martin Hügi,
@ MartinHügi, czy zrobiłeś jakieś postępy w tej sprawie? Coś podobnego wzbudziło pewne uznanie na listach mailingowych list .osgeo.org
Matthias Kuhn
Nie, nie zrobiłem tego, zapomniałem, ponieważ stała się jedną z tych rzeczy, z którymi żyjemy. Dzięki za przypomnienie, mogę zadać pytanie naszej firmie konsultingowej, czy jest to już coś w toku? @Aaron - Jak ci się to udało?
Martin Hügi,
Nadal używam swojego obejścia. Dwa równoległe projekty QGIS - jeden do pracy i jeden do domu.
Aaron

Odpowiedzi:

4

Po prostu wykonaj osobne kopie z pliku projektu do użytku domowego i zawodowego.

Zapisane dane zostaną zapisane w plikach źródłowych warstwy, a nie w pliku projektu.

Po zakończeniu pracy domowej możesz zabrać ją do pracy i ponownie dodać złe warstwy. Jeśli masz trudną stylizację na warstwach, możesz zapisać ją osobno i również dodać.


Innym wyborem jest owinięcie pliku VRT wokół zewnętrznego źródła.

Przykładowy przykład pliku rastrowego Geotif, utworzonego za pomocą 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>

oraz próbka pliku kształtu:

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

Gdy pliki źródłowe nie są obecne, raster jest wyświetlany jako czarny kwadrat (możesz zmienić warstwę na niewidoczną), a warstwa wektorowa staje się tabelą nie geometrii, bez żadnych komunikatów o błędach. Dodatkowe warstwy inne niż vrt z plikami źródłowymi, które nie zostaną usunięte, pozostaną i można je edytować. Po ponownej instalacji plików źródłowych wszystko wraca do normy, nawet zmiany w innych warstwach.

AndreJ
źródło
1
Tworzenie osobnych projektów dla domu i biura jest w tym konkretnym przypadku przyzwoite. Istnieją jednak inne przypadki, na przykład chwilowe wyłączenie usługi mapy, gdy użytkownik chce zignorować powiadomienie o złych warstwach. Więc ponownie pytam, czy istnieje sposób na zignorowanie lub pominięcie okna dialogowego Obsługa złych warstw, aby nie stracić odniesienia do niektórych warstw?
Aaron
Czy możesz podać więcej szczegółów na temat plików VRT, czym one są i jak zacząć. Z tego, co przyjrzałem się, czy VRT dotyczą tylko rastrów? Co z plikami wektorowymi lub zdalnymi warstwami PostGIS, które nie są dostępne, jeśli nie ma połączenia. Jak możesz zignorować te „Obsługa złych warstw”?
Martin Hügi
@ MartinHügi można również zbudować VRT dla plików wektorowych, ale wciąż wymaga to prac ręcznych: gdal.org/drv_vrt.html i paolocorti.net/2012/03/08/gdal_virtual_formats . Wkrótce poszerzę swoją odpowiedź o kilka przykładów.
AndreJ
@AndreJ Dzięki, przeglądając te linki, moje ograniczone zrozumienie jest takie, że plik xml działa jak mapa między źródłami danych. Więc QGIS „myśli”, że tam jest, nawet jeśli źródło danych nie jest dostępne? GDAL jest czymś, co wygląda na dobre do opanowania, a przynajmniej zrozumienia.
Martin Hügi
Tak, tylko oszukujesz moduł obsługi błędów QGIS.
AndreJ
3

Możliwym obejściem byłoby zmodyfikowanie pliku projektu qgs za pomocą skryptu. Odkryłem, że jeśli zastąpisz źródło danych, <datasource>.</datsource>to zignoruje wyskakujące okienko Obsługa złych warstw.

Skrypt Pythona do uruchomienia, jeśli nie chcesz ładować określonych warstw.

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

Skrypt Pythona do uruchomienia w celu wstawienia odpowiedniej ścieżki źródła danych.

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

Robiąc to, możesz skonfigurować DoNotLoad.pyz najwyższym skryptem i home.pyze ścieżkami do domowych źródeł oraz work.pyze ścieżkami do źródeł pracy, używając drugiego skryptu jako wzorca.

Będziesz wtedy miał jeden projekt do pracy, ale możesz łatwo zmienić ścieżki w zależności od środowiska, w którym się znajdujesz, lub zmienić ścieżki, aby warstwy nie były ładowane, ale nadal znajdowały się w projekcie (cała stylizacja jest zapisywana i myślę, że możesz nawet zmienić styl, jeśli chcesz. Po prostu nic nie pojawi się na mapie).

TJ Rockefeller
źródło
Dzięki. Rozumiem tę koncepcję, teraz najwyraźniej muszę spędzić czas, który chciałem obejść, aby zacząć rozumieć podstawowe użycie Pythona. Na razie dostaję tę koncepcję, ponieważ ręcznie edytowałem project.qgs za pomocą WordPada, aby zmienić źródło danych, i zmieniłem go z powrotem. QGIS nie zignorował obsługi złych warstw, ale ponieważ <ID> stanowi symbol zastępczy, mogłem wrócić i cofnąć moją zmianę. Tak, rozumiem - myślę.
Martin Hügi
Myślę, że to dobre miejsce na rozpoczęcie wiki.python.org/moin/BeginnersGuide
Martin Hügi
@ MartinHügi, jeśli to pomaga, mam główny wzorzec dla mojego skryptu z tej odpowiedzi stackoverflow stackoverflow.com/a/290494/4708150 To wyjaśnia dokładniej logikę skryptu. Pamiętaj, aby spojrzeć na komentarze. Jest najwyżej oceniany komentarz, który wyjaśnia, dlaczego na końcu instrukcji print występuje przecinek.
TJ Rockefeller
1

Wtyczka ChangeDataSource utrzymuje warstwy w pliku, tymczasowo przenosząc je do grupy złych warstw. https://geogear.wordpress.com/2016/01/29/changedatasourceplugin-plugin-release-2-0/ Powinno to robić, co chcesz. W ubiegłym roku miałem podobny problem i zauważyłem, że istnieje wtyczka ChangeDataSource, która działa z warstwami, ale nie obsługuje złych warstw. Wspomniałem, że obsługa złych warstw byłaby świetną funkcją w komentarzach na blogu dewelopera (Enrico Ferreguti). W ciągu tygodnia dodał go!

Baswein
źródło
Ta wtyczka nie działała dla mnie, aby obsługiwać złe warstwy. Próbowałem na dwóch różnych laptopach - jednym z Win7 i drugim z Win10. Oba mają zainstalowane QGIS 2.18.0. Sprawdziłem „Obsługa złych warstw” i po instalacji ponownie uruchomiłem QGIS. Domyślnie QGIS obsługiwał złe warstwy nadal pojawiał się, a nie powiadomienie wtyczki, które znalazło i obsłużyło nieprawidłowe źródła danych.
Aaron
Teraz też dla mnie nie działa. Powiadomię programistę.
Baswein
Sprawdziłem, czy wtyczka changeDataSource działa bez problemów. Naprawiam niektóre nieprzechwycone warunki zgłaszające wyjątki lub zgłaszające fałszywy błąd i zobowiązuję się do repozytorium nowej wersji. [Jeśli problemy nadal występują, zgłoś] ( github.com/enricofer/changeDataSource/issues ), określając zestawy danych lub czynności operacyjne, aby je odtworzyć.
Enrico Ferreguti
Aby wtyczka wyskoczyła, musisz uruchomić Qgis, a następnie otworzyć projekt.
Baswein,