ArcGIS API for Silverlight map中添加graphic对象(文字、几何图形、图片)

Map中的图形绘制

1、说明 

  图形绘制首先需要创建一个 GraphicsLayer,然后将 Graphic 添加上去以显示数据。多数情况下,你将由通过执行查询返回的结果、在地图上绘制图形等方式得到的几何体生成 Graphic。

  添加 Graphic 的主要步骤包括:
1) 获取添加 Graphic 的目标 GraphicsLayer;
2) 创建或者获取 Graphic;
3) 设置 Graphic 的 Geometry 属性;
4) 为 Graphic 应用符号;
5) 将 Graphic 添加到 GraphicsLayer。

  Graphic 对象表示可以在 GraphicsLayer 上绘制的要素,同时 FeatureLayer 中的要素、几何服务操作的参数等大多以 Graphic 对象来表示。

  Graphic对象主要成员如下:

属性:

Attributes:要素的属性字典(key-value,key是属性名称,value是属性值)。

Geometry:获取或设置要素的图形几何体。

MapTip:获取或设置当鼠标悬停在要素上方时显示的地图提示。

Selected:获取或设置要素是否被选中。

Symbol:获取或设置用于渲染当前要素的符号。

方法:

Select/Unselect:选择/取消选择当前要素。

事件:

AttbuteValueChanged:当前要素属性发生变化时触发的事件。

鼠标相关事件:MouseEnter/MouseLeave、MouseLeftButtonDown、MouseLeftButtonUp、MouseRightButtonDown、MouseRightButtonDown、MouseMove

  Graphic对象的不同主要设置Geometry以及Symbol的值。

Geometry包括:MapPoint(点对象)、MultiPoint(多点对象)、Polyline(多义线)、Envelope(矩形对象,长宽方向分别平行于X、Y)、Polygon(多边形对象,由环Ring组合而成)

2、代码

MainPage.xaml:

<UserControl x:Class="SilverlightApplication1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:esri="http://schemas.esri.com/arcgis/client/2009"
    mc:Ignorable="d" d:DesignHeight="700" d:DesignWidth="718" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">
    <Grid x:Name="LayoutRoot" Background="White" Height="700" Width="717">
        <Grid.Resources>
            <esri:SimpleFillSymbol x:Name = "ResultsFillSymbol" Fill="#500000FF" BorderBrush = "Blue" BorderThickness = "1" />
            <esri:SimpleFillSymbol x:Name="DefaultFillSymbol"  BorderBrush="Black" BorderThickness="1"/>
            <esri:PictureMarkerSymbol x:Key="NorthPictureSymbol" Source="/SilverlightApplication1;component/north.png" />
        </Grid.Resources>       

            <esri:Map x:Name="MyMap" Margin="279,56,159,112" IsLogoVisible="False" Height="521" Width="358" >
                <esri:Map.Layers>
                    <esri:ArcGISDynamicMapServiceLayer ID="TestMap" InitializationFailed="ArcGISDynamicMapServiceLayer_InitializationFailed"  Url="http://localhost:6080/arcgis/rest/services/test/MapServer" />
                    <esri:GraphicsLayer ID="drawLayer"/>
                </esri:Map.Layers>
            </esri:Map>

    </Grid>
</UserControl>

关键.cs Code:

GraphicsLayer _drawGraphicsLayer = MyMap.Layers["drawLayer"] as GraphicsLayer;
Graphic resultFeature=new Graphic();
_drawGraphicsLayer.Graphics.Add(resultFeature);
ESRI.ArcGIS.Client.Geometry.Geometry geo = resultFeature.Geometry;
//添加图片
private void AddPictureMarkerGraphics(GraphicsLayer graphicsLayer)
        {
           double x_pic = geo.Extent.XMax - 25;
           double y_pic = geo.Extent.YMax + 50.0;
           Graphic graphic = new Graphic()
            {
                 Geometry = new MapPoint(x_pic, y_pic),
                 Symbol = LayoutRoot.Resources["NorthPictureSymbol"] as Symbol

               };

            graphic.Geometry.SpatialReference = new SpatialReference(2364);
            graphicsLayer.Graphics.Add(graphic);
        }        
ESRI.ArcGIS.Client.Geometry.Geometry geo = resultFeature.Geometry;
//添加文字
        private void AddTextMarkerGraphics(GraphicsLayer graphicsLayer, string txtTitle)
        {
           double x_txt = geo.Extent.XMax - geo.Extent.Width / 2 - 50 ;
           double y_txt = geo.Extent.YMax + 70.0;
            TextSymbol textSymbol = new TextSymbol()
            {
                FontFamily = new System.Windows.Media.FontFamily("Arial"),
                Foreground = new System.Windows.Media.SolidColorBrush(Colors.Black),
                FontSize = 20,
                Text = txtTitle
            };
            Graphic graphicText = new Graphic()
            {
                  Geometry = new MapPoint(x_txt, y_txt),
                  Symbol = textSymbol
              };
            graphicText.Geometry.SpatialReference = new SpatialReference(2364);
            graphicsLayer.Graphics.Add(graphicText);
        }
//添加多边形(矩形框)
        private void AddPolygonGraphics(GraphicsLayer graphicsLayer)
        {
                    MapPoint point1 = new MapPoint(geo.Extent.XMax + 50.0, geo.Extent.YMax + 80.0);
                    MapPoint point2 = new MapPoint(geo.Extent.XMax + 50.0, geo.Extent.YMin - 80.0);
                    MapPoint point3 = new MapPoint(geo.Extent.XMin - 50.0, geo.Extent.YMin - 80.0);
                    MapPoint point4 = new MapPoint(geo.Extent.XMin - 50.0, geo.Extent.YMax + 80.0);
                    List<MapPoint> pointList = new List<MapPoint>();
                    pointList.Add(point1);
                    pointList.Add(point2);
                    pointList.Add(point3);
                    pointList.Add(point4);
                    pointList.Add(point1);
                    ESRI.ArcGIS.Client.Geometry.PointCollection points = new ESRI.ArcGIS.Client.Geometry.PointCollection(pointList);
                    ESRI.ArcGIS.Client.Geometry.Polygon polygon = new ESRI.ArcGIS.Client.Geometry.Polygon();
                    polygon.Rings.Add(points);

                    graphic.Geometry = polygon;
                    graphic.Symbol = LayoutRoot.Resources["DefaultFillSymbol"] as Symbol;

                    graphic.Geometry.SpatialReference = new SpatialReference(2364);
                    graphicsLayer.Graphics.Add(graphic);
        }
时间: 2024-10-13 12:53:33

ArcGIS API for Silverlight map中添加graphic对象(文字、几何图形、图片)的相关文章

ArcGIS API for Silverlight代码中使用Template模板

原文:ArcGIS API for Silverlight代码中使用Template模板 在项目开发中,会遇到点选中聚焦闪烁效果,但是因为在使用Symbol的时候,会设置一定的OffSetX和OffSetY,所以聚焦闪烁的时候,有些情况下,会出现闪烁点的位置和Symbol的位置不重叠现象,下面的方法就是解决这个问题的. 1.在Silverlight项目中新建一个文件夹Template,新建一个DefaultMarkerSymbol.xaml的Silverlight资源字典文件,如下图: 2.打开

使用Visifire+ArcGIS API for Silverlight实现Graphic信息的动态图表显示

原文:使用Visifire+ArcGIS API for Silverlight实现Graphic信息的动态图表显示 首先来看一看实现的效果: PS:原始的程序中更新曲线数据时添加了过渡的效果,具体可查看官网的示例: http://www.visifire.com/silverlight_spline_charts_gallery.php 点击其中的一个例子,然后点击Live Updates,就可看到数据更新时的过渡效果.但是蛋疼的博客园,不知道为什么,我插入了我原始的xap文件,过渡效果却没有

ArcGIS API for Silverlight中加载Google地形图(瓦片图)

原文:ArcGIS API for Silverlight中加载Google地形图(瓦片图) 在做水利.气象.土地等行业中,若能使用到Google的地形图那是再合适不过了,下面就介绍如何在ArcGIS API for Silverlight中加载Google地 形图.先上一个图,初步制作,待后续继续改进 ArcGIS API for Silverlight 中的ArcGISTiledMapServiceLayer图层,继承自TiledMapServiceLayer.如果想实现自己的缓存地图图 层

ArcGIS API For Silverlight 中 用户自定义Symbol在C#中调用

ArcGIS API For Silverlight 中 用户自定义Symbol在C#中调用 1.创建帮助类,其中,Application.LoadComponent的参数/Tel.Jsyd.FileImport;component/Themes/Symbol.xaml,是自定义Symbol所在位置 public class SymbolHelper { static SymbolHelper() { ResourceDictionary rd = new ResourceDictionary(

ArcGIS API for Silverlight 调用GP服务加载等值线图层

原文:ArcGIS API for Silverlight 调用GP服务加载等值线图层 第二篇.Silverlight客户端调用GP服务 利用ArcGIS API for Silverlight实现GP服务调用,这里的雨量数据是通过一个WebService获取而来,主要信息是雨量站点的经纬度坐标值和某个时间段内的降雨量值三个主要字段. 以下是核心代码部分: <UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/pr

使用ArcGIS API for Silverlight + Visifire绘制地图统计图

原文:使用ArcGIS API for Silverlight + Visifire绘制地图统计图 最近把很久之前做的统计图又拿出来重新做了一遍,感觉很多时候不复习,不记录就真的忘了,时间是最好的稀释剂,真是这样. 恰好有些网友又向我问起,于是稍作记录,以便自己今后复习和参考. 本文示例用的版本为: Silverlight 5+Visifire 3.6.8+ArcGIS API for Silverlight 3.0+Visual Studio 2010 一.ArcGIS API For Sil

浅析ArcGis API for Silverlight查询

一.ArcGis API for Silverlight 简介    ArcGIS API for Silverlight是由美国Esri公司推出的,用于在Silverlight平台上开发WebGIS应用的一套编程接口.ArcGIS API for Silverlight通过REST接口访问ArcGIS Server发布的地图服务.影像服务.几何服务.地理处理服务.要素服务.网络服务等,还可以访问OGC标准的WMS.WFS.WCS等服务,也可以访问Bing地图服务.主要功能有:1. 空间数据展示

ArcGIS API for Silverlight 编辑Geometry

概述 ArcMap的编辑功能是很强大的,ArcEngine编写的CS程序也能够用到ArcMap中提供的编辑功能,那么ArcGIS API forSilverlight针对Geometry的编辑提供了哪些功能呢? 本文说的只是对Geometry本身的编辑,并不涉及到编辑时的拓扑检查,编辑的数据源等.对于BS程序来说,能够方便的编辑Geometry基本上就满足大部分需求了. ArcGIS Runtime API支持的几何体主要是点.线和面. 还有要注意的一点,如果在BS上要编辑ArcServer上发

ArcGIS API for Silverlight 点沿着线流动

原文:ArcGIS API for Silverlight 点沿着线流动 概述 前段时间做了一个项目,要求是有一些电力输送线,电力输送线或者石油管道都是有流动方向的,用户想做一个动态效果来模拟电力的输送.其实做简单了只要在线上标识个箭头就可以了.但也要是做成动态的,至少ArcEngine实现起来是有点麻烦的.但ArcGIS API for Silverlight可以解决这个问题. 实现思路 在地图上展示输送电力的线和模拟电力输送方向的电都是ArcGIS  API中定义的对象,否者这些数据在地图上