C# 限制arcgis.net SDK 100.1缩放级别
我正在使用.NET的ArcGIS运行时SDK 100.1.0。我有一个移动地图包(.mmpk)矢量地图,希望限制MapView中的最大和最小缩放。我尝试跟踪MapScale属性并将其设置为:C# 限制arcgis.net SDK 100.1缩放级别,c#,maps,arcgis,arcgis-runtime-net,C#,Maps,Arcgis,Arcgis Runtime Net,我正在使用.NET的ArcGIS运行时SDK 100.1.0。我有一个移动地图包(.mmpk)矢量地图,希望限制MapView中的最大和最小缩放。我尝试跟踪MapScale属性并将其设置为: ((INotifyPropertyChanged)MyMapView).PropertyChanged += (sender, args) => { args.PropertyName; var s = MyMapView.MapScale; i
((INotifyPropertyChanged)MyMapView).PropertyChanged += (sender, args) =>
{
args.PropertyName;
var s = MyMapView.MapScale;
if(s < 500)
MyMapView.SetViewpointScaleAsync(700);
if (s > 16500000)
MyMapView.SetViewpointScaleAsync(16500000);
};
((INotifyPropertyChanged)MyMapView)。PropertyChanged+=(发件人,参数)=>
{
args.PropertyName;
var s=MyMapView.MapScale;
如果(s<500)
MyMapView.SetViewpointScaleAsync(700);
如果(s>16500000)
MyMapView.SetViewpointScaleAsync(16500000);
};
这是可行的,但贴图在低/高缩放级别时会出现抖动,因为它尝试平滑缩放,而我不知道如何停止活动的缩放任务。正确的方法是什么?简单的方法
如果只想设置最小比例和最大比例,则具有和属性。将代码替换为以下内容:
MyMapView.Map.MaxScale = 700;
MyMapView.Map.MinScale = 16500000;
艰难的道路
你可能不需要这个!使用上面列出的简单方法,除非你有很好的理由去做更复杂的事情
如果出于某种原因,你真的想跟踪比例变化,然后自己改变比例,你应该用另一种方式。目前您正在收听的是属性更改
,内容太广泛了。一种效果是,当比例发生变化时,您的事件处理程序运行,执行异步缩放,在完成之前生成比例变化,调用您的事件处理程序,执行异步缩放,在完成之前生成比例变化,调用您的事件处理程序,我可以继续说下去。字面上你的程序也将如此,除非你做一些改变
这里有一种方法:
// 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;
//保存一个变量,以便在别处调用EventHandler
EventHandler navigationCompletedHandler=(发送方,参数)=>
{
var s=MyMapView.MapScale;
如果(s<500)
MyMapView.SetViewpointScaleAsync(700);
如果(s>16500000)
MyMapView.SetViewpointScaleAsync(16500000);
};
MyMapView.NavigationCompleted+=navigationCompletedHandler;
//在映射首次加载时调用上述处理程序一次
EventHandler firstViewpointChangeHandler=null;
firstViewpointChangeHandler=(发送方,参数)=>
{
如果(!double.IsNaN(MyMapView.MapScale))
{
MyMapView.ViewpointChanged-=firstViewpointChangeHandler;
navigationCompletedHandler.Invoke(null,null);
}
};
MyMapView.ViewpointChanged+=firstViewpointChangeHandler;
当您构建地图包/将其发布到一个服务时,您可以在ArcMap中将地图文件的缩放级别设置为您想要的任何时间间隔,ArcMap似乎尊重它(至少对我来说是这样)
地图比例下拉菜单->自定义此列表->标准比例->勾选“缩放时仅显示这些比例”框
省去了编写自定义mapscale事件处理程序的麻烦