主要操作步驟及代碼如下:
(一)加載中國地圖是信息顯示的基礎
◎ 新建項目,啓動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>
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);
(二)站網信息的顯示。
站網信息是其它信息顯示的基礎,開發站網信息平臺後再加上其它水情、水質等信息,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;
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;
}