Xamarin表格地图 - 中心和距离更新多个引脚

时间:2017-02-09 19:15:32

标签: google-maps xamarin.ios xamarin.forms

我正在加载并添加Xamarin Forms Map的引脚。

使用以下方法获取中心纬度/经度:

    public static Position GetCenter(List<Position> geoCoordinates)
    {
        if (geoCoordinates.Count == 1)
        {
            return geoCoordinates.Single();
        }

        double x = 0;
        double y = 0;
        double z = 0;

        foreach (var geoCoordinate in geoCoordinates)
        {
            var latitude = geoCoordinate.Latitude * Math.PI / 180;
            var longitude = geoCoordinate.Longitude * Math.PI / 180;

            x += Math.Cos(latitude) * Math.Cos(longitude);
            y += Math.Cos(latitude) * Math.Sin(longitude);
            z += Math.Sin(latitude);
        }

        var total = geoCoordinates.Count;

        x = x / total;
        y = y / total;
        z = z / total;

        var centralLongitude = Math.Atan2(y, x);
        var centralSquareRoot = Math.Sqrt(x * x + y * y);
        var centralLatitude = Math.Atan2(z, centralSquareRoot);

        var dtoReturn = new Position(centralLatitude * 180 / Math.PI, centralLongitude * 180 / Math.PI);

        return dtoReturn;
    }

这让我成为了中心:

        map.MoveToRegion(MapSpan.FromCenterAndRadius(CENTER, Distance.FromMiles(X));

我的问题是关于Radius的第二个参数。什么是以英里计算半径的最佳方法?

Distance.FromMiles(X)

1 个答案:

答案 0 :(得分:1)

您可以从中心创建MapSpan,像下面这样创建纬度度和经度度数。

private static MapSpan FromPositions(IEnumerable<Position> positions)
{
    double minLat = double.MaxValue;
    double minLon = double.MaxValue;
    double maxLat = double.MinValue;
    double maxLon = double.MinValue;

    foreach (var p in positions)
    {
        minLat = Math.Min(minLat, p.Latitude);
        minLon = Math.Min(minLon, p.Longitude);
        maxLat = Math.Max(maxLat, p.Latitude);
        maxLon = Math.Max(maxLon, p.Longitude);
    }

    return new MapSpan(
        new Position((minLat + maxLat) / 2d, (minLon + maxLon) / 2d),
        maxLat - minLat, 
        maxLon - minLon);
}