本篇主要介绍如何对地图的一些常用控制操作,包括地图加载模式、根据精度和纬度定位、变焦程度等。

一、动态设置地图加载模式

  在本系列二中介绍了地图加载模式,可以给地图控件设置一种模式的地图加载模式,呈现数据的时候根据制定的模式加载地图。其实我们也可以通过程序动态的来改变地图的加载呈现模式,方式和设置模式加载模式是一样的,都是通过地图控件(Bing Maps Silverlight Control)的Mode属性来控制。

  比如在程序中实现上篇文章中所描述的三种模式地图的显示,可以如下来编写代码实现:

代码

private void Road_Click(object sender, RoutedEventArgs e)
{
    this.map.Mode = new RoadMode();
}

private void Aerial_Click(object sender, RoutedEventArgs e)
{
    this.map.Mode = new AerialMode(false);
}

private void AerialLabel_Click(object sender, RoutedEventArgs e)
{
    this.map.Mode = new AerialMode(true);
}

  通过布局三个按钮分别来实现三种模式的切换,对应的前端Silverlight代码如下:

代码

<Grid x:Name="LayoutRoot" Width="500" Height="500">
    <m:Map CredentialsProvider="AkzZURoD0H2Sle6Nq_DE7pm7F3xOc8S3CjDTGNWkz1EFlJJkcwDKT1KcNcmYVINU" x:Name="map" NavigationVisibility="Collapsed">
    </m:Map>
    <StackPanel HorizontalAlignment="Left" VerticalAlignment="Top" Orientation="Horizontal" Background="Gray">
        <Button Margin="5" Width="100" Height="30" Click="Road_Click">
            <TextBlock>路径模式</TextBlock>
        </Button>
        <Button Margin="5" Width="100" Height="30" Click="Aerial_Click">
            <TextBlock>卫星模式(无路标)</TextBlock>
        </Button>
        <Button Margin="5" Width="100" Height="30" Click="AerialLabel_Click">
            <TextBlock>卫星模式(有路标)</TextBlock>
        </Button>
    </StackPanel>
</Grid>

        

二、动态定位(Location)

  可以说所有地图系统(比如常见的Google Maps,Bing Maps,ArcGIS,MapInfo等)都是通过精度(Longitude)和纬度(Latitude)来进行定位。在Bing Maps开发中,我们也可以做到动态定位,Bing Maps Silverlight Control提供了动态定位的相关API我们可以直接调用。

  地图的精度和纬度都是通过double类型值表示(经测试Bing Maps中设置int,float类型值也可以),在设置精度纬度的时候需要注意,错误的度值会引发Silverlight异常。

代码

<StackPanel HorizontalAlignment="Right" VerticalAlignment="Bottom" Width="170" Height="300" Opacity="0.66" Background="Bisque">
    <TextBlock HorizontalAlignment="Left">精度:</TextBlock>
    <TextBox x:Name="tbLongitude" Text="0.0" TextAlignment="Right"></TextBox>
    <TextBlock HorizontalAlignment="Left">纬度:</TextBlock>
    <TextBox x:Name="tbLatitude" Text="0.0" TextAlignment="Right"></TextBox>
    <Button Width="100" Height="30" Click="Dynamic_Click">
        <TextBlock>动态定位</TextBlock>
    </Button>
</StackPanel>

代码

private void Dynamic_Click(object sender, RoutedEventArgs e)
{
    double latitude = 0;
    double longitude = 0;

double.TryParse(tbLatitude.Text, out latitude);
    double.TryParse(tbLongitude.Text, out longitude);
    this.map.SetView(new Location(latitude, longitude), 5);
}

  SetView方法提供了多个重载版本,其中一个重载为通过Location对象使用精度和纬度构造地图坐标以及地图变焦程度参数来进行地图坐标定位。地图定位的精度和纬度表示的坐标为当前地图显示区域的中心点,可以使用地图控件的"Center"属性,值得到当前显示地图的中心坐标点(精度,纬度)。

代码

public MainPage()
{
    InitializeComponent();
    this.map.ViewChangeOnFrame += delegate(object sender, Microsoft.Maps.MapControl.MapEventArgs e)
    {
        double longitude = this.map.Center.Longitude;
        double latitude = this.map.Center.Latitude;
    };
}

三、动态设置变焦程度

  地图变焦也可以说是镜头的放大与缩小程度,可以通过对地图控件设置ZoomLevel属性进行动态控制。变焦的取值是有限的只能取值1---16,如下为地图设置默认的加载变焦级别。

代码

<m:Map CredentialsProvider="AkzZURoD0H2Sle6Nq_DE7pm7F3xOc8S3CjDTGNWkz1EFlJJkcwDKT1KcNcmYVINU" x:Name="map" 
       NavigationVisibility="Collapsed" 
       ZoomLevel="5">
</m:Map>

  也支持动态设置变焦程度,通过程序动态改变ZoomLevel的值就OK了,如下示例代码:

代码

private void ZoomLevel_Click(object sender, RoutedEventArgs e)
{
    double zoomLevel = 1d;
    double.TryParse(this.tbZoomLevel.Text.Trim(), out zoomLevel);
    this.map.ZoomLevel = zoomLevel;
}

        

相关说明

本文属学习笔记文章,愿与有志者共同学习交流。欢迎转载,但请在明显地位标记本文的原文连接。

作      者:Beniao

文章出处:http://beniao.cnblogs.com/  或  http://www.cnblogs.com/

转载于:https://www.cnblogs.com/beniao/archive/2009/11/28/1612418.html

【Silverlight】Bing Maps学习系列(三):如何控制地图相关推荐

  1. 【Silverlight】Bing Maps学习系列(七):使用Bing Maps的图片系统(Tile System)

    [Silverlight]Bing Maps学习系列(七):使用Bing Maps的图片系统(Tile System) 目前包括微软必应地图在内的几乎所有在线电子地图(如:Google Maps等)都 ...

  2. 【Silverlight】Bing Maps学习系列(二):通过Bing Maps Silverlight Control如何显示地图...

    如本系列第一篇你所介绍的,开发基于Silverlight的Bing Maps除了开发环境还需要一个开发Key,这个Key是用来做什么的呢?Silverlight控件在做地图呈现的时候它是一个必不可少的 ...

  3. 【Silverlight】Bing Maps学习系列(九):自定义功能导航条(Custom NavigationBar)

    微软Bing Maps Silverlight Control实现了最基本的地图呈现功能,其功能其他是非常的强大,可以支持很多的扩展功能开发,本文通过自定义功能导航菜单为例介绍基于Bing Maps ...

  4. Bing Maps进阶系列八:在Bing Maps中集成OpenStreetMap地图

    OSM(OpenStreetMap-开放街道地图)服务就是一种发布自己地图数据图片为服务的一种实现类型,开放街道地图成立动机在于希望能创造并且提供可以被自由地使用的地理资料(像街道地图)给每个想使用的 ...

  5. 数据库MYSQL学习系列三

    数据库MYSQL学习系列三 三.MYSQL事务与存储引擎 3.1-数据库事务 什么是事务 一系列有序的数据库操作: o要么全部成功 o要么全部回退到操作前的状态 o中间状态对其他连接不可见 事务的 ...

  6. Silverlight Blend动画设计系列三:缩放动画(ScaleTransform)

    原文:Silverlight & Blend动画设计系列三:缩放动画(ScaleTransform) 在Silverlight的动画框架中,ScaleTransform类提供了在二维空间中的坐 ...

  7. idea学习系列三之版本管理工具

    idea学习系列三之版本管理工具 上一篇文章主要介绍了将idea中常用的快捷键,快捷键要想熟练那就得在实际的工作中多使用,刚开始可能很麻烦经常去笔记中找,不过用多了自然就熟练了. 这篇文件将会介绍一下 ...

  8. Pyside2 学习系列三:PyInstaller打包项目瘦身(超详细的Pyside2 攻略)

    继上一篇文章打包后,发现包太大了,我们现在开始进行瘦身优化. 本项目的所有演示代码:github可在这里下载. 打包只用的工具为PyInstaller. 不想细看的朋友 可以直接跳到 最后 方法对比 ...

  9. Vue+Electron学习系列 (三) -- 自动更新

    Vue+Electron学习系列 ​​​​​​​1️⃣Vue+Electron学习系列 (一) -- 初识​​​​​​​ 2️⃣ Vue+Electron学习系列 (二) -- 打包发布 3️⃣ Vu ...

最新文章

  1. 初识java反射机制
  2. 网络钓鱼者钓到威胁情报公司的身上 黑客惨遭溯源
  3. struts2配置文件(简单)
  4. 【C++】函数缺省参数的作用
  5. 单片机检测stc没反应_我为什么不用STC单片机
  6. .NET(C#)有哪些主流的ORM框架
  7. 【Effect CodeForces - 270D】Greenhouse (思维,最长非递减子序列(上升),对偶问题,考虑反面)
  8. LeetCode算法入门- Add Two Numbers-day3
  9. 《天天数学》连载26:一月二十六日
  10. 团队第一阶段冲刺——第九天
  11. 出现画面抖动_手机拍照时模糊,抖动?赶紧来拯救你的拍摄技术吧!
  12. secoclient全版本下载分享
  13. 《普林斯顿微积分读本》笔记-第4章求解多项式的极限问题
  14. 幼儿园观察记录的目的和目标_幼儿园教育活动内容实施中的观察与记录有何目的...
  15. Excel 数据处理基础
  16. 【常用模块】HC-05蓝牙串口通信模块使用详解(实例:手机蓝牙控制STM32单片机)
  17. app录制回放 jmeter_Jmeter使用之脚本录制回放
  18. PTA-1016——Phone Bills
  19. 学习编程语言有哪些基本步骤呢?
  20. 华为前端社招OD面试(已拿offer)

热门文章

  1. 3-2 :eq(index)过滤选择器
  2. Nodejs cqmanager项目
  3. 自考--运筹学--计算题总结
  4. css绘画三角形,实现一些图形
  5. JS-内置对象内置构造函数事件-拖拽轮播图无缝滚动
  6. LeetCode--41.缺失的第一个正数(C)
  7. CSDN2013博客之星评选(求投票支持)
  8. java 布局实例,HarmonyOS Java UI之StackLayout布局示例
  9. R7-11 h0096. 单词合并 (10 分)
  10. 7-56 互评成绩 (25 分) (排序题)