我最近开始在c#中的webService [wcf]中使用 [ Bing Api ] 。 我想用Bing来恢复给定比例的卫星图像! 例如
比例1:200(地图上的1厘米等于世界上200厘米)
当然我发现这个功能解释了如何计算图像分辨率卫星bing,但这不是我想要的..
Map resolution = 156543.04 meters/pixel * cos(latitude) / (2 ^ zoomlevel)
这是我用于生成我的bing贴图的函数,但我不知道发送什么参数来检索1:200的图像比例。
我需要:
比例= 1:200
我搜索:
int mapSizeHeight =?
int mapSizeWidth =?
int zoomLevel =?
public string GetImageMap(double latitude,double longitude,int mapSizeHeight, int mapSizeWidth, int zoomLevel)
{
string key = "ddsaAaasm5vwsdfsfd2ySYBxfEFsdfsdfcFh6iUO5GI4v";
MapUriRequest mapUriRequest = new MapUriRequest();
// Set credentials using a valid Bing Maps key
mapUriRequest.Credentials = new ImageryService.Credentials();
mapUriRequest.Credentials.ApplicationId = key;
// Set the location of the requested image
mapUriRequest.Center = new ImageryService.Location();
mapUriRequest.Center.Latitude = latitude;
mapUriRequest.Center.Longitude = longitude;
// Set the map style and zoom level
MapUriOptions mapUriOptions = new MapUriOptions();
mapUriOptions.Style = MapStyle.Aerial;
mapUriOptions.ZoomLevel = zoomLevel;
mapUriOptions.PreventIconCollision = true;
// Set the size of the requested image in pixels
mapUriOptions.ImageSize = new ImageryService.SizeOfint();
mapUriOptions.ImageSize.Height = mapSizeHeight;
mapUriOptions.ImageSize.Width = mapSizeWidth;
mapUriRequest.Options = mapUriOptions;
//Make the request and return the URI
ImageryServiceClient imageryService = new ImageryServiceClient();
MapUriResponse mapUriResponse = imageryService.GetMapUri(mapUriRequest);
return mapUriResponse.Uri;
}
答案 0 :(得分:2)
如果您还没有,可能需要查看this article on the Bing Maps tile system calculations,您将在其中找到讨论地面分辨率和地图比例的部分。从那篇文章:
map scale = 1 : ground resolution * screen dpi / 0.0254 meters/inch
根据您使用的Bing地图的实施情况,可能无法通过精确的地图比例指定视图。我认为这是因为您无法精确控制缩放级别。例如,在javascript ajax版本中,您只能以整数值指定缩放级别,因此上述等式的ground resolution
部分将以谨慎的步骤跳转。在赤道上,使用缩放级别21
会缩放1: 282
,缩放级别22
将为您提供1:141
。由于您无法为缩放级别指定小数值,因此无法使用ajax控件获得精确的1:200比例。我对.net Bing Maps控件没有丰富的经验,因此您可能需要调查该API以查看是否可以指定任意缩放级别。
如果您可以精确控制缩放级别并知道dpi值,则可以使用上述链接文章中描述的公式实现1:200比例。