Necesito convertir lat / long que se expresa como grados, minutos y segundos en los datos en grados decimales. Por ejemplo, en los datos, se enumeran como N335042.06 en la columna Latitud y W86031.04 en la columna Longitud. He solucionado este problema antes de crear un script que convertía DMS a DD, y viceversa, así que supongo que podría usar bits de eso. Pero el problema que tengo es cómo ignorar (por falta de una palabra mejor) la 'N' y 'W' en los datos. ¿Puedo saltearlos? Y DMS se enumeran todos juntos sin ningún símbolo o espacio.
¿Puedo utilizar len()
, range()
, split()
para especificar qué parte a leer a partir del valor? Por ejemplo, ¿puede hacer lo siguiente?
N335042.06 donde, 33 = grados 50 = minutos 42.06 = segundos ...?
Me encontré con este artículo de ESRI, pero está en VB. Probablemente lo usará como referencia, pero parte de la terminología / sintaxis es diferente de Python.
Código final que funciona!
# 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!)
Respuestas:
Eche un vistazo a la sección sobre corte en el tutorial de Python . Puede tomar un rango de caracteres de una cadena usando la sintaxis de corte, por ejemplo
D = int(x[1:2])
.Por unos segundos, inténtalo
S = float(x[5:])
. Esto capturará todos los caracteres que comienzan en el índice 5 hasta el final de la cadena, en el caso de que tenga valores de longitud variable por segundos.!FieldName!
sintaxis solo es válida en el cuadro de expresión. Debe definir una función en la sección "prelógica" que tome los valores de los campos que desee y devuelva el valor deseado. Luego, en el cuadro de expresión, llame a la función y pase los valores de campo utilizando la!FieldName!
sintaxis. Vea Calcular ejemplos de campo en la ayuda.fuente
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
Y en el bloque de código que tengo!Latitude! = DD
return DD
lugar dereturn latDD
.print DD
y cambiéreturn latDD
a loreturn DD
que sugeriste, y funcionó. ¡Gracias!Usando solo Field Calculator sin lógica previa, pude hacer que esto funcionara para mí. La cadena que tenía era un formato un poco diferente con algunos espacios.
Valor LAT como "dd mm ss.ss" y lo usé en la calculadora.
valor largo como "-dd mm ss.ss" y esto por mucho tiempo
fuente
import re
en pre-lógica