【问题标题】:Esri Silverlight control Pan/Zoom from codeEsri Silverlight 从代码控制平移/缩放
【发布时间】:2014-12-16 01:32:08
【问题描述】:

在调用 ZoomToResolutionPanTo 时,我无法让 Map 正常运行 我需要能够放大到特定的坐标和中心地图。

我让它工作的唯一方法是删除动画:

this.MapControl.ZoomDuration = new TimeSpan(0);
this.MapControl.PanDuration = new TimeSpan(0);

否则如果我这样打电话:

control.MapControl.ZoomToResolution(ZoomLevel);
control.MapControl.PanTo(MapPoint());

它会做一个或另一个(即平移或缩放,但不能同时进行)。如果(在动画之后)我第二次调用此代码(地图已经缩放或平移到所需的位置/级别) - 它会执行第二部分。

试过这个:

control.MapControl.ZoomToResolution(ZoomLevel, MapPoint());

同样的问题,它在内部调用了上面的命令

所以,我现在唯一的解决方法是将缩放/平移持续时间设置为 0。这会在使用鼠标时导致糟糕的用户体验。

我也试过这样的:

this.MapControl.ZoomDuration = new TimeSpan(0);
this.MapControl.PanDuration = new TimeSpan(0);
control.MapControl.ZoomToResolution(ZoomLevel);
control.MapControl.PanTo(MapPoint());
this.MapControl.ZoomDuration = new TimeSpan(750);
this.MapControl.PanDuration = new TimeSpan(750);

这似乎有效,但随后鼠标交互变得“疯狂”。鼠标滚动会使地图跳跃并缩放到随机位置。

有已知的解决方案吗?

【问题讨论】:

    标签: silverlight esri


    【解决方案1】:

    问题是第二个操作替换了前一个操作。在开始下一个之前,您必须等待一个完成。但这可能不会产生您想要的效果。 而是缩放到一定程度,您将获得所需的行为。如果您没有范围但只有中心和分辨率,您可以使用以下方法创建一个:

    var zoomToExtent = new Envelope(point.X - 分辨率 * MapControl.ActualWidth/2, point.Y, point.X + resolution * MapControl.ActualWidth/2, point.Y);

    顺便说一句,您将分辨率称为“ZoomLevel”在您的代码中有点令人困惑。我认为这是地图分辨率,而不是级别编号,对吗? esri 地图控件不处理特定于服务的级别,但与数据级别无关,并使用更通用的“每像素单位”分辨率值。

    【讨论】:

    • ZoomLevel 只是我“挑选”的一个看起来正确的数字。所以,是的,这不是级别数......我会尝试 zoomToExtent。 esri 控制是否有类似“异步”操作的东西?如果需要,我不介意链接调用,但语法是什么?绝对不想阻塞 UI 线程。我正在从 Bing Maps 控件转换,这就是为什么它可能看起来令人困惑,试图保持代码尽可能接近。我已经创建了包含 esri 地图的自定义控件,并且能够使几乎所有我需要的 MVVM 友好..
    • 这行得通,但没有动画。有什么方法可以让它像 Bing 地图一样很好地动画?因此,例如,如果我在某个点/缩放并需要移动到另一个点 - 如果地图在平移时缩小然后放大到新点会很好。这将提供更好的用户体验,因为它会显示新位置的位置..
    • 应该有动画。您是否将缩放持续时间保持在 0(如果是,请摆脱它)。但是请注意,如果您要去的范围很远,则将跳过动画以避免在世界范围内平移和加载图块。没有异步支持,但您可以在事件之上构建它(谷歌事件到异步)。新的 esri .net API 有这个功能。
    猜你喜欢
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 2021-05-01
    • 2016-04-15
    相关资源
    最近更新 更多