我尝试了几种解决方案,这些是我的结果(我需要为 WP7.1 工作,只针对 WP8 可能有更简单的解决方案):
像这样:
myMap.ZoomLevel = Math.Min(myMap.TargetZoomLevel, maxZoomLevel);
没有解决我的问题,因为 SetView 在执行此代码后设置了 ZoomLevel。Map 只是在 SetView 的 ZoomLevel 和 maxZoomLevel 之间闪烁(我有用于检查位置的计时器,所以这就是为什么它在闪烁并且对我不利)。
像这样:
private void map1_MapZoom(object sender, Microsoft.Phone.Controls.Maps.MapZoomEventArgs e)
{
if (((Map)sender).ZoomLevel > maxZoomLevel)
{
e.Handled = true;
}
}
问题:MapZoom 事件处理程序在使用 SetView 时未触发。
如果距离很小,检查距离并设置 ZoomLevel:
public static double GetDistanceBetweenPoints(LatLon firstPoint, LatLon secondPoint)
{
var sCoord = new GeoCoordinate(firstPoint.Lat, firstPoint.Lon);
var eCoord = new GeoCoordinate(secondPoint.Lat, secondPoint.Lon);
return sCoord.GetDistanceTo(eCoord);
}
用法:
var distance = LocationHelper.GetDistanceBetweenPoints(carPosition, userPosition);
if (distance < MinMetersDistance)
myMap.ZoomLevel = maxZoomLevel;
问题:再次闪烁。有时我通过这段代码设置 ZoomLevel。其他时间由 SetView 设置。
我只是像前一个点一样检查两点之间的距离。但是这次如果距离很短,我只是从旧点创建新点并将它们设置在最小距离的新位置(纬度和经度)(左侧一个我向左移动更多,右侧移动第二个)我向右移动更多)。然后我在新点上使用了 SetView。