極を投影面直交座標系の原点とし、
X軸を下向き正、
Y軸を右向き正とする。
緯度経度の単位は全てラジアン。投影面直交座標の単位は引数の長半径に依存する。
正変換に使う関数に逆関数が求められないものがあるので、逆変換における緯度の導出は繰り返し計算によって行う。収束したと判定されるか、繰り返し回数が上限を超えるまで繰り返す。収束判定の閾値と繰り返し回数の上限は指定しなければデフォルト値が与えられる。
日本域のデータを扱うために作った暫定版なので、極に対応していない。90度を入れると
0 divisionになって落ちると思う。
正変換(緯度経度 => 投影面直交座標)
subroutine convLonLatToLambertConformalConic(
lon, lat, x, y, lat1, lat2, lon_0, lat_0, a, e)
変数名 |
型 |
授受 |
説明 |
lon |
dble |
in |
経度 |
lat |
dble |
in |
緯度 |
x |
dble |
out |
投影面X座標 |
y |
dble |
out |
投影面Y座標 |
lat1 |
dble |
in |
標準緯度 |
lat2 |
dble |
in |
標準緯度 |
lon_0 |
dble |
in |
投影基準経度 |
lat_0 |
dble |
in |
投影基準緯度 |
a |
dble |
in |
長半径 |
e |
dble |
in |
離心率 |
逆変換(投影面直交座標 => 緯度経度)
subroutine convLambertConformalConicToLonLat(
x, y, lon, lat, lat1, lat2, lon_0, lat_0, a, e,
iteration, convergence)
変数名 |
型 |
授受 |
説明 |
x |
dble |
in |
投影面X座標 |
y |
dble |
in |
投影面Y座標 |
lon |
dble |
out |
経度 |
lat |
dble |
out |
緯度 |
lat1 |
dble |
in |
標準緯度 |
lat2 |
dble |
in |
標準緯度 |
lon_0 |
dble |
in |
投影基準経度 |
lat_0 |
dble |
in |
投影基準緯度 |
a |
dble |
in |
長半径 |
e |
dble |
in |
離心率 |
iteration |
dble |
in(optional) |
繰り返し回数の上限 |
convergence |
dble |
in(optional) |
収束判定の閾値 |
緯度の繰り返し計算において、以下が満たされたら収束したとみなす。
abs(lat - lat_prev) < abs(lat) * convergence
lat_prevは更新前の値、
latは更新後の値。
[メモ] 日本域において、1d-6で大体3回、1d-12で大体6回で収束した。
モジュール