【Silverlight】Bing Maps学习系列(七):使用Bing Maps的图片系统(Tile System)-阿里云开发者社区

开发者社区> 余二五> 正文

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

简介:
+关注继续查看
 目前包括微软必应地图在内的几乎所有在线电子地图(如:Google Maps等)都事先对地图图片(Tile)进行预处理,通过特定的算法将预处理过后的图片进行无缝的拼接,建立一套统一有规律、标准的地图映射系统。Bing Maps地图映射、坐标系以及地图Tile编码体系映射,统称为必应地图图片系统(Bing Maps Tile System)。
  如果要了解Bing Maps的地图图片系统,可以看看下面这两片文章: 
 
  了解了Bing Maps的Tile System,下面来看看如何使用Bing Maps的Tile System。首先要明确一点,地图的不同放大级别(ZoomLabel)的界面上显示的效果是又不同的多张图片组成,下面通过Tile System加载一张图片(http://images.cnblogs.com/cnblogs_com/beniao/BingMaps/China0.jpg)的示例来来证实这一说话。
 1 public MainPage()
 2
 {
 3
     InitializeComponent();
 4
     MapTileLayer tileLayer = new MapTileLayer();
 5
     LocationRectTileSource tileSource = new LocationRectTileSource(
 6
         new UriBuilder(@"http://images.cnblogs.com/cnblogs_com/beniao/BingMaps/China0.jpg").Uri.ToString(),
 7
         new LocationRect(new Location(6060), new Location(13140)),
 8
         new Range<double>(116));
 9
     tileLayer.TileSources.Add(tileSource);
10
     tileLayer.Opacity = 0.9;
11
     myMap.Children.Add(tileLayer);
12
     this.myMap.ViewChangeOnFrame += delegate(object sender, Microsoft.Maps.MapControl.MapEventArgs e)
13
     {
14
         double longitude = this.myMap.Center.Longitude;
15
         double latitude = this.myMap.Center.Latitude;
16
 
17         this.tbLatitude.Text = latitude.ToString();
18
         this.tbLongitude.Text = longitude.ToString();
19
     };
20
     this.myMap.Mode = new MercatorMode();
21
 }
 
   通过上面4---11行代码,实现通过Tile System加载一张图片到地图显示出来,通过运行程序可以发现,同一张图片在设置的地图界面上显示出了多张,这是为什么呢?就是上面所声明是:“地图的不同放大级别(ZoomLabel)的界面上显示的效果是又不同的多张图片组成”,为了证实这一点我们可以通过HttpWatch等工具查看到详细的http请求响应数据:
      
      
 
  在本文开头部分提到,Bing Maps地图数据就是通过Tile System编码映射将不同的图片组合在一起形成的一套完整的图片系统。下面我们将上面加载图片的地址修改下,比如加载中国地区的Bing Maps,首先我们需要找到中国地图所对应的Bing Maps的Tile System映射Url(可通过HttpWatch工具在http://cn.bing.com/得到)。
      
 1 namespace UseTileLayers
 2
 {
 3
     public partial class MainPage : UserControl
 4
     {
 5
         public MainPage()
 6
         {
 7
             InitializeComponent();
 8
             //初始化一个Uri对象,指向中文必应地图的Tile系统
 9             UriBuilder tileSourceUri = new UriBuilder("http://r2.tiles.ditu.live.com/tiles/r{quadkey}.png?g=41");
10
 
11             MapTileLayer tileLayer = new MapTileLayer(); //初始化一个图层
12             LocationRectTileSource tileSource = new LocationRectTileSource(
13
             tileSourceUri.Uri.ToString(),
14
             new LocationRect(new Location(6060), new Location(13140)),
15
                 //初始化LocationRectTileSource对象,设定显示范围及放大级别
16             new Range<double>(116));
17
             tileLayer.TileSources.Add(tileSource); //指定图层的TileSource
18             tileLayer.Opacity = 0.9;
19
             myMap.Children.Add(tileLayer); //将图层叠加在地图上
20 
21             this.myMap.ViewChangeOnFrame += delegate(object sender, Microsoft.Maps.MapControl.MapEventArgs e)
22
             {
23
                 double longitude = this.myMap.Center.Longitude;
24
                 double latitude = this.myMap.Center.Latitude;
25
 
26                 this.tbLatitude.Text = latitude.ToString();
27
                 this.tbLongitude.Text = longitude.ToString();
28
             };
29
             this.myMap.Mode = new MercatorMode();
30
         }
31
     }
32
 }
 
       




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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
php中使用exec,system等函数调用系统命令
php的内置函数exec,system都可以调用系统命令(shell命令),当然还有passthru,escapeshellcmd等函数。   在很多时候利用php的exec,system等函数调用系统命令可以帮助我们更好更快的完成工作。
681 0
MySQL 直接存储图片并在 html 页面中展示,点击下载
数据库实体类: package com.easy.kotlin.picturecrawler.entity import java.util.* import javax.
888 0
对小程序地图小程序API:my.createMapContext(mapId)的简单使用
my.createMapContext(mapId):创建并返回 map 上下文 mapContext 对象。 mapContext 通过 mapId 跟一个  组件绑定,通过它可以操作对应的  组件。
1545 0
解决sitemesh3装饰页面不能使用freemarker标签问题
如题,这个问题其实在sitemesh2中已经很好的解决了,不过在sitemesh3中可能没有解决,所以要自己写代码解决了,下面我先讲下sitemesh2是如何解决的: sitemesh-freemarker com.
884 0
runtime system学习笔记
经常听到runtime这个词,却不知是做什么的,最近在一本书上看到了它的一点相关知识,记录如下: 1、Object-C是一门动态编程语言,具有动态特性,所以,OC不仅需要编译环境,也需要运行时系统(runtime system)来执行编译好的代码。
638 0
Java基础-11总结Eclipse使用,API,Object类
你需要的是什么,直接评论留言。 获取更多资源加微信公众号“Java帮帮” (是公众号,不是微信好友哦) 还有“Java帮帮”今日头条号,技术文章与新闻,每日更新,欢迎阅读 学习交流请加Java帮帮交流QQ群553841695 分享是一种美德,分享更快乐! 1:Eclipse的概述使用(掌握) 1:Eclipse的安装 2:用
1533 0
+关注
20382
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载