Skip to content

Instantly share code, notes, and snippets.

@msakai
Last active April 16, 2022 04:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save msakai/2aad50779e210cde4c005c24f5644c34 to your computer and use it in GitHub Desktop.
Save msakai/2aad50779e210cde4c005c24f5644c34 to your computer and use it in GitHub Desktop.
/*
NY Times の記事 "Dead Lay Out in Bucha for Weeks, Refuting Russian Claim, Satellite Images Show - The New York Times"
https://www.nytimes.com/2022/04/04/world/europe/bucha-ukraine-bodies.html
での「ロシア占領中の3月19日時点の衛星画像で死体が確認できる」と言う主張に対して、
「OSINT/GEOINTによって撮影時刻は4月1日11:57(UTC)である」と言う反論がなされている。
- ロシア語: https://t.me/rybar/30599
- 英訳: https://t.me/realCRP/4200
- 日本語訳: https://t.me/wakeupjapancomeon/1605
この文章では実際に計算を行うことで、この反論が誤りであることを確認する。
まず、位置情報として緯度50.54180°経度30.23009°が仮定されており、これは概ね正しい。
その上で、「4/1 11:57 (UTC) の太陽位置を計算すると、太陽高度が42.02°、方位角が157.61°となり、
また1mのオブジェクトの影の長さが1.11mになり、写真の状況と一致する」と主張しているようである。
まず、157.61°という方位角は、道路の向きと衛星写真での影の角度を見ると大雑把な方向としては正しそうで、
以降ではとりあえずこれが正しいと仮定する。(実際には162°くらいに見えるけれど)
また、太陽高度が42.02°の時に1mの高さのオブジェクトの影が1.11mになるのは、1/tan(42.02°)=1.11 なので正しいが、
ただ物体や影のの正確な高さ・長さを得るのが難しいので、これが写真に合致しているかを確認するのは難しい。
*/
// 以下では太陽の高度・方位角の計算に https://github.com/mourner/suncalc を使う。
// これは方位角の表現に南を基準とした数値を採用しているので注意
// なお、以下の計算は国立天文台のサイトなどでも検算できるのでぜひ試して欲しい。
// https://eco.mtk.nao.ac.jp/cgi-bin/koyomi/koyomix.cgi
var SunCalc = require('suncalc');
// まずは反論が写真撮影された日時と主張している 4/1 11:57 (UTC) で計算して結果を検証する。
// 月を -1 しているのは Javascript の Dateクラスでは月は 0 から数えるため。
pos_0401_1157 = SunCalc.getPosition(
Date.UTC(2022, 4-1, 1, 11, 57),
50.54180, 30.23009,
)
console.log(pos_0401_1157.azimuth / Math.PI * 180 + 180); // 217.04608727348386
console.log(pos_0401_1157.altitude / Math.PI * 180); // 38.171364658970205
// 方位角が217.05°となり、写真の状況の157.61°とは大きく異なるので、
// 反論の主張する 4/1 11:57 (UTC) に撮影されたのではないことはただちに分かる。
// 次に、反論の「ビフォア画像が2/28にアフター画像が4/1に撮影された」という主張が
// 誤りであることを、影の長さの変化からも確認する。
//
// 日によってこの方位角になる際の太陽高度(と時刻)が異なるので、それを確認する。
// まず、両者がビフォア画像の撮影日としている2/28に、方位角が157.61°になる時刻と太陽高度を計算すると、
// 時刻が 8:53:31 (UTC) 頃、太陽高度が 28.97° であることがわかる。
pos_0228 = SunCalc.getPosition(
Date.UTC(2022, 2-1, 28, 8, 53, 31, 23),
50.54180, 30.23009,
)
console.log(pos_0228.azimuth / Math.PI * 180 + 180); // 157.60999828440373
console.log(pos_0228.altitude / Math.PI * 180); // 28.968704182868503
// NY Times がアフター画像の撮影日としている3/19に方位角が157.61°になる時刻と太陽高度を計算すると、
// 時刻が 8:56:15 (UTC) 頃、太陽高度が 36.60° であることがわかる。
pos_0319 = SunCalc.getPosition(
Date.UTC(2022, 3-1, 19, 8, 56, 15, 170),
50.54180, 30.23009,
)
console.log(pos_0319.azimuth / Math.PI * 180 + 180); // 157.60999526928407
console.log(pos_0319.altitude / Math.PI * 180); // 36.602214901328225
// 反論がアフター画像の撮影日としている4/1に方位角が157.61°になる時刻と太陽高度を計算すると、
// 時刻が 8:57:27 (UTC) 頃、太陽高度が 41.86° であることがわかる。
pos_0401 = SunCalc.getPosition(
Date.UTC(2022, 4-1, 1, 8, 57, 26, 729),
50.54180, 30.23009,
)
console.log(pos_0401.azimuth / Math.PI * 180 + 180); // 157.60999748548073
console.log(pos_0401.altitude / Math.PI * 180); // 41.857812874759325
// 太陽高度が物体と影の長さに比に整合的な日が撮影日のはずだけど、
// 前述のように写真・地図・ストリートビューなどからは正確な長さ・高さを得るのが難しいので、
// これを直接確認するのは難しい。
//
// そこで、ビフォア画像とアフター画像で電柱と見られる物体の影の長さが変化していることに着目する。
// 撮影日が2/28と3/19だとしたときに、アフター画像の影の長さは何倍になっているべきかを計算すると、
// 75%ほどになっているという計算になる。
console.log((1 / Math.tan(pos_0319.altitude)) / (1 / Math.tan(pos_0228.altitude))) // 0.7453564025368254
// 同様に撮影日が2/28と4/1だとしたときに、アフター画像の影の長さは何倍になっているべきかを計算すると、
// 62%ほどになっているという計算になる。
console.log((1 / Math.tan(pos_0401.altitude)) / (1 / Math.tan(pos_0228.altitude))) // 0.6179066428470127
// 実際の画像で電柱の影の長さの変化を見てみると、流石に6割の長さになるほどは短くなっていなくて、
// 一方で75%と言われると「まあそう見えなくもないかな」というくらいの変化に見える。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment