BingMap开发随笔

  最近需要做一个类似于GIS的功能模块。GOOGLE了很久,还是觉得Bing地图来得实在。
  Bing地图跟GOOGLE地图都需要注册KEY,但都是免费的而且非常简单。
  装好BingMapsSilverlightControlv1控件做了实验后,发现了需要解决以下一些问题:
  1.默认是英语显示提示,需要改成中文显示
          MAP控件有Language属性,但后面没有提示,不知道怎么用。在Bing中国网站里用的是ajax版的,不会是silverligh版目前没有中文显示的?
          默认的地图没有,但可以自已构建一个图层来加载中国地图,但中国地图是没有卫星地图的,在切换模式的时候,数据的处理有点繁琐。
 
   
1 UriBuilder tileSourceUri = new UriBuilder( " http://r2.tiles.ditu.live.com/tiles/r{quadkey}.png?g=41 " );
2 // 初始化LocationRectTileSource对象,设定显示范围及放大级别
3 LocationRectTileSource tileSource = new LocationRectTileSource(tileSourceUri.Uri.ToString(), new LocationRect( new Location( 60 , 60 ), new Location( 13 , 140 )), new Range < double > ( 6 , 16 ));
4 // 设置中国地图图层对象属性
5 layChina.TileSources.Add(tileSource);
6 layChina.Opacity = 1.0 ;
  2.地图控件的左下角有一个bing图标,右下角有版权信息要去掉
          去掉版权信息使用属性 CopyrightVisibility="Collapsed",去掉LOGO图标用使用  LogoVisibility="Collapsed"即可。这点微软做的还是很厚道的。
  3.地图需要自定义MapMode实现地图访问限制
          通过继承MapMode的基类来实现。
  4.自定义控制地图
    4.1 动态设置地图加载模式
<StackPanel HorizontalAlignment="Left" VerticalAlignment="Top" Orientation="Horizontal">
            <Button Name="btn_aerial" Click="btn_aerial_Click">
                <TextBlock>卫星地图</TextBlock>
            </Button>
            <Button Name="btn_flow" Click="btn_flow_Click">
                <TextBlock>平面地图</TextBlock>
            </Button>
        </StackPanel>
ContractedBlock.gif ExpandedBlockStart.gif 代码
 
    
private void btn_aerial_Click( object sender, RoutedEventArgs e)
{
this .bingmap.Mode = new AerialMode( true );
}

private void btn_flow_Click( object sender, RoutedEventArgs e)
{
this .bingmap.Mode = new RoadMode();
}
           
        4.2 动态设置变焦程度
           通过设置 ZoomLevel属性实现。 
        4.3 动态定位
          
 
   
1 private void Dynamic_Click( object sender, RoutedEventArgs e)
2 {
3 double latitude = 0 ;
4 double longitude = 0 ;
5
6 double .TryParse(tbLatitude.Text, out latitude);
7 double .TryParse(tbLongitude.Text, out longitude);
8 this .map.SetView( new Location(latitude, longitude), 5 );
9 }
  5.通过图钉显示需要的数据
        
 
   
1 Pushpin pushpin = new Pushpin();
2 // 设置图钉对象的定位坐标
3   pushpin.Location = map.ViewportPointToLocation(e.ViewportPoint);
4 // 添加图钉到地图上
5 map.Children.Add(pushpin);
6

  6.目前好像只有三种显示模式,卫星模式很好,但路径模式里面除建筑物什么的都没有

          同样,跟中文显示一样,只能通过加载中国地图才能有具体的信息,默认的只有路径

  7.加载GOOGLE卫星地图

          只需要派生一个TileSource类,重写其中的GetUri()方法,使用GOOGLE的路径算法

 
   
1 public class GoogleTileSource : TileSource
2 {
3 public GoogleTileSource()
4 : base ( " http://khm{0}.google.com/kh/v=47&x={1}&y={2}&z={3} " )
5 { }
6
7 public override Uri GetUri( int x, int y, int zoomLevel)
8 {
9 return new Uri( string .Format( this .UriFormat, x % 4 , x, y, zoomLevel));
10 }
11 }
 然后再构建一个MapTileLayer,将tileLayer.TileSources.Add(new GoogleTileSource());将titlesources添加进MapTileLayer即可。用这种方法加载其它地图也可以。
 

转载于:https://www.cnblogs.com/zouyou/archive/2010/12/19/1910440.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值