主要操做步驟及代碼以下:
(一)加載中國地圖是信息顯示的基礎
◎
新建項目,啓動
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