Мне нужно преобразовать широту / долготу, выраженную в градусах, минутах и секундах в данных, в десятичные градусы. Например, в данных они указаны как 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!)
Ответы:
Взгляните на раздел по нарезке в руководстве по Python . Вы можете получить диапазон символов из строки, используя синтаксис, например
D = int(x[1:2])
.На несколько секунд попробуйте
S = float(x[5:])
. Это будет захватывать все символы, начиная с индекса 5 до конца строки, в случае, если у вас есть значения переменной длины в течение нескольких секунд.!FieldName!
Синтаксис действителен только в поле выражения. Вы должны определить функцию в разделе «pre-logic», которая принимает значения полей, которые вы хотите, и возвращает желаемое значение. Затем в поле выражения вызовите функцию и передайте значения поля, используя!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
return DD
вместоreturn latDD
.print DD
и изменилreturn latDD
к ,return DD
как вы предложили, и это сработало! Благодарность!Используя только Калькулятор поля без предварительной логики, я смог сделать эту работу для меня. У меня была немного другой формат с некоторыми пробелами.
Значение LAT как "dd mm ss.ss", и я использовал это в калькуляторе.
длинное значение типа "-dd mm ss.ss" и это долго
источник
import re
в предварительной логике