Sortieren der Feature-Class zum Berechnen des sequentiellen ID-Felds mit ArcGIS Field Calculator?

8

Ich bin in ArcMap und möchte die Datensätze anhand eines Felds sortieren und dann ein Berechnungsfeld mit einem automatisch inkrementierenden Wert ausführen, wobei die Sortierung vorhanden ist. Irgendwelche Ideen?

Es sieht so aus, als könnte ich einen Aktualisierungscursor für die Feature-Class erhalten und dann eine automatische Inkrementierung durchführen. Ich würde jedoch gerne sehen, ob dies im Feldrechner in ArcMap möglich ist.

Justin
quelle

Antworten:

5

Ich habe ModelBuilder verwendet und eine Feldsortierung durchgeführt, gefolgt von der Berechnung des Felds mit dem folgenden Sortiercode. Es hat hervorragend funktioniert.

Zuvor hatte ich diese beiden Schritte außerhalb von ModelBuilder ausprobiert und es schlug fehl.

Ausdruck:

autoIncrement()

Ausdruckstyp: PYTHON_9.3

Codeblock:

rec=0
def autoIncrement():
    global rec
    pStart = 1 #adjust start value, if req'd 
    pInterval = 1 #adjust interval value, if req'd
    if (rec == 0): 
        rec = pStart 
    else: 
        rec = rec + pInterval 
    return rec
Steph
quelle
11

Verwenden Sie Sortieren (Datenverwaltung), gefolgt von Feld berechnen (Datenverwaltung). Verwenden Sie dazu das Beispiel für die automatische Inkrementierung auf der Hilfeseite Beispiele für Feld berechnen .

Wenn Sie die Daten sortieren und direkt aktualisieren müssen (kein Zwischendatensatz), müssten Sie meiner Meinung nach einen UpdateCursor verwenden, der auch nach einem Feld sortieren kann.

blah238
quelle
Hervorragender Vorschlag. Wenn Sie dies regelmäßig tun müssen, sollten Sie diese Tools in ModelBuilder miteinander verknüpfen.
RyanKDalton
1
Das ESRI-Beispiel für die fortlaufende Nummerierung basiert auf der FID (ursprüngliche Zeilen-ID). Ich möchte, dass die Nummerierung auf der aktuellen Sortierung basiert. Kann dies durchgeführt werden? Was ist im Code von ESRI "global" rec? Vielen Dank.
GeorgeC
Meine Antwort beantwortet Ihre erste Frage hoffentlich bereits auf zwei Arten: 1) Verwenden Sie Sortieren (Datenverwaltung) oder 2) Verwenden Sie einen UpdateCursor mit dem Argument Sortierfelder. Ich glaube nicht, dass Sie über arcpy auf den Sortierstatus der aktuellen Tabellenansicht zugreifen können, obwohl dies möglicherweise über ArcObjects möglich ist. Bei Ihrer zweiten Frage globalbleibt die Variable zwischen den Berechnungen bestehen (eine Berechnung pro Zeile), damit die in jeder Berechnung verwendete laufende Anzahl gespeichert werden kann.
blah238
Anstatt das auf globalen Variablen basierende Inkrementbeispiel zu verwenden, können Sie auch einen itertools.count Generator verwenden .
user2856