Как избежать создания поврежденных шейп-файлов во время редактирования?

15

У меня есть один из моих специалистов по ГИС, оцифровывающий некоторые строки в QGIS в формате шейп-файла. Я не знаю, как он это сделал (как и он), но каким-то образом шейп-файл стал поврежденным. Это создавало случайные линии, или некоторые из созданных им линий просто исчезали. Я вошел в ArcCatalogue, чтобы посмотреть, как он выглядит в ArcGIS, и вот что я увидел:

введите описание изображения здесь

Обратите внимание на значок вопросительного знака, где я должен увидеть значок «линии» шейп-файла. Очевидно, что ArcCatalogue не может прочитать этот файл. Кроме того, второй файл dbf, похоже, был создан с прикрепленным к концу _packed. Когда я смотрю на шейп-файл с помощью проводника Windows, я вижу, что для шейп-файла 'M3_PRE_SMU_lines_10Apr13_SMC.dbf' уже есть файл .dbf, поэтому я не знаю, откуда появился этот _пакованный шейп-файл, и я не могу найти что-либо в Интернете это говорит с этим.

Я попытался добавить этот файл в ArcMap и получил следующую ошибку:

введите описание изображения здесь

Ошибка довольно очевидна ... количество фигур не соответствует количеству записей. Я просто не знаю, почему это происходит. Кажется, в Интернете нет ничего, что объясняло бы, как это происходит в QGIS, но я вижу пару инструментов для ремонта. Я сам исправил это, просто открыв QGIS, добавив слой, а затем щелкнув правой кнопкой мыши по слою и сохранив другой шейп-файл. Итак, я решил обойти, но я надеюсь найти решение, которое предотвратит это в первую очередь. Спасибо майк

Майк
источник
1
Я использую QGIS в течение многих лет и не видел этой проблемы раньше. «Волшебный» внешний вид другого .dbf предполагает, что шейп-файл был подделан за пределами QGIS. Если вы можете воспроизвести ошибку, используя только QGIS, пожалуйста, отправьте отчет об ошибке. Это было бы очень важно!
Подземье
Я пытался повторить проблему без удачи. Одна вещь, которую я заметил, это то, что, в отличие от ArcGIS, я не получаю сообщение о блокировке схемы при редактировании в QGIS (то есть, если у кого-то есть блокировка схемы в шейп-файле и вы начинаете редактировать тот же самый, ArcGIS выдаст ошибку при сохранении редактирует. QGIS не делает) Я думаю, что это странно, когда вы сохраняете шейп-файл, который заблокирован схемой. Я не уверен на 100%, что это причина, но кое-что стоит отметить.
Майк
У меня также была эта ошибка, возникающая при редактировании шейп-файлов. Моя работа заключалась в том, чтобы просто редактировать в ArcMap. Очевидно, что это не настоящее решение, но вы не одиноки в том, что испытываете такую ​​ошибку.
Кевин
Вы пытались переименовать файл ..._ SMC.dbf в ..._ SMC.dbf.backup, а файл ..._ SMC_packed.dbf в ..._ SMC.dbf?
Матиас Кун
2
Привет та же проблема с Dufur. Файлы, созданные только в среде q gis. Это происходит, когда я редактирую форму и, наконец, сохраняю, а затем прекращаю редактирование, поэтому линии исчезают, а в таблице атрибутов, похоже, нет никаких данных. если попытаться снова загрузить форму в qgis, она выглядит пустой. В папке находится файл es. mario.shx стал mario_packed.shp. Я обнаружил, что при удалении слова, упакованного из имени (это обратно mario.shx) форма теперь загружена и, кажется, работает. Сколько? не знаю, я просто схожу с ума от этого
user27144

Ответы:

16

объяснение

OGR (часть GDAL) - это библиотека, используемая QGIS для доступа к шейп-файлам. Когда OGR удаляет объекты, он не удаляет их сразу, а просто отмечает объекты как удаленные. Время от времени выполняется команда repack , которая создает новый файл с суффиксом _repack и копирует все функции, которые не помечены как удаленные, в этот новый файл. Как только он заканчивается, оригинальный .dbf заменяется на _repack.dbf. Затем он делает то же самое с шейп-файлом: создайте новый (_packed.shp), скопируйте все не удаленные функции и в конечном итоге замените оригинальный .shp.

Кажется, где-то в этом процессе что-то не удалось (может быть, сбой?).

В рамках этого процесса идентификаторы объектов меняются, поэтому я предполагаю, что shp (геометрия), который у вас есть, и dbf (таблица атрибутов) используют разные идентификаторы объектов для одних и тех же объектов, что приводит к странному поведению, которое вы испытываете. Кажется, что один из двух файлов по-прежнему содержит (часть) удаленных функций, а другой - нет.

Как с этим бороться

Обновление, ноябрь 2016: GDAL 2.2 поставляется со встроенной функциональностью для автоматического вызова repack при записи файла на диск. Поэтому, прежде чем делать что-то еще: проверьте версию GDAL в диалоговом окне QGIS about и обновите свой выпуск GDAL (часто поставляется как часть QGIS) до последней версии.

Вероятно, вы не можете ничего с этим поделать, кроме регулярного резервного копирования, чтобы не потерять больше данных, чем вы можете обработать (вы все равно делаете это, верно? 😉). И если вы найдете способ воспроизвести это (лучше всего с примером набора данных), создайте отчет об ошибке .

Если вы столкнулись с этой проблемой снова, вы также можете попытаться создать пространственный индекс в шейп-файле. В этом процессе QGIS снова вызовет repack для шейп-файла и может «починить» shp / dbf. Но это только непроверенное предположение.

Как упомянуто @rhm и в комментариях, это может также помочь переименовать файл {xyz} _packed. {Ext} в {xyz}. { Ext } . Если упакованный файл уже полностью записан, и это было просто переименование, которое не удалось, то этот шаг абсолютно действителен вручную. Однако, если _packed файл не был полностью написан, возможно, вам не хватает информации из частей ваших функций. Поэтому, прежде чем пытаться сделать это, сделайте резервные копии всех задействованных файлов.

Справочная информация о том, когда вызывается repack

Между QGIS 2.0 и 2.8 repack вызывался всякий раз, когда слой выгружался (выход из QGIS, загрузка другого проекта ...). Если объект был удален или геометрия изменена, файлы .shp и .dbf с записями, помеченными как удаленные , присутствовали.

Начиная с QGIS 2.10, repack вызывается всякий раз, когда слой сохраняется после операции, которая потенциально может добавить удаленный флаг в записи. Поэтому файлы должны теперь всегда находиться в нормальном состоянии для обработки другими приложениями.

Матиас Кун
источник
1

Это случилось со мной в QGIS. Мне удалось решить проблему, просто удалив «_packed» из имени файла, как кто-то предложил в разделе комментариев выше.

РКЗ
источник
1

Может быть, это еще одна проблема поврежденного файла индекса .shx. Тип геометрии должен храниться в заголовках .shp и .shx. Если они не совпадают, программа выдаст ошибку.

Похоже, что QGIS не очень строг в отношении поврежденных индексных файлов и может воссоздать его Save As..., в то время как ARCGIS настаивает на правильном индексном файле и создает упакованный dbf (таблица атрибутов) для функций, которые можно найти через правильные части индексный файл, или, возможно, без использования индекса.

Andrej
источник
1

Появление удаленных объектов и / или странное поведение шейп-файлов, из которых были удалены объекты в QGIS, является известной ошибкой, см. Этот отчет об ошибке 11007 и связанный с этим вопрос. Удаленные полигоны возвращаются к более старым версиям . Помимо того, что у ArcGIS возникают проблемы с такими шейп-файлами, при сохранении в QGIS как TAB-файлы MapInfo они вызывают сбой плагина MapInfo RouteFinder, если таблицы не были сначала упакованы в MapInfo перед загрузкой RouteFinder. Запустить Universal Translator для преобразования этих поврежденных шейп-файлов в MapInfo не удается.

Как вы обнаружили, проблему можно решить, выполнив команду «Сохранить как» в QGIS.

SpatialSuccess
источник