限制 arcgis .net SDK 100.1 缩放级别

Limit arcgis .net SDK 100.1 zoom levels

我正在使用 ArcGIS Runtime SDK 100.1.0 for .NET。我有一个移动地图包 (.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);
    };

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

简单的方法

如果您只想设置最小比例和最大比例,Map class has MinScale and MaxScale 属性。用以下内容替换您的代码:

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;

当您构建地图包/将其发布到 ArcMap 似乎支持它的服务(至少对我而言)时,您可以将缩放级别设置为您在 ArcMap 中想要的地图文件的任何间隔。 =10=]

地图比例下拉 -> 自定义此列表 -> 标准比例 -> 勾选方框 "Only display these scales when zooming"

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