1

我正在使用适用于 .NET 的 ArcGIS Runtime SDK 100.1.0。我有一个移动地图包 (.mmpk) 矢量地图,并希望限制 MapView 中的最大和最小缩放。我试图跟踪 MapScale 属性并设置它:

((INotifyPropertyChanged)MyMapView).PropertyChanged += (sender, args) =>
    {
        args.PropertyName;
        var s = MyMapView.MapScale;
        if(s < 500)
            MyMapView.SetViewpointScaleAsync(700);
        if (s > 16500000)
            MyMapView.SetViewpointScaleAsync(16500000);
    };

这可行,但地图在低/高缩放级别时会出现抖动,因为它试图平滑缩放,我不知道如何停止活动的缩放任务。这样做的正确方法是什么?

4

2 回答 2

1

简单的方法

如果您只想设置最小比例和最大比例,则Map该类具有MinScaleMaxScale属性。将您的代码替换为以下内容:

MyMapView.Map.MaxScale = 700;
MyMapView.Map.MinScale = 16500000;

艰难的路

你可能不需要这个!使用上面列出的简单方法,除非你有充分的理由去做更复杂的事情!

如果由于某种原因您真的想跟踪比例变化,然后自己更改比例,您应该以不同的方式进行。目前您正在收听PropertyChanged,这太宽泛了。一个效果是,当比例更改时,您的事件处理程序运行,它执行异步缩放,在完成之前生成比例更改,它调用您的事件处理程序,执行异步缩放,在完成之前生成比例更改,它调用你的事件处理程序,它......我可以继续下去。字面上地。你的程序也会如此,除非你做出一些改变。

这是一种方法:

// Save a variable so you can invoke the EventHandler elsewhere
EventHandler navigationCompletedHandler = (sender, args) =>
{
    var s = MyMapView.MapScale;
    if (s < 500)
        MyMapView.SetViewpointScaleAsync(700);
    if (s > 16500000)
        MyMapView.SetViewpointScaleAsync(16500000);
};
MyMapView.NavigationCompleted += navigationCompletedHandler;

// Invoke the above handler one time when the map first loads
EventHandler firstViewpointChangeHandler = null;
firstViewpointChangeHandler = (sender, args) =>
{
    if (!double.IsNaN(MyMapView.MapScale))
    {
        MyMapView.ViewpointChanged -= firstViewpointChangeHandler;
        navigationCompletedHandler.Invoke(null, null);
    }
};
MyMapView.ViewpointChanged += firstViewpointChangeHandler;
于 2017-11-30T13:38:39.320 回答
0

您可以在 ArcMap 中将缩放级别设置为您想要的地图文件的任何间隔,当您构建地图包/将其发布到服务时,ArcMap 似乎尊重它(至少对我来说如此)。

地图比例下拉 -> 自定义此列表 -> 标准比例 -> 勾选“仅在缩放时显示这些比例”

无需编写自定义地图比例事件处理程序。

于 2018-07-20T02:11:17.630 回答