Bathymetry processing (subdomain + 1d interpolation)
This commit is contained in:
parent
d69a39f25b
commit
f42edfb8f8
4 changed files with 244 additions and 0 deletions
100
data/processing/lambert.py
Normal file
100
data/processing/lambert.py
Normal file
|
@ -0,0 +1,100 @@
|
|||
import numpy as np
|
||||
|
||||
|
||||
class Lambert:
|
||||
def __init__(
|
||||
self,
|
||||
X0=1.7e6,
|
||||
Y0=2.2e6,
|
||||
lambda0=3,
|
||||
phi0=43,
|
||||
phi1=42.25,
|
||||
phi2=43.75,
|
||||
a=6378137,
|
||||
e=0.081819190842622,
|
||||
):
|
||||
self._X0 = X0
|
||||
self._Y0 = Y0
|
||||
|
||||
self._lambda0 = np.radians(lambda0)
|
||||
self._phi0 = np.radians(phi0)
|
||||
self._phi1 = np.radians(phi1)
|
||||
self._phi2 = np.radians(phi2)
|
||||
|
||||
self._a = a
|
||||
self._e = e
|
||||
|
||||
self._set_n()
|
||||
self._set_rho0()
|
||||
|
||||
def cartesian(self, lam, phi):
|
||||
lam = np.radians(lam)
|
||||
phi = np.radians(phi)
|
||||
|
||||
theta = self._n * (lam - self._lambda0)
|
||||
rho = self._rho(phi)
|
||||
rho0 = self._rho(self._phi0)
|
||||
|
||||
X = self._X0 + rho * np.sin(theta)
|
||||
Y = self._Y0 + rho0 - rho * np.cos(theta)
|
||||
|
||||
return X, Y
|
||||
|
||||
def _set_n(self):
|
||||
self._n = (
|
||||
np.log(np.cos(self._phi2) / np.cos(self._phi1))
|
||||
+ (
|
||||
np.log(
|
||||
(1 - (self._e * np.sin(self._phi1) ** 2))
|
||||
/ (1 - (self._e * np.sin(self._phi2) ** 2))
|
||||
)
|
||||
/ 2
|
||||
)
|
||||
) / (
|
||||
np.log(
|
||||
(
|
||||
np.tan(self._phi1 / 2 + np.pi / 4)
|
||||
* (
|
||||
(1 - self._e * np.sin(self._phi2))
|
||||
* (1 + self._e * np.sin(self._phi1))
|
||||
)
|
||||
** (self._e / 2)
|
||||
)
|
||||
/ (
|
||||
np.tan(self._phi2 / 2 + np.pi / 4)
|
||||
* (
|
||||
(1 + self._e * np.sin(self._phi2))
|
||||
* (1 - self._e * np.sin(self._phi1))
|
||||
)
|
||||
** (self._e / 2)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
def _set_rho0(self):
|
||||
self._rho0 = (
|
||||
self._a
|
||||
* np.cos(self._phi1)
|
||||
/ (self._n * np.sqrt(1 - self._e**2 * np.sin(self._phi1) ** 2))
|
||||
* (
|
||||
np.tan(self._phi1 / 2 + np.pi / 4)
|
||||
* (
|
||||
(1 - self._e * np.sin(self._phi1))
|
||||
/ (1 + self._e * np.sin(self._phi1))
|
||||
)
|
||||
** (self._e / 2)
|
||||
)
|
||||
** self._n
|
||||
)
|
||||
|
||||
def _rho(self, phi):
|
||||
return (
|
||||
self._rho0
|
||||
* (
|
||||
1
|
||||
/ np.tan(phi / 2 + np.pi / 4)
|
||||
* ((1 + self._e * np.sin(phi)) / (1 - self._e * np.sin(phi)))
|
||||
** (self._e / 2)
|
||||
)
|
||||
** self._n
|
||||
)
|
Reference in a new issue