ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(一)
平台: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 文件
<?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>
今天写的比较忙!明天再来更新吧!以上都是简单的介绍,后面我会加一些实用的功能进去的!
感觉时间不多写的不是太好啊!郁闷~~~已经努力了!有空我多改改吧!


浙公网安备 33010602011771号