主要操作步骤及代码如下:
(一)加载中国地图是信息显示的基础
◎
新建项目,启动
Mircrosoft Visual Studio 2010
,命名为水文信息
ShuiWenInfo
,
◎
在
Silverlight
项目中,
添加必应地图程序集的引用,并
声明地图
Map
控件对应的命名空间的支持。
xmlns:m="clr-namespace:Microsoft.Maps.MapControl;assembly=Microsoft.Maps.MapControl"
◎
在
MainPage.xaml
中添加
Map
控件,并添加站网信息图层
layStation
和中国地图图层
layChina
,
XAML
代码如下:
<Grid x:Name="LayoutRoot" Background="White">
<m:Map CredentialsProvider="AmreePcQ50WyjCYvxNo0xUQDwiYVM8VFVTxmcW_1RmOb2x_7T1muW-fSTQQkOok1" x:Name="mapWater"
Center="30.4837830422421,108.974539287109" ZoomLevel="6" >
<m:MapTileLayer x:Name="layChina"></m:MapTileLayer>
<m:MapLayer x:Name="layStation"></m:MapLayer>
</m:Map>
</Grid>
◎
在程序中加载中国地图,
XAML
如下:
public MainPage()
{
InitializeComponent();
UriBuilder tileSourceUri = new UriBuilder("http://r2.tiles.ditu.live.com/tiles/r{quadkey}.png?g=41");
//
初始化
LocationRectTileSource
对象,设定显示范围及放大级别
LocationRectTileSource tileSource = new LocationRectTileSource(tileSourceUri.Uri.ToString(),new LocationRect(new Location(60, 60), new Location(13, 140)),
new Range<double>(6, 16));
//
设置中国地图图层对象属性
layChina.TileSources.Add(tileSource);
layChina.Opacity =1.0;
}
(二)站网信息的显示。
站网信息是其它信息显示的基础,开发站网信息平台后再加上其它水情、水质等信息,
Bing Maps
定义了一些
web
地图服务
,
如点位的图钉标签显示功能,站网信息中的站点图标直接用
Bing Maps Silverlight Control
中的地图图钉控件
Pushpin
来表示,具体操作步骤有:
◎
站点信息使用站点类
Station
来表示,站点类有站名、经度、纬度等信息。
public class Station
{
public string StationName{get;set;}
public double Longitude {get;set;}
public double Latitude{get;set;}
}
◎
定义全局站网变量
listStation
,并加载示例数据:
public List<Station> listStation;
public void LoadStations()
{
listStation = new List<Station>(){
new Station {StationName="
大龙山
",Longitude=119.02494046378,Latitude=32.0085534220129},
new Station {StationName="
高峰
",Longitude=118.98099515128,Latitude=32.5588631877063},
new Station {StationName="
张家山
",Longitude=118.884864780186,Latitude=31.5345470817377},
……………………………………………
};
}
◎
在站网图层上面显示所有站点图标:
public void ShowStation()
{
Pushpin station;
for (int i =0; i < listStation.Count;i++ )
{
station = new Pushpin();
Location location = new Location(listStation[i].Latitude,listStation[i].Longitude);
ToolTipService.SetToolTip(station, listStation[i].StationName);
layStation.AddChild(station, location);
}
}
◎
在
MainPage.xaml
中添加“站网信息”命令按钮以控制
站网信息图层
layStation
的显示。
<StackPanel HorizontalAlignment="Left" VerticalAlignment="Top" Orientation="Horizontal" Background="Gray">
<Button Margin="5" Width="100" Height="30" x:Name="btStation" Click="btStation_Click" >
<TextBlock FontSize="15">
站网信息
</TextBlock>
</Button>
</StackPanel>
对应的单击处理事件为:
private void btStation_Click(object sender, RoutedEventArgs e)
{
if(layStation.Visibility ==Visibility.Visible )
layStation.Visibility = Visibility.Collapsed;
else
layStation.Visibility = Visibility.Visible ;
}
(三)实时水位显示
水情信息中主要是水位,现添加实时水位显示的功能,具体步骤有:
◎
在站点类
Station
的变量中,增加水位变量
WaterLevel
。
public class Station
{
public string StationName{get;set;}
public double Longitude {get;set;}
public double Latitude{get;set;}
public double WaterLevel{get;set;}
}
加载数据时,也添加水位值
,如下:
listStation = new List<Station>(){
new Station {StationName="
大龙山",Longitude=119.02494046378,Latitude=32.0085534220129,WaterLevel=15.63},
new Station {StationName="
母山",Longitude=117.687355014561,Latitude=31.8733710133861,WaterLevel=18.33},
……………………………………..
}
◎
在
Silverlight
项目中添加水位显示的用户控件
WaterLeverl
,界面设计如下:
<Grid x:Name="LayoutRoot" Background="White">
<Border BorderBrush="Red" BorderThickness="1.0" >
<StackPanel >
<TextBox x:Name="txtWater" TextWrapping="NoWrap" />
</StackPanel>
</Border>
</Grid>
定义一个水位变量,代码如下:
public partial class WaterLever : UserControl
{
public WaterLever()
{
InitializeComponent();
}
public double lever
{
set{
txtWater.Text = value.ToString ();
}
get{
return double.Parse(txtWater.Text);
}
}
}
◎
在
Main.xaml
文件中添加水位图层。
<m:MapLayer x:Name="layWater"></m:MapLayer>
◎
在水位图层上显示水位。
public void ShowWater()
{
WaterLever water;
for (int i = 0; i < listStation.Count; i++)
{
water = new WaterLever();
Location location = new Location(listStation[i].Latitude, listStation[i].Longitude);
ToolTipService.SetToolTip(water, listStation[i].StationName);
water.lever = listStation[i].WaterLevel;
layWater.AddChild(water, location);
}
}
◎
控制水位图层的显示。
private void btWater_Click(object sender, RoutedEventArgs e)
{
if (layWater.Visibility == Visibility.Visible)
layWater.Visibility = Visibility.Collapsed;
else
layWater.Visibility = Visibility.Visible;
}
运行后效果如图:
更详细内容及源代码下载:
http://www.amazon.cn/mn/detailApp/ref=sr_1_1?_encoding=UTF8&s=books&qid=1287058088&asin=B0043RT7I2&sr=8-1