pub struct Coordinate { /* private fields */ }Expand description
緯度・経度・高度を表す型。
内部的には下記のような構造体として定義されており、空間 ID 上で扱える座標に対する制約が常に満たされる。
この型は PartialOrd を実装していますが、これは主に BTreeSet や BTreeMap
といった順序付きコレクションにおける格納および探索を目的としたものであり、。空間的な位置関係における「大小」を意味するものではない。
pub struct Coordinate {
latitude: f64,
longitude: f64,
altitude: f64,
}Implementations§
Source§impl Coordinate
impl Coordinate
Sourcepub fn new(latitude: f64, longitude: f64, altitude: f64) -> Result<Self, Error>
pub fn new(latitude: f64, longitude: f64, altitude: f64) -> Result<Self, Error>
指定された緯度・経度・高度から Coordinate を生成する。
各引数は、空間 ID 上で扱える座標として有効な範囲に収まっている必要がある。 範囲外の値が指定された場合、この関数は対応するエラーを返す。
§引数
latitude- 緯度(-85.0511 〜 85.0511)longitude- 経度(-180.0 〜 180.0)altitude- 高度(-33,554,432.0 〜 33,554,432.0)
§戻り値
- 有効な値が指定された場合は
Ok(Coordinate)を返す。 - いずれかの値が範囲外の場合は、対応する
Errorを返す。
§Example
let coord = Coordinate::new(35.0, 139.0, 10.0).unwrap();
assert_eq!(coord.latitude(), 35.0);
assert_eq!(coord.longitude(), 139.0);
assert_eq!(coord.altitude(), 10.0);Sourcepub unsafe fn new_unchecked(
latitude: f64,
longitude: f64,
altitude: f64,
) -> Coordinate
pub unsafe fn new_unchecked( latitude: f64, longitude: f64, altitude: f64, ) -> Coordinate
値の妥当性検証を行わずに Coordinate を生成する。
この関数は緯度・経度・高度に対する範囲チェックを一切行わない。 呼び出し側は、渡す値が空間 ID 上で扱える有効な範囲に収まっていることを 保証する責任を負う。
§Safety
この関数は unsafe である。
不正な値を指定した場合、Coordinate が前提としている不変条件が破られ、
以降の処理で未定義な振る舞いまたは論理的な不整合を引き起こす可能性があるため、入力値の正当性が外部で十分に検証されている場合にのみ使用せよ。
Sourcepub fn latitude(&self) -> f64
pub fn latitude(&self) -> f64
緯度を返す。
返される値は度数法(degree)で表され、 常にWEBメルカトル上で扱える有効な範囲(-85.0511 〜 85.0511)内に収まる。
§Example
let coord = Coordinate::new(43.068564, 41.3507138, 30.0).unwrap();
assert_eq!(coord.latitude(), 43.068564);Sourcepub fn longitude(&self) -> f64
pub fn longitude(&self) -> f64
経度を返す。
返される値は度数法(degree)で表され、 常に -180.0 〜 180.0 の範囲内に収まる。
§Example
let coord = Coordinate::new(35.4095198,136.7566027, 0.0).unwrap();
assert_eq!(coord.longitude(), 136.7566027);Sourcepub fn altitude(&self) -> f64
pub fn altitude(&self) -> f64
高度を返す。
される値はメートル(m)で表され、
常に-33,554,432.0 ..= 33,554,432.0の範囲内に収まる。
§Example
let coord = Coordinate::new(34.9851603, 135.7584294, 20.0).unwrap();
assert_eq!(coord.altitude(), 20.0);Sourcepub fn set_latitude(&mut self, latitude: f64) -> Result<(), Error>
pub fn set_latitude(&mut self, latitude: f64) -> Result<(), Error>
緯度を設定する。
指定された値が有効な範囲外の場合、この関数はエラーを返し、 内部の値は変更されない。
§Example
let mut coord = Coordinate::new(35.0, 41.3507138, 30.0).unwrap();
coord.set_latitude(43.068564);
assert_eq!(coord.latitude(), 43.068564);Sourcepub fn set_longitude(&mut self, longitude: f64) -> Result<(), Error>
pub fn set_longitude(&mut self, longitude: f64) -> Result<(), Error>
経度を設定する。
指定された値が有効な範囲外の場合、この関数はエラーを返し、 内部の値は変更されない。
§Example
let mut coord = Coordinate::new(35.4095198,130.0, 0.0).unwrap();
coord.set_longitude(136.7566027);
assert_eq!(coord.longitude(), 136.7566027);Sourcepub fn set_altitude(&mut self, altitude: f64) -> Result<(), Error>
pub fn set_altitude(&mut self, altitude: f64) -> Result<(), Error>
高度を設定する。
単位はメートル(m)である。 指定された値が有効な範囲外の場合、この関数はエラーを返し、 内部の値は変更されない。
§Example
let mut coord = Coordinate::new(34.9851603, 135.7584294, -10.0).unwrap();
coord.set_altitude(20.0);
assert_eq!(coord.altitude(), 20.0);Sourcepub fn distance(&self, other: &Coordinate) -> f64
pub fn distance(&self, other: &Coordinate) -> f64
他の Coordinate との距離をメートル単位で返す。
- 単位はメートル(m)です
- WGS84 楕円体を前提とした近似距離。
§引数
other- 距離を計算する対象の座標
§戻り値
- 2 点間の距離(メートル)
§Example
let coord_tokyo = Coordinate::new(35.681382, 139.76608399999998, 0.0).unwrap();
let coord_sinagawa = Coordinate::new(35.630152, 139.74044000000004, 10.0).unwrap();
let d = coord_tokyo.distance(&coord_sinagawa);
assert_eq!(&d, &6140.165513581259);Sourcepub fn eq_epsilon(&self, other: &Coordinate, epsilon: f64) -> bool
pub fn eq_epsilon(&self, other: &Coordinate, epsilon: f64) -> bool
Coordinateが同じ位置にあるかを判定します 2点間の直線距離が epsilon 以内にあるかを判定します
Sourcepub fn center_gravity<I>(coordinates: I) -> Coordinate
pub fn center_gravity<I>(coordinates: I) -> Coordinate
与えられた座標群の重心を計算する。
この関数は IntoIterator を受け入れるため、スライス &[Coordinate]、
Vec<Coordinate>、または iter_coords() などのイテレータを直接渡すことができる。
内部で Borrow トレイトを利用しているため、要素が実体か参照かを問わず動作する。
座標群が空の場合は、Coordinate::default() を返す。
§パラメーター
coordinates— 重心を計算する対象となる座標の集合(イテレータ、スライス、Vecなど)
§動作例
スライスからの計算:
let points = [
Coordinate::new(0.0, 0.0, 10.0).unwrap(),
Coordinate::new(10.0, 10.0, 20.0).unwrap(),
];
let center = Coordinate::center_gravity(&points);
assert_eq!(center.latitude(), 5.0);Trait Implementations§
Source§impl Clone for Coordinate
impl Clone for Coordinate
Source§fn clone(&self) -> Coordinate
fn clone(&self) -> Coordinate
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for Coordinate
Source§impl CoverSingleIds for Coordinate
impl CoverSingleIds for Coordinate
Source§impl Debug for Coordinate
impl Debug for Coordinate
Source§impl Default for Coordinate
緯度・経度・高度のすべてが 0.0 に設定された座標を返す。
impl Default for Coordinate
緯度・経度・高度のすべてが 0.0 に設定された座標を返す。
Source§impl<'de> Deserialize<'de> for Coordinate
impl<'de> Deserialize<'de> for Coordinate
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl From<Coordinate> for Ecef
impl From<Coordinate> for Ecef
Source§fn from(value: Coordinate) -> Self
fn from(value: Coordinate) -> Self
CoordinateをEcefへの変換。
let coord = Coordinate::new(43.068564, 41.3507138, 30.0).unwrap();
let ecef: Ecef = coord.into();
print!("{},{},{}", ecef.x(), ecef.y(), ecef.z());
assert_eq!(ecef.x(), 3503254.6369501497);
assert_eq!(ecef.y(), 3083182.6924748584);
assert_eq!(ecef.z(), 4333089.862951963);Source§impl PartialEq for Coordinate
impl PartialEq for Coordinate
Source§fn eq(&self, other: &Coordinate) -> bool
fn eq(&self, other: &Coordinate) -> bool
self and other values to be equal, and is used by ==.