wanisan 様
御解答ありがとうございます。
>> 小数点以下の数値を扱うことになると思いますので、2進数で計算されるPCの宿命として計算や変換が行われると少数点以下は正確に表示できないとか計算上の誤差が出る場合があります。
そうですよね...。表示に関しては目を瞑るしかないですよね...。
一応逆の処理(写真から緯度経度情報を得る)では設定した値をそのまま取れてはいるみたいなので、それで我慢します。
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
撮影した写真に対して緯度経度を設定するプログラムを作成しています。
緯度経度の値を「緯度: 11;20;57.5232」、「経度:142;10;55.4015」(マリアナ海溝)とし、
写真の[ プロパティ ]->[ 詳細 ]にて設定後の情報を確認したところ以下のような表示となりました。
設定した値としては度分秒と秒未満小数部4桁まではあっているのですが、それ以降の値はどこからもってきた値なのかが不明です。
プロパティの表記としてこの値に至るのは何故なのかをお聞きしたいです。
書き込みの方法としてはEXIF規格に則り、画像ファイルのメタデータへ書き込む方式を採っています。
参考:
画像のメタデータ
c# で jpg 画像にジオタグを付ける https://stackoverflow.com/questions/73394862/geotag-a-jpg-image-with-c-sharp
ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。
wanisan 様
御解答ありがとうございます。
>> 小数点以下の数値を扱うことになると思いますので、2進数で計算されるPCの宿命として計算や変換が行われると少数点以下は正確に表示できないとか計算上の誤差が出る場合があります。
そうですよね...。表示に関しては目を瞑るしかないですよね...。
一応逆の処理(写真から緯度経度情報を得る)では設定した値をそのまま取れてはいるみたいなので、それで我慢します。
Takashi NISHIIE 様
御解答ありがとうございます。
>> 緯度と経度を浮動小数点数に翻訳して度の単位にしてから、
改めて、表示するときに度分秒と秒未満小数部という形式に変換をしている。
表示側では一度浮動小数点に変換して度単位にしていたのですね...。そのせいで計算機イプシロンが発生してしまったと...。
大変勉強になりました。
改めて感謝を申し上げます。
カメラの位置情報はGPSデーターから取得して画像ファイルに埋め込まれます。
緯度・経度のサブ秒表示についてGPSデーターの精度は小数点以下6桁?のようです。
EXIFの緯度経度は度・分・、秒のRATIONAL値で表示されますが、有効桁数は知りません。
小数点以下の数値を扱うことになると思いますので、2進数で計算されるPCの宿命として計算や変換が行われると少数点以下は正確に表示できないとか計算上の誤差が出る場合があります。
どのようなプログラムか分かりませんしEXIFの仕様も詳しく知りませんが、有効桁数を制御することはできないのでしょうか。
それが無理なら、そのようなものだと気にしないでいいと思います。
下はExcelの例ですが、何かの参考にしてください。
計算機イプシロンの影響ではないか?
緯度と経度は、rational64という形式で符号なしの6個の整数で格納されています。
[
degreesNumerator, degreesDenominator,
minutesNumerator, minutesDenominator,
secondsNumerator, secondsDenominator
]
それぞれ、Degrees + Minutes/60 + Seconds/3600と計算して、
緯度と経度を浮動小数点数に翻訳して度の単位にしてから、
改めて、表示するときに度分秒と秒未満小数部という形式に変換をしている。
一度、浮動小数点数に翻訳しているので、計算機イプシロンによる誤差が発生する。
小数部4桁以下の数値はそうやって計算の結果生じた誤差である。