兰勃特等角圆锥(Lambert Conformal Conic)投影正反变换

1. 引言

Johann Heinrich Lambert(译为兰勃特,或兰伯特),瑞士裔德国科学家、哲学家,他首次给出了π为无理数的严格证明。1772年提出两种球面向投影面投影方式:等角圆锥投影和等积方位投影。通常所说的兰勃特投影指的是等角圆锥投影。

兰勃特等角圆锥投影是设想用一个正圆锥切于或割于球面,应用等角条件将地球面投影到圆锥面上,然后沿一母线展开成平面。投影后纬线为同心圆圆弧,经线为同心圆半径。兰勃特等角圆锥投影没有角度变形,经线长度比和纬线长度比相等。适于制作沿纬线分布的中纬度地区中、小比例尺地图。我国的分省图的兰伯特等角圆锥投影采用的两条标准纬度线为\phi_1=25度,\phi_2=45度。

 

 在北半球(左)和南半球(右)上以标准纬线显示了兰勃特等角圆锥投影。

2. 投影变换中所用符号

南方基准纬线:\phi_1

北方基准纬线:\phi_2

原点处纬度:\phi_0

原点处经度:\lambda_0

变换点纬度:\phi

变换点经度:\lambda

原点在投影坐标系中虚北向坐标:N_0

原点在投影坐标系中虚东向坐标:E_0

变换点假北向坐标:N

变换点假东向坐标:E

椭圆的长半轴:a=6378137米(WGS-84椭球体)

椭圆的短半轴:b=6356752.3142米(WGS-84椭球体)

椭圆的扁率:\alpha = (a-b)/a

椭圆的第一偏心率:

e=\frac{\sqrt{a^2-b^2}}{a}=\sqrt{2\alpha - \alpha^2}

其它中间参数:

       m_1=\frac{\cos\phi_1}{\sqrt{1-e^2\sin^2\phi_1}}\qquad m_2=\frac{\cos\phi_2}{\sqrt{1-e^2\sin^2\phi_2}}

       v_1=\left[\frac{1-e\sin\phi_1}{1+e\sin\phi_1} \right ]^{e/2}\qquad v_2=\left[\frac{1-e\sin\phi_2}{1+e\sin\phi_2} \right ]^{e/2}\qquad \\v_0=\left[\frac{1-e\sin\phi_0}{1+e\sin\phi_0} \right ]^{e/2}\qquad v=\left[\frac{1-e\sin\phi}{1+e\sin\phi} \right ]^{e/2}

       t_1 = \tan{(\pi/4 - \phi_1/2)}/v_1\qquad t_2 = \tan{(\pi/4 - \phi_2/2)}/v_2\\ t_0 = \tan{(\pi/4 - \phi_0/2)}/v_0\qquad t = \tan{(\pi/4 - \phi/2)}/v

       n = \frac{\ln m_1 - \ln m_2}{\ln t_1 - \ln t_2}

       F = \frac{m_1}{n t_1^n}

       R = aFt^n\qquad R_0 = aFt_0^n

       \theta = n(\lambda - \lambda_0)

3. 正变换(\large (\lambda, \phi) \Rightarrow (N,E)

         N = N_0 + R_0 - R\cos\theta

        E = E_0 + R\sin\theta

 4. 逆变换(\large (N,E) \Rightarrow (\lambda, \phi)

中间参数

         \gamma = \tan^{-1}\left[\frac{E - E_0}{R_0-(N-N_0)} \right ]

         R' = \pm\{(E-E_0)^2 + [R_0 - (N-N_0)]^2\}^{1/2} 其符号与n相同

         t' = [R'/(aF)]^{1/n}

  由此可获得相应的变换公式:       

         \phi = \pi/2 - 2\tan^{-1}(t'v)\\ \lambda = \gamma /n + \lambda_0

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
兰伯特投影是一种圆锥投影,它将地球表面的经纬度坐标转换为平面坐标。在Java中,可以使用Proj4J库来实现兰伯特投影转换。该库提供了一组Java类和方法,可以将地理坐标系(如WGS84)转换为投影坐标系(如UTM或兰伯特投影)。以下是一个使用Proj4J库进行兰伯特投影转换的示例代码: ```java import org.osgeo.proj4j.CoordinateReferenceSystem; import org.osgeo.proj4j.CoordinateTransform; import org.osgeo.proj4j.ProjCoordinate; import org.osgeo.proj4j.io.Proj4FileReader; public class LambertProjection { public static void main(String[] args) { // 定义投影坐标系 String lambertParams = "+proj=lcc +lat_1=30 +lat_2=62 +lat_0=0 +lon_0=100 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"; Proj4FileReader proj4FileReader = new Proj4FileReader(); CoordinateReferenceSystem lambertCRS = proj4FileReader.createCoordinateReferenceSystem(lambertParams); // 定义地理坐标系 String wgs84Params = "+proj=longlat +datum=WGS84 +no_defs"; CoordinateReferenceSystem wgs84CRS = proj4FileReader.createCoordinateReferenceSystem(wgs84Params); // 定义坐标转换 CoordinateTransform transform = new CoordinateTransform(wgs84CRS, lambertCRS); // 定义经纬度坐标 ProjCoordinate sourceCoord = new ProjCoordinate(116.4074, 39.9042); // 进行坐标转换 ProjCoordinate targetCoord = new ProjCoordinate(); transform.transform(sourceCoord, targetCoord); // 输出转换后的坐标 System.out.println(targetCoord.x + ", " + targetCoord.y); } } ``` 该示例代码中,我们首先定义了兰伯特投影投影坐标系和WGS84地理坐标系。然后,我们使用Proj4J库中的CoordinateTransform类来定义坐标转换。最后,我们将经纬度坐标(116.4074, 39.9042)转换为兰伯特投影坐标,并输出转换后的坐标。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

带着地球去浪一浪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值