Tworzę fikcyjną mapę, dlatego muszę utworzyć wiele punktów, linii i na pewno wielokątów. Później eksportuję moje dane jako geojson. Ale przedtem muszę odejść i nadać każdemu elementowi unikalny identyfikator.
Nie potrzebuję specjalnego sortowania, ponieważ największy wielokąt otrzymuje najmniejszy identyfikator. Po prostu trzeba wszystkie wielokąty z o ID na końcu, bez robić to ręcznie jak mam teraz zrobić.
Byłoby wspaniale, gdyby ktoś wiedział, jak to zrobić.
Odpowiedzi:
Korzystając z kalkulatora pola, możesz:
Nie podano dokumentu tożsamości
Niektóre dane są już podane
źródło
Alleluja! Lub Eureka. Lub cokolwiek. To może być skończone. Z plikiem kształtu.
maximum("FID") + 1
.Odznaczając opcję Edycja , nie możesz wprowadzić innej wartości ani usunąć tego, co tam jest. Pamiętaj, że jeśli istnieją wartości bez identyfikatora, wartości te nie zostaną zaktualizowane. W pewnym momencie eksperymentuję ze sprawdzeniem Zastosuj wartość domyślną podczas aktualizacji i poprawieniem mojej formuły w celu sprawdzenia wartości zerowej lub NULL w celu zaktualizowania tylko tych rekordów podczas ich edycji, a nie żadnego rekordu o wartości większej niż 1. (Wcześniej w tym po omówiono, jak zaktualizować pole FID o unikalne wartości, co trzeba będzie zrobić, jeśli dodano pole po tym, jak w pliku kształtu były już funkcje).
Pamiętaj, że jest to zapisywane z bieżącym plikiem mapy, a nie z plikiem kształtu, dlatego wielokrotne dodanie tego pliku będzie wymagało skopiowania tej części stylu warstwy na nowo dodaną warstwę. Aby to zrobić, kliknij warstwę prawym przyciskiem myszy, wybierz Style> Kopiuj styl> Pola i kliknij inną warstwę prawym przyciskiem myszy, wybierz Style> Wklej styl> Wszystkie kategorie stylów (lub przejdź do pól ). Możesz także skopiować tę część stylu na dowolną inną warstwę opartą na pliku kształtu, ale pole ID musi mieć taką samą nazwę jak warstwa, z której kopiujesz.
źródło
Chciałbym dodać do postu vinayana i krótko wspomnieć o funkcji rownum , ponieważ jest ona bardzo podobna, aw niektórych przypadkach może być nieco wygodniejsza.
id zwraca identyfikator funkcji , co oznacza, że zawsze zaczyna się od zera .
rownum zwraca numer wiersza , co oznacza, że zaczyna się od pierwszego .
Zasadniczo, jeśli chcesz, aby automatyczny przyrost zaczynał się od 0, wybierz $ id , a jeśli chcesz, aby zaczynał się od 1, wybierz $ rownum .
źródło
Temat ten pojawił się tutaj: Utwórz plik kształtu z kluczem podstawowym automatycznego przyrostu w QGIS
Moje sugestie to:
1) Bazy danych SQLITE / SpatialLite obsługują automatyczną inkrementację w polu ustawionym na INTEGER PRIMARY KEY:
Za każdym razem, gdy edytujesz / tworzysz wielokąty, możesz uzupełnić ich atrybuty, a SQLITE da mu przyrostową unikalną wartość w polu, które ustawiłeś na typ INTEGER PRIMARY KEY.
Kiedy jesteś gotowy na eksport do GEOJSON, wszystko jest ustawione z unikalnymi identyfikatorami.
2) Jeśli używasz Shapefiles, utwórz pole OBJECTID typu INTEGER i użyj wyrażenia pola kalkulatora, aby wypełnić to pole za każdym razem, gdy edytujesz / tworzysz wielokąty i musisz je wyeksportować. Utracisz oryginalny identyfikator wielokąta, ale to jedyny sposób na osiągnięcie tego za pomocą .SHP. (Będę musiał znaleźć wyrażenie kalkulatora pola).
PostGIS to kolejne źródło danych, które możesz chcieć eksplorować, chociaż bardziej ciężki wzrost niż SQLITE, możesz znaleźć wartość w takim systemie, gdy posuwasz się naprzód ...
źródło
Stary post, ale dla każdego innego, kto szuka szybkiej kopalni rozwiązania, było utworzenie pola z $ ID + 1 i automatycznie wygeneruje, zaczynając od 1!
źródło
Aktualizacja dla QGIS 3
Wiem, że spóźniłem się z tym, ale zawsze dobrze jest podawać wszelkie aktualizacje:
W QGIS 3 istnieje teraz natywne narzędzie, którego można użyć do wykonania tej dokładnej pracy, i nazywa się „Dodaj pole autoinkrementalne”
Nie trzeba używać wyrażeń w kalkulatorze polowym ani wykonywać żadnego kodowania, ale mimo to są one nadal bardzo przydatne i dobrze wiedzieć.
źródło
Najłatwiej to zrobić za pomocą skryptu python, a może jest to możliwe za pomocą kalkulatora pola. Przepraszam, nie mam dla ciebie jednego, może ktoś inny będzie. W międzyczasie szukałem skryptu w języku Python. Wiele o tym widziałem w ArcGIS, ale jestem pewien, że jest coś dla QGIS.
źródło
Jeśli nie potrzebujesz czegoś po ludzku strawnego, jest teraz łatwa poprawka: we właściwościach pola wybierz „Generator UUID” i pozostaw wszystko puste.
Spowoduje to automatyczne utworzenie UUID w polu. Nie tak przyjazny jak zwykła liczba (według $ id lub $ rownum), ale generuje UUID od samego początku, więc nie ma kolejnych kroków.
źródło
Chciałbym dodać, że wydaje się, że to nie działa, gdy używasz warstw bazy danych postgreSQL. $ ID i $ rownum zwracają 0. PostgreSQL 9.6 QGIS 2.18.12
źródło
rozwiązania te nie działały już dla mnie w QGIS 2.01 Dufour. Wpisanie
$id
nowego lub istniejącego pola o nazwie „id” w polu wejściowym wyrażenia dało mi błąd „Wyrażenie jest nieprawidłowe”Co zadziałało, to wpisać funkcję,
$rownum
a następnie kliknąć „OK”źródło
możesz po prostu usunąć pierwszy colmn (id) i utworzyć nowy „As virtual field”
źródło