地殻変動補正パラメータファイルを読み込む
地殻変動補正パラメータファイル を読み込む
def load_par(filename):
par = pd.read_csv(filename, delim_whitespace=True, skiprows=15, index_col=0)
return par
※モジュールのimport は割愛
補正値を計算
def semi_dyna_diff(par, lat, lon):
phi_pitch = 2/3 / 8 / 2
lamda_pitch = 1 / 8 / 2
down = np.floor(lat / phi_pitch ) * phi_pitch
up = np.ceil( lat / phi_pitch ) * phi_pitch
left = np.floor(lon / lamda_pitch) * lamda_pitch
right = np.ceil( lon / lamda_pitch) * lamda_pitch
z00 = latlon2mesh(down, left) # 格子左下
z01 = latlon2mesh(down, right) # 格子右下
z10 = latlon2mesh( up, left) # 格子左上
z11 = latlon2mesh( up, right) # 格子右上
p00 = par.loc[z00]
p01 = par.loc[z01]
p10 = par.loc[z10]
p11 = par.loc[z11]
t = (lat - down) / phi_pitch
u = (lon - left) / lamda_pitch
b00 = p00['dB(sec)'].to_numpy()
b01 = p01['dB(sec)'].to_numpy()
b10 = p10['dB(sec)'].to_numpy()
b11 = p11['dB(sec)'].to_numpy()
l00 = p00['dL(sec)'].to_numpy()
l01 = p01['dL(sec)'].to_numpy()
l10 = p10['dL(sec)'].to_numpy()
l11 = p11['dL(sec)'].to_numpy()
h00 = p00['dH(m)'].to_numpy()
h01 = p01['dH(m)'].to_numpy()
h10 = p10['dH(m)'].to_numpy()
h11 = p11['dH(m)'].to_numpy()
tu00 = (1 - t) * (1 - u)
tu01 = (1 - t) * u
tu10 = t * (1 - u)
tu11 = t * u
dB = tu00 * b00 + tu01 * b01 + tu10 * b10 + tu11 * b11
dL = tu00 * l00 + tu01 * l01 + tu10 * l10 + tu11 * l11
dH = tu00 * h00 + tu01 * h01 + tu10 * h10 + tu11 * h11
return dB / 60 / 60, dL / 60 / 60, dH
セミダイナミック補正
def semi_dyna(par, lat, lon, alt=None, sokuchi=0):
"""
sokuchi:補正方向 =0:元期→今期, =1:今期→元期
"""
dB, dL, dH = semi_dyna_diff(par, lat, lon)
if sokuchi == 1:
# 今期→元期
dB, dL, dH = -dB, -dL, -dH
if alt is None:
return lat + dB, lon + dL
else:
return lat + dB, lon + dL, alt + dH
とりあえず、見よう見まねで下記を計算。
いくつかサンプルでは同じになっていたけど。あってそう?
https://www.gsi.go.jp/sokuchikijun/semidyna.html
https://vldb.gsi.go.jp/sokuchi/surveycalc/semidyna/web/index.html