平台:Vs 2010,Blend 4,Silverlight 4
调用API: ArcGis for Silverligth API(ESRI.ArcGIS.ClIEnt)
前言:本想只写一篇知识性的简单介绍下 ArcGis API,后来发觉程序做的比较复杂,不是一两篇能搞定的为了让大家能更深入的了解 ArcGis API 干脆写一个连载长篇的!写的不好请大家批评指正!
好了不说废话少说了!国际惯例先上图吧!图上实现的功能我会在后面章节中讲解!
项目准备: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 文件
@H_403_1290@<?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>
今天写的比较忙!明天再来更新吧!以上都是简单的介绍,后面我会加一些实用的功能进去的!
感觉时间不多写的不是太好啊!郁闷~~~已经努力了!有空我多改改吧!
转自:http://www.cnblogs.com/Royal_WH/archive/2010/11/02/1867366.HTML
总结以上是内存溢出为你收集整理的ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(一)全部内容,希望文章能够帮你解决ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(一)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)