我正在尝试将一组gps时间编码的点数据分类为基于不同属性的行为。
我已经创建了一个属性,该属性基于位置,对于家来说是0,对于外出来说是1,现在想对离开家的旅程进行编号(一组点将01111111111110
是一次旅程,因为它是在家中开始和结束的)。我添加了将具有行程编号的属性字段,但不知道如何计算该字段,因此它基于家庭/离开字段。
以下是 GPS数据的示例(使用“ *”表示无关的信息,并将索引时间简单地标记为1、2等),上述“回家/离开”指示器以及所需的行程指示器“行程”,我需要计算:
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
....
我的数据集太大,无法手动进行遍历并在属性表中对每次行程进行编号,因此,有什么方法可以根据归位/离开属性的排序方式来计算字段,并且将每个“聚集”离去点都指定为旅行?
这些是Python代码看起来的基本内容(我对代码没有经验)。
表达:
trip = Reclass(!home!)
代码块:
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
在使用matt wilkie的推荐脚本之后,我进行了一些更改,以便我的第一趟旅行是1号,第二趟是2号,依此类推。
这是从matt修改的代码:
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
然后,我只选择home = 0并将旅行字段计算回0。
trip
可以任意多次将变量重新初始化。