필드 계산기에서 Python을 사용하여 DMS에서 DD로 변환 하시겠습니까?


12

데이터의 각도, 분 및 초로 표시되는 위도 / 경도 십진수 로 변환해야합니다 . 예를 들어 데이터에서 위도 열에는 N335042.06, 경도 열에는 W86031.04로 표시됩니다. DMS를 DD로 변환하고 그 반대로 변환하는 스크립트를 작성하기 전에이 문제를 수행 했으므로 그 비트를 사용할 수 있다고 생각합니다. 그러나 내가 겪고있는 문제는 데이터에서 'N'과 'W'를 (더 나은 단어가 없음) 무시하는 방법입니다. 건너 뛸 수 있습니까? DMS는 기호 나 공백없이 모두 함께 나열됩니다.

내가 사용할 수 len(), range(), split()값에서 읽을 어떤 부분이 지정? 예를 들어 다음을 수행 할 수 있습니까?

N335042.06 여기서, 33 =도 50 = 분 42.06 = 초 ...?

나는 우연히 ESRI 기사,하지만 VB에서입니다. 아마도 그것을 참조로 사용하지만 일부 용어 / 구문은 Python과 다릅니다.

작동하는 최종 코드!

# Pre-logic
def latDD(x):
  D = int(x[1:3])
  M = int(x[3:5])
  S = float(x[5:])
  DD = D + float(M)/60 + float(S)/3600
  return DD

# Expression
latDD(!Latitude!)

4
7 개월 후 나는 이것을 다시하는 방법을 알아 내야했다. 그리고 당신의 코드를 게시 해 주셔서 감사합니다! :)
blah238

답변:


8
  • 파이썬 튜토리얼 에서 슬라이싱 섹션을 살펴보십시오 . 예를 들어 슬라이싱 구문을 사용하여 문자열에서 다양한 문자를 가져올 수 있습니다 D = int(x[1:2]).

    몇 초 동안을 시도하십시오 S = float(x[5:]). 가변 길이 값이 초 동안있는 경우 인덱스 5에서 시작하여 문자열의 끝까지 모든 문자를 가져옵니다.

  • !FieldName!구문은 식 상자에서만 유효합니다. "사전 논리"섹션에서 원하는 필드 값을 가져와 원하는 값을 반환하는 함수를 정의해야합니다. 그런 다음 표현식 상자에서 함수를 호출하고 !FieldName!구문을 사용하여 필드 값을 전달하십시오 . 도움말에서 필드 계산 예제 를 참조하십시오 .

다음은 필드 계산기에서 내 코드로 가지고있는 것이지만 첫 번째 줄에 오류가 있음을 나타냅니다. 어떤 아이디어? x = (!Latitude!) D = int(x[1:3]) M = int(x[3:5]) S = float(x[5:10]) DD = D + float(M)/60 + float(S)/3600그리고 코드 블록에!Latitude! = DD
kaoscify

더 많은 정보로 답변을 업데이트하고 시도해보고 여전히 문제가 있으면 알려주십시오.
blah238

감사! 도착했지만 새 오류가 발생했습니다. 새 코드로 첫 번째 게시물을 편집했습니다. 생각? 죄송합니다. Python을 처음 사용하지만 도움을 주셔서 감사합니다.
kaoscify

return DD대신 사용해보십시오 return latDD.
blah238

1
나는 제거 print DD및 변경 return latDDreturn DD당신이 제안처럼, 그것은했다! 감사!
kaoscify

-1

사전 로직없이 필드 계산기 만 사용하면이 작업을 수행 할 수있었습니다. 내가 가진 문자열은 약간의 공백이있는 형식이 조금 다릅니다.

"dd mm ss.ss"와 같은 LAT 값을 계산에 사용했습니다.

float (! LAT! [0 : 2]) + float (! LAT! [3 : 5]) / 60+ float (! LAT! [6 :]) / 3600

"-dd mm ss.ss"와 같은 긴 값 및이 값은 long

float (! LONG_! [0 : 3]) + float (! LONG_! [4 : 6]) / 60+ float (! LONG_! [7 :]) / 3600


2
실제로 음수와 양수 및 초가 가능하므로 긴 값이 잘못되었습니다. import re프리 로직에서 정규 표현식 을 더 잘 사용하십시오
Mike T
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.