【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 publicclassGoogleTileSource : TileSource
2 {
3 publicGoogleTileSource()
4 : base("http://khm{0}.google.com/kh/v=47&x={1}&y={2}&z={3}")
5 { }

7 publicoverrideUri GetUri(intx, inty, intzoomLevel)
8 {
9 returnnewUri(string.Format(this.UriFormat, x %4, x, y, zoomLevel));
10 }
11 }

  如上完成了对Google在线卫星地图数据的Url算法,在前端使用该TileSource就OK了。

1 publicpartialclassMainPage : UserControl
2 {
3 publicMainPage()
4 {
5 InitializeComponent();

7 MapTileLayer tileLayer =newMapTileLayer();
8 GoogleTileSource gts =newGoogleTileSource();
9 tileLayer.TileSources.Add(gts);
10 myMap.Children.Add(tileLayer);
11 this.myMap.Mode =newMercatorMode();
12 }
13 }

  如上便实现了加载Google在线卫星地图,虽然实现了功能但是还是不够完美,如果我们没有联网就无法加载地图,这就需要我们自己部署地图数据,那如何实现加载自定义部署的地图数据呢?Google地图数据其实很简单,部署地图数据同样简单,只需要将地图数据通过Web服务器(如:IIS)部署好就行了。

      

      

  地图数据部署完备,接下来就可以基于自己部署的地图数据开发TileSource的Url映射算法,然后同加载Google在线地图数据一样的方式将自己部署的地图数据加载并呈现出来。修改上面加载在线地图数据的算法,让其适应于加载自己部署的Google Maps数据。

1 publicclassGoogleTileSource : TileSource
2 {
3 publicGoogleTileSource()
4 : base("http://localhost:5000/CQ_{0}/{1}-{2}.png")
5 { }

7 publicoverrideUri GetUri(intx, inty, intzoomLevel)
8 {
9 intport =Application.Current.Host.Source.Port;
10 
11 stringurl =string.Format(this.UriFormat, (zoomLevel +1).ToString("D2"), (y +1).ToString("D6"), (x +1).ToString("D6"), port);
12 returnnewUri(url);
13 }
再次编译运行上面的程序,可以看到已经成功的将自己部署的Google Maps数据加载并呈现出来了,爽~~~~~~。有了Google地图数据,自己部署就不用担心没有联网造成不能加载地图的麻烦了。
如果你觉得上图的效果不是很好看,你可以给地图设置一个背景颜色,相对来说就好看多了,和在线的Google Maps显示效果是一样的。上面完成了加载自己部署的地图数据中的路况地图,其实我们也可以从自己部署的地图数据服务器上加载Google卫星地图,实现方式和加载路况地图一样简单,在此基础上只需要做小小修改就可以达到目的。在Google Maps地图数据中,路况地图和卫星地图的Tile Source算法是一样的,只是用了不同类型的图片而已,上面使用路径地图是:
1 publicGoogleTileSource()
2 : base("http://localhost:5000/CQ_{0}/{1}-{2}.png")
3 { }

  要实现加载自己部署的地图数据服务器上的卫星地图,只需要将上面的Tile System的映射Url的地图图片类型修改为.jpg就行了,如下代码块:

1 publicGoogleTileSource()
2 : base("http://localhost:5000/CQ_{0}/{1}-{2}.jpg")
3 { }

  就这样就可以加载出卫星地图了,编译运行程序就会感觉到有的图层没有加载出来,这是由于TileSource的图片映射Url映射计算错误的原因,地图的不同方大级别的算法这里就不做介绍,希望通过本文抛砖引玉,引出更多更好更深入的技术文章。

相关说明

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

作      者:Beniao     WebGIS开发群:75662563

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

转载于:https://www.cnblogs.com/meimao5211/p/3278554.html

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

  1. Linux内核学习系列(7)——execve与需求加载

    前言 通过本系列前几篇文章的梳理,我们对linux0.12内核功能有了初步地了解.进一步地,我们看看linux如何在前述基础上执行用户自定义程序.其中的重点为execve与需求加载. 样例 在进入正题 ...

  2. 【学习系列7】Pytorch中的数据加载

    目录 1. 模型中使用数据加载器的目的 2. 数据集类 3. 迭代数据集 1. 模型中使用数据加载器的目的 在前面的线性回归横型中,我们使用的数据很少,所以直接把全部数据放到锁型中去使用. 但是在深度 ...

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

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

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

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

  5. Silverlight Blend动画设计系列八:拖放(Drag-Drop)操作与拖放行为(DragBehavior)

    Silverlight & Blend动画设计系列八:拖放(Drag-Drop)操作与拖放行为(DragBehavior) 原文:Silverlight & Blend动画设计系列八: ...

  6. Android音视频学习系列(八) — 基于Nginx搭建(rtmp、http)直播服务器

    系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...

  7. Android插件化学习之路(一)之动态加载综述

    前段时间,公司项目完成了插件化的开发,自己也因此学习了很多Android插件化的知识,于是想把这些内容记录下来,本次带来Android插件化的第一篇:动态加载综述 Android插件化学习之路(一)之 ...

  8. PyTorch系列入门到精通——模型保存与加载

    PyTorch系列入门到精通--模型保存与加载

  9. 学习Mac开发第四弹 通过NSImageView加载图片

    学习Mac开发第四弹 通过NSImageView加载图片 创建NSImageView 1 . 拖拽大法好 Autolayout 创建一个宽高160 *160 的NSImageView 创建是正方形的 ...

  10. 学习Mac开发第三弹 通过WebView加载网页

    学习Mac开发第三弹 通过WebView加载网页 添加WebKit.framework  关联Delegate 在新建工程的ViewController里拖放一个WebView,并用Autolayou ...

最新文章

  1. 微信小程序实现滑动翻页效果源码附效果图
  2. hdu1251 hash或者字典树
  3. oracle时间用法
  4. 2.异步回调检测线程结束
  5. MySQL中int、char、varchar的性能浅谈
  6. 计算机学硕专业课可以自学吗,考研专业课怎么考?高效复习法三条就够!
  7. 9.6.1 三维数据可视化之平面图
  8. Linux后台运行jar不产生nohup.out
  9. 三维数组地址计算_C语言进阶之路:数据类型 - 多维数组与指针!我的心中只有学习!...
  10. 为什么微型芯片是机器学习的命门?
  11. Java 读取 INI 配置文件的方法
  12. ARM芯片介绍(转贴)
  13. 一款强大的无损音乐的下载器:洛雪音乐助手手机版
  14. 2014 usnews 计算机科学 排名 天道留学,2014年美国USNews大学公立大学排名情况
  15. java生产者消费者 阻塞_java之使用阻塞队列实现生产者,消费者模式
  16. mysql在触发器中调用存储过程_mysql 触发器中调用存储过程
  17. 边缘计算的下一场革命:1+12?
  18. vue3中导出excel表格
  19. 用计算机弹传说之下鱼姐的bgm,传说之下决心鱼姐模拟器
  20. 利用XGBoost实现短期电力负荷预测

热门文章

  1. “requireJs前传”之为什么要用前端模块化?
  2. Android开发之onCreate
  3. C/C++ 跨平台交叉编译、静态库/动态库编译、MinGW、Cygwin、CodeBlocks使用原理及链接参数选项...
  4. 在GridView列中动态创建几个CheckBox
  5. 非专业人士观点(3)不要假如
  6. mysql 8.0 ~ innodb与变量优化
  7. 前端每日实战:47# 视频演示如何用纯 CSS 创作一个蝴蝶标本展示框
  8. 聊聊kafka consumer offset lag的监控
  9. centos6 docker1.7 存储方式修改
  10. 控件内部显示不正确原因---没有调用layoutSubview的父类方法