通过距离和方位角查找已知位置点的坐标的地理算法

3
我想使用Google地图静态API来显示带有路径覆盖边界的地图。
据我所知,静态API不支持多边形,因此我打算通过绘制路径来绕过这个问题。
为此,我需要确定要在其中绘制直线(路径)的点;因此,我想要一个算法,它可以返回给定方位和距离的地理位置(即WGS84坐标)从已知点开始。
有人能向我指出这样的算法吗?最好是使用C#编写的,但其他语言也可以接受。

这将是弧度。任何涉及角度的 pi 计算都是弧度。 - Pete Kirkham
5个回答

2

我在C#中实现并测试了它,使用度作为输入/输出而不是弧度:

    static readonly double FullCircleDegrees = 360d;
    static readonly double HalfCircleDegrees = FullCircleDegrees / 2d;
    static readonly double DegreesToRadians = Math.PI / HalfCircleDegrees;
    static readonly double RadiansToDegrees = 1 / DegreesToRadians;

    public LatLng GetPointGivenRadialAndDistance(LatLng center, double radius, double azimuth)
    {
        var lat1 = center.Lat * DegreesToRadians;
        var lng1 = center.Lng * DegreesToRadians;
        var lat = Math.Asin( (Math.Sin(lat1) * Math.Cos(radius)) + Math.Cos(lat1) * Math.Sin(radius) * Math.Cos(azimuth * DegreesToRadians));
        var lng = 0d;
        if (Math.Cos(lat) == 0)
        {
            lng = lng1;
        }
        else
        {
            lng = ((lng1 + Math.PI - Math.Asin(Math.Sin(azimuth * DegreesToRadians) * Math.Sin(radius) / Math.Cos(lat1))) % (2 * Math.PI)) - Math.PI;
        }
        return new LatLng(lat * RadiansToDegrees, lng * RadiansToDegrees);
    }

它与大圆距离相比,准确率达到了80%。 - Jader Dias

1

请看一下 Gavaghan Geodesy 的 C# 库,应该是你要找的。而且它是免费的。


1

您可以在 KML 文件上绘制多边形,然后在 Google 地图上显示该 KML。

这是 Google 地图上的 KML(来自 Google KML 示例),请查看内容中的 "Google 校园 - 多边形" 部分。


我在KML方面的经验非常有限,但这是否适用于静态地图呢? - Ben Aston
您可以将KML文件作为静态地图的参数传递。 - Shay Erlichmen

1

0
发现了这个(在此处:http://williams.best.vwh.net/avform.htm#LL): 如果一个点{lat,lon}距离第1点的tc射线上有d,则该点是距离第1点d的位置:
lat=asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc))
IF (cos(lat)=0)
    lon=lon1      // endpoint a pole
ELSE
    lon=mod(lon1-asin(sin(tc)*sin(d)/cos(lat))+pi,2*pi)-pi
ENDIF

弧度制还是角度制?

编辑:

弧度 = 角度 * PI / 180


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接