一連のgps時間エンコードポイントデータを、異なる属性に基づいて動作に分類しようとしています。
自宅に0、自宅に1の属性を作成しましたが、自宅からの旅行に番号を付けたいと思います(自宅01111111111110
で開始および終了するため、ポイントのセットは1つの旅行になります)。旅行番号を持つ属性フィールドを追加しましたが、フィールドの計算方法がわからないため、ホーム/アウェイフィールドに基づいています。
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
....
私のデータセットは大きすぎて手動で移動して属性テーブルの各旅行に番号を付けることができないので、home / away属性の順序付け方法に基づいてフィールドを計算する方法はありますか?トリップ?
これらは、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番目が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
変数は任意の回数再初期化できます。