Class | Map_Function |
In: |
map_function.f90
|
地図座標系におけるいくらかの変換関数
Function : | |||
dis2lat : | real | ||
y : | real, intent(in)
| ||
phi0 : | real, intent(in)
|
基準緯度 phi0 から空間距離 y [m] 離れた位置における緯度 [rad]. y は北に計算する際は正値, 南に計算する際は負値を与えれば計算可能.
real function dis2lat( y, phi0 ) ! 基準緯度 phi0 から空間距離 y [m] 離れた位置における緯度 [rad]. ! y は北に計算する際は正値, 南に計算する際は負値を与えれば計算可能. use Phys_Const use Math_Const implicit none real, intent(in) :: y ! 基準緯度 phi0 からの空間距離 [m] (北向きが正) real, intent(in) :: phi0 ! 基準緯度 [rad] dis2lat=y/radius+phi0 return end function
Function : | |||
dis2lon : | real | ||
x : | real, intent(in)
| ||
lon0 : | real, intent(in)
| ||
phi0 : | real, intent(in)
|
基準経度 lon0 から空間距離 x [m] 離れた位置における経度 [rad]. ただし, 基準緯度 phi0 [rad] から同緯度上で計測した距離を用いる. x は東に計算する際は正値, 西に計算する際は負値を与えれば計算可能.
real function dis2lon( x, lon0, phi0 ) ! 基準経度 lon0 から空間距離 x [m] 離れた位置における経度 [rad]. ! ただし, 基準緯度 phi0 [rad] から同緯度上で計測した距離を用いる. ! x は東に計算する際は正値, 西に計算する際は負値を与えれば計算可能. use Phys_Const use Math_Const implicit none real, intent(in) :: x ! 基準経度 lon0 からの空間距離 [m] (東向きが正) real, intent(in) :: lon0 ! 基準経度 [rad] real, intent(in) :: phi0 ! 基準緯度 [rad] dis2lon=x/(radius*cos(phi0))+lon0 return end function
Function : | |||
dis2mlat : | real | ||
y : | real, intent(in)
| ||
phi0 : | real, intent(in)
|
基準緯度 phi0 から空間距離 y [m] 離れた位置における緯度 [rad]. ただし, x は東方向に正, 西方向に負を与えれば計算可能.
real function dis2mlat(y,phi0) ! 基準緯度 phi0 から空間距離 y [m] 離れた位置における緯度 [rad]. ! ただし, x は東方向に正, 西方向に負を与えれば計算可能. use Phys_Const use Math_Const implicit none real, intent(in) :: y ! 基準緯度 phi0 からの空間距離 [rad] (北向き正). real, intent(in) :: phi0 ! 基準緯度 [rad] dis2mlat=asin(tanh(log(tan(0.25*pi+0.5*phi0))+y/radius)) return end function
Function : | |||
dis2mlon : | real | ||
x : | real, intent(in)
| ||
lam0 : | real, intent(in)
|
基準経度 lam0 から地図距離 x [m] 離れた位置における経度 [rad]. ただし, x は東方向に正, 西方向に負を与えれば計算可能.
real function dis2mlon(x,lam0) ! 基準経度 lam0 から地図距離 x [m] 離れた位置における経度 [rad]. ! ただし, x は東方向に正, 西方向に負を与えれば計算可能. use Phys_Const implicit none real, intent(in) :: x ! 基準経度 lam0 からの空間距離 [m] (東向きが正) real, intent(in) :: lam0 ! 基準経度 [rad] dis2mlon=x/radius+lam0 return end function
Function : | |||
lonlat2lamdis : | real | ||
lon : | real, intent(in)
| ||
phi : | real, intent(in)
| ||
lon0 : | real, intent(in)
| ||
phi1 : | real, intent(in)
| ||
phi2 : | real, intent(in)
| ||
phi0 : | real, intent(in), optional
|
基準緯度 phi1, phi2, 基準経度 lon0 から経度緯度 lon, phi [rad] 離れた 位置までの地図上の距離 [m].
real function lonlat2lamdis( lon, phi, lon0, phi1, phi2, phi0 ) ! 基準緯度 phi1, phi2, 基準経度 lon0 から経度緯度 lon, phi [rad] 離れた ! 位置までの地図上の距離 [m]. use Phys_Const use Math_Const implicit none real, intent(in) :: lon ! 求めたい点の経度 [rad]. real, intent(in) :: phi ! 求めたい点の緯度 [rad]. real, intent(in) :: lon0 ! 基準経度 [rad] real, intent(in) :: phi1 ! 基準緯度 1 [rad] real, intent(in) :: phi2 ! 基準緯度 2 [rad] real, intent(in), optional :: phi0 ! 地図座標基準緯度 0 [rad]. ! phi0 が設定されている場合, y 座標の距離を求める. real :: n real :: rho, rho0 n=log(cos(phi1)/cos(phi2))/log(tan(0.25*pi-0.5*phi1)/tan(0.25*pi-0.5*phi2)) rho=(cos(phi1)*(tan(0.25*pi-0.5*phi))**n)/(n*(tan(0.25*pi-0.5*phi1))**n) if(present(phi0))then rho0=(cos(phi1)*(tan(0.25*pi-0.5*phi0))**n)/(n*(tan(0.25*pi-0.5*phi1))**n) lonlat2lamdis=rho0-rho*cos(n*(lon-lon0)) else lonlat2lamdis=rho*sin(n*(lon-lon0)) end if return end function