Ich muss Lat / Long, das in den Daten als Grad, Minuten und Sekunden ausgedrückt wird, in Dezimalgrade konvertieren . In den Daten sind sie beispielsweise in der Spalte Breitengrad als N335042.06 und in der Spalte Längengrad als W86031.04 aufgeführt. Ich habe dieses Problem bereits zuvor gelöst, als ich ein Skript erstellt habe, das DMS in DD konvertiert hat, und umgekehrt. Ich schätze, ich könnte Bits daraus verwenden. Aber das Problem, das ich habe, ist, wie man (mangels eines besseren Wortes) das 'N' und 'W' in den Daten ignoriert? Kann ich sie überspringen? Und DMS werden alle zusammen ohne Symbole oder Leerzeichen aufgelistet.
Kann ich len()
, range()
, split()
zu spezifizieren , welcher Teil von dem Wert zu lesen? Kann zum Beispiel Folgendes tun?
N335042.06 wobei 33 = Grad 50 = Minuten 42.06 = Sekunden ...?
Ich bin auf diesen ESRI-Artikel gestoßen, aber er ist in VB. Wird wahrscheinlich als Referenz verwendet, aber einige der Begriffe / Syntax unterscheiden sich von Python.
Finaler Code, der funktioniert!
# 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!)
Antworten:
Sehen Sie sich den Abschnitt zum Schneiden im Python-Tutorial an . Sie können eine Reihe von Zeichen aus einer Zeichenfolge mit der Aufteilungssyntax abrufen, z
D = int(x[1:2])
.Versuchen Sie es für Sekunden
S = float(x[5:])
. Dadurch werden alle Zeichen ab Index 5 bis zum Ende der Zeichenfolge erfasst, falls Sie für Sekunden Werte mit variabler Länge haben.!FieldName!
Syntax ist nur im Ausdrucksfeld gültig. Sie müssen im Abschnitt "Vorlogik" eine Funktion definieren, die die Werte der gewünschten Felder aufnimmt und den gewünschten Wert zurückgibt. Rufen Sie dann im Ausdrucksfeld die Funktion auf und übergeben Sie die Feldwerte mithilfe der!FieldName!
Syntax. Siehe Berechnen von Feldbeispielen in der Hilfe.quelle
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
Und im Codeblock habe ich!Latitude! = DD
return DD
stattreturn latDD
.print DD
und geändertreturn latDD
,return DD
wie von Ihnen vorgeschlagen, und es hat funktioniert! Vielen Dank!Mit nur Field Calculator ohne Vorlogik konnte ich dies für mich arbeiten lassen. Die Zeichenfolge, die ich hatte, hatte ein etwas anderes Format mit einigen Leerzeichen.
LAT-Wert wie "dd mm ss.ss" und ich habe dies im Taschenrechner verwendet.
langer Wert wie "-dd mm ss.ss" und das für lange
quelle
import re
in der Vorlogik