有誰知道如何選擇正確的縮放級別以使兩個點出現在螢屏上?
我正在使用 Mapbox 和 Xamarin.Forms。
其實還有更多的點,但取的是最極端的兩個。使用它們,我可以得到相機的中心位置。另外,當然,我可以得到它們之間的距離。但是這里是如何計算具體的縮放級別(從0到22),我不知道。
這是縮放級別檔案。
uj5u.com熱心網友回復:
維基百科上的一篇文章幫助了我,一些用戶在評論中留下了這篇文章,但后來由于某種原因洗掉了它。這里
結果是一個方法:
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 - 兩點之間的中心。
也許有人會派上用場。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/459766.html
標籤:C# xamarin xamarin.forms 地图框
上一篇:在XAML中更改/更新影像
