Field CalculatorでPythonを使用してDMSからDDに変換しますか?


12

私は、データに度、分、秒のように表現される緯度/経度に変換する必要がある小数度。たとえば、データでは、Latitude列にN335042.06、Longitude列に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!)

4
7か月後、もう一度これを行う方法を考え出す必要があり、コードを投稿していただきありがとうございます。:)
blah238

回答:


8
  • Pythonチュートリアルのスライスに関するセクションをご覧ください。スライス構文を使用して、文字列から一連の文字を取得できますD = int(x[1:2])

    数秒間、試してみてくださいS = float(x[5:])。これは、秒の可変長値がある場合、インデックス5から文字列の最後までのすべての文字を取得します。

  • !FieldName!構文は、式ボックスでのみ有効です。「pre-logic」セクションで、必要なフィールドの値を受け取り、目的の値を返す関数を定義する必要があります。次に、式ボックスで関数を呼び出し、!FieldName!構文を使用してフィールド値を渡します。ヘルプのフィールドの計算例を参照してください。

以下は、Field Calculatorでコードとして使用しているものですが、最初の行にエラーがあることを示しています。何か案は? 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
kaoscify

回答を詳細情報に更新し、試してみて、まだ問題がある場合はお知らせください。
blah238

ありがとう!そこに着きましたが、新しいエラーが発生しました。新しいコードで最初の投稿を編集しました。考え?申し訳ありませんが、私はPythonを初めて使用しますが、本当に助かりました!
kaoscify

return DD代わりに試してくださいreturn latDD
blah238

1
私はあなたが提案したように削除print DDして変更return latDDしましたがreturn DD、うまくいきました!ありがとう!
kaoscify

-1

事前ロジックなしでフィールド計算機のみを使用して、この作業を行うことができました。私が持っていた文字列は、いくつかのスペースを持つ少し異なる形式でした。

「dd mm ss.ss」のようなLAT値と私は計算機でこれを使用しました。

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

「-dd mm ss.ss」のような長い値とこれは長い

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


2
実際、負の度数と正の分と秒があるため、長い値は間違っています。import reプレロジックで正規表現を使用する方が良い
Mike T
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.