这里介绍怎样进行Bing Maps的开发。首先我们须要在我们的程序中引入Bing Map的SDK。详细方法,这里推荐一个链接<win8>使用Bing地图。这样一个hello world便出来了。这里主要介绍一些主要的API。进行一些基础性的开发。

在整个开发中,给我感触最深的是。在网上资料稀少的情况下。查看研究Bing Map给出的API是最有效的方法(Map API)。

或许API的凝视是模棱两可,但仅仅要我们去试。便能了解这些方法的功能。

假设遇到hello world不能显示地图,在C#文件里类的构造方法中加入myMap.HomeRegion = "US"(myMap是XAML中定义的Map,详细见以下的演示样例代码)

  1. using Windows.UI;
  2. using Windows.UI.Popups;
  3. using Windows.UI.Xaml;
  4. using Windows.UI.Xaml.Controls;
  5. using Windows.UI.Xaml.Controls.Primitives;
  6. using Windows.UI.Xaml.Data;
  7. using Windows.UI.Xaml.Input;
  8. using Windows.UI.Xaml.Media;
  9. using Windows.UI.Xaml.Navigation;
  10.  
  11. // “空白页”项模板在 http://go.microsoft.com/fwlink/?
  12.  
  13. LinkId=234238 上有介绍
  14.  
  15. namespace demo02
  16. {
  17.  
  18. /// <summary>
  19. /// 可用于自身或导航至 Frame 内部的空白页。
  20.  
  21. /// </summary>
  22. public sealed partial class BingMap : Page
  23. {
  24. public BingMap()
  25. {
  26. this.InitializeComponent();
  27. myMap.HomeRegion = "US";
  28. }
  29. }
  30.  
  31. }

(一)加入图钉:

  1. <Page
  2. x:Class="demo02.BingMap"
  3. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  4. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  5. xmlns:local="using:demo02"
  6. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  7. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  8. xmlns:bm="using:Bing.Maps"
  9. xmlns:m="clr-namespace:Microsoft.Maps.MapControl.WPF;assembly=Microsoft.Maps.MapControl.WPF"
  10. mc:Ignorable="d">
  11.  
  12. <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
  13. <bm:Map Credentials="AjOotBEFXeb3VJcFYETEqh3TesW_gf0_r5n54lBYg7pHBZWpVGuMusmccZXyMx--" x:Name="myMap">
  14.  
  15. <bm:Map.Center>
  16. <bm:Location Latitude="37.52" Longitude="121.39" />
  17. </bm:Map.Center>
  18.  
  19. <bm:Map.Children>
  20.  
  21. <bm:Pushpin Tapped="JinanTapped" >
  22. <bm:MapLayer.Position>
  23. <bm:Location Latitude="36.65" Longitude="117" />
  24. </bm:MapLayer.Position>
  25. </bm:Pushpin>
  26.  
  27. <bm:Pushpin Tapped="BeijingTapped">
  28. <bm:MapLayer.Position>
  29. <bm:Location Latitude="39.92" Longitude="116.46" />
  30. </bm:MapLayer.Position>
  31. </bm:Pushpin>
  32.  
  33. <bm:Pushpin Tapped="GuangzhouTapped">
  34. <bm:MapLayer.Position>
  35. <bm:Location Latitude="23.16" Longitude="113.23" />
  36.  
  37. </bm:MapLayer.Position>
  38. </bm:Pushpin>
  39.  
  40. </bm:Map.Children>
  41.  
  42. </bm:Map>
  43. </Grid>
  44.  
  45. </Page>

xmlns:bm="using:Bing.Maps"将SDK引入程序。

Pushpin是图钉,Tapped是点击该图钉触发的方法。方法在C#文件里定义。Location的属性有经纬度。这是图钉在地图上的坐标。除了在XAML中静态设置图钉,我们还能够通过编程动态加入。

  1. using Bing.Maps;
  2. using demo02.DataStructure;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Runtime.InteropServices.WindowsRuntime;
  8. using Windows.Foundation;
  9. using Windows.Foundation.Collections;
  10. using Windows.UI;
  11. using Windows.UI.Popups;
  12. using Windows.UI.Xaml;
  13. using Windows.UI.Xaml.Controls;
  14. using Windows.UI.Xaml.Controls.Primitives;
  15. using Windows.UI.Xaml.Data;
  16. using Windows.UI.Xaml.Input;
  17. using Windows.UI.Xaml.Media;
  18. using Windows.UI.Xaml.Navigation;
  19.  
  20. // “空白页”项模板在 http://go.microsoft.com/fwlink/?LinkId=234238 上有介绍
  21.  
  22. namespace demo02
  23. {
  24.  
  25. /// <summary>
  26. /// 可用于自身或导航至 Frame 内部的空白页。
  27. /// </summary>
  28. public sealed partial class BingMap : Page
  29. {
  30. public BingMap()
  31. {
  32. this.InitializeComponent();
  33. myMap.HomeRegion = "US";
  34.  
  35. myMap.SetZoomLevel(4.3, MapAnimationDuration.None); // 设置缩放尺度。这样地图便会放大到想要的区域,如今整个画面显示的是中国地区
  36.  
  37. //用代码标注图钉
  38. //用图钉标注华北区
  39. var pushpin = new Pushpin();
  40. ToolTipService.SetToolTip(pushpin, "北京"); //鼠标放在图钉上会出现的文字提示
  41. MapLayer.SetPosition(pushpin, new Location(39.92, 116.46)); //图钉的经纬度
  42. pushpin.Tapped += BJTapped; //点击图钉触发的方法
  43. myMap.Children.Add(pushpin);
  44.  
  45. }
  46.  
  47. private void BJTapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e)
  48. {
  49.  
  50. myMap.MapType = MapType.Birdseye; //设置俯视模式
  51.  
  52. Location location = new Location();
  53. //北京经纬度
  54. location.Latitude = 39.92;
  55. location.Longitude = 116.46;
  56. myMap.SetView(location, 12); //将视图放大到北京地区
  57.  
  58. //用图钉标注北京大学
  59. var pushpin = new Pushpin();
  60. ToolTipService.SetToolTip(pushpin, "Peking University 北京大学");
  61. MapLayer.SetPosition(pushpin, new Location(39.9890077, 116.302251));
  62. myMap.Children.Add(pushpin);
  63.  
  64. //用图钉标注清华大学
  65. var pushpin01 = new Pushpin();
  66. ToolTipService.SetToolTip(pushpin01, "Tsinghua University 清华大学");
  67. MapLayer.SetPosition(pushpin01, new Location(40.000531, 116.326319));
  68. myMap.Children.Add(pushpin01);
  69.  
  70. }
  71. }
  72. }

或许对于鼠标移到图钉上的文字显示的样式不惬意。比方某个图钉是一个景点,当我们将鼠标移到它上面是时,最好能出现照片。

这时可借助样式Style。

在App.xaml中加入例如以下:

  1. <Style TargetType="ToolTip" x:Key="okStyle">
  2. <Setter Property="Background" Value="Transparent" />
  3. <Setter Property="BorderBrush" Value="Transparent" />
  4. <Setter Property="BorderThickness" Value="0" />
  5. <Setter Property="Template">
  6. <Setter.Value>
  7. <ControlTemplate>
  8. <Border CornerRadius="5">
  9. <Border.Background>
  10. <SolidColorBrush Color="Black" Opacity="0.5"/>
  11. </Border.Background>
  12. <ContentPresenter Margin="5">
  13. <ContentPresenter.Content>
  14. <StackPanel Margin="5" MaxWidth="200" MinHeight="80">
  15. <TextBlock Text="山东大学 SHANDONG UNIVERSITY" FontSize="12" Foreground="White"/>
  16. <Image Source="Images/EC/SD/SDU/sdu.jpg" Grid.ColumnSpan="5" Margin="0,0,0,10" Stretch="Fill" />
  17. </StackPanel>
  18. </ContentPresenter.Content>
  19. </ContentPresenter>
  20. </Border>
  21. </ControlTemplate>
  22. </Setter.Value>
  23. </Setter>
  24. </Style>

位置是:

  1. <Application
  2. x:Class="demo02.App"
  3. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  4. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  5. xmlns:local="using:demo02"
  6. xmlns:RssData="using:demo02.EasyAccess.RssReader"
  7. xmlns:localData="using:demo02.Data">
  8.  
  9. <Application.Resources>
  10. <!-- 应用程序特定的资源-->
  11.  
  12. <!--<x:String x:Key="AppName">WhereWeGo</x:String>-->
  13.  
  14. <ResourceDictionary>
  15. <ResourceDictionary.MergedDictionaries>
  16. <!--
  17. Styles that define common aspects of the platform look and feel
  18. Required by Visual Studio project and item templates
  19. -->
  20. <!--<ResourceDictionary Source="Common/StandardStyles.xaml"/>-->
  21.  
  22. <!-- Add app resurces to this resource dictionary -->
  23. <ResourceDictionary>
  24. <RssData:FeedDataSource x:Key="feedDataSource"/>
  25.  
  26. <!-- Add the DateConverter here. -->
  27. <!--<RssData:DateConverter x:Key="dateConverter" />-->
  28.  
  29. </ResourceDictionary>
  30.  
  31. </ResourceDictionary.MergedDictionaries>
  32. <Style TargetType="ToolTip" x:Key="okStyle">
  33. <Setter Property="Background" Value="Transparent" />
  34. <Setter Property="BorderBrush" Value="Transparent" />
  35. <Setter Property="BorderThickness" Value="0" />
  36. <Setter Property="Template">
  37. <Setter.Value>
  38. <ControlTemplate>
  39. <Border CornerRadius="5">
  40. <Border.Background>
  41. <SolidColorBrush Color="Black" Opacity="0.5"/>
  42. </Border.Background>
  43. <ContentPresenter Margin="5">
  44. <ContentPresenter.Content>
  45. <StackPanel Margin="5" MaxWidth="200" MinHeight="80">
  46. <TextBlock Text="山东大学 SHANDONG UNIVERSITY" FontSize="12" Foreground="White"/>
  47. <Image Source="Images/EC/SD/SDU/sdu.jpg" Grid.ColumnSpan="5" Margin="0,0,0,10" Stretch="Fill" />
  48. </StackPanel>
  49. </ContentPresenter.Content>
  50. </ContentPresenter>
  51. </Border>
  52. </ControlTemplate>
  53. </Setter.Value>
  54. </Setter>
  55. </Style>
  56. </ResourceDictionary>
  57. </Application.Resources>
  58. </Application>

这样样式便定义好了。接下来看怎样使用:

  1. //用图钉标注山东大学36.677549,117.054218
  2. var pushpin = new Pushpin();
  3. //ToolTipService.SetToolTip(pushpin, "山东大学");
  4.  
  5. ToolTipService.SetToolTip(pushpin, new ToolTip()
  6. {
  7. Style = Application.Current.Resources["okStyle"] as Style
  8. });
  9.  
  10. MapLayer.SetPosition(pushpin, new Location(36.677549, 117.054218));
  11. pushpin.Tapped += SDU01Tapped;
  12. myMap.Children.Add(pushpin);

(二)连线:

有了点,以下是线。能描绘出一块指定区域。

以下的代码将山大济南六个校区连接起来。

(PS:能够通过谷歌地图获得某个地点的API,方法是将鼠标放在某个地点,右键选择“这是哪里?”便会在搜索框中出现精确的经纬度)

  1. //连接六大校区
  2. MapLayer mPinLayer = new MapLayer();
  3. myMap.Children.Add(mPinLayer);
  4. MapShapeLayer mShapeLayer = new MapShapeLayer();
  5. myMap.ShapeLayers.Add(mShapeLayer);
  6.  
  7. //定义要连接起来的点
  8. LocationCollection mPolyShapeLocations01 = new LocationCollection();
  9. mPolyShapeLocations01.Add(new Location(36.666818, 117.133137)); //软件园
  10. mPolyShapeLocations01.Add(new Location(36.68525, 117.060184)); //洪家楼
  11. mPolyShapeLocations01.Add(new Location(36.678625, 117.050547)); //中心
  12. mPolyShapeLocations01.Add(new Location(36.650681, 117.013094)); //趵突泉
  13. mPolyShapeLocations01.Add(new Location(36.650414, 117.022868)); //千佛山
  14. mPolyShapeLocations01.Add(new Location(36.602489, 117.049045)); //兴隆山
  15. mPolyShapeLocations01.Add(new Location(36.666818, 117.133137)); //软件园
  16.  
  17. for (int i = 0; i < mPolyShapeLocations01.Count; i++)
  18. {
  19. Pushpin pin = new Pushpin();
  20. pin.Text = i.ToString();
  21. mPinLayer.Children.Add(pin);
  22. MapLayer.SetPosition(pin, mPolyShapeLocations01[i]);
  23. }
  24.  
  25. //MapPolylines是连线的API,将上面定义的点连接起来
  26. MapPolyline polyline01 = new MapPolyline();
  27. polyline01.Color = Windows.UI.Colors.Red;
  28. polyline01.Locations = mPolyShapeLocations01;
  29. polyline01.Width = 5.0;
  30.  
  31. mShapeLayer.Shapes.Add(polyline01);

Win8.1应用开发之Bing Maps的更多相关文章

  1. iOS开发之Xcode常用调试技巧总结

    转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题.平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼.Debug的技巧很多,比如最 ...

  2. Bing Maps进阶系列四:路由功能服务(RouteService)

    Bing Maps进阶系列四:路由功能服务(RouteService) Bing Maps提供的路由功能服务(RouteService)可以实现多方位的计算地图上的路线指示,路径行程等功能,比如说实现 ...

  3. 微信公众号开发之VS远程调试

    目录 (一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 前言 微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流 ...

  4. Android混合开发之WebViewJavascriptBridge实现JS与java安全交互

    前言: 为了加快开发效率,目前公司一些功能使用H5开发,这里难免会用到Js与Java函数互相调用的问题,这个Android是提供了原生支持的,不过存在安全隐患,今天我们来学习一种安全方式来满足Js与j ...

  5. Android混合开发之WebView与Javascript交互

    前言: 最近公司的App为了加快开发效率选择了一部分功能采用H5开发,从目前市面的大部分App来讲,大致分成Native App.Web App.Hybrid App三种方式,个人觉得目前以Hybri ...

  6. UWP开发之Template10实践二:拍照功能你合理使用了吗?(TempState临时目录问题)

    最近在忙Asp.Net MVC开发一直没空更新UWP这块,不过有时间的话还是需要将自己的经验和大家分享下,以求共同进步. 在上章[UWP开发之Template10实践:本地文件与照相机文件操作的MVV ...

  7. UWP开发之Template10实践:本地文件与照相机文件操作的MVVM实例(图文付原代码)

    前面[UWP开发之Mvvmlight实践五:SuspensionManager中断挂起以及复原处理]章节已经提到过Template10,为了认识MvvmLight的区别特做了此实例. 原代码地址:ht ...

  8. UWP开发之Mvvmlight实践七:如何查找设备(Mobile模拟器、实体手机、PC)中应用的Log等文件

    在开发中或者后期测试乃至最后交付使用的时候,如果应用出问题了我们一般的做法就是查看Log文件.上章也提到了查看Log文件,这章重点讲解下如何查看Log文件?如何找到我们需要的Packages安装包目录 ...

  9. Android混合开发之WebView使用总结

    前言: 今天修改项目中一个有关WebView使用的bug,激起了我总结WebView的动机,今天抽空做个总结. 混合开发相关博客: Android混合开发之WebView使用总结 Android混合开 ...

随机推荐

  1. Java中Collections的binarySearch方法

    方法一 public static <T> int binarySearch(List<? extends Comparable<? super T>> list, ...

  2. KnockJs 绑定语法

    按照汤姆大叔的教程,学习了KnockJs相关知识,练习一下KnockoutJs的绑定语法. 相关的教程大家可以去看 汤姆大叔的博客. 练习代码下载 由于没有环境,代码直接用记事本写的,可能比较乱,仅作 ...

  3. [洛谷1972][SDOI2009]HH的项链

    题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集新的贝壳,因此,他的项链变得越来越长. ...

  4. 华为上机测试题(水仙花数升级版-java)

    PS:这题满分100,没有做对,大家帮忙看看问题在哪 /* * 题目:水仙花数升级版  * 描述: 水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身.(例如:1 ...

  5. Appium+python自动化17-启动iOS模拟器APP源码案例【转载】

    前言 上一篇已经可以启动iOS模拟器上的safari浏览器了,启动app比启动浏览器要复杂一点,本篇以github上的源码为案例详细介绍如何启动iOS模拟器的app 一.clone源码 1.githu ...

  6. react 利用react-hammerjs插件实现滑动特效和点击特效

    react-hammerjs是一款由hammer.js的JS插件来实现在react中实现手势滑动的事件插件, 它有各种各样的手势支持效果,这里我们就使用下它最简单的3种效果来实现我们要的动画 分别是点 ...

  7. csu1811(树上启发式合并)

    csu1811 题意 给定一棵树,每个节点有颜色,每次仅删掉第 \(i\) 条边 \((a_i, b_i)\) ,得到两颗树,问两颗树节点的颜色集合的交集. 分析 转化一下,即所求答案为每次删掉 \( ...

  8. elasticsearch5.3.0 安装

    公司有项目打算用elasticsearch,所以研究了下,目前最新版本5.3.0 安装 1.下载包  https://artifacts.elastic.co/downloads/elasticsea ...

  9. UITableView的横向使用

    UITableView只支持竖向显示,要实现横向的显示,需要设置tableView 和cell 的transform属性为CGAffineTransformMakeRotate(-M_PI/2) // ...

  10. 为什么我不使用Kubernetes的Ingress

    为什么我不使用Kubernetes的Ingress 很不幸,据我所知Kubernetes的文档不是很完美,这就是为什么有很多同学在使用它的时候会遇到很多的坑,Ingress这个组件就是这些坑中的一个. ...