我使用方法SetView来缩放地图中的两个点,但当它们离得太近时,我会缩放得太远。所以我希望我能检查一下这样的东西:
myMap.SetView(bounds);
if (myMap.ZoomLevel > Constants.DefaultZoomLevel)
myMap.ZoomLevel = Constants.DefaultZoomLevel;
但是方法SetView并没有立即设置ZoomLevel属性。我能做些什么来修复它?如何设置缩放级别的边界?感谢
编辑:
我发现8.0 sdk中有ZoomLevelChanged事件?这可能对我有用。那么有可能在7.1中实现它吗?
我尝试了几个解决方案,这些都是我的结果(我需要为WP7.1工作,只针对WP8,可能会有更容易的解决方案):
- TargetZoomLevel的使用
像这样:
myMap.ZoomLevel = Math.Min(myMap.TargetZoomLevel, maxZoomLevel);
无法解决我的问题,因为SetView在执行此代码后设置了ZoomLevel。Map只是在SetView的ZoomLevel和maxZoomLevel之间闪烁(我有用于检查位置的计时器,所以这就是它闪烁的原因,对我来说不好)。
- MapZoom事件的使用
像这样:
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。