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

視頻資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM