我想使用的谷歌地图静API显示地图上的路径的重叠表示的边界。

AFAICT静API不支持多边形,所以我打算绕过这个通过绘制的边界使用的路径。

要做到这一点,我需要确定点数得出的直线(道路)之间;所以我想了一种算法,返回的地理位置(即WGS84坐标)的一个特定的轴承和距离从一个已知的一点。

任何人都可以点我这样的算法。最好在C#但其他语言都可以接受的吗?

有帮助吗?

解决方案 5

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

:一种点{纬度,经度}是从点1(D)列于TC径向的距离,如果:

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

其他提示

我实现,并且在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);
    }

你可以画面上KML文件,然后显示KML在谷歌地图。

这里是KML在谷歌地图 (从谷歌KML样品)检查 "谷歌校园里面" 部分内容。

在(我认为)每次我知道的语言,弧度。请注意,我想你的示例代码是给你的坐标基于一个球体,而不是WGS84。这里的 Java代码坐标系统之间的转换。

看一看 Gavaghan大地测量 C#库,它应该是你在找什么。而且它是免费的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top