Bing Maps进阶系列九:使用MapCruncher进行地图切片并集成进Bing Maps

简介:
 在Bing Maps开发中,由于各种应用功能的不同,更多的时候用户可能需要将自己的一部分图片数据作为地图数据用来呈现在Bing Maps中,要实现这一功能就首先需要了解Bing Maps的TileSystem的相关算法,然后在对图片进行切片为Bing Maps TileSystem算法所对应的图片格式和命名等,以此来实现发布自己的图片数据,并通过自定义TileSource来实现加载自定义发布的地图数据。
 
  微软提供有专门用来切片源图片的工具MapCruncher,可以通过 http://research.microsoft.com/en-us/um/redmond/projects/mapcruncher/下载并安装此工具就可以自定义图片切片生成Bing Maps Tile System规律的相同大小不同文件名地图图片。首先需要准备一张源图片,这里我就随便找一张图片来做演示,如下:
        
 
  接下来就使用MapCruncher来进行图片切片生成,关于如何使用MapCruncher工具请访问 http://research.microsoft.com/en-us/um/redmond/projects/mapcruncher/tutorial/version3.0docs/index.htm,这里需要对上面提供的源图片进行切片,在MapCruncher中进行描点后就可以生成切片图了,如下图所示:
    
 
  如上图通过点击"Render"就可以根据该工具的向导完成图片的切片生成我们需要的地图图片,如下图为部署在IIS 中的目录地图图片结构:    
    
 
  到这里对于地图图片的准备工作就完成了,通过MapCruncher这个工具生成了地图格式的图片并部署在IIS中。如上图所示,可以通过:  http://localhost/Maps%7Bquadkey%7D.png 来访问这些地图图片。
 
  接下来就可以根据  http://localhost/Maps/ { quadkey} .png 这样的Tile System映射地址来自定义TileSource实现对自己部署的地图图片的加载算法,详细实现如下:
public   class  CustomTileSource : LocationRectTileSource
{
    
private   const   string  baseUrl  =   " http://localhost/Maps/{0}.png " ;

    
public  CustomTileSource()
        : 
base (baseUrl,  new  LocationRect( new  Location( 60 60 ),  new  Location( 13 140 )),
            
new  Range < double > ( 1 17 ))
    { }

    
///   <summary>
    
///  重写Tile算法
    
///   </summary>
    
///   <param name="x"></param>
    
///   <param name="y"></param>
    
///   <param name="zoomLevel"></param>
    
///   <returns></returns>
     public   override  Uri GetUri( int  x,  int  y,  int  zoomLevel)
    {
        
return   new  Uri( string .Format( this .UriFormat, TileXYToQuadKey(x, y, zoomLevel)), UriKind.RelativeOrAbsolute);
    }

    
///   <summary>
    
///  坐标转换
    
///   </summary>
    
///   <param name="tileX"></param>
    
///   <param name="tileY"></param>
    
///   <param name="levelOfDetail"></param>
    
///   <returns></returns>
     private   static   string  TileXYToQuadKey( int  tileX,  int  tileY,  int  levelOfDetail)
    {
        StringBuilder quadKey 
=   new  StringBuilder();
        
for  ( int  i  =  levelOfDetail; i  >   0 ; i -- )
        {
            
char  digit  =   ' 0 ' ;
            
int  mask  =   1   <<  (i  -   1 );
            
if  ((tileX  &  mask)  !=   0 )
            {
                digit
++ ;
            }
            
if  ((tileY  &  mask)  !=   0 )
            {
                digit
++ ;
                digit
++ ;
            }
            quadKey.Append(digit);
        }
        
return  quadKey.ToString();
    }
}
 
  
  在Silverlight端可以进行如下定义,来完成加载自己部署的地图数据。
< m:Map  x:Name ="map"  Margin ="0,0,0,0"  CredentialsProvider =" {StaticResource MyCredentials} "  
       ScaleVisibility
="Visible"
       CopyrightVisibility
="Collapsed" >
    
< m:MapTileLayer  x:Name ="CustomMapTileLayer" ></ m:MapTileLayer >
</ m:Map >
 
 
  名为CustomMapTileLayer的MapTileLayer则专门负责加载呈现自定义部署的地图图片数据,通过设置MapTileLayer的TileSources来应用上面自定义的TileSource算法,详细实现如下代码块:
public  MainPage()
{
    InitializeComponent();
    
this .Loaded  +=  (o, e)  =>
        {
            
this .CustomMapTileLayer.TileSources.Add( new  CustomTileSource());
            
this .map.Mode  =   new  MercatorMode();
            map.ZoomLevel 
=   5 ;
        };
}
 
   这里需要注意一点就是设置了地图的Mode属性为MercatorMode,用于限制地图控件只加载自定义的地图图层,也就是不加载Bing Maps默认的地图底板图层。最终的运行效果如下图所示:
      




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

目录
相关文章
|
机器学习/深度学习 人工智能 缓存
突发!ChatGPT 紧急暂停 Bing 集成,下线搜索功能
突发!ChatGPT 紧急暂停 Bing 集成,下线搜索功能
261 0
|
数据采集 Web App开发 XML
爬虫进阶:Selenium与Ajax的无缝集成
爬虫进阶:Selenium与Ajax的无缝集成
|
数据采集 数据安全/隐私保护
Kameleo指纹浏览器进阶使用:轻松集成IPXProxy海外代理IP
Kameleo是一款出色的指纹浏览器,它能够帮助用户实现隐身浏览。大家在进行网络抓取的时候总会碰到一些阻碍,而采取指纹浏览器可以提升网络抓取的效率,并且集成代理IP能增加一层防护,让数据采集更加全面,为制定营销策略提供更好的支持。那如何将Kameleo指纹浏览器与IPXProxy海外代理IP集成?
359 2
|
安全 Shell 网络安全
Git学习---Git快速入门、Git基础使用、Git进阶使用、Git服务器使用(IDEA集成GitHub、Gitee、GitLab)、GitHub Desktop客户端
Git学习---Git快速入门、Git基础使用、Git进阶使用、Git服务器使用(IDEA集成GitHub、Gitee、GitLab)、GitHub Desktop客户端
441 0
|
Web App开发 人工智能 Prometheus
微软 New Bing 和 Edge 动手实践:令人惊讶的 AI 集成度
AI人工智能的时代已经来临,仅在本周,谷歌和微软就各自面向大众的产品发布了重大公告。谷歌推出了一款名为Bard实验性对话式 AI 服务,而微软通过与 ChatGPT 制造商 OpenAI 的合作,微软正在添加更先进的 AI 对话模型,以支持Bing和Edge的更新。
529 1
微软 New Bing 和 Edge 动手实践:令人惊讶的 AI 集成度
|
Linux 网络安全 开发工具
Git学习---Git快速入门、Git基础使用、Git进阶使用、Git服务器使用(IDEA集成GitHub、Gitee、GitLab)、GitHub Desktop客户端
Git学习---Git快速入门、Git基础使用、Git进阶使用、Git服务器使用(IDEA集成GitHub、Gitee、GitLab)、GitHub Desktop客户端
|
Java 数据安全/隐私保护 微服务
SpringBoot进阶:一键集成GrayLog,那叫一个丝滑
在微服务架构中,一个服务通常都会有多个实例,而这些服务实例可能会被部署到不同的机器或虚拟容器上。此时对于日志数据的查看和分析就会变得困难起来,因为这些服务的日志数据都散落在各自实例所在的机器或容器上。例如,我现在要在订单服务里查找一个订单id为1的日志,而订单服务有10个实例并且部署在10台不同的机器上,那么我就得一台台的去找这个日志数据。所以这时候我们就需要有一个可以实现日志聚合的工具,将所有实例的日志数据都聚合在一个地方,那么我们就不需要到每个实例去找日志了,而本文将使用的日志聚合工具为Graylog
|
消息中间件 缓存 监控
RabbitMQ 进阶 -- SpringBoot 集成 RabbitMQ实现生产者与消费者模式
Spring Boot 如何集成RabbitMQ ,详解Spring Boot集成RabbitMQ!
2185 0
RabbitMQ 进阶 -- SpringBoot 集成 RabbitMQ实现生产者与消费者模式
|
SQL 监控 druid
【Spring Boot实战与进阶】集成Druid数据库连接池和监控
Druid是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池、插件框架和SQL解析器组成。该项目主要是为了扩展JDBC的一些限制,可以让程序员实现一些特殊的需求,比如向密钥服务请求凭证、统计SQL信息、SQL性能收集、SQL注入检查、SQL翻译等,程序员可以通过定制来实现自己需要的功能。
【Spring Boot实战与进阶】集成Druid数据库连接池和监控
|
消息中间件 负载均衡 Java
【Spring Boot实战与进阶】集成RabbitMQ的实例详解
RabbitMQ是采用 Erlang语言实现AMQP协议的消息中间件,AMQP全称是 Advanced Message Queue Protocolo,高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。
【Spring Boot实战与进阶】集成RabbitMQ的实例详解

热门文章

最新文章