在 Mapbox 地图中按距离缩放 Xamarin.Forms

Zoom level by distance in Mapbox map for Xamarin.Forms

有谁知道如何 select 正确的缩放级别以便屏幕上出现两个点?

我正在使用 Mapbox 和 Xamarin.Forms。

其实还有很多点,只是取了最极端的两个。使用它们,我可以获得相机将要看到的中心。另外,当然,我可以得到它们之间的距离。但是这里是如何计算具体的缩放级别(从0到22),我不知道。

这里是 zoom level documentation.

维基百科上的一篇文章帮助了我,一些用户在评论中留下了这篇文章,但后来出于某种原因将其删除了。 Here

结果是一个方法:

    public const double EARTH_EQUATORIAL_CIRCUMFERENCE_METTERS = 40075016.686; //Equatorial circumference of the Earth
    public const double C = EARTH_EQUATORIAL_CIRCUMFERENCE_METTERS;
    
    public static double CalculateZoomLevel(double lat, double distanceBetweenPoints)
    {
        double logNum = C * Math.Cos(MathHelper.DegreesToRadians(lat)) / distanceBetweenPoints;

        double zoomLvl = Math.Log(logNum, 2);

        return zoomLvl;
    }

虽然不完美,但是已经很不错了。但是当点之间的路径变为水平时就会出现问题。为了避免这个问题,我对点之间的距离做了一些修改:

    var distance = Distance.BetweenPositions(new Xamarin.Forms.Maps.Position(minLat, minLon),
                                             new Xamarin.Forms.Maps.Position(maxLat, maxLon)).Meters;

    if (Math.Abs(minLat - maxLat) < Math.Abs(minLon - maxLon))
    {
        distance += distance * (Math.Abs(minLon - maxLon) / Math.Abs(minLat - maxLat) / 10);
    } 

    map.ZoomLevel = MapboxHelper.CalculateZoomLevel(zoomPos.Latitude, distance);

zoomPos - 两点之间的中心。

也许有人会派上用场。