Skip to content

Commit

Permalink
Hierarchie and visibility
Browse files Browse the repository at this point in the history
  • Loading branch information
p4ken committed May 26, 2024
1 parent 3d81de3 commit 0373a9a
Show file tree
Hide file tree
Showing 4 changed files with 112 additions and 303 deletions.
83 changes: 6 additions & 77 deletions src/coord.rs
Original file line number Diff line number Diff line change
@@ -1,82 +1,11 @@
use std::ops::Mul;
/// 度
pub type Degree = f64;

/// Latitude and longitude in degrees.
pub struct Degree(Geodetic<f64>); // 0.14ns (f32: 77ms)
impl From<MilliSecond> for Degree {
fn from(ms: MilliSecond) -> Self {
todo!()
}
}
impl From<NanoSecond> for Degree {
fn from(value: NanoSecond) -> Self {
todo!()
}
}

// pub struct MicroDegree(Geodetic<i32>); // 8% 22cm

/// Latitude and longitude in milli seconds.
pub struct MilliSecond(pub(crate) Geodetic<i32>); // 30% 60mm

// pub struct MicroSecond(Geodetic<i64>); // 0% 0.06mm

/// Latitude and longitude in nano seconds.
pub struct NanoSecond(pub(crate) Geodetic<i64>); // 0.007% 0mm
pub struct NanoSecond_ {
pub lat: i64,
pub lon: i64,
}
pub type XY = (Degree, Degree);

// pub struct Degree {
// int: i16,
// nanos: i32,
// }

// NanoSecondの方がよい
// pub struct Second {
// second: i32, // 0.03%
// micro: i32, // 0.04%
// }

/// Latitude and longitude.
#[derive(Debug)]
pub struct Geodetic<T> {
/// Latitude
pub lat: T,

/// Longitude
pub lon: T,
}
// impl<T: Mul<Output = T> + Copy> Mul<T> for Geodetic<T> {
// type Output = Self;
// fn mul(self, rhs: T) -> Self::Output {
// Self {
// lat: self.lat * rhs,
// lon: self.lon * rhs,
// }
// }
// }
#[cfg(feature = "geo-types")]
impl From<geo_types::Coord> for Geodetic<Degree> {
fn from(coord: geo_types::Coord) -> Self {
geo_types::Point::new(1.0, 1.0);
todo!()
}
}

/// Latitude and longitude.
#[derive(Debug)]
pub struct LatLon {
lat_us: i64,
lon_us: i64,
}
impl LatLon {
fn from_millis(lat_ms: i32, lon_ms: i32) {}
fn millis(&self) -> (i32, i32) {
todo!()
}
fn from_degrees(lat_d: f64, lon_d: f64) {}
fn degrees(&self) -> (f64, f64) {
pub struct LatLon(pub Degree, pub Degree);
impl From<LatLon> for XY {
fn from(bl: LatLon) -> Self {
todo!()
}
}
Expand Down
100 changes: 100 additions & 0 deletions src/crs.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
use crate::{Degree, LatLon, XY};

/// 日本測地系 Tokyo Datum
pub struct TokyoDatum {
pub lat: Degree,
pub lon: Degree,
}
impl TokyoDatum {
// Bessel楕円体

pub fn with_xy(xy: impl Into<XY>) -> Self {
let (x, y) = xy.into();
Self { lat: y, lon: x }
}

/// `tky2jgd.par` を用いて [`JGD2000`] へ変換する
pub fn to_jgd2000(self) -> JGD2000 {
// 国土地理院時報(2002,97集)「世界測地系移行のための座標変換ソフトウェア”TKY2JGD"」
// https://www.gsi.go.jp/common/000063173.pdf
// > 地域毎の変換パラメータの格子点は,3 次メッシュの中央ではなく,南西隅に対応する。
todo!()
}

/// 離島位置の補正量を用いて [`Tokyo97`] へ変換する
pub fn to_tokyo97(self) {
// 日本測地系における離島位置の補正量
// https://www.jstage.jst.go.jp/article/sokuchi1954/49/3/49_3_181/_pdf
}
}

/// 日本測地系 Tokyo97
pub struct Tokyo97<T>(T);

impl<T> Tokyo97<T> {
/// 3パラメータを用いて [`JGD2000`] へ変換する
pub fn to_jgd2000(self) {}

/// 離島位置の補正量を用いて [`TokyoDatum`] へ逆変換する
pub fn to_tokyo(self) {
// 日本測地系における離島位置の補正量
// https://www.jstage.jst.go.jp/article/sokuchi1954/49/3/49_3_181/_pdf
}
}

/// Japanese Geodetic Datum 2000
///
/// 世界測地系 (JGD2000)
pub struct JGD2000 {
pub lat: Degree,
pub lon: Degree,
}

impl JGD2000 {
// GRS80楕円体

/// `touhokutaiheiyouoki2011.par` を用いて [`JGD2011`] へ変換する
pub fn to_jgd2011(self) -> JGD2011 {
// 地震時地殻変動に伴う座標値の変化を補正するソフトウェア“PatchJGD”
// https://www.jstage.jst.go.jp/article/sokuchi/55/4/55_4_355/_pdf/-char/ja
todo!()
}

/// `tky2jgd.par` を用いて [`TokyoDatum`] へ逆変換する
pub fn to_tokyo(self) {}

/// 3パラメータを用いて [`Tokyo97`] へ逆変換する
pub fn to_tokyo97(self) {
// https://www.drm.jp/jisx0410/JisGridSystem_1_Geoid.html

// https://www.jstage.jst.go.jp/article/sokuchi1954/43/4/43_4_231/_pdf
// > このパラメータによって定義される日本測地系がTokyo97である
}
}

/// 世界測地系 JGD2011
pub struct JGD2011 {
pub lat: Degree,
pub lon: Degree,
}

impl JGD2011 {
pub fn xy(self) -> XY {
(self.lon, self.lat)
}

pub fn latlon(self) -> LatLon {
todo!()
}

/// `touhokutaiheiyouoki2011.par` を用いて [`JGD2000`] へ逆変換する
pub fn to_jgd2000(self) {}
}

// /// 平面直角座標系
// https://vldb.gsi.go.jp/sokuchi/surveycalc/surveycalc/algorithm/xy2bl/xy2bl.htm
// https://sw1227.hatenablog.com/entry/2018/11/30/200702
// pub struct PlaneRectangular<T>(T);

// /// Webメルカトル座標系
// pub struct WebMercator<T>(T);
120 changes: 6 additions & 114 deletions src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,120 +1,12 @@
mod coord;
mod crs;
mod grid;
mod island;
mod par;

pub use grid::TKY2JGD;

/// 度
pub type Degree = f64;

pub type XY = (Degree, Degree);

pub use grid::Grid;

/// 日本測地系 Tokyo Datum
pub struct TokyoDatum {
pub lat: Degree,
pub lon: Degree,
}
impl TokyoDatum {
// Bessel楕円体

pub fn with_xy(xy: impl Into<XY>) -> Self {
let (x, y) = xy.into();
Self { lat: y, lon: x }
}

/// `tky2jgd.par` を用いて [`JGD2000`] へ変換する
pub fn to_jgd2000(self) -> JGD2000 {
// 国土地理院時報(2002,97集)「世界測地系移行のための座標変換ソフトウェア”TKY2JGD"」
// https://www.gsi.go.jp/common/000063173.pdf
// > 地域毎の変換パラメータの格子点は,3 次メッシュの中央ではなく,南西隅に対応する。
todo!()
}

/// 離島位置の補正量を用いて [`Tokyo97`] へ変換する
pub fn to_tokyo97(self) {
// 日本測地系における離島位置の補正量
// https://www.jstage.jst.go.jp/article/sokuchi1954/49/3/49_3_181/_pdf
}
}

/// 日本測地系 Tokyo97
pub struct Tokyo97<T>(T);

/// Japanese Geodetic Datum 2000
///
/// 世界測地系 (JGD2000)
pub struct JGD2000 {
pub lat: Degree,
pub lon: Degree,
}

/// 世界測地系 JGD2011
pub struct JGD2011 {
pub lat: Degree,
pub lon: Degree,
}

/// 平面直角座標系
// https://vldb.gsi.go.jp/sokuchi/surveycalc/surveycalc/algorithm/xy2bl/xy2bl.htm
// https://sw1227.hatenablog.com/entry/2018/11/30/200702
// pub struct PlaneRectangular<T>(T);

/// Webメルカトル座標系
// pub struct WebMercator<T>(T);

impl<T> Tokyo97<T> {
/// 3パラメータを用いて [`JGD2000`] へ変換する
pub fn to_jgd2000(self) {}

/// 離島位置の補正量を用いて [`TokyoDatum`] へ逆変換する
pub fn to_tokyo(self) {
// 日本測地系における離島位置の補正量
// https://www.jstage.jst.go.jp/article/sokuchi1954/49/3/49_3_181/_pdf
}
}

impl JGD2000 {
// GRS80楕円体

/// `touhokutaiheiyouoki2011.par` を用いて [`JGD2011`] へ変換する
pub fn to_jgd2011(self) -> JGD2011 {
// 地震時地殻変動に伴う座標値の変化を補正するソフトウェア“PatchJGD”
// https://www.jstage.jst.go.jp/article/sokuchi/55/4/55_4_355/_pdf/-char/ja
todo!()
}

/// `tky2jgd.par` を用いて [`TokyoDatum`] へ逆変換する
pub fn to_tokyo(self) {}

/// 3パラメータを用いて [`Tokyo97`] へ逆変換する
pub fn to_tokyo97(self) {
// https://www.drm.jp/jisx0410/JisGridSystem_1_Geoid.html

// https://www.jstage.jst.go.jp/article/sokuchi1954/43/4/43_4_231/_pdf
// > このパラメータによって定義される日本測地系がTokyo97である
}
}

impl JGD2011 {
pub fn xy(self) -> XY {
(self.lon, self.lat)
}

pub fn latlon(self) -> LatLon {
todo!()
}

/// `touhokutaiheiyouoki2011.par` を用いて [`JGD2000`] へ逆変換する
pub fn to_jgd2000(self) {}
}

pub struct LatLon(pub Degree, pub Degree);
impl From<LatLon> for XY {
fn from(bl: LatLon) -> Self {
todo!()
}
}
pub use coord::{Degree, LatLon, XY};
pub use crs::{Tokyo97, TokyoDatum, JGD2000, JGD2011};
pub use grid::{Grid, TKY2JGD};

pub fn from_tokyo(p: impl Into<XY>) -> TokyoDatum {
todo!()
Expand Down
Loading

0 comments on commit 0373a9a

Please sign in to comment.