Gibt es eine Möglichkeit, ein sortiertes Feld mit fortlaufenden Zahlen zu berechnen ? Ich habe gesehen, wie die Feature-Class "Sortieren" zur Berechnung des sequentiellen ID-Felds mit ArcGIS Field Calculator verwendet wird. das beschreibt, wie fortlaufende Zahlen berechnet werden, aber dies wird immer in der FID-Reihenfolge berechnet, nicht in der sortierten Reihenfolge.
#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()
Ein Beispiel dafür, was ich versuche zu tun. Ich habe eine erweiterte Sortierung verwendet, um nach Jahr, Monat, Tag zu sortieren, und möchte jetzt fortlaufende Nummern im Seq
Feld haben. Sie werden sehen, dass mein OBJECTID
Feld nicht in Ordnung ist, sodass der obige Code nicht funktioniert.
Kann dies entweder im Feldrechner oder mit einem Update-Cursor in arcpy erfolgen?
Antworten:
"Lösung" mit 2 sortierten Feldern (aufsteigend):
--------------------------------------
AKTUALISIERTE VERSION:
-----------------------
Es dauert 1,5 Sekunden, um die Aufgabe für 10000 Datensätze abzuschließen. Das Original dauert etwas mehr als 2 Minuten
quelle
Dies ist ein zweistufiger Prozess, weshalb der Feldrechner nicht gut dafür geeignet ist. Es ist besser, dies in einem eigenständigen Skript auszuführen. Dies kann jedoch im Feldrechner erfolgen, sofern Sie einen Trick verwenden. Sie müssen einen Cursor verwenden, um alle Werte aus einer sortierten Liste in ein globales Wörterbuch zu laden, jedoch nur während der Berechnung des ersten Datensatzes. Für alle anderen Datensätze müssen Sie die Wörterbucherstellung überspringen, um zu vermeiden, dass die gesamte Tabelle für jede Zeile ständig neu gelesen wird.
Die drei Feldwerte müssen in einem Tupel platziert werden, um als Schlüssel zu fungieren, der ordnungsgemäß sortiert wird. Ich gehe davon aus, dass alle 3-Feld-Kombinationswerte in der SamplePoint-Tabelle eindeutig sind, aber ich habe die ObjectID hinzugefügt, um sicherzustellen, dass sie eindeutig ist. Sie müssen den Pfad- und Shapefile-Namen in Zeile 8 angeben (oder ich könnte die Technik verwenden, die FelixIP verwendet, wenn die erste Ebene in der aktuellen Karte verwendet wird). Wenn Sie verschiedene Felder für einen Schlüssel verwenden möchten, müssen Sie die Feldliste in Zeile 10 ändern und sie mit den Eingabefeldern in Zeile 3 und Zeile 15 abgleichen.
Ich würde auch nicht empfehlen, die Feldnamen Jahr, Monat und Tag zu verwenden, da diese nur in Shapefiles funktionieren und in Geodatabases nicht zulässig sind. Eine Geodatabase ändert die Namen in Jahr_1, Monat_1, Tag_1, wenn Sie versuchen, sie der Feldliste in den Eigenschaften der Tabelle hinzuzufügen.
Wenn der Zweck dieser Tabelle darin besteht, sie mit einer anderen Tabelle / Feature-Class auf einem Mehrfeldschlüssel zu verknüpfen, sollten Sie das in meinem Blog erstellte Tool mit dem Namen " Mehrfachfeldschlüssel für Einzelfeldschlüssel" verwenden - zwei Ebenen basierend auf mehr als einer verknüpfen Feld
quelle
Ich hatte die gleiche Frage, aber für ein einfacheres Problem, basierend darauf, dass nur ein Feld sortiert werden musste. Ich war mit dem folgenden Skript erfolgreich:
quelle