Czy istnieje sposób na obliczenie posortowanego pola z kolejnymi liczbami? Widziałem Sortowanie klasy obiektów do obliczania sekwencyjnego pola identyfikatora za pomocą kalkulatora pola ArcGIS? to opisuje, jak obliczyć kolejne numery, ale zawsze jest to obliczane według kolejności FID, a nie według kolejności posortowanej.
#Pre-logic Script Code:
rec=0
def autoIncrement():
global rec
pStart = 1
pInterval = 1
if (rec == 0):
rec = pStart
else:
rec += pInterval
return rec
#Expression:
autoIncrement()
Przykładem tego, co próbuję zrobić. Użyłem zaawansowanego sortowania do sortowania według roku, miesiąca, dnia, a teraz chcę mieć kolejne numery w Seq
terenie. Zobaczysz, że moje OBJECTID
pole nie jest w porządku, więc powyższy kod nie będzie działać.
Czy można tego dokonać w Kalkulatorze polowym lub za pomocą kursora aktualizacji w trybie Arcpy?
Odpowiedzi:
„Rozwiązanie” z 2 posortowanymi polami (rosnąco):
--------------------------------------
ZAKTUALIZOWANA WERSJA:
-----------------------
wykonanie zadania na 10000 rekordach zajmuje 1,5 sekundy. Oryginał zajmuje nieco ponad 2 minuty
źródło
Jest to proces dwuetapowy, w wyniku czego Kalkulator polowy nie jest do niego dobrze dostosowany. Lepiej jest uruchomić to w samodzielnym skrypcie. Można to jednak zrobić w kalkulatorze polowym, pod warunkiem, że użyjesz podstępu. Musisz użyć kursora, aby załadować wszystkie wartości do słownika globalnego z posortowanej listy, ale tylko podczas obliczania pierwszego rekordu. W przypadku wszystkich innych rekordów musisz pominąć tworzenie słownika, aby uniknąć ciągłego ponownego czytania całej tabeli dla każdego wiersza.
Trzy wartości pól muszą być umieszczone w krotce, aby działały jak klucz, który będzie poprawnie sortowany. Zakładam, że wszystkie wartości kombinacji 3 pól są unikalne w tabeli SamplePoint, ale dodałem ObjectID, aby upewnić się, że jest unikalny. Musisz podać ścieżkę i nazwę pliku kształtu w wierszu 8 (lub mógłbym użyć techniki, której używa FelixIP, gdy używana jest pierwsza warstwa na bieżącej mapie). Jeśli chcesz użyć różnych pól dla klucza, musisz zmienić listę pól w linii 10 i dopasować je do pól wejściowych w linii 3 i 15.
Nie polecałbym także używania nazw pól Rok, Miesiąc i Dzień, ponieważ działają one tylko w plikach kształtów i nie są dozwolone w geobazach. Geobaza danych zmieni nazwy na Rok_1, Miesiąc_1, Dzień_1, jeśli spróbujesz dodać je do listy pól we właściwościach tabeli.
Jeśli celem tej tabeli jest powiązanie jej z inną tabelą / klasą funkcji na kluczu z wieloma polami, rozważ użycie narzędzia, które utworzyłem na swoim blogu o nazwie Klucz z wieloma polami do klucza z jednym polem - Powiązanie dwóch warstw na podstawie więcej niż jednej Pole
źródło
Miałem to samo pytanie, ale prostszy problem polegał na tym, że mam tylko jedno pole do sortowania. Udało mi się wykonać następujący skrypt:
źródło