Ich versuche, eine Reihe von zeitcodierten GPS-Punktdaten in Verhaltensweisen zu klassifizieren, die auf verschiedenen Attributen basieren.
Ich habe ein Attribut erstellt, das je nach Standort 0 für Zuhause und 1 für Auswärts ist, und möchte nun die Reisen von zu Hause aus nummerieren (eine Reihe von Punkten 01111111111110
wäre eine Reise, da sie zu Hause begann und endete). Ich habe das Attributfeld hinzugefügt, das die Reisenummern enthält, weiß aber nicht, wie das Feld berechnet werden soll, damit es auf dem Heim- / Auswärtsfeld basiert.
Hier ist ein Beispiel für die GPS-Daten (mit "*", um irrelevante Informationen anzuzeigen und einfach die Zeiten als 1, 2 usw. zu indizieren), die oben beschriebene Anzeige "Home / Away" und die gewünschte Auslöseanzeige "Trip". was ich berechnen muss:
Time Lat Lon Home/Away Trip
1 * * 0 0
2 * * 1 1
3 * * 1 1
....
12 * * 1 1
13 * * 0 0
14 * * 0 0
15 * * 1 2
16 * * 1 2
....
34 * * 1 2
35 * * 0 0
36 * * 0 0
37 * * 1 3
....
Mein Datensatz ist zu groß, um jede Fahrt manuell in der Attributtabelle zu durchlaufen und zu nummerieren. Gibt es also eine Möglichkeit, das Feld basierend auf der Reihenfolge des Home / Away-Attributs zu berechnen und jeden "Klumpen" von Auswärtspunkten als zu kennzeichnen Ausflug?
Dies sind die Grundlagen dafür, wie Python-Code aussehen könnte (ich habe keine Erfahrung mit Code).
Ausdruck:
trip = Reclass(!home!)
Codeblock:
def Reclass(home):
if (home = 0):
return 0
elif (home = 1 and lastValue = 0):
return _(incremental numbering?)_
elif (home = 1 and lastValue = 1):
return lastValue
Nachdem ich das von matt wilkie empfohlene Skript verwendet habe, habe ich einige Änderungen vorgenommen, sodass meine erste Reise die Nummer 1, meine zweite die Nummer 2 usw. ist.
Hier ist der von matt modifizierte Code:
import arcpy
rows = arcpy.UpdateCursor("test2")
trip = 0
for row in rows:
if row.home == 0:
prev = row.home
row.TRIP = trip
rows.updateRow(row)
elif row.home == 1 and prev == 0:
trip += 1
prev = row.home
row.TRIP = trip
rows.updateRow(row)
rows.next()
elif row.home == 1 and prev == 1:
prev = row.home
row.TRIP = trip
rows.updateRow(row)
rows.next()
row.TRIP = trip
rows.updateRow(row)
del row, rows
Dann wähle ich einfach für home = 0 und berechne mein Reisefeld zurück auf 0. Ordentlich geordnete Reisen.
trip
Variable beliebig oft neu initialisiert werden kann.