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.