Coordinates 通过距离和方位从已知位置查找点坐标的Geo算法

Coordinates 通过距离和方位从已知位置查找点坐标的Geo算法,coordinates,distance,bearing,Coordinates,Distance,Bearing,我想使用GoogleMaps静态API来显示带有路径覆盖的地图,该路径覆盖表示边界 AFAICT静态API不支持多边形,因此我打算通过使用路径绘制边界来避免这种情况 要做到这一点,我需要确定点之间画直线(路径);所以我想要一个算法,返回给定方位和距离已知点的地理位置(即WGS84坐标) 有人能给我指出这样一种算法吗。最好是用C#,但也可以使用其他语言?您可以在KML文件上绘制多边形,然后在谷歌地图上显示KML (来自谷歌KML示例)检查内容中的“谷歌校园-多边形”部分。在(我想)我所知道的每种语

我想使用GoogleMaps静态API来显示带有路径覆盖的地图,该路径覆盖表示边界

AFAICT静态API不支持多边形,因此我打算通过使用路径绘制边界来避免这种情况

要做到这一点,我需要确定点之间画直线(路径);所以我想要一个算法,返回给定方位和距离已知点的地理位置(即WGS84坐标)


有人能给我指出这样一种算法吗。最好是用C#,但也可以使用其他语言?

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

(来自谷歌KML示例)检查内容中的“谷歌校园-多边形”部分。

在(我想)我所知道的每种语言中,弧度。请注意,我认为您的示例代码给出的坐标是基于球体的,而不是基于WGS84的。这是。

找到了这个(这里:):

点{lat,lon}是tc径向上距离点1的距离,如果:

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
径向线是弧度还是度

编辑:

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

弧度=degrees*PI/180

我在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);
    }

看看C#library,它应该就是你要找的。而且它是免费的。

它将是弧度。在角度中使用圆周率的任何东西都是弧度。我对KML的经验非常有限,但这对静态贴图有效吗?您可以将KML文件作为静态贴图的参数传递。与大圆距离相比,它的精确度为80%