地图投影中的墨卡托投影
1、基础和定义
- R R R 地球半径
- 弧长公式 l = R α l = R \alpha l=Rα
2、地图投影的定义
地图投影: 一种将球面上的点转换为平面上的点的方法。
目标是建立平面上的点(平面直角坐标系)和球面上的点(经纬度)之间的函数关系。
x
=
f
1
(
ϕ
,
γ
)
y
=
f
2
(
ϕ
,
γ
)
x = f1(\phi, \gamma) \\ y = f2(\phi, \gamma) \\
x=f1(ϕ,γ)y=f2(ϕ,γ)
2、地图投影变形
投影变形分为: 长度变形, 面积变形, 角度变形。
1) 长度变形
长度比 : μ = d s ′ / d s = A ′ B ′ A B 长度比: \mu = ds'/ds = \frac{A'B'}{AB} 长度比:μ=ds′/ds=ABA′B′
2) 面积变形
面积比 : P = d F ′ / d F = S A ′ B ′ C ′ D ′ S A B C D 面积比: P = dF'/dF = \frac{S_{A'B'C'D'}}{S_{ABCD}} 面积比:P=dF′/dF=SABCDSA′B′C′D′
3) 角度变形
Δ
u
=
μ
−
μ
′
=
(
180
−
2
α
)
−
(
180
−
2
α
′
)
=
2
(
α
−
α
′
)
\begin{aligned} \Delta u &= \mu - \mu' \\ &= (180 - 2 \alpha) - (180 - 2 \alpha') \\ &= 2(\alpha - \alpha') \end{aligned}
Δu=μ−μ′=(180−2α)−(180−2α′)=2(α−α′)
A点的坐标为(x, y)
A’点的坐标为(x’, y’)
t a n α = y x , t a n α ′ = y ′ x ′ tan \thinspace \alpha = \frac{y}{x}, \quad tan \thinspace \alpha' = \frac{y'}{x'} tanα=xy,tanα′=x′y′
a极大经度长度比, b极大纬度长度比,有:
a
=
y
x
,
b
=
y
′
y
a = \frac{y}{x}, \quad b = \frac{y'}{y}
a=xy,b=yy′
有:
t
a
n
α
′
=
b
y
a
x
=
b
a
t
a
n
α
tan \thinspace \alpha' = \frac{by}{ax} = \frac{b}{a} tan \thinspace \alpha
tanα′=axby=abtanα
将上式两边用
t
a
n
α
tan \thinspace \alpha
tanα 各减和加 即:
t
a
n
α
−
t
a
n
α
′
=
t
a
n
α
−
b
a
t
a
n
α
=
t
a
n
α
(
1
−
b
a
)
tan \thinspace \alpha - tan \thinspace \alpha' = tan \thinspace \alpha - \frac{b}{a} tan \thinspace \alpha = tan \thinspace \alpha(1-\frac{b}{a})
tanα−tanα′=tanα−abtanα=tanα(1−ab)
t a n α + t a n α ′ = t a n α + b a t a n α = t a n α ( 1 + b a ) tan \thinspace \alpha + tan \thinspace \alpha' = tan \thinspace \alpha + \frac{b}{a} tan \thinspace \alpha= tan \thinspace \alpha(1 + \frac{b}{a}) tanα+tanα′=tanα+abtanα=tanα(1+ab)
因为:
t
a
n
a
+
t
a
n
b
=
s
i
n
a
c
o
s
a
+
s
i
n
b
c
o
s
b
=
s
i
n
a
c
o
s
b
+
s
i
n
b
c
o
s
a
c
o
s
a
c
o
s
b
=
s
i
n
(
a
+
b
)
c
o
s
a
c
o
s
b
\begin{aligned} tan \thinspace a + tan \thinspace b &= \frac{sin \thinspace a}{cos \thinspace a} + \frac{sin \thinspace b}{cos \thinspace b} \\ &= \frac{sin \thinspace a \thinspace cos \thinspace b + sin \thinspace b \thinspace cos \thinspace a}{cos \thinspace a \thinspace cos \thinspace b} \\ &= \frac{sin \thinspace (a+b)}{cos \thinspace a \thinspace cos \thinspace b} \end{aligned}
tana+tanb=cosasina+cosbsinb=cosacosbsinacosb+sinbcosa=cosacosbsin(a+b)
所以:
s
i
n
(
α
−
α
′
)
c
o
s
α
c
o
s
α
′
=
a
−
b
a
t
a
n
α
\frac{sin(\alpha - \alpha')}{cos \alpha \thinspace cos \alpha'} = \frac{a-b}{a} tan \alpha
cosαcosα′sin(α−α′)=aa−btanα
s i n ( α + α ′ ) c o s α c o s α ′ = a + b a t a n α \frac{sin(\alpha + \alpha')}{cos \alpha \thinspace cos \alpha'} = \frac{a+b}{a} tan \alpha cosαcosα′sin(α+α′)=aa+btanα
将上面两个式子相除有:
s
i
n
(
α
−
α
′
)
s
i
n
(
α
+
α
′
)
=
a
−
b
a
+
b
\frac{sin(\alpha - \alpha')}{sin(\alpha + \alpha')} = \frac{a-b}{a+b} \\
sin(α+α′)sin(α−α′)=a+ba−b
有:
s
i
n
(
α
−
α
′
)
=
a
−
b
a
+
b
s
i
n
(
α
+
α
′
)
sin(\alpha - \alpha') = \frac{a-b}{a+b} sin(\alpha + \alpha')
sin(α−α′)=a+ba−bsin(α+α′)
那么任意角度变形
Δ
u
\Delta u
Δu:
s
i
n
(
Δ
u
2
)
=
a
−
b
a
+
b
s
i
n
(
α
+
α
′
)
sin(\frac{\Delta u}{2}) = \frac{a-b}{a+b} sin(\alpha + \alpha')
sin(2Δu)=a+ba−bsin(α+α′)
那么最大度变形
ω
\omega
ω:
s
i
n
(
ω
2
)
=
a
−
b
a
+
b
sin(\frac{\omega}{2}) = \frac{a-b}{a+b}
sin(2ω)=a+ba−b
等角变换
如果是等角变换,那么
Δ
u
=
ω
=
0
\Delta u = \omega = 0
Δu=ω=0, 那么
a
=
b
a = b
a=b。
4) 变形椭圆
上面三种变形都可以使用变形椭圆来刻画。
在球面上取一个微分圆,投影到球面上会变成一个椭圆。这种方法叫变形椭圆。
m
m
m经线长度比,
n
n
n纬线长度比。
X
′
X
=
m
Y
′
Y
=
n
\frac{X'}{X} = m \quad\frac{Y'}{Y} = n
XX′=mYY′=n
带入到圆公式
x
2
+
y
2
=
1
x^2 + y^2 = 1
x2+y2=1, 有:
X
′
2
m
2
+
Y
′
2
n
2
=
1
\frac{X'^2}{m^2} + \frac{Y'^2}{n^2} = 1
m2X′2+n2Y′2=1
因此说明, 地球面上的微小圆,投影后通常会变为椭圆。
3、圆柱投影
当圆柱的中心轴与地球自转轴重合时, 称为正圆柱投影。
当圆柱的中心轴与地球自转轴垂直时, 横为正圆柱投影。
正圆柱投影特点:
- 纬线是一组彼此平行的直线。
- 经线是一组垂直于纬线的直线,且经线间隔相等
4、墨卡托投影
等角正轴圆柱
投影。由荷兰地图学家墨卡托(Mercator Gerardus,1512—1594)于1569年所创设,故又名墨卡托投影。
推导方式1
其中
R
R
R 是地球半径, 经度
λ
\lambda
λ,纬度
ϕ
\phi
ϕ:
ϕ
∈
(
−
π
2
,
π
2
)
\phi\in(-\frac{\pi}{2},\frac{\pi}{2}) \\
ϕ∈(−2π,2π)
λ ∈ ( − π , π ) \lambda\in(-\pi,\pi) \\ λ∈(−π,π)
B、C所在纬线圈的半径:
r
=
R
c
o
s
ϕ
r = R cos \phi
r=Rcosϕ
BC的弧长为纬线圈半径与两点经度差之积:
B
C
=
r
Δ
λ
=
R
c
o
s
ϕ
Δ
λ
BC = r \Delta \lambda = R cos \phi \Delta \lambda
BC=rΔλ=RcosϕΔλ
A B = R Δ ϕ AB = R \Delta \phi AB=RΔϕ
投影到平面后:
B
′
C
′
=
Δ
x
A
′
B
′
=
Δ
y
B'C' = \Delta x \\ A'B' = \Delta y \\
B′C′=ΔxA′B′=Δy
因为投影后将每一个纬线圈都放大到与赤道圆相同大小,所以投影后
Δ
x
\Delta x
Δx长度就是A’D’经度夹角与赤道圆半径的乘积,即:
Δ
x
=
R
Δ
λ
\Delta x = R \Delta \lambda
Δx=RΔλ
由于投影后需要保证航线角相同,所以:
B
C
A
B
=
B
′
C
′
A
′
B
′
\frac{BC}{AB} = \frac{B'C'}{A'B'}
ABBC=A′B′B′C′
带人有:
R
c
o
s
ϕ
Δ
λ
R
Δ
ϕ
=
Δ
x
Δ
y
\frac{R cos \phi \Delta \lambda}{R \Delta \phi} = \frac{\Delta x}{\Delta y} \\
RΔϕRcosϕΔλ=ΔyΔx
⇒ Δ y Δ ϕ = Δ x Δ λ cos ϕ \Rightarrow \frac{\Delta y}{\Delta\phi} = \frac{\Delta x}{\Delta\lambda\cos \phi} \\ ⇒ΔϕΔy=ΔλcosϕΔx
⇒ Δ y Δ ϕ = R Δ λ Δ λ cos ϕ = R c o s ϕ \Rightarrow \frac{\Delta y}{\Delta\phi} = \frac{R \Delta \lambda}{\Delta\lambda\cos \phi} = \frac{R}{cos \phi} ⇒ΔϕΔy=ΔλcosϕRΔλ=cosϕR
根据导数定义,上式即:
y
′
(
ϕ
)
=
R
cos
ϕ
y^\prime(\phi)=\frac{R}{\cos \phi}
y′(ϕ)=cosϕR
下面积分求
y
(
ϕ
)
y(\phi)
y(ϕ)就可以了:
y
(
ϕ
)
=
∫
y
′
(
ϕ
)
d
ϕ
=
R
∫
1
cos
ϕ
d
ϕ
=
R
∫
1
cos
2
ϕ
d
sin
ϕ
=
R
∫
1
1
−
sin
2
ϕ
d
sin
ϕ
\begin{aligned} y(\phi) &= \int y^\prime(\phi)d\phi=R\int\frac{1}{\cos\phi}d\phi \\ &= R\int\frac{1}{\cos^2\phi}d\sin\phi=R\int\frac{1}{1-\sin^2\phi}d\sin\phi \end{aligned}
y(ϕ)=∫y′(ϕ)dϕ=R∫cosϕ1dϕ=R∫cos2ϕ1dsinϕ=R∫1−sin2ϕ1dsinϕ
设
t
=
sin
ϕ
t = \sin \phi
t=sinϕ:
y
(
ϕ
)
=
R
∫
1
1
−
t
2
d
t
=
R
2
∫
(
1
1
+
t
+
1
1
−
t
)
d
t
y(\phi)=R\int\frac{1}{1-t^2}dt=\frac{R}{2}\int(\frac{1}{1+t}+\frac{1}{1-t})dt
y(ϕ)=R∫1−t21dt=2R∫(1+t1+1−t1)dt
易得:
y
(
ϕ
)
=
R
2
ln
∣
1
+
t
1
−
t
∣
=
R
2
ln
∣
1
+
sin
ϕ
1
−
sin
ϕ
∣
y(\phi)=\frac{R}{2}\ln|\frac{1+t}{1-t}|=\frac{R}{2}\ln|\frac{1+\sin\phi}{1-\sin\phi}|\\
y(ϕ)=2Rln∣1−t1+t∣=2Rln∣1−sinϕ1+sinϕ∣
y ( ϕ ) = R 2 ln ∣ ( 1 + sin ϕ ) 2 1 − sin 2 ϕ ∣ = R ln 1 + sin ϕ cos ϕ y(\phi) = \frac{R}{2}\ln|\frac{(1+\sin \phi)^2}{1-\sin^2\phi}|=R\ln\frac{1+\sin \phi}{\cos \phi} y(ϕ)=2Rln∣1−sin2ϕ(1+sinϕ)2∣=Rlncosϕ1+sinϕ
推导方式2
参考2
纬度使用 $\theta $ 表示。
x = λ y = f ( ϕ ) \begin{aligned} x &= \lambda \\ y &= f(\phi) \end{aligned} xy=λ=f(ϕ)
投影后的 y y y 坐标是关于纬度 ϕ \phi ϕ 的函数。
赤道的周长:
2
π
R
2\pi R
2πR
D点所在纬度圆的周长:
2
π
R
cos
θ
2 \pi R \cos \theta
2πRcosθ
因为所有纬度投影后都与赤道长度相同, 所以纬度处的任何线 θ \theta θ 最终都会水平拉伸 1 / cos θ 1/\cos \theta 1/cosθ
最后,为了满足等角的性质, 地图中水平拉伸某个因子的任何部分,例如
k
k
k ,必须由相同的因子 $k $垂直拉伸。这样做可以保留地图该部分的角度:
因此, 水平方向(x)被拉伸了 1 / cos θ 1/\cos \theta 1/cosθ, 那么垂直方向(x)也会被拉伸 1 / cos θ 1/\cos \theta 1/cosθ。
但是
k
x
kx
kx 和
k
y
ky
ky 这种线性等比缩放只有在这个面积非常小的情况小才成立。用极限表示就是:
l
i
m
Δ
θ
→
0
Δ
y
Δ
θ
=
d
y
d
θ
=
1
c
o
s
θ
lim_{\Delta \theta \to 0} \frac{\Delta y}{\Delta \theta} = \frac{dy}{d\theta} = \frac{1}{cos \theta}
limΔθ→0ΔθΔy=dθdy=cosθ1
实现代码
//方法一
//[114.32894, 30.585748]
function latLng2WebMercator(lng, lat) {
var earthRad = 6378137.0;
var x = lng * Math.PI / 180 * earthRad;
var a = lat * Math.PI / 180;
var y = earthRad / 2 * Math.log((1.0 + Math.sin(a)) / (1.0 - Math.sin(a)));
//[12727039.383734727, 3579066.6894065146]
return [x, y];
}
//方法二
function latLng2WebMercator2 (lng, lat)
{
var x = lng *20037508.34/180;
var y = Math.log(Math.tan((90+lat)*Math.PI/360))/(Math.PI/180);
y = y *20037508.34/180;
return [x, y];
}