GPS로 인코딩 된 포인트 데이터 세트를 다른 속성을 기반으로 동작으로 분류하려고합니다.
집에 0, 위치에 따라 1에 대한 속성을 작성했으며 이제 집에서 멀리 떨어진 여행의 번호를 매기 01111111111110
려고합니다 (집에서 시작하여 끝났기 때문에 한 세트의 여행이됩니다). 여행 번호가 표시되는 속성 필드를 추가했지만 필드를 계산하는 방법을 모르므로 홈 / 어웨이 필드를 기반으로합니다.
다음은 GPS 데이터 ( 예 : 관련없는 정보를 나타 내기 위해 "*"를 사용하고 단순히 1, 2 등의 인덱싱 시간 등), 위에서 설명한 "Home / Away"표시기 및 원하는 트립 표시기, "Trip", 계산해야합니다 :
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
....
내 데이터 세트가 너무 커서 속성 테이블에서 수동으로 이동하고 각 여행에 번호를 매길 수 없으므로 홈 / 어웨이 속성이 정렬되는 방식에 따라 필드를 계산할 수있는 방법이 있습니까? 여행?
이것들은 파이썬 코드가 어떻게 생겼는지의 핵심입니다 (코드에 대해서는 경험이 없습니다).
표현:
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
임의의 횟수로 변수를 다시 초기화 할 수 있습니다.