silverlight   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Bing Maps进阶系列九:使用MapCruncher进行地图切片并集成进Bing Maps大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

在Bing Maps开发中,由于各种应用功能的不同,更多的时候用户可能需要将自己的一部分图片数据作为地图数据用来呈现在Bing Maps中,要实现这一功能就首先需要了解Bing Maps的TileSystem的相关算法,然后在对图片进行切片为Bing Maps TileSystem算法所对应的图片格式和命名等,以此来实现发布自己的图片数据,并通过自定义Tilesource来实现加载自定义发布的地图
在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规律的相同大小不同文件名地图图片。首先需要准备一张源图片,这里我就随便找一张图片来做演示,如下:

 

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

接下来就使用MapCruncher来进行图片切片生成,关于如何使用MapCruncher工具请访问http://research.microsoft.com/en-us/um/redmond/projects/mapcruncher/tutorial/version3.0docs/index.htm,这里需要对上面提供的源图片进行切片,在MapCruncher中进行描点后就可以生成切片图了,如下图所示:

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

如上图通过点击"Render"就可以根据该工具的向导完成图片的切片生成我们需要的地图图片,如下图为部署在IIS 中的目录地图图片结构:

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

到这里对于地图图片的准备工作就完成了,通过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端可以进行如下定义,来完成加载自己部署的地图数据。

<@H_175_80@m:Map x:Name="map" Margin="0,0" CredentialsProvider="@H_618_498@{Staticresource MyCredentials}"
       ScaleVisibility
="Visible"
       CopyrightVisibility
="Collapsed">
   
<@H_175_80@m:MapTileLayer x:Name="CustomMapTileLayer"></@H_175_80@m:MapTileLayer>
</@H_175_80@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认的地图底板图层。最终的运行效果如下图所示:

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

推荐资源:

  Bing Maps Tile System:@L_772_48@

  MapCruncher:http://research.microsoft.com/en-us/um/redmond/projects/mapcruncher/

  @H_943_616@使用Bing Maps Silverlight Control加载自己部署的Google Maps

  在Bing Maps中集成OpenStreetMap地图

大佬总结

以上是大佬教程为你收集整理的Bing Maps进阶系列九:使用MapCruncher进行地图切片并集成进Bing Maps全部内容,希望文章能够帮你解决Bing Maps进阶系列九:使用MapCruncher进行地图切片并集成进Bing Maps所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。