目录
信息展示
Symbols(样式) and renderers(渲染器)
Simple (web) symbols
样式类 | Geometry | Description |
---|---|---|
SimpleMarkerSymbol |
point, multipoint | 修饰图形的单点和多点 |
PictureMarkerSymbol |
point, multipoint | 修饰的图片的单点或多点 |
SimpleLineSymbol |
polyline | 修饰预定义样式的多段线 |
SimpleFillSymbol |
polygon, envelope | 填充预定义样式的多边形和视口 |
TextSymbol |
point, multipoint, polyline, polygon | 展示字体 |
XAML定义symbols
<Grid.Resources>
<ResourceDictionary>
<!--Define symbols in the Resources section (of a UIControl, Page, or App)-->
<esri:SimpleMarkerSymbol x:Key="RedCircleSym" Color="Red" Style="Circle" Size="14"/>
<esri:SimpleLineSymbol x:Key="DashedGreenLineSym" Color="Green" Style="Dash" Width="3"/>
<esri:SimpleFillSymbol x:Key="BlueDiagonalHashFillSym" Color="Blue" Style="ForwardDiagonal" Outline="{StaticResource DashedGreenLineSym}"/>
</ResourceDictionary>
</Grid.Resources>
C#定义symbols
// 创建一个SimpleMarkerSymbol
var markerSym = new SimpleMarkerSymbol
{
Style = SimpleMarkerSymbolStyle.Circle,
Color = Colors.Red,
Size = 12
};
// 创建一个TextSymbol
var textSym = new TextSymbol
{
Angle = -55,
Color = Colors.Red,
Size = 18,
Text = "You are here",
HorizontalAlignment = Esri.ArcGISRuntime.Symbology.HorizontalAlignment.Left,
VerticalAlignment = Esri.ArcGISRuntime.Symbology.VerticalAlignment.Bottom
};
// 用SimpleMarkerSymbol创建一个点
var pointGraphic = new Graphic(point, markerSym);
//用TextSymbol创建一个文字
var textGraphic = new Graphic(point, textSym);
// 把文字和点添加到MapView
var graphics = MyMapView.GraphicsOverlays[0].Graphics;
graphics.Add(pointGraphic);
graphics.Add(textGraphic);
Picture symbols
PictureMarkerSymbol
// 用本地图片新建一个PictureMarkerSymbol
var picPath = @"C:\Temp\campsite.png";
PictureMarkerSymbol pictureMarkerSym;
using (System.IO.FileStream picStream = new System.IO.FileStream(picPath, System.IO.FileMode.Open))
{
// 通过文件流去创建PictureMarkerSymbol
pictureMarkerSym = await PictureMarkerSymbol.CreateAsync(picStream);
}
// 创建Graphic并添加到MapView
var graphic = new Graphic(location, pictureMarkerSym);
MyMapView.GraphicsOverlays[0].Graphics.Add(graphic);
graph LR
本地文件-->PictureMarkerSymbol
URL-->PictureMarkerSymbol
项目资源-->PictureMarkerSymbol
Json-->PictureMarkerSymbol
Multilayer (advanced) symbols
Multilayer symbols are based on a subset of ArcGIS Pro's symbology model
- ArcGIS Pro的符号子集
- multilayer symbols可以保证转换web地图服务时web symbols不丢失
应用一个符号到一个图形
// 定义一个web墨卡托坐标系下的地图点
var point = new MapPoint(-226773, 6550477, SpatialReferences.WebMercator);
// 创建一个红颜色的SimpleMarkerSymbol
var markerSym = new SimpleMarkerSymbol
{
Style = SimpleMarkerSymbolStyle.Circle,
Color = Colors.Red,
Size = 12
};
// 创建一个Graphic用刚创建的符号
var pointGraphic = new Graphic(point, markerSym);
// 添加到MapView
MyMapView.GraphicsOverlays[0].Graphics.Add(pointGraphic);
应用符号于一个图形会代替任何此图形所在图层的渲染器
Renderers
Simple renderer
XAML
<Grid Grid.Column="1">
<Grid.Resources>
<ResourceDictionary>
<!--Define a red "X" marker symbol-->
<esri:SimpleMarkerSymbol x:Key="RedXSym" Color="Red" Style="X" Size="10"/>
<!--Define a simple renderer that uses the symbol above-->
<esri:SimpleRenderer x:Key="MySimpleRenderer" Symbol="{StaticResource RedXSym}"/>
</ResourceDictionary>
</Grid.Resources>
<esri:MapView x:Name="MyMapView">
<esri:MapView.GraphicsOverlays>
<esri:GraphicsOverlay x:Name="MyGraphics" Renderer="{StaticResource MySimpleRenderer}"/>
</esri:MapView.GraphicsOverlays>
<esri:Map>
<esri:ArcGISTiledLayer Name="Topographic"
Source="http://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer"/>
</esri:Map>
</esri:MapView>
</Grid>
Unique value renderer
// 创建一个ServiceFeatureTable
var statesFeatureTable = new ServiceFeatureTable(new System.Uri("https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/3"));
// 创建一个OutFields用来渲染图层中的多边形
//statesFeatureTable.OutFields.Add("STATE_ABBR");
// 用ServiceFeatureTable创建一个要素图层
var statesLayer = new FeatureLayer(statesFeatureTable);
// 创建一个新的UniqueValueRenderer
var stateRenderer = new UniqueValueRenderer();
// 添加一个"STATE_ABBR"字段给UniqueValueRenderer
stateRenderer.FieldNames.Add("STATE_ABBR");
// 定义唯一填充符号
var nevadaFillSymbol = new SimpleFillSymbol(SimpleFillSymbolStyle.Solid, Colors.Blue, null);
var arizonaFillSymbol = new SimpleFillSymbol(SimpleFillSymbolStyle.Solid, Colors.Green, null);
var californiaFillSymbol = new SimpleFillSymbol(SimpleFillSymbolStyle.Solid, Colors.Red, null);
// 添加符号到渲染器
stateRenderer.UniqueValues.Add(new UniqueValue("Nevada", "Nevada", nevadaFillSymbol, "NV"));
stateRenderer.UniqueValues.Add(new UniqueValue("Arizona", "Arizona", arizonaFillSymbol, "AZ"));
stateRenderer.UniqueValues.Add(new UniqueValue("California", "California", californiaFillSymbol, "CA"));
var defaultFillSymbol = new SimpleFillSymbol(SimpleFillSymbolStyle.Null, Colors.Transparent, null);
stateRenderer.DefaultSymbol = defaultFillSymbol;
stateRenderer.DefaultLabel = "Other";
// 应用渲染器
statesLayer.Renderer = stateRenderer;
// MapView添加图层
MyMapView.Map.OperationalLayers.Add(statesLayer);