Generujesz atrybuty automatycznie za pomocą QGIS?


11

Chcę automatycznie generować identyfikatory podczas tworzenia nowych funkcji. Dlatego za każdym razem, gdy tworzę nowy punkt, jego identyfikator będzie wzrastał o 1, jak poniżej:

Feature 1: id 1
Feature 2: id 2
Feature 3: id 3

Jak mogę to zaatakować?

Odpowiedzi:


8

Jeśli klikniesz warstwę prawym przyciskiem myszy , a Properties > Fieldsnastępnie przejdziesz do opcji Text Edit, możesz ustawić wartości domyślne (wpisując wartość lub używając wyrażenia), które pojawią się automatycznie w tabeli atrybutów.

Niestety użycie wyrażenia typu $rownum(które powinno zapewnić unikalne identyfikatory dla twoich funkcji) nie działa (domyślam się, ponieważ funkcja musi być najpierw zatwierdzona?). Ale możemy stworzyć funkcję, która zlicza liczbę wykonanych funkcji i dodaje 1. Możesz uzyskać dostęp do edytora funkcji, jak pokazano na obrazku:

Edytor funkcji

Następnie w Edytorze funkcji utwórz nowy plik lub edytuj istniejący i użyj następującego kodu:

from qgis.core import *
from qgis.gui import *

@qgsfunction(args='auto', group='Custom')
def update(feature, parent):
    layer = qgis.utils.iface.activeLayer()
    x = layer.featureCount()
    return x + 1

Kliknij Załaduj, a następnie przejdź do zakładki Wyrażenie obok i wstaw wyrażenie:

update()

Następnie kliknij OK i powinieneś zobaczyć wartość podglądu:

Zapowiedź

Kliknij OK , Zastosuj itp. I mam nadzieję, że teraz, gdy utworzysz funkcję, automatycznie utworzy unikalny identyfikator w wybranym polu.



3

Myślę, że nie można ustawić wartości domyślnych podczas tworzenia nowej funkcji, ale można spróbować wykonać następujące czynności:

  • po zakończeniu tworzenia funkcji przejdź do tabeli atrybutów
  • Przejdź do kalkulatora pola i utwórz nową kolumnę o nazwie idtypu Int
  • Jako wstawka wartości, @row_numberktóra da unikalne wartości zgodnie z numerem wiersza
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.