Suite

Conversion de DMS en DD à l'aide de Python dans Field Calculator ?


J'ai besoin de convertir lat/long exprimé en degrés, minutes et secondes dans les données dans degrés décimaux. Par exemple, dans les données, ils sont répertoriés sous la forme N335042.06 dans la colonne Latitude et W86031.04 dans la colonne Longitude. J'ai déjà fait ce problème où j'ai créé un script qui a converti DMS en DD, et vice-versa, donc je suppose que je pourrais utiliser des bits de cela. Mais le problème que j'ai est de savoir comment ignorer (à défaut d'un meilleur mot) le « N » et le « W » dans les données ? Puis-je les ignorer ? Et les DMS sont répertoriés tous ensemble sans aucun symbole ni espace.

Puis-je utiliserlen(),gamme(),diviser()pour spécifier quelle partie lire à partir de la valeur ? Par exemple, pouvez-vous faire ce qui suit ?

N335042.06 où, 33 = degrés 50 = minutes 42.06 = secondes… ?

Je suis tombé sur cet article d'ESRI, mais il est en VB. L'utilisera probablement comme référence, mais une partie de la terminologie/syntaxe est différente de Python.

Code final qui fonctionne !

# Pré-logique 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!)

  • Jetez un œil à la section sur le découpage dans le didacticiel Python. Vous pouvez saisir une plage de caractères d'une chaîne en utilisant la syntaxe de découpage, par ex.D = entier(x[1:2]).

    Pendant quelques secondes, essayezS = flottant(x[5:]). Cela saisira tous les caractères commençant à l'index 5 jusqu'à la fin de la chaîne, dans le cas où vous auriez des valeurs de longueur variable pour les secondes.

  • Le!Nom de domaine!la syntaxe n'est valide que dans la zone d'expression. Vous devez définir une fonction dans la section "pré-logique" qui prend les valeurs des champs que vous voulez et renvoie la valeur souhaitée. Ensuite, dans la zone d'expression, appelez la fonction et transmettez les valeurs du champ à l'aide de la!Nom de domaine!syntaxe. Voir Exemples de calcul de champ dans l'aide.

En utilisant uniquement la calculatrice de champ sans logique préalable, j'ai pu faire en sorte que cela fonctionne pour moi. La chaîne que j'avais était de format un peu différent avec quelques espaces.

La valeur LAT comme "dd mm ss.ss" et je l'ai utilisée dans la calculatrice.

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

valeur longue comme "-dd mm ss.ss" et ceci pour longtemps

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