3

我想使用谷歌地图静态 API 来显示带有指示边界的路径覆盖的地图。

AFAICT 静态 API 不支持多边形,所以我打算通过使用路径绘制边界来规避这个问题。

为此,我需要确定在它们之间绘制直线(路径)的点;所以我想要一种算法,它返回给定方位角和距已知点的距离的地理位置(即 WGS84 坐标)。

谁能指出我这样的算法。最好在 C# 中,但其他语言是否可以接受?

4

5 回答 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);
    }
于 2009-06-19T18:49:51.613 回答
1

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

这是 Google 地图上的 KML(来自 Google KML 示例),请查看内容中的“Google Campus - Polygons”部分。

于 2009-03-29T18:27:02.303 回答
1

在(我认为)我知道的每一种语言中,弧度。请注意,我认为您的示例代码是基于球体而不是 WGS84 为您提供坐标。这是用于在坐标系统之间进行转换的 Java 代码

于 2009-03-29T18:28:21.113 回答
1

看看Gavaghan Geodesy C# library,它应该是你要找的。它是免费的。

于 2009-06-19T20:31:47.000 回答
0

找到这个(这里:http ://williams.best.vwh.net/avform.htm#LL ):

如果:

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

于 2009-03-31T16:39:01.250 回答