Trwale zmieniaj kolejność pól w danych (shp, gdb)

24

Jeśli mam klasę plików shapefile lub geobazę danych, która zawiera pola, które chcę trwale zmienić kolejność, czy istnieje narzędzie, skrypt lub narzędzie, które pomoże mi szybko wykonać to zadanie?

Ogólnie wiem, że musisz utworzyć nowe pole, a następnie wypełnić je starymi wartościami, a następnie usunąć stare pole. Mam nadzieję, że istnieje już coś, co pomoże w tym. Zakładając, że nie masz dostępnego FME lub innego narzędzia ETL, jaka jest następna najlepsza sugestia?

To NIE jest zmiana poziomu widoku (tzn. Przeciąganie / upuszczanie pól w kolejności), ale raczej zapisanie do nowego pliku kształtu lub klasy obiektów. Dzięki.

RyanDalton
źródło
Trudno mi w to uwierzyć, ale nie mogę znaleźć sposobu, aby to zrobić. Jaki jest Twój przypadek użycia w przypadku konieczności ponownego zamówienia pól? Zmiana kolejności pól na karcie pól właściwości warstwy w ArcMap nie jest rozwiązaniem?
Derek Swingley,
2
Zmiana kolejności pól polega na tym, że dane nie będą używane w ArcMap, ale przy mniej zaawansowanym oprogramowaniu do mapowania, które 1) używa plików kształtów i 2) nie pozwala na zmianę kolejności po stronie klienta i 3) klient musi zobaczyć kluczowe atrybuty pojawiają się u góry drzewa „identyfikuj”.
RyanDalton,
Właśnie edytowałem wcześniej usuniętą odpowiedź. Mam nadzieję, że nie boisz się wiersza poleceń;).
Derek Swingley,
to samo pytanie? gis.stackexchange.com/questions/5839/…
SaultDon
2
@ SaultDon - to nie to samo pytanie. Odwołałeś się do pytania, które chce posortować rekordy (wiersze), ale ja chcę posortować pola (kolumny).
RyanDalton,

Odpowiedzi:

13

Jestem prawie pewien, że możesz to zrobić z klasą elementów na klasę elementów , zmieniając kolejność pól w sekcji mapy pola narzędzia.

Edycja: FC2FC nie robi tego, ale ... ratuje.

Właśnie potwierdziłem, że ogr2ogr może to zrobić. Podaj kolejność nazw pól na przełączniku -select. Na przykład, jeśli mam plik shapefile z dwoma polami, „Name” i „FolderPath” (w tej kolejności), ale najpierw chcę nowy plik shapefile z „FolderPath”:

C:\Temp>ogr2ogr -f "ESRI Shapefile" re_order_ogr.shp re_order1.shp -select "FolderPath,Name"
Derek Swingley
źródło
2
Chociaż opcja ta nie była tak przyjazna dla użytkownika, jak się spodziewałem, zdecydowanie działa. Stworzyłem skrypt Pythona ArcGIS, który pomaga budować dla niego dane wejściowe, a użytkownik musi jedynie włączyć opcję -select „field1, field2 itp.”. Możesz go pobrać ze strony resources.arcgis.com/Resources2010/gallery/file/geoprocessing/…
RyanDalton
Mam klasę funkcji na SDE z domenami. Czy to obejmie powiązane domeny?
MjonesGEO,
@joebob no. AFAIK, ogr nie obsługuje zestawów danych z GDB SDE i nie obsługuje też domen.
Derek Swingley,
Dzięki, właśnie użyłem XRay i może on zmieniać kolejność lub zamieniać pola, jednocześnie utrzymując swoje domeny w SDE.
MjonesGEO,
7

Narzędzie ET GeoWizards to zrobi i wygląda na to, że darmowa wersja zrobi to bez żadnych ograniczeń liczby funkcji.

Don Meltz
źródło
Tak, ale niestety nie zachowuje pseudonimów.
Howeitzer
7

Wtyczka QGIS „Table Manager” ma teraz również możliwość łatwego wykonywania tego zadania bez konieczności używania wiersza poleceń.

Darren Cope
źródło
6

W QGIS możesz teraz korzystać z przybornika przetwarzania (Ctl + Alt + T) i przejść do geo-algorytmów QGIS> Narzędzia tabel wektorowych> Pola refaktoryzujące.

Stamtąd będziesz mieć wszystkie narzędzia do edycji struktury tabeli.

wprowadź opis zdjęcia tutaj

Chmeul
źródło
4

Dodatek Arcmap dla X-Ray ma narzędzie do zmiany kolejności pól w formacie Geodatabestutaj narzędzie do zmiany kolejności pól rentgenowskich

Geog
źródło
To działa bardzo dobrze. Będzie nawet trzymał twoje domeny w polach, jeśli ponownie zamawiasz SDE. Świetna sugestia !!
MjonesGEO,
3

Dla odniesienia: MapInfo może to zrobić również po wyjęciu z pudełka. Wystarczy otworzyć DBF i zmienić kolejność pól na stałe. http://www.dbf-editor.com też to robi (40 USD). Inni redaktorzy DBF prawdopodobnie też mogą to zrobić.

Uffe Kousgaard
źródło
w tej linii infolib prawdopodobnie też powinien działać (przekonwertować na ascii (csv), zmienić kolejność, aby dopasować, ponownie przekonwertować z powrotem na informacje lub dbf), o ile jesteś gotów żyć z ograniczeniami formatu pliku .dbf.
matt wilkie
Masz na myśli życie z ograniczeniami formatu CSV? Punktem wyjścia dla tego pytania jest DBF ...
Uffe Kousgaard,
Miałem na myśli limity dbf, myśląc konkretnie, że csv nie ma ograniczeń długości nazwy pola ani długości wartości rekordu, a punktem początkowym był plik gdb, ale po ponownym odczytaniu QI patrz „shp” jest wspomniany w tytule. A więc granice dookoła ;-)
matt wilkie
3

Miałem podobny problem, a najszybszym sposobem na trwałe zmianę kolejności pól danych, jeśli masz już QGIS, jest użycie wtyczki „Table Manager”, jak wcześniej sugerowano.

Instalacja wtyczek jest prosta i przyjazna dla użytkownika, jak opisano na poniższej stronie:

http://www.qgistutorials.com/en/docs/using_plugins.html

Pozwala przenosić atrybuty w określonej kolejności, zmieniać nazwy pól, wstawiać nowe pola i replikować je. Pozwala także zapisać oryginalny plik lub zmienić jego nazwę i zapisać go inaczej niż oryginał.

wprowadź opis zdjęcia tutaj

Było to szybkie i wygodne rozwiązanie mojego problemu z zarządzaniem tabelą atrybutów i jest wysoce zalecane, szczególnie w przypadku plików z dużą liczbą atrybutów z tym związanych.

Łóżko
źródło
3

Wyeksportuj klasy elementów do pustej osobistej geobazy (przeciągnij i upuść najszybciej), otwórz .mdb w programie Access, ponownie zamów pola w Widoku projektu , zapisz, a następnie skopiuj ArcMap / Katalog z powrotem do kształtu lub pliku geobazy.

Ta sama metoda działa w przypadku zmiany nazw pól.

Bądź jednak ostrożny , pracuj tylko na kopiach, wszystko łatwo popsuć. (Jak zauważa Karey Jack w innej odpowiedzi, Esri odradza bezpośredni dostęp do .mdb ). Dla bezpieczeństwa zignoruj ​​wszystkie tabele zaczynające się od, GDB_a także te kończące się na _Shape_Index.

matowe wilkie
źródło
3

Najlepszym sposobem na to jest użycie mapowań pól. Od lat zmagam się z tą funkcją oprogramowania ESRI, ale w końcu jestem zadowolony z tego rozwiązania. Zasadniczo możesz po prostu wykonać kopię klasy obiektów z polami na stałe zmienionymi przy użyciu arcpy.FieldMappings . Wszystkie dane są również przenoszone. Po zakończeniu skryptu zmień nazwę starej klasy elementów na myFeatureClass_old, a nową na myFeatureClass!

Oto skrypt, jest bardzo prosty:

import arcpy
'''
This is possible in python using FeatureClasstoFeatureClass with Fieldmappings. You can also rename fields at the same time.
So if you have a Feature Class with FIELD3, FIELD2, FIELD1 and you want the result to be FIELD1, FIELD2, FIELD3 then the following code should accomplish this.
'''
arcpy.env.workspace = r"C:\Users\myself\ArcData\my_geodatabase.gdb"
arcpy.env.overwriteOutput = True

input_fpath = "Lakes"

output_dpath = arcpy.env.workspace
output_fname = "Lakes_new"

fms = arcpy.FieldMappings()

fm = arcpy.FieldMap()
fm.addInputField(input_fpath,"FIELD1")
fms.addFieldMap(fm)

fm = arcpy.FieldMap()
fm.addInputField(input_fpath,"FIELD2")
fms.addFieldMap(fm)

fm = arcpy.FieldMap()
fm.addInputField(input_fpath,"FIELD3")
fms.addFieldMap(fm)

arcpy.conversion.FeatureClassToFeatureClass(input_fpath,output_dpath,output_fname,"",fms)
Jason Matney
źródło
3

Klasa elementów do klasy elementów może teraz wykonywać to w wersji 10.5 za pomocą sekcji Mapowanie pola narzędzia GP.

wprowadź opis zdjęcia tutaj

Brendan z Esri
źródło
2

MakeQueryTable pozwoli ci zdefiniować kolejność pól dla tabeli lub FC (tylko Geobaza). Kolejność określania pól jest kolejnością danych wyjściowych. Uważam, że to narzędzie jest trudne w użyciu. YMMV

Arctoolbox, narzędzia do zarządzania danymi, warstwy i widoki tabel, tworzą tabelę zapytania

Klewis
źródło
1

Wypróbuj OGR2OGR. Możesz przekazać zapytanie SQL i ustawić pola w żądanej kolejności.

ogr2ogr outdataset indataset -sql "WYBIERZ src_field1 AS dst_field1, src_field2 AS dst_field2 FROM sourcelayer"

Właśnie to przetestowałem i działa dobrze!

Do Twojej wiadomości, najprostszym sposobem na zainstalowanie OGR jest FWTools .

Darren Cope
źródło
1

Otwórz plik .mdb w MS Access i zmień kolejność pól, przeciągając i upuszczając w „Widoku projektu”

Chociaż ESRI odradza edytowanie bazy danych w łączu Access ESRI

Karey Jack
źródło
2
Witamy na naszej stronie, Karey! Czy to nie jest ta sama odpowiedź, którą Matt Wilkie udzielił w tym wątku 18 miesięcy temu ( gis.stackexchange.com/a/5879 )?
whuber
0

Jestem trochę spóźniony na przyjęcie w tej sprawie, ale jestem zaskoczony, że nikt nie wspomniał o diagramie geograficznym ESRI .

Zasób udostępniony przez ESRI do edycji struktury XML twojej geobazy i plików. Moim zdaniem jest to bardzo ważne, jeśli pracujesz nad czymkolwiek, gdzie design musi być idealny (projekt długoterminowy). Dzięki temu nie będziesz musiał ciągle tworzyć plików po popełnieniu prostego błędu.

Roy
źródło
1
Czy widziałeś komentarz (do samego pytania) stwierdzający, że nie była to reorganizacja bazy danych, ale raczej jest ona potrzebna do wyeksportowania danych?
whuber