Jaka jest składnia narzędzia „mapowania pól” pakietu Refactor Fields w QGIS?


10

W QGIS w narzędziu Processing Toolbox znajduje się ładne narzędzie „Refactor Fields” :

Narzędzie Refactor Fields

Używanie go na pojedynczej warstwie jest dość proste.

Jednak gdy planujesz używać go w trybie wsadowym, możesz zobaczyć pole tekstowe „Mapowanie pól” . Szukam przykładu składni, która ma być tam zastosowana . Nie znalazłem jeszcze żadnej konkretnej dokumentacji.

Refaktor partii


Po uruchomieniu refaktoryzacji z GUI, możesz obejrzeć polecenie w menu Przetwarzanie -> Historia (Ctrl + Alt + H)
kadarivan

Odpowiedzi:


7

Nie jest to zbyt wygodne, ale poniżej jest wymagana składnia tego pola tekstowego (piszę go w kilku wierszach tylko ze względu na przejrzystość):

{'expression': u'type the expression here',
 'length': <type the length>,
 'type': <code of the type>,
 'name': u'type the field name here',
 'precision': <type the precision>}

Na przykład (pamiętaj, aby używać nawiasów klamrowych):

{'expression': u'"FLAG1"+"FLAG2"',
 'length': 20, 'type': 6,
 'name': u'FLAG1',
 'precision': 5}

Musisz wpisać tyle wierszy, jak ten powyżej, co liczba pól wejściowych, oddzielając je przecinkami. Na przykład, jeśli twoja warstwa zawiera trzy pola:

{'expression': u'"FLAG1"+"FLAG2"', 'length': 20, 'type': 6, 'name': u'FLAG1', 'precision': 5}, {'expression': u'100*"FLAG2"', 'length': 20, 'type': 6, 'name': u'FLAG2', 'precision': 5}, {'expression': u'"100-"FLAG2"', 'length': 20, 'type': 6, 'name': u'FLAG3', 'precision': 5}

i powinno działać (działało dla mnie).

Pamiętaj, że możesz uniknąć używania tej składni zorientowanej na słownik i bezpośrednio używać wymaganych wartości. Na przykład w odniesieniu do pierwszego przykładu możesz po prostu użyć:

{u'"FLAG1"+"FLAG2"', 20, 6, u'FLAG1', 5}

Jeśli nie użyjesz tej składni, pojawi się następujący błąd:

Brak wartości parametru: mapowanie pól (wiersz 1)


2
Czy możesz wyjaśnić, co oznacza <kod typu>? Próbowałem użyć 3, zakładając, że jest to ciąg znaków (ponieważ jest to 3. w rozwijanych opcjach), ale dostałem błąd: obiekt „int” nie ma atrybutu „ getItem ”. Aby uzyskać więcej informacji, zobacz dziennik. Użyłem kodu: {u '"FLAG", 0, 3, u'FLAG', 0} dla jednej z moich warstw, gdzie {'wyrażenie': u '„FLAG”, „długość”: 0, „ wpisz „: 3,„ name ”: u'FLAG”, „precision”: 0}.
JAT86

@ JAT86 Jest to liczba identyfikująca typ danych (tj. Int, string i tak dalej). Niestety nie znalazłem dla nich odwołania, ale powinienem pamiętać wartości najczęściej używanych typów: 2 dla int, 6 dla double i 10 dla string. Oprócz tego być może nie powinieneś określać 0długości pola (przynajmniej 1!). Daj mi znać, jeśli rozwiązałeś problem.
mgri

Dzięki za szybką odpowiedź. Być może przetwarzanie wsadowe jest znacznie bardziej skomplikowane, niż myślałem. Próbowałem użyć co najmniej 1 dla długości i 10 dla typu kodu: {u '"FLAG"', 1, 10, u'FLAG ', 0} Mimo to pojawia się błąd: obiekt „int” nie ma atrybutu ” getItem 'Zobacz dziennik po więcej szczegółów. Moja warstwa ma następujące atrybuty: nazwa: flaga, typ: ciąg, długość: 0, precyzja: 0, wyrażenie: „flaga”
JAT86,

@ JAT86 Czy uruchomienie narzędzia z GUI zwraca problem?
mgri

Jeśli przez GUI masz na myśli pojedynczą warstwę, nie, nie ma żadnych problemów. Kolumna FLAG została pomyślnie usunięta po „kliknięciu Usuń wybrane pole” i została zapisana na nowej warstwie „Refactored”.
JAT86,

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.