大佬教程收集整理的这篇文章主要介绍了Bing Maps进阶系列三:使用地图图像服务(ImageryService),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
微软发布的地图图像服务地址是:http://dev.virtualearth.net/webservices/v1/imageryservice/ImageryService.svc,在项目中通过该地址添加Web服务引用后就可以使用地图图像服务中的方法进行
如上图示成功添加地图图像服务(Imageryservice)后就可以使用该服务所提供的功能了,可以添加Web服务引用向导过程中生成的WCF客户端配置查看到Silverlight访问该服务的客户端完整配置信息,如下代码:
<@H_674_51@configuration>@H_801_55@
<@H_674_51@system.serviceModel>@H_801_55@
<@H_674_51@bindings>@H_801_55@
<@H_674_51@basichttpBinding>@H_801_55@
<@H_674_51@bindingname="BasichttpBinding_IImageryservice" maxBufferSize="2147483647"
maxReceivedmessageSize="2147483647">@H_801_55@
<@H_674_51@security@H_167_89@mode="None">@H_801_55@
<@H_674_51@transport>@H_801_55@
<@H_674_51@extendedProtectionPolicypolicyEnforcement="Never"/>@H_801_55@
</@H_674_51@transport>@H_801_55@
</@H_674_51@security>@H_801_55@
</@H_674_51@binding>@H_801_55@
</@H_674_51@basichttpBinding>@H_801_55@
</@H_674_51@bindings>@H_801_55@
<@H_674_51@client>@H_801_55@
<@H_674_51@endpointaddress="http://dev.virtualearth.net/webservices/v1/imageryservice/imageryservice.svc"
binding="basichttpBinding" bindingConfiguration="BasichttpBinding_IImageryservice"
contract="Imageryservice.IImageryservice" name="BasichttpBinding_IImageryservice"/>@H_801_55@
</@H_674_51@client>@H_801_55@
</@H_674_51@system.serviceModel>@H_801_55@
</@H_674_51@configuration>
@H_801_55@
二、Silverlight界面布局设计
在Silverlight的界面上提供三个TextBox用于录入经度、纬度和缩放级别值,通过按钮请求调用Imageryservice服务接口。
<@H_674_51@Grid x:Name="LayoutRoot">@H_801_55@
<@H_674_51@m:Map CredentialsProvider="AkzZURoD0H2Sle6Nq_DE7pm7F3xOc8S3CjDTGNWkz1EFlJJkcwDKT1KcNcmYVINU" x:Name="map"></@H_674_51@m:Map>@H_801_55@
<@H_674_51@Border BorderBrush="Gray" BorderThickness="3,3,3"
Margin="3,3" HorizontalAlignment="Right"
Opacity="0.78" Height="160" BACkground="#A82D2D2D"
VerticalAlignment="Top" CornerRadius="5,5,5">@H_801_55@
<@H_674_51@StackPanelOrientation="Vertical">@H_801_55@
<@H_674_51@StackPanelOrientation="Horizontal" Margin="3,3">@H_801_55@
<@H_674_51@TextBlockText="经度:"></@H_674_51@TextBlock>@H_801_55@
<@H_674_51@TextBoxx:Name="tbLongitude" Width="130"></@H_674_51@TextBox>@H_801_55@
<@H_674_51@TextBlockText="纬度:"></@H_674_51@TextBlock>@H_801_55@
<@H_674_51@TextBoxx:Name="tbLatitude" Width="130"></@H_674_51@TextBox>@H_801_55@
<@H_674_51@TextBlockText="缩放级别:"></@H_674_51@TextBlock>@H_801_55@
<@H_674_51@TextBoxx:Name="tbZoomLevel" Width="30"></@H_674_51@TextBox>@H_801_55@
<@H_674_51@Buttonx:Name="btnImageMetadata" Click="btnImageMetadata_Click" Content="获取图片映射地址" Margin="3"></@H_674_51@Button>@H_801_55@
</@H_674_51@StackPanel>@H_801_55@
<@H_674_51@StackPanelOrientation="Horizontal" Margin="3,3">@H_801_55@
<@H_674_51@TextBlockText="映射地址:"></@H_674_51@TextBlock>@H_801_55@
<@H_674_51@TextBoxx:Name="tbMetadataResult" Width="500"></@H_674_51@TextBox>@H_801_55@
</@H_674_51@StackPanel>@H_801_55@
<@H_674_51@StackPanelOrientation="Horizontal" Margin="3,3">@H_801_55@
<@H_674_51@TextBlockText="图片高度:"></@H_674_51@TextBlock>@H_801_55@
<@H_674_51@TextBoxx:Name="tbHeight" Width="150"></@H_674_51@TextBox>@H_801_55@
<@H_674_51@TextBlockText="图片宽度:"></@H_674_51@TextBlock>@H_801_55@
<@H_674_51@TextBoxx:Name="tbWidth" Width="150"></@H_674_51@TextBox>@H_801_55@
</@H_674_51@StackPanel>@H_801_55@
</@H_674_51@StackPanel>@H_801_55@
</@H_674_51@Border>@H_801_55@
</@H_674_51@Grid>
地图图像服务(Imageryservice)提供了接口实现通过地图位置经度和纬度以及地图缩放级别获取对应于地图图片系统(Tile System)的地图数据的详细信息,包括地图图片对应的Tile映射地址,图片的高度和宽度,请求图片的时间等一些列参数值,通过前面的操作以及成功添加了对Imageryservice的Web服务引用,接下来只需要简单的调用服务接口就可以获取到这些数据。
private@H_801_55@ void@H_801_55@ btnImageMetadata_Click(object@H_801_55@ sender,RoutedEventArgs E)
{
@H_419_738@//@H_419_738@构造服务请求对象@H_419_738@
@H_801_55@ var request @H_801_55@=@H_801_55@new@H_801_55@ ImageryMetadatarequest();
request.Credentials @H_801_55@=@H_801_55@new@H_801_55@ Microsoft.Maps.MapControl.Credentials();
request.Credentials.ApplicationId @H_801_55@=@H_801_55@@H_674_51@"@H_674_51@AkzZURoD0H2Sle6Nq_DE7pm7F3xOc8S3CjDTGNWkz1EFlJJkcwDKT1KcNcmYVINU@H_674_51@"@H_801_55@;
@H_419_738@//@H_419_738@设置地理位置经度、纬度和地图缩放级别,从界面控件收集值@H_419_738@
@H_801_55@ var LOCATIOn @H_801_55@=@H_801_55@new@H_801_55@ LOCATIOn(double@H_801_55@.Parse(this@H_801_55@.tbLatitude.Text),double@H_801_55@.Parse(this@H_801_55@.tbLongitude.Text));
request.options @H_801_55@=@H_801_55@new@H_801_55@ ImageryMetadataOptions();
request.options.LOCATIOn @H_801_55@=@H_801_55@ LOCATIOn;
request.options.ZoomLevel @H_801_55@=@H_801_55@int@H_801_55@.Parse(this@H_801_55@.tbZoomLevel.Text);
request.Style @H_801_55@=@H_801_55@ MapStyle.AerialWithLabels;
@H_419_738@//@H_419_738@构造Imageryservice客户端代理对象实例@H_419_738@
@H_801_55@ var client @H_801_55@=@H_801_55@new@H_801_55@ ImageryserviceClient();
client.GetImageryMetadataCompleted @H_801_55@+=@H_801_55@ (o,args)@H_801_55@=>@H_801_55@ @H_419_738@//@H_419_738@处理请求的响应接口@H_419_738@
@H_801_55@ {
if@H_801_55@ (args.Error@H_801_55@==@H_801_55@ null@H_801_55@)
{
var response @H_801_55@=@H_801_55@ args.Result;
this@H_801_55@.tbMetadataResult.Text@H_801_55@=@H_801_55@ response.Results[0@H_801_55@].ImageUri.ToString();
this@H_801_55@.tbHeight.Text@H_801_55@=@H_801_55@ response.Results[0@H_801_55@].ImageSize.Height.ToString();
this@H_801_55@.tbWidth.Text@H_801_55@=@H_801_55@ response.Results[0@H_801_55@].ImageSize.Width.ToString();
}
};
@H_419_738@//@H_419_738@发起异步调用@H_419_738@
@H_801_55@ client.GetImageryMetadataAsync(request);
}
从上图可看出,通过指定的地理经度、纬度和地图缩放级别参数调用Imageryservice服务接口,返回了一个地址“http://t0.tiles.virtualearth.net/tiles/h1320.jpeg?g=409&mkt={culture}&token={token}”,该地址就是地理位置(经度:97.1964042859709,纬度:37.5939128813461),地图缩放级别为:4所对应的地图图片系统(Tile System)的地图数据映射Url,通过在浏览器中执行该Url可查看该Url对应的具体图片效果,如下图示:
上面获取到的是带地名的卫星地图,因为设置的样式是:request.Style = MapStyle.AerialWithLabels。可以通过MapStyle枚举设置不同的请求样式,比如要获取道路模式的地图则如下设置:
@H_801_55@request.Style @H_801_55@=@H_801_55@ MapStyle.road;
在次通过上面获取卫星地图的地理位置坐标经度和纬度值获取下来的Url为:http://t0.tiles.virtualearth.net/tiles/r1320.jpeg?g=409&mkt={culture}&shading=hill&token={token},其显示效果为下图所示:
地图图片服务(Imageryservice)也提供了服务接口反向实现通过指定地理位置坐标、地图缩放级别和图片大小(高度和宽度)来生成图片。这个服务接口最终将请求转向到一个http处理程序,用来根据不同的参数值生成不同的图片数据,该http处理程序的请求格式:“http://api.tiles.virtualearth.net/api/GetMap.ashx?c=纬度,mkt.en-US&z=4&token={token}”。
比如我们需要以中国地区地图坐标为准,生成一张地图缩放级别为10,图片高度和宽度为512的一张图片,那么完整的http请求串就应该是这样的:http://api.tiles.virtualearth.net/api/GetMap.ashx?c=35.0521567883562,mkt.en-US&z=4&token={token}
当然绝大多数情况下我们是不知道这个处理程序的路径的,只有通过调试程序才能发现最终是将请求转向到了此处理程序去完成的生成图片功能。我们在做开发的时候其实只需要关注Imageryservice这个WCF服务的调用就OK了。那么要实现生成图片我们可以通过Imageryservice所提供的GetMapUri()方法实现,代码如下:
private@H_801_55@ void@H_801_55@ btnGetUrl_Click(object@H_801_55@ sender,RoutedEventArgs E)
{
var request @H_801_55@=@H_801_55@ new@H_801_55@ MapUrirequest();
request.Credentials @H_801_55@=@H_801_55@ new@H_801_55@ Microsoft.Maps.MapControl.Credentials();
request.Credentials.ApplicationId @H_801_55@=@H_801_55@ @H_674_51@"@H_674_51@AkzZURoD0H2Sle6Nq_DE7pm7F3xOc8S3CjDTGNWkz1EFlJJkcwDKT1KcNcmYVINU@H_674_51@"@H_801_55@;
request.Center @H_801_55@=@H_801_55@ new@H_801_55@ LOCATIOn(35.0521567883562@H_801_55@,100.81816585252@H_801_55@);
var opt @H_801_55@=@H_801_55@ new@H_801_55@ MapUriOptions();
opt.Style @H_801_55@=@H_801_55@ MapStyle.AerialWithLabels;
opt.ZoomLevel @H_801_55@=@H_801_55@ 4@H_801_55@;
opt.ImageSize @H_801_55@=@H_801_55@ new@H_801_55@ SizeOfint();
opt.ImageSize.Height @H_801_55@=@H_801_55@ (int@H_801_55@)imgMap.Height;
opt.ImageSize.Width @H_801_55@=@H_801_55@ (int@H_801_55@)imgMap.Width;
request.options @H_801_55@=@H_801_55@ opt;
var client @H_801_55@=@H_801_55@ new@H_801_55@ ImageryserviceClient();
client.GetMapUriCompleted @H_801_55@+=@H_801_55@ (o,args) @H_801_55@=>@H_801_55@
{
var response @H_801_55@=@H_801_55@ args.Result;
imgMap.source @H_801_55@=@H_801_55@ new@H_801_55@ BitmapImage(new@H_801_55@ Uri(response.Uri,UriKind.RelativeOrAbsolutE));
};
client.GetMapUriAsync(request);
}
上面代码段里使用了imgMap控件,这是在界面上放置的一个Image控件,通过按钮发起Imageryservice的服务接口的调用,将返回的串序列为位图数据赋值给Image控件显示出来,其定义如下:
@H_801_55@<@H_801_55@Image x:Name@H_801_55@=@H_674_51@"@H_674_51@imgMap@H_674_51@"@H_801_55@ Width@H_801_55@=@H_674_51@"@H_674_51@512@H_674_51@"@H_801_55@ Height@H_801_55@=@H_674_51@"@H_674_51@512@H_674_51@"@H_801_55@></@H_801_55@Image@H_801_55@>
如果您想了解更多关于Bing Maps地图服务的知识,请查询:
MSDN:http://msdn.microsoft.com/en-us/library/cc980922.aspx
Bing Maps开发站:http://www.microsoft.com/maps/developers/
Bing Maps开发SDK:http://msdn.microsoft.com/en-us/library/dd877180.aspx
@H_197_2@以上是大佬教程为你收集整理的Bing Maps进阶系列三:使用地图图像服务(ImageryService)全部内容,希望文章能够帮你解决Bing Maps进阶系列三:使用地图图像服务(ImageryService)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。