Як ігнорувати "обробляти погані шари" в QGIS?


11

У мене є проект QGIS (2.14.3-Ессен), який я використовую як на роботі, так і вдома. Я підтримую проект, окрім двох шарів.

Два решти шару дуже великі - ДЕМ та схил сходів на загальну суму понад 20 Гб - і вони зберігаються різними шляхами на роботі та вдома.

Я хотів би ігнорувати Handle Bad Layersдіалог і зберігати розбиті шляхи для цих шарів. Мені часто все одно, що вони погані; Я хочу внести зміни до інших частин проекту.

Чи є спосіб зробити це, ігнорувати або пропускати діалог Handle Bad Layers, щоб я не втрачав посилання на шари, якщо не оновлював їх?


Це те, що повинно вирішуватися в рамках QGIS. Це зробити було б не дуже важко. Я рекомендую отримати це виправлене вище (наприклад, додаткові параметри в діалоговому вікні: а) приховати в цьому сеансі б) виправити вихідний шлях в) видалити шар). Навколо існує багато компаній, які з радістю зроблять це за вас.
Маттіас Кун

1
@Matthias Kuhn - Це дуже гарна ідея, це був би хороший шлях вперед. Я використовую одну із консультантів у цьому списку (не впевнений, чи це зроблено, щоб назвати їх?). Я вивчу можливість разом з ними. Спасибі
Мартін Хюгі

@ MartinHügi чи ти просунувся у цьому? Щось подібне підняло певне підтвердження у списку розсилки списки.osgeo.org/pipermail/qgis-developer/2017-May/048450.html
Маттіас Кун

Ні, я цього не просунув, я фактично забув, як це тільки що стало однією з тих речей, з якими ми живемо. Дякую за нагадування, я можу поставити запитання нашій консультації чи це вже щось? @Aaron - Як це у вас склалося?
Мартін Хюгі

Я продовжую користуватися своєю обробкою. Два паралельні проекти QGIS - один для роботи та один для дому.
Аарон

Відповіді:


4

Просто зробіть окремі копії з файлу проекту для домашнього та робочого використання.

Дані, які ви зберігаєте, будуть записуватися у вихідні файли шару, а не у файл проекту.

Закінчивши частину домашнього завдання, ви можете взяти її за роботу і знову додати погані шари. Якщо у вас складна стилізація по шарах, ви можете зберегти її окремо і додати її також.


Ще один вибір - обернути файл VRT навколо зовнішнього джерела.

Приклад прикладу для растрового файлу Geotif, створеного за допомогою 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>

і зразок для формфайлу:

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

Якщо вихідних файлів немає, растр відображається у вигляді чорного квадрата (ви можете перетворити шар на невидимий), і векторний шар перетворюється на таблицю негеометрії без повідомлень про помилки. Додаткові шари, які не видаляються, з вихідними файлами, які не видаляються, залишатимуться і можуть бути відредаговані. Якщо ви перевстановите вихідні файли, все повернеться до норми, навіть зміни до інших шарів.


1
Створення окремих проектів для дому та офісу є гідною справою в цьому конкретному випадку. Однак є й інші випадки, наприклад, коли служба карти тимчасово не працює, коли ви хочете ігнорувати сповіщення про погані шари. Тож я знову запитую, чи є спосіб ігнорувати або пропустити діалог Handle Bad Layers, щоб не втратити посилання на певні шари?
Аарон

Чи можете ви надати ще детальну інформацію про файли VRT, якими вони є та як розпочати роботу. З чого я розглядав, чи VRT застосовуються лише до растрових? Що з векторними файлами або віддаленими шарами PostGIS, які недоступні, якщо немає з'єднання. Як ви можете ігнорувати ці "Поводження з поганими шарами"?
Мартін Хюгі

@ MartinHügi ви також можете створити VRT для векторних файлів, але це все ще потребує ручної роботи: gdal.org/drv_vrt.html та paolocorti.net/2012/03/08/gdal_virtual_formats . Я скоро розгорну свою відповідь на кілька прикладів.
AndreJ

@AndreJ Дякую, тому, переглядаючи ці посилання, моє обмежене розуміння полягає в тому, що XML-файл діє як карта між джерелом даних. Тож QGIS "думає", що вона існує, навіть якщо джерело даних недоступний? GDAL - це те, що, схоже, буде добре впоратися або хоча б мати розуміння.
Мартін Хюгі

Так, ви просто обманюєте оброблювач помилок QGIS.
AndreJ

3

Можливою проблемою буде змінення файлу проекту qgs за допомогою скрипту. Я виявив, що якщо замінити джерело даних, <datasource>.</datsource>то він буде ігнорувати спливаюче вікно Handle Bad Layers.

Сценарій Python для запуску, якщо ви не хочете завантажувати певні шари.

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

Сценарій Python, який потрібно запустити, щоб вставити відповідний шлях до джерела даних.

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

Для цього ви можете створити a DoNotLoad.pyз верхнім сценарієм та a home.pyз шляхами до домашніх джерел та a work.pyз шляхами до ваших робочих джерел, використовуючи другий сценарій як зразок.

Потім у вас буде один проект, над яким ви зможете працювати, але ви можете легко змінити свої шляхи залежно від середовища, в якому ви перебуваєте, або змінити шляхи, щоб шари не завантажувались, але все ще є у вашому проекті (весь ваш стиль зберігається і я думаю, ви навіть можете змінити стиль, якщо хочете. Просто на карті нічого не з’явиться).


Дякую. Я розумію, що зараз я цілком чітко потребую витратити цей час, який я мав на увазі обійти, щоб почати розуміти базове використання Python. Наразі я отримую концепцію, тому що я вручну редагував project.qgs за допомогою WordPad, щоб змінити джерело даних, і змінив його назад. QGIS не проігнорував погані шари обробки, але оскільки <ID> діє на заповнення місця, я зміг повернутися назад і відновити зміни назад. Так так, я це розумію - думаю.
Мартін Хюгі

Я думаю, це гарне місце для початку wiki.python.org/moin/BeginnersGuide
Martin Hügi

@ MartinHügi , якщо це допоможе, я отримав головний зразок для мого сценарію від цього StackOverflow відповіді stackoverflow.com/a/290494/4708150 Це більш докладно пояснює логіку сценарію. Обов’язково подивіться коментарі. Існує коментар з найвищим рейтингом, який пояснює, чому в кінці заяви про друк є кома.
TJ Rockefeller

1

Плагін ChangeDataSource зберігає шари у файлі, тимчасово переміщуючи їх до групи з поганими шарами. https://geogear.wordpress.com/2016/01/29/changedatasourceplugin-plugin-release-2-0/ Це має робити те, що ви хочете. Минулого року у мене виникли подібні проблеми, і я помітив, що був плагін ChangeDataSource, який працював із шарами, але не обробляв погані шари. Я згадував, що обробка поганих шарів буде чудовою особливістю у коментарях до блогу розробника (Enrico Ferreguti). Протягом тижня він додав його!


Цей плагін не працював для мене з поганими шарами. Я спробував на двох різних ноутбуках - один працює під управлінням Win7, а інший Win10. На обох встановлено QGIS 2.18.0. Я перевірив "Обробити погані шари" та запустив QGIS після встановлення. QGIS за замовчуванням для обробки поганих шарів продовжував з'являтися, а не повідомлення плагіна, яке він знайшов, і обробляв недійсні джерела даних.
Аарон

Не працює для мене і зараз. Я повідомлю розробника про це.
Басвейн

Я переконався, що плагін ChangeDataSource працює без проблем. Я виправляю деякі незрозумілі умови, які викидають винятки або повідомляють про помилкові помилки та зобов’язуються зберігати нову версію. [Якщо ваші проблеми не зникають, повідомте про це] ( github.com/enricofer/changeDataSource/isissue ) із зазначенням наборів даних або операційних етапів їх відтворення.
Енріко Феррегуті

Для того, щоб плагін з’явився, потрібно запустити Qgis та відкрити проект.
Басвейн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.