Windows Phone - 检查 MapCore.SetView 是否缩放太多



我使用方法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。

最新更新