12 votos

¿Conversión de DMS a DD utilizando Python en la calculadora de campo?

Necesito convertir la lat/long que se expresa en grados, minutos y segundos en los datos en grados decimales. Por ejemplo, en los datos, aparecen como N335042.06 en la columna de Latitud, y W86031.04 en la columna de Longitud. Ya he hecho este problema antes, donde creé un script que convertía DMS a DD, y viceversa, así que supongo que podría usar trozos de eso. Pero el problema que tengo es cómo ignorar (a falta de una palabra mejor) la 'N' y la 'W' en los datos? ¿Puedo omitirlos? Y los DMS aparecen todos juntos sin símbolos ni espacios.

¿Puedo utilizar len() , range() , split() para especificar qué parte leer del valor? Por ejemplo, ¿se 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 utilice como referencia, pero parte de la terminología/sintaxis es diferente a la 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!)

4 votos

7 meses después tuve que averiguar cómo hacer esto de nuevo y terminé aquí, ¡gracias por publicar tu código! :)

9voto

auramo Puntos 161

Se puede calcular la variedad de representación a partir de $G$ en $M_n(\mathbb C)$ o tu grupo algebraico favorito. Esto contiene mucha más información que la abelianización.

Del mismo modo, y delgado a la respuesta de David Speyer, se pueden contar los subgrupos de índice $n$ : Índice $n$ subgrupos en $G$ corresponden a representaciones de permutación transitiva en $n$ elementos por la acción de los cosets. Muchos de ellos no se factorizan a través de la abelianización.

0 votos

Lo siguiente es lo que tengo como código en la Calculadora de Campos, pero me está indicando que la primera línea tiene un error. ¿Alguna idea? 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 tengo !Latitude! = DD

0 votos

Respuesta actualizada con más información, pruébalo y dinos si sigues teniendo problemas.

0 votos

Gracias. Lo estoy consiguiendo, pero me he encontrado con un nuevo error. He editado mi primer post con el nuevo código. ¿Qué opinas? ¡Lo siento, soy nuevo en Python, pero agradezco mucho tu ayuda!

-1voto

bignose Puntos 154

Usando sólo la calculadora de campo sin lógica previa pude hacer que esto funcionara para mí. La cadena que tenía tenía un formato un poco diferente con algunos espacios.

LAT valor como "dd mm ss.ss" y he utilizado esto en la calculadora.

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

valor largo como "-dd mm ss.ss" y esto para el largo

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

3 votos

En realidad, tu valor largo es erróneo ya que tienes posibles grados negativos y minutos y segundos positivos. Es mejor utilizar una expresión regular import re en pre-lógica

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X