QGISフィールド計算機を使用して度分秒(DMS)で緯度/経度を取得するにはどうすればよいですか?


9

5.1234を5°に変換する次の式を考えました7`24.24 "

toint($ x)|| '°' || toint(((($ x)-toint($ x))* 60)|| '`' || substr((tostring(((($ x)-toint($ x))* 60)-toint((($ x)-toint($ x))* 60))* 60)、1,5)|| 「」

ここに問題があります:5.1234のようないくつかの点では、それは機能します。しかし、他の人にとってはそうではありません。問題は、小数点を切り捨てるのではなく、小数点以下を切り上げる整数変換にあると思います。

他のオプションはありますか?ありがとう。


回避策を提案できます。最適ではありませんが、今は行き詰まっている場合は、作業を完了することができます。右クリックしてCSVとして保存します。ExcelまたはGoogleドキュメントでCSVを開き、数式を入力します(より簡潔で簡単なはずです)。一意の識別子と変換されたDMS文字列を除くすべてのフィールドを削除します。それを保存。既存のレイヤーとのテーブル結合を行うと、設定が完了します。
12

1
負の入力には注意してください。
whuber

spatialthoughtの答えに追加するだけで:丸めダウン最寄りの程度には、FLOOR()関数を使用してExcelで動作します。
Micha

回答:


3

私あなたが一緒に置かれている表現のような- QGIS 1.8で、おそらくいないソリューションが、QGIS 1.9-devの中にありますfloor()丸める丸め機能ダウン。D°M'Sの場合」:

(CASE WHEN $x < 0 THEN '-' ELSE '' END) || floor (abs($x)) || '° ' || floor(((abs($x)) - floor (abs($x))) * 60) ||'\'' || substr( (tostring((((abs($x)) - floor (abs($x))) * 60) - floor(((abs($x)) - floor (abs($x))) * 60)) * 60),1,5) || '"'

エスケープされたアポストロフィ(\')に注意してください。

D°M.MMM 'の場合:

(CASE WHEN $x < 0 THEN '-' ELSE '' END) || floor (abs($x)) || '° ' || ((abs($x) - floor(abs($x))) * 60) ||'\''

表示される10進数の分数を制限するには、以下の式の#を桁数で置き換えます。

(CASE WHEN $x < 0 THEN '-' ELSE '' END) || floor (abs($x)) || '° ' ||  format_number( (abs($x) - floor(abs($x))) * 60, #) ||'\'

好奇心から、度、分、式はどのように見えますか?
メイス

例を追加しました。これはQGIS 2.6(およびおそらく2.0以降)で機能しますが、より洗練された書式設定関数が現在利用できる可能性があります。
シンバマング2015年

1
ただ1つの落とし穴:この式は、東座標と北座標の正の値に対してのみ機能します。マイナスは小さすぎます。そして、0.5°Eと0.5°Wはどのように区別されるのでしょうか。floor(+/- 0.5)は常に-0ではなく0になります。
AndreJ

ああああ。不十分なテストの落とし穴...そして、私も南(負)半球で働いています。まもなく更新されます。
シンバマング2015年

1

モジュロ演算子を使用して切り捨てを行うことができますが、結果の式は非常に醜くなります。文字列置換を使用するのはよりきれいですが、残念ながらQGISはstrposや類似の関数を公開していません。regexp_replace($x, '\\..*', '')全体regexp_replace($x, '^[0-9]*\\.', '')を取得し、小数部を取得するために使用します。のtoreal代わりにtointを使用して2番目の式で計算し、丸めがないことを確認します。


2
今strpos機能を持っていますが、いませんでした。)github.com/qgis/Quantum-GIS/commit/...
ネイサンW

tsk tsk tsk、余計な空白ノイズ。
lynxlynxlynx 2012

ええ、その最初のビットは無視してください。新しい関数とは無関係のクリーンアップのほんの少しです。
ネイサンW

醜いです...それを解決しようとします。
Obsidianz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.