arcgis runtime100(九、十课时)

信息展示

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);

image

Picture symbols

PictureMarkerSymbol

image

// 用本地图片新建一个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);

image

视频资料

posted @ 2018-03-14 08:52  小狮子头  阅读(1266)  评论(0编辑  收藏  举报