Azimuthal等距投影的公式

时间:2012-08-14 04:31:00

标签: math gis formula

给定一个位置(lat,lng),我想在Azimuthal Equidistant Projection中得到它的坐标。公式解释为here

以下是该网页的屏幕截图。 formulas

该页末尾的

表示 c

看起来给定任何位置(lat [-Pi / 2,+ Pi / 2],lng [0,+ 2Pi))和投影的中心(latCenter,lngCenter),我可以计算它的坐标( x,y)在地图中,由于没有提供地图半径,x和y的值将落在[-1,+ 1]或[-Pi,+ Pi]的范围内。

我的问题是,公式中的 c 是什么?如果它是从(x,y)计算的值,它如何用于计算(x,y)?

有人可以帮我理解这些公式吗?

2 个答案:

答案 0 :(得分:3)

当从lat / long投影到x,y时,使用等式4计算c。等式7用于计算逆,即从x,y到纬度/经度。为了您的目的,制作地图,忽略等式7.

c是从投影中心(phi0,lambda0)到另一个点(phi,lambda)的大圆弧所对向地球中心的角度。

答案 1 :(得分:1)

由于您没有说明您正在使用的编程语言是F#中最近blogpost的实现。

open System
module AzimuthalEquidistantProjection =

    let inline degToRad d = 0.0174532925199433 * d; // (1.0/180.0 * Math.PI) * d

    let project centerlon centerlat lon lat =
        // http://mathworld.wolfram.com/AzimuthalEquidistantProjection.html
        // http://www.radicalcartography.net/?projectionref
        let t:float = degToRad lat
        let l:float = degToRad lon
        let t1 = degToRad centerlat // latitude center of projection
        let l0 = degToRad centerlon // longitude center of projection
        let c = Math.Acos ((sin t1) * (sin t) + (cos t1) * (cos t) * (cos (l-l0)))
        let k = c / (sin c)
        let x = k * (cos t) * (sin (l-l0))
        let y = k * (cos t1) * (sin t) - (sin t1) * (cos t) * (cos (l-l0))
        (x, y)

Other versions (F# with units of measure, Python and Julia)