我正在加载并添加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)
答案 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);
}