大佬教程收集整理的这篇文章主要介绍了Bing Maps进阶系列九:使用MapCruncher进行地图切片并集成进Bing Maps,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
微软提供有专门用来切片源图片的工具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端可以进行如下定义,来完成加载自己部署的地图数据。
<@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 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,请注明来意。