1 简单符号系统
针对于点、线、面符号,分别对应SimpleMarkerSymbol、SympleLineSymbol和SympleFillSymbol
SimpleMarkerSymbol pointSymbol = new SimpleMarkerSymbol();
pointSymbol.Color = System.Drawing.Color.FromArgb(1,255,0,0);
pointSymbol.Style = SimpleMarkerSymbolStyle.Circle;
pointSymbol.Size = 5;
SimpleRenderer simpleRenderer = new SimpleRenderer(pointSymbol);
feautureLayer.Renderer = simpleRenderer;
较常用到的三类符号及常用属性含义、类型列举如下
FromArgb(a,r,g,b)静态方法获得该类的对象传入即可FromArgb(a,r,g,b)静态方法获得该类的对象传入即可FromArgb(a,r,g,b)静态方法获得该类的对象传入即可上面所述的都是较为简单的符号样式,实现分类、分级等高级符号样式的同样是通过Renderer,除了上面用过的SimpleRenderer外,还有ClassBreaksRenderer、UniqueValueRenderer、DictionaryRenderer等,总思路都是新建这个具体的渲染器对象并设置好各参数后,赋值给FeatureLayer的Renderer属性,以下就介绍其最基本的初始化方法。
UniqueValueRenderer uniqueValueRenderer = new UniqueValueRenderer();
循环遍历{
SimpleMarkerSymbol pointSymbol = new SimpleMarkerSymbol();
//设置pointSymbol的Color、Size、Style等
UniqueValue uniqueValue = new UniqueValue("描述","标签",pointSymbol,唯一值);
UniqueValueCollection uniqueValues = uniqueValueRenderer.UniqueValues;
uniqueValues.Add(uniqueValue);
}
featureLayer.Renderer = uniqueValueRenderer;
分级渲染可以指定值的区间(最小值,最大值)进行分级颜色渲染
ClassBreaksRenderer classBreaksRenderer = new ClassBreaksRenderer();
循环遍历{
SimpleMarkerSymbol pointSymbol = new SimpleMarkerSymbol();
//设置pointSymbol的Color、Size、Style等
ClassBreak classBreak = new ClassBreak;
classBreak.MinValue = 本级最小值;
classBreak.MaxValue = 本级最大值;
classBreak.Symbol = pointSymbol;
classBreaksRenderer.ClassBreaks.Add(classBreak);
}
featureLayer.Renderer = classBreaksRenderer;
使用字典渲染的一个典型用法是直接导入从ArcGIS Pro导出来的样式库stylx文件
DictionarySymbolStyle dictionarySymbolStyle = new DictionarySymbolStyle();
dictionarySymbolStyle.StyleLocation = "test.stylx" //样式库文件路径
DictionaryRenderer dictionaryRenderer = new DictionaryRenderer();
featureLayer.Renderer = dictionaryRenderer;
临时在地图上绘制图形,考虑使用Graphic而不是Feature,以绘制线要素为例,流程如下:
ScreenToLocation方法获取到点对象,也可以通过编程新建MapPoint类的对象,传入经纬度,将多个MapPoint对象依序添加至List<MapPoint>内就能得到一个点的集合MapPoint p1 = new MapPoint(0,0);
MapPoint p2 = new MapPoint(1,1);
MapPoint p3 = new MapPoint(2,2);
List<Graphic> points = new List<Graphic>();
points.Add(p1);
points.Add(p2);
points.Add(p3);
Polyline line = new Polyline(points);
//假设已有一个名叫lineSymbol的SimpleLineSymbol类型的变量
Graphic graphic = new Graphic(line,lineSymbol);
MyMapView.GraphicOverlays[0].Add(graphic);
SketchEditor是ArcGIS Maps SDK for .NET中的一个类,提供了多种对图上要素进行新建、编辑的方法,可以简化开发流程,使用SketchEditor的方法可以分为两类:
在xaml中使用Command属性绑定事件即可,例如为绘制完成的按钮绑定CompleteCommand命令
<Button x:Name="BtnComplete" Content="完成" Command="{Binding CompleteCommand}"/>
此外,还需要在使用前指定本页面的DataContext为SketchEditor才能绑定成功
DataContext = MyMapView.SketchEditor;
这样点击这个按钮的时候,相应的功能就会被触发并自动执行
SketchEditor editor = MyMapView.SketchEditor;
Geometry newGeometry = editor.StartAsync(editGraphic.Geometry);
HillshadeRenderer hillshadeRenderer = new HillshadeRenderer(45, 0, 1, TypeOfSlope.Scaled, 1, 1, 8);
rasterLayer.Renderer = hillshadeRenderer;
都是类似的思路,在新建此Renderer对象时传入所需要的各种参数,至于参数要求恐怕也记不来,因此这里也不再赘述;随后设置rasterLayer的Renderer属性为此新建的Renderer对象。