您可以在地图文件的ArcMap中将缩放级别设置为您想要的任何间隔,当您构建地图包/将其发布到服务时,ArcMap似乎很荣幸(至少对我而言)。
地图比例下拉 - >自定义此列表 - >标准尺度 - >勾选方框“仅在缩放时显示这些比例”
保存必须编写自定义mapscale事件处理程序。
如果您只想设置最小刻度和最大刻度,则 Map 类 具有 MinScale 和 MaxScale 属性。用以下代码替换您的代码:
Map
MinScale
MaxScale
MyMapView.Map.MaxScale = 700; MyMapView.Map.MinScale = 16500000;
你可能不需要这个!使用上面列出的简单方法,除非你有充分的理由做一些更复杂的事情!
如果由于某种原因你真的想跟踪比例变化然后自己改变比例,你应该以不同的方式做。目前你在听 PropertyChanged ,这太宽泛了。一个效果是当比例改变时,你的事件处理程序会运行,执行一个 的 异步 强> 缩放,生成比例更改 在它完成之前 ,它调用你的事件处理程序,执行一个 的 异步 强> 缩放,生成比例更改 在它完成之前 ,它调用你的事件处理程序,...我可以继续。从字面上看。除非你做出一些改变,否则你的程序也是如此。
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;