Jak uniknąć tworzenia uszkodzonych plików kształtów podczas edycji?

15

Mam jednego z moich techników GIS digitalizujący niektóre wiersze w QGIS w formacie shapefile. Nie wiem, jak to zrobił (i on też nie), ale jakoś plik kształtu został uszkodzony. Tworzył losowe linie lub niektóre z linii, które stworzył, po prostu zniknęły. Wszedłem do ArcCatalogue, aby zobaczyć, jak to wyglądało w ArcGIS i oto, co zobaczyłem:

wprowadź opis zdjęcia tutaj

Zwróć uwagę na ikonę znaku zapytania, w której powinienem zobaczyć ikonę „kształtu” pliku kształtu. Oczywiście ArcCatalogue nie może odczytać tego pliku. Wydaje się również, że utworzono drugi plik dbf z dołączonym „_packed” na końcu. Kiedy patrzę na plik kształtu za pomocą Eksploratora Windows, widzę, że istnieje już plik .dbf dla pliku kształtu „M3_PRE_SMU_lines_10Apr13_SMC.dbf”, więc nie wiem, skąd pochodzi ten spakowany plik kształtu i nie mogę znaleźć niczego online to przemawia.

Próbowałem dodać ten plik do ArcMap i otrzymałem następujący błąd:

wprowadź opis zdjęcia tutaj

Błąd jest dość oczywisty ... liczba kształtów nie odpowiada liczbie rekordów. Po prostu nie wiem, dlaczego tak się dzieje. Wydaje się, że w Internecie nie ma nic, co wyjaśniałoby to w QGIS, ale widzę kilka narzędzi naprawczych. Naprawdę to naprawiłem sam, otwierając QGIS, dodając warstwę, a następnie klikając prawym przyciskiem myszy warstwę i „zapisując jako” inny plik kształtów. Tak więc wymyśliłem obejście, ale mam nadzieję znaleźć rozwiązanie, które powstrzymałoby to przede wszystkim. Dzięki, Mike

Mikrofon
źródło
1
Używam QGIS od lat i nie widziałem wcześniej tego problemu. „Magiczny” wygląd innego pliku .dbf sugeruje, że plik Shapefile został zmieniony poza QGIS. Jeśli możesz odtworzyć błąd tylko za pomocą QGIS, zgłoś raport o błędzie. To byłoby bardzo ważne!
podmroku
Próbowałem odtworzyć problem bez powodzenia. Zauważyłem tylko, że inaczej niż w ArcGIS, nie otrzymuję komunikatu o zablokowaniu schematu podczas edycji w QGIS (tj. Jeśli ktoś ma blokadę schematu na pliku kształtu i zaczniesz edytować ten sam plik, ArcGIS zgłosi błąd podczas zapisywania QGIS nie) Myślę, że to dziwne, gdy zapisujesz plik kształtu, który jest zablokowany. Nie jestem w 100% pewien, że to jest przyczyna, ale coś wartego odnotowania.
Mike
Ten błąd pojawił się również podczas edytowania plików kształtów. Pracowałem nad edycją w ArcMap. Oczywiście nie jest to realne rozwiązanie - ale - nie jesteś sam w doświadczaniu tego rodzaju błędu.
Kevin
Czy próbowałeś zmienić nazwę pliku ..._ SMC.dbf na ..._ SMC.dbf.backup i ..._ SMC_packed.dbf na ..._ SMC.dbf?
Matthias Kuhn
2
cześć ten sam problem z Dufur. Pliki utworzone tylko w środowisku q gis. Zdarza się to, gdy edytuję kształt i w końcu idę zapisać, a następnie zatrzymać edycję, więc linie znikają, a tabela atrybutów wydaje się nie zawierać żadnych danych. przy próbie ponownego załadowania kształtu na qgis wygląda na pusty. W folderze plik es. mario.shx stał się mario_packed.shp. Odkryłem, że usunięcie słowa spakowanego z nazwy (to jest z powrotem mario.shx) kształt jest teraz załadowany i wydaje się, że działa. Jak długo? nie wiem, po prostu
oszaleję

Odpowiedzi:

16

Wyjaśnienie

OGR (część GDAL) to biblioteka używana przez QGIS do uzyskiwania dostępu do plików kształtów. Kiedy OGR usuwa funkcje, nie usuwa ich natychmiast, ale jedynie zaznacza funkcje jako usunięte. Raz na jakiś czas wykonywane jest polecenie o nazwie przepakuj , które tworzy nowy plik z sufiksem _repack i kopiuje wszystkie funkcje, które nie są oznaczone jako usunięte do tego nowego pliku. Po zakończeniu oryginalny plik .dbf zostanie zastąpiony plikiem _repack.dbf. Następnie robi to samo z plikiem shapefile: utwórz nowy (_packed.shp), skopiuj wszystkie nieusunięte funkcje i ostatecznie zastąp oryginalny plik .shp.

Wydaje się, że gdzieś w tym procesie coś się nie udało (może awaria?).

W ramach tego procesu identyfikatory funkcji zmieniają się, więc myślę, że shp (geometria), którą masz i dbf (tabela atrybutów) używają różnych identyfikatorów funkcji dla tych samych funkcji, co prowadzi do dziwnego zachowania, którego doświadczasz. Wygląda na to, że jeden z dwóch plików nadal zawiera (część) usuniętych funkcji, podczas gdy drugi nie.

Jak sobie z tym poradzić

Aktualizacja, listopad 2016: GDAL 2.2 zawiera wbudowaną funkcję automatycznego wywoływania przepakowania za każdym razem, gdy plik jest zapisywany na dysku. Więc zanim zrobisz cokolwiek innego: sprawdź wersję GDAL w QGIS o oknie dialogowym i zaktualizuj wersję GDAL (często dostarczaną jako część QGIS) do najnowszej wersji.

Prawdopodobnie niewiele można na to poradzić oprócz regularnego tworzenia kopii zapasowych, aby nie stracić więcej danych niż jest to w stanie obsłużyć (i tak to robisz, prawda?). A jeśli znajdziesz sposób na odtworzenie tego (najlepiej z przykładowym zestawem danych), stwórz raport o błędzie .

Jeśli ten problem wystąpi ponownie, możesz spróbować utworzyć indeks przestrzenny na pliku kształtu. W tym procesie QGIS ponownie wywoła przepakowanie pliku shapefile i może „naprawić” shp / dbf. Ale to tylko niezweryfikowane przypuszczenie.

Jak wspomniano w @rhm iw komentarzach, może również pomóc zmienić nazwę pliku {xyz} _packed. {Ext} na {xyz}. {Ext} . Jeśli spakowany plik został już w całości zapisany, a zmiana nazwy nie powiodła się, absolutnie poprawne jest wykonanie tego kroku ręcznie. Jeśli jednak _pakowany plik nie został w pełni zapisany, być może brakuje informacji w niektórych elementach funkcji. Więc zanim spróbujesz, wykonaj kopie zapasowe wszystkich zaangażowanych plików.

Podstawowe informacje o tym, kiedy wywoływane jest przepakowanie

Pomiędzy QGIS 2.0 i 2.8 wywoływano przepakowanie za każdym razem, gdy warstwa została rozładowana (wyjdź z QGIS, załaduj inny projekt ...). Jeśli element został usunięty lub zmieniono geometrię, obecne były pliki .shp i .dbf z rekordami oznaczonymi jako usunięte .

Począwszy od QGIS 2.10 przepakowanie jest wywoływane za każdym razem, gdy warstwa jest zapisywana po operacji, która może dodać usuniętą flagę do rekordów. Dlatego pliki powinny być teraz zawsze w rozsądnym stanie, aby mogły być przetwarzane przez inne aplikacje.

Matthias Kuhn
źródło
1

Zdarzyło mi się to w QGIS. Udało mi się rozwiązać problem, po prostu usuwając „_packed” z nazwy pliku, jak ktoś zasugerował w sekcji komentarzy powyżej.

rhm
źródło
1

Być może jest to kolejny problem zepsutego pliku indeksu .shx. Typ geometrii powinien być przechowywany w nagłówkach .shp i .shx. Jeśli się nie zgadzają, oprogramowanie wygeneruje błąd.

Wygląda na to, że QGIS nie jest bardzo rygorystyczny w przypadku uszkodzonych plików indeksu i może go odtworzyć za pomocą Save As..., podczas gdy ARCGIS nalega na poprawny plik indeksu i tworzy spakowany plik dbf (tabela atrybutów) dla funkcji, które można znaleźć za pomocą odpowiednich części plik indeksu, a może bez użycia indeksu.

AndreJ
źródło
1

Ponowne pojawienie się usuniętych funkcji i / lub dziwne zachowanie plików kształtów, z których funkcje zostały usunięte w QGIS, jest znanym błędem, zobacz ten raport o błędzie 11007 i powiązane pytanie - Usunięte wielokąty wydają się przywracać do starszych wersji . Oprócz problemów ArcGIS z takimi plikami kształtowymi, zapisywane w QGIS jako pliki TAB MapInfo powodują awarię wtyczki MapInfo RouteFinder, chyba że tabele zostaną najpierw spakowane w MapInfo przed załadowaniem RouteFinder. Uruchomienie Universal Translator w celu konwersji tych uszkodzonych plików kształtów w MapInfo kończy się niepowodzeniem.

Jak już odkryłeś, problem można rozwiązać, wykonując „zapisz jako” w QGIS.

SpatialSuccess
źródło