目錄
信息展示
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);