【Silverlight】Bing Maps学习系列(八):使用Bing Maps Silverlight Control加载自己部署的Google Maps

简介:
 上个月微软必应地图(Bing Maps)大中华区业务拓展经理 acnchen发布了一篇 《在必应地图SilverLight控件中加载其他地图(Google卫星图等)》的文章,里面详细介绍了如何实现加载Google卫星地图。本文要介绍的内容和这篇文章差不多,Bing Maps Silverlight Control除了可以加载外网的Google卫星地图,同样也是可以加载自定义的Google Maps地图数据的,包括卫星地图和路况地图。
 
  首先回顾下Bing Maps Silverlight Control是如何加载Google卫星地图,其原理就是为Google卫星地图定制一个TileSource,在这个TileSource里实现加载Google卫星地图的算法,主要就是构造正确的TileSource映射Url,此Url的格式可以通过HttpWatch等HTTP嗅探器工具抓取分析得到。
 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
  }
 
 
  如上完成了对Google在线卫星地图数据的Url算法,在前端使用该TileSource就OK了。
 1  public partial class  MainPage : UserControl
 2
  {
 3
      public  MainPage()
 4
      {
 5
          InitializeComponent();
 6
 
 7          MapTileLayer tileLayer = new  MapTileLayer();
 8
          GoogleTileSource gts = new  GoogleTileSource();
 9
          tileLayer.TileSources.Add(gts);
10
          myMap.Children.Add(tileLayer);
11
          this.myMap.Mode = new  MercatorMode();
12
      }
13
  }
        
 
   如上便实现了加载Google在线卫星地图,虽然实现了功能但是还是不够完美,如果我们没有联网就无法加载地图,这就需要我们自己部署地图数据,那如何实现加载自定义部署的地图数据呢?Google地图数据其实很简单,部署地图数据同样简单,只需要将地图数据通过Web服务器(如:IIS)部署好就行了。
      
      
 
  地图数据部署完备,接下来就可以基于自己部署的地图数据开发TileSource的Url映射算法,然后同加载Google在线地图数据一样的方式将自己部署的地图数据加载并呈现出来。修改上面加载在线地图数据的算法,让其适应于加载自己部署的Google Maps数据。
 1  public class  GoogleTileSource : TileSource
 2
  {
 3
      public  GoogleTileSource()
 4
          : base("http://localhost:5000/CQ_{0}/{1}-{2}.png" )
 5
      { }
 6
 
 7      public override Uri GetUri(int x, int y, int  zoomLevel)
 8
      {
 9
          int port =  Application.Current.Host.Source.Port;
10
 
11          string url = string.Format(this.UriFormat, (zoomLevel + 1).ToString("D2"), (y + 1).ToString("D6"), (x + 1).ToString("D6" ), port);
12
          return new  Uri(url);
13
      }
 
  再次编译运行上面的程序,可以看到已经成功的将自己部署的Google Maps数据加载并呈现出来了,爽~~~~~~。有了Google地图数据,自己部署就不用担心没有联网造成不能加载地图的麻烦了。
        
 
  如果你觉得上图的效果不是很好看,你可以给地图设置一个背景颜色,相对来说就好看多了,和在线的Google Maps显示效果是一样的。上面完成了加载自己部署的地图数据中的路况地图,其实我们也可以从自己部署的地图数据服务器上加载Google卫星地图,实现方式和加载路况地图一样简单,在此基础上只需要做小小修改就可以达到目的。在Google Maps地图数据中,路况地图和卫星地图的Tile Source算法是一样的,只是用了不同类型的图片而已,上面使用路径地图是:
1  public  GoogleTileSource()
2
      : base("http://localhost:5000/CQ_{0}/{1}-{2}.png" )
3
  { }
 
  要实现加载自己部署的地图数据服务器上的卫星地图,只需要将上面的Tile System的映射Url的地图图片类型修改为.jpg就行了,如下代码块:
1  public  GoogleTileSource()
2
      : base("http://localhost:5000/CQ_{0}/{1}-{2}.jpg" )
3
  { }
 
 
   就这样就可以加载出卫星地图了,编译运行程序就会感觉到有的图层没有加载出来,这是由于TileSource的图片映射Url映射计算错误的原因,地图的不同方大级别的算法这里就不做介绍,希望通过本文抛砖引玉,引出更多更好更深入的技术文章。




本文转自 beniao 51CTO博客,原文链接:http://blog.51cto.com/beniao/272563,如需转载请自行联系原作者

目录
相关文章
|
11月前
|
JavaScript 前端开发 定位技术
如何正确学习GEE(Google Earth Engine)?含学习资源链接
如何正确学习GEE(Google Earth Engine)?含学习资源链接
975 0
|
11月前
|
JSON 定位技术 API
谷歌地图接口Google Maps APIs中地图样式设计配置调整与JSON或URL导出
谷歌地图接口Google Maps APIs中地图样式设计配置调整与JSON或URL导出
207 1
|
11月前
|
人工智能 前端开发 安全
2023 Google 开发者大会学习心得总结
2023 Google 开发者大会学习心得总结
124 1
|
JavaScript 前端开发 定位技术
最佳网络地图服务对比分析:Google Maps 与 OpenStreetMap
最佳网络地图服务对比分析:Google Maps 与 OpenStreetMap
650 0
最佳网络地图服务对比分析:Google Maps 与 OpenStreetMap
|
JSON 小程序 定位技术
Google Maps APIs地图样式的设计与导出方法
本文介绍在谷歌地图API(Google Maps APIs)中,设计地图样式并将设计好的样式通过JSON或URL导出的方法~
344 1
Google Maps APIs地图样式的设计与导出方法
|
API
Google Guava之Maps&Lists&Sets
日常开发中,使用最多的就是集合了,所以避免不了对集合的各种操作,本篇文章来看一下,Guava中都有哪些常用的集合操作的API可以简化我们的代码。
282 0
Google Guava之Maps&Lists&Sets
DHL
|
XML 前端开发 Java
[译] Google 官方正解是否应该学习 Kotlin
这篇文章来自 Google 开发技术推广工程师 Florina Muntenescu 分享的一篇文章,在这篇文章里精选了 Google 宣布支持 Kotlin 以来,收到的最热门的几个问题,回答了是否应该学习 Kotlin、以及如何学习 Kotlin。全文分为 译文 和 译者思考 两个部分。
DHL
259 0
[译] Google 官方正解是否应该学习 Kotlin
|
机器学习/深度学习 人工智能 搜索推荐
Google提出用对比学习解决推荐系统长尾问题
Google提出用对比学习解决推荐系统长尾问题
1036 0
Google提出用对比学习解决推荐系统长尾问题
|
机器学习/深度学习 编解码 计算机视觉
一行预处理代码,让你的CV模型更强!Google research教你用可学习的resizer
图像预处理的一个重要操作就是resize,把不同大小的图像缩放到同一尺寸,但目前用到的resize技术仍然是老旧的,无法根据数据变换。Google Research提出一个可学习的resizer,只需在预处理部分略作修改,即可提升CV模型性能!
298 0
一行预处理代码,让你的CV模型更强!Google research教你用可学习的resizer
|
机器学习/深度学习 算法 测试技术
ICLR2020|迄今为止最大规模,Google 推出针对少样本学习的 Meta 数据集
深度学习的成功往往依赖于大量手动标注的训练数据,这种局限性,激发了对少样本学习的研究,Google 在 ICLR2020 发布的 Meta-Dataset 则针对此问题,进行了新的探索和尝试。
413 0
ICLR2020|迄今为止最大规模,Google 推出针对少样本学习的 Meta 数据集

热门文章

最新文章