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

时间:2013-08-02 12:16:44

标签: c# windows-phone-7 maps zoom

我正在使用方法SetView来缩放地图中的两个点但是当它们太近时我太放大了。所以我希望我能检查一下这样的事情:

myMap.SetView(bounds);
if (myMap.ZoomLevel > Constants.DefaultZoomLevel)
    myMap.ZoomLevel = Constants.DefaultZoomLevel;

但是方法SetView没有立即设置ZoomLevel属性。我该怎么办才能修复它?如何设置一些缩放级别边框?感谢

修改

我发现在8.0 sdk中有ZoomLevelChanged事件?这对我有用。那么有可能如何让它在7.1中运行?

1 个答案:

答案 0 :(得分:0)

我尝试了几种解决方案,这些都是我的结果(我需要为WP7.1工作,只需要针对WP8,可能会有更简单的解决方案):

  • 使用TargetZoomLevel

像这样:

myMap.ZoomLevel = Math.Min(myMap.TargetZoomLevel, maxZoomLevel);

由于SetView在执行此代码后设置了ZoomLevel,因此无法解决我的问题。地图只是在SetView的ZoomLevel和maxZoomLevel之间闪烁(我有用于检查位置的计时器,这就是为什么它闪烁并且对我不好)。

  • 使用MapZoom事件

像这样:

private void map1_MapZoom(object sender, Microsoft.Phone.Controls.Maps.MapZoomEventArgs e)
{
    if (((Map)sender).ZoomLevel > maxZoomLevel)
    {
        e.Handled = true;
    }
}

问题:使用SetView时不会触发MapZoom事件处理程序。

  • 检查距离并设置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。