次の方法で共有

写真プロパティの緯度経度情報の表記について

Anonymous
2023-04-28T09:29:03+00:00

撮影した写真に対して緯度経度を設定するプログラムを作成しています。

緯度経度の値を「緯度: 11;20;57.5232」、「経度:142;10;55.4015」(マリアナ海溝)とし、

写真の[ プロパティ ]->[ 詳細 ]にて設定後の情報を確認したところ以下のような表示となりました。

設定した値としては度分秒と秒未満小数部4桁まではあっているのですが、それ以降の値はどこからもってきた値なのかが不明です。

プロパティの表記としてこの値に至るのは何故なのかをお聞きしたいです。

書き込みの方法としてはEXIF規格に則り、画像ファイルのメタデータへ書き込む方式を採っています。

参考:

画像のメタデータ

https://learn.microsoft.com/ja-jp/dotnet/desktop/winforms/advanced/how-to-read-image-metadata?source=recommendations&view=netframeworkdesktop-4.8

c# で jpg 画像にジオタグを付ける https://stackoverflow.com/questions/73394862/geotag-a-jpg-image-with-c-sharp

家庭向け Windows | Windows 11 | ファイル、フォルダー、ストレージ

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

4 件の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2023-04-30T21:27:31+00:00

    wanisan 様

    御解答ありがとうございます。

    >> 小数点以下の数値を扱うことになると思いますので、2進数で計算されるPCの宿命として計算や変換が行われると少数点以下は正確に表示できないとか計算上の誤差が出る場合があります。

    そうですよね...。表示に関しては目を瞑るしかないですよね...。

    一応逆の処理(写真から緯度経度情報を得る)では設定した値をそのまま取れてはいるみたいなので、それで我慢します。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2023-04-30T21:06:42+00:00

    Takashi NISHIIE 様

    御解答ありがとうございます。

    >> 緯度と経度を浮動小数点数に翻訳して度の単位にしてから、

      改めて、表示するときに度分秒と秒未満小数部という形式に変換をしている。
    

    表示側では一度浮動小数点に変換して度単位にしていたのですね...。そのせいで計算機イプシロンが発生してしまったと...。

    大変勉強になりました。

    改めて感謝を申し上げます。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2023-04-28T22:41:05+00:00

    カメラの位置情報はGPSデーターから取得して画像ファイルに埋め込まれます。

    緯度・経度のサブ秒表示についてGPSデーターの精度は小数点以下6桁?のようです。

    EXIFの緯度経度は度・分・、秒のRATIONAL値で表示されますが、有効桁数は知りません。

    小数点以下の数値を扱うことになると思いますので、2進数で計算されるPCの宿命として計算や変換が行われると少数点以下は正確に表示できないとか計算上の誤差が出る場合があります。

    どのようなプログラムか分かりませんしEXIFの仕様も詳しく知りませんが、有効桁数を制御することはできないのでしょうか。

    それが無理なら、そのようなものだと気にしないでいいと思います。

    下はExcelの例ですが、何かの参考にしてください。

       EXCELでのバグ?

       Excel の演算結果がおかしい?

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  4. Anonymous
    2023-04-28T12:31:01+00:00

    計算機イプシロンの影響ではないか?

    緯度と経度は、rational64という形式で符号なしの6個の整数で格納されています。

    [
       degreesNumerator, degreesDenominator, 
       minutesNumerator, minutesDenominator, 
       secondsNumerator, secondsDenominator
    ]
    それぞれ、Degrees + Minutes/60 + Seconds/3600と計算して、
    緯度と経度を浮動小数点数に翻訳して度の単位にしてから、
    改めて、表示するときに度分秒と秒未満小数部という形式に変換をしている。
    一度、浮動小数点数に翻訳しているので、計算機イプシロンによる誤差が発生する。
    小数部4桁以下の数値はそうやって計算の結果生じた誤差である。
    

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません