ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(一)

平台:Vs 2010,Blend 4,Silverlight 4

调用API: ArcGis for Silverligth API(ESRI.ArcGIS.Client)

 

前言:本想只写一篇知识性的简单介绍下 ArcGis API,后来发觉程序做的比较复杂,不是一两篇能搞定的为了让大家能更深入的了解 ArcGis API 干脆写一个连载长篇的!写的不好请大家批评指正!

 

好了不说废话少说了!国际惯例先上图吧!图上实现的功能我会在后面章节中讲解!

 

ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(一)_第1张图片

 

项目准备:ArcGis API(自己找地址吧),我用的ESRI.ArcGIS.Client是1.1.0.97的版本。其它版本也应该差不多!

 

好了我们先建个网站项目,然后建个silverlight项目,把ArcGis Api 添加到项目中

 

我们先把地图加到silverlight中


Xmal中代码:


 

<UserControl
    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" 
    mc:Ignorable="d" xmlns:esri="clr-namespace:ESRI.ArcGIS.Client;assembly=ESRI.ArcGIS.Client"
    xmlns:esriBehaviors="clr-namespace:ESRI.ArcGIS.Client.Behaviors;assembly=ESRI.ArcGIS.Client.Behaviors"
    xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
    xmlns:ic="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions"
    xmlns:System="clr-namespace:System;assembly=mscorlib"
    xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
    xmlns:esriConverters="clr-namespace:ESRI.ArcGIS.Client.ValueConverters;assembly=ESRI.ArcGIS.Client"
    xmlns:esriSymbols="clr-namespace:ESRI.ArcGIS.Client.Symbols;assembly=ESRI.ArcGIS.Client"
    d:DesignWidth="1024" d:DesignHeight="768" x:Class="TyphoonSL.MainPage">


<Grid x:Name="LayoutRoot">
        
        <!--Gis 地图-->
        <esri:Map x:Name="myMap" Extent="117.356,29.4949,124.299,32.567">
        </esri:Map>

</Grid>
        

 

 

我的xmlns引用中多了 Behaviors和一些其它的,这些以后用到的时候我会讲解的


我们先看一下在地图上如何绘制点


 

        
    调用就在 MainPage() 程序初始化的时候 LoadCity("City.xml");
    记得把 City.xml放在Silverlight 项目里
   /// <summary>
        /// 载入地图点信息,我们从 Xml 文件中读取点信息,同样可以从外部来获取
        /// </summary>
        /// <param name="fileName">要载入的文件名称</param>
        private void LoadCity(string fileName)
        {
      // 这里这个 CityModel 自己定义吧,下面有 City.xml 那个类
            List<TyphoonSL.Model.CityModel> citys = new List<TyphoonSL.Model.CityModel>();
            CityModel temp = new CityModel();
            StreamResourceInfo r = Application.GetResourceStream(new Uri(fileName, UriKind.Relative));
            XmlReader reader = XmlReader.Create(r.Stream);

            while (reader.Read())
            {
                if (reader.AttributeCount == 5)
                {
                    temp = new CityModel();
                    temp.ID = Convert.ToInt32(reader.GetAttribute(0));
                    temp.CityName = reader.GetAttribute(1);
                    temp.Level = Convert.ToInt32(reader.GetAttribute(2));
                    temp.Longitude = Convert.ToDouble(reader.GetAttribute(3));
                    temp.Latitude = Convert.ToDouble(reader.GetAttribute(4));
                    citys.Add(temp);
                }
            }

            List<Graphic> g = new List<Graphic>();

            int length = citys.Count;
            for (int i = 0; i < length; i++)
            {
                g.Add(new Graphic()
                {
                    Geometry = new MapPoint(citys[i].Longitude - 0.1, citys[i].Latitude-0.1),
                    Symbol = new TextSymbol() { Text = citys[i].CityName, FontSize = 12, Foreground = new SolidColorBrush(Colors.Black) }
                });
                g.Add(new Graphic() 
                {
                    Geometry = new MapPoint(citys[i].Longitude, citys[i].Latitude),
                    Symbol = new SimpleMarkerSymbol() { Color = new SolidColorBrush(Colors.Orange) ,Size = 10,Style = SimpleMarkerSymbol.SimpleMarkerStyle.Circle}
                });
                g[i].MouseEnter += new MouseEventHandler(City_MouseEnter);
                g[i].MouseLeave += new MouseEventHandler(City_MouseLeave);
            }

            GraphicsLayer layer = new GraphicsLayer();
            layer.ID = "CityInfo";

            int layerCount = myMap.Layers.Count;
            for (int i = 0; i < layerCount; i++)
            {
                if (myMap.Layers[i].ID == "CityInfo")
                {
                    myMap.Layers.RemoveAt(i);
                    break;
                }
            }

            GisMap.DrawAllLayers(myMap, new GraphicsLayer[] { layer }, g);
            GisMap.AddLayersToMap(myMap, new GraphicsLayer[] { layer });

        }

 

 

GisMap 类中的两个方法

 

 

   /// <summary>
        /// 加载所有图层上的点
        /// 画所有点
        /// 图层和点的对应关系要正确
        /// 有几个图层就要有几个点集合
        /// </summary>
        /// <param name="map">ArcGis 地图变量</param>
        /// <param name="layers">GraphicLayer 层数组</param>
        /// <param name="graphicParam">Graphic 点数组</param>
        public static void DrawAllLayers(Map map, GraphicsLayer[] layers, params List<Graphic>[] graphicParam)
        {
            // 计算要绘制的层数并一层一层的绘制(调用动态绘制方法)
            if (layers != null)
            {
                int length = layers.Length;
                for (int i = 0; i < length; i++)
                {
                    if (layers[i] == null)
                    {
                        layers[i] = new GraphicsLayer();
                    }
                    DrawAllGraphics(layers[i], graphicParam[i]);
                }
            }
        }



   /// <summary>
        /// 将图层数组全部添加到 map 中
        /// </summary>
        /// <param name="map">表示一张 ArcGis 地图</param>
        /// <param name="layers">表示地图层的数组</param>
        public static void AddLayersToMap(Map map, GraphicsLayer[] layers)
        {
            // 逐个将数据添加到当前地图中
            foreach (GraphicsLayer item in layers)
            {
                if (item != null)
                {
                    map.Layers.Add(item);
                }
            }
        }

 

 

City.xml 文件

 

 

<?xml version="1.0" encoding="utf-8" ?>
<s>
  <l id="101230101" CityName="福州" Level="1" Longitude="119.301389" Latitude="25.93038" />
  <l id="101300101" CityName="南宁" Level="1" Longitude="108.272078" Latitude="22.64439" />
  <l id="101250101" CityName="长沙" Level="1" Longitude="112.921854" Latitude="28.07634" />
  <l id="101260101" CityName="贵阳" Level="1" Longitude="106.715264" Latitude="26.40347" />
  <l id="101270101" CityName="成都" Level="1" Longitude="104.072857" Latitude="30.49511" />
  <l id="101280101" CityName="广州" Level="1" Longitude="113.291693" Latitude="22.96442" />
  <l id="101290101" CityName="昆明" Level="1" Longitude="102.704315" Latitude="24.86215" />
</s>

 

 

今天写的比较忙!明天再来更新吧!以上都是简单的介绍,后面我会加一些实用的功能进去的!

 

感觉时间不多写的不是太好啊!郁闷~~~已经努力了!有空我多改改吧!

你可能感兴趣的:(silverlight)