public class HorizontalPosition extends java.lang.Object implements java.lang.Comparable<HorizontalPosition>
Position
Latitude LongitudeThis class is immutable.
コンストラクタと説明 |
---|
HorizontalPosition(double latitude,
double longitude)
地理緯度、経度でのコンストラクト
|
修飾子とタイプ | メソッドと説明 |
---|---|
int |
compareTo(HorizontalPosition o)
Sorting order is Latitude → Longitude
|
boolean |
equals(java.lang.Object obj) |
double |
getAzimuth(HorizontalPosition position) |
double |
getBackAzimuth(HorizontalPosition position) |
double |
getEpicentralDistance(HorizontalPosition horizontalPosition) |
double |
getGeocentricLatitude() |
double |
getLatitude() |
double |
getLongitude()
(-180:180]
|
HorizontalPosition |
getMidpoint(HorizontalPosition position)
元点loc0と入力locとの大円上の中点を求める 半径は考慮しない locとloc0のなす震央距離を⊿
loc0を北極に持って行ったときのlocの経度をphi1 とすると、点(r, ⊿/2, 0)
をz軸周りにphi1回転して、loc0を北極から元の位置に戻す作業をすればいい
|
double |
getPath(HorizontalPosition position)
d = 2・N・ψ
ここに, 地点1の緯度φ1,経度λ1,地点2の緯度φ2,経度λ2のときの直交座標地を それぞれ (x1,y1,z1),(x2,y2,z2)
とすると2地点間の直距離 Rn は
A = 6378140m(地球赤道半径),B = 6356755m(地球極半径),e**2 = (A**2 - B**2)/A**2 e:離心率
N1 = A/sqrt(1 - e**2・sin**2φ1), N_2 = A/sqrt(1 - e2・sin**2φ2) x1 =
N_1・cosφ1cosλ_1, x2 = N_2・cosφ_2cosλ_2 y1 = N_1・cosφ1sinλ_1, y2 =
N_2・cosφ_2sinλ_2 z1 = N_1・(1 - e**2)sinφ_1, z2 = N_2・(1 - e**2)sinφ_2
中心から2地点を見込んだ中心角の半分の角 ψ は
ψ = sin-1( (Rn/2)/N ), N = (N1 + N2)/2
ただし,計算に使用した緯度・経度はラジアンに変換。
|
double |
getPhi()
極座標でのφ
|
double |
getTheta()
極座標でのθ
|
int |
hashCode() |
Location |
toLocation(double r) |
Point2D |
toPoint2D() |
java.lang.String |
toString() |
XYZ |
toXYZ(double r) |
public HorizontalPosition(double latitude, double longitude)
latitude
- [deg] geographic latitude [-90, 90] latitude
longitude
- [deg] (-180, 360)public int compareTo(HorizontalPosition o)
compareTo
インタフェース内 java.lang.Comparable<HorizontalPosition>
public int hashCode()
hashCode
クラス内 java.lang.Object
public boolean equals(java.lang.Object obj)
equals
クラス内 java.lang.Object
public Location toLocation(double r)
r
- [km] radiuspublic double getAzimuth(HorizontalPosition position)
position
- HorizontalPosition
to compute azimuth withpublic double getBackAzimuth(HorizontalPosition position)
position
- HorizontalPosition
to compute back azimuth withpublic double getLatitude()
public double getLongitude()
public double getTheta()
public double getPhi()
public double getEpicentralDistance(HorizontalPosition horizontalPosition)
horizontalPosition
- HorizontalPosition
public HorizontalPosition getMidpoint(HorizontalPosition position)
position
- HorizontalPosition
of targetHorizontalPosition
of the center between the position and
thispublic java.lang.String toString()
toString
クラス内 java.lang.Object
public double getGeocentricLatitude()
public double getPath(HorizontalPosition position)
ここに, 地点1の緯度φ1,経度λ1,地点2の緯度φ2,経度λ2のときの直交座標地を それぞれ (x1,y1,z1),(x2,y2,z2) とすると2地点間の直距離 Rn は
A = 6378140m(地球赤道半径),B = 6356755m(地球極半径),e**2 = (A**2 - B**2)/A**2 e:離心率
N1 = A/sqrt(1 - e**2・sin**2φ1), N_2 = A/sqrt(1 - e2・sin**2φ2) x1 = N_1・cosφ1cosλ_1, x2 = N_2・cosφ_2cosλ_2 y1 = N_1・cosφ1sinλ_1, y2 = N_2・cosφ_2sinλ_2 z1 = N_1・(1 - e**2)sinφ_1, z2 = N_2・(1 - e**2)sinφ_2
中心から2地点を見込んだ中心角の半分の角 ψ は
ψ = sin-1( (Rn/2)/N ), N = (N1 + N2)/2
ただし,計算に使用した緯度・経度はラジアンに変換。標高は無視して計算。 TODO ずれる
position
- HorizontalPosition
of targetpublic Point2D toPoint2D()