4

给定一个位置(lat,lng),我想在Azimuthal Equidistant Projection中获得它的坐标。这里解释了这些公式。

以下是网页截图。 公式

在该页面的末尾,它指出 C

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

我的问题是,公式中的c是什么?如果是从 (x, y) 计算出来的值,怎么能用来计算 (x, y)?

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

4

2 回答 2

4

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

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

于 2012-08-14T04:48:05.293 回答
1

由于您没有在此处说明您正在使用的编程语言,因此是最近一篇博文中的 F#实现

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)

其他版本(带有度量单位的 F#、Python 和 Julia)

于 2014-02-10T14:17:30.053 回答