Muszę przekonwertować długość / długość wyrażoną w stopniach, minutach i sekundach w dane na stopnie dziesiętne. Na przykład w danych są one wymienione jako N335042.06 w kolumnie Szerokość i W86031.04 w kolumnie Długość. Zrobiłem ten problem wcześniej, kiedy stworzyłem skrypt, który przekonwertował DMS na DD i odwrotnie, więc myślę, że mógłbym z tego skorzystać. Ale mam problem z tym, jak zignorować (z braku lepszego słowa) „N” i „W” w danych? Czy mogę je pominąć? I DMS są wymienione razem bez symboli i spacji.
Czy mogę używać len()
, range()
, split()
aby określić, jaka część odczytać z wartości? Na przykład, czy można wykonać następujące czynności?
N335042.06 gdzie, 33 = stopnie 50 = minuty 42,06 = sekundy ...?
Natknąłem się na ten artykuł ESRI, ale jest w VB. Prawdopodobnie użyje go jako odniesienia, ale niektóre terminologie / składnie różnią się od Pythona.
Ostateczny kod, który działa!
# 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!)
Odpowiedzi:
Spójrz na sekcję dotyczącą krojenia w samouczku Python . Możesz pobrać zakres znaków z ciągu przy użyciu składni krojenia, np
D = int(x[1:2])
.Spróbuj przez sekundę
S = float(x[5:])
. Spowoduje to złapanie wszystkich znaków, począwszy od indeksu 5 do końca ciągu, w przypadku, gdy masz wartości zmiennej długości dla sekund.!FieldName!
Składnia jest ważna tylko w polu ekspresji. Musisz zdefiniować funkcję w sekcji „pre-logika”, która przyjmuje wartości pól, które chcesz i zwraca żądaną wartość. Następnie w polu wyrażenia wywołaj funkcję i przekaż wartości pola, używając!FieldName!
składni. Zobacz temat Obliczanie przykładów pól w pomocy.źródło
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
A w bloku kodu mam!Latitude! = DD
return DD
zamiastreturn latDD
.print DD
i zmieniłreturn latDD
sięreturn DD
tak, jak sugerował, i to działa! Dzięki!Używając tylko kalkulatora pola bez uprzedniej logiki, mogłem sprawić, że to zadziała dla mnie. Ciąg, który miałem, był trochę inny format z pewnymi spacjami.
Wartość LAT jak „dd mm ss.ss” i użyłem tego w kalkulatorze.
długa wartość jak „-dd mm ss.ss” i to na długo
źródło
import re
w pre-logice