【问题标题】:how to generate a map based on a given scale [Bing Map]?如何根据给定的比例生成地图[Bing Map]?
【发布时间】:2013-03-04 15:03:12
【问题描述】:

我最近开始在 c# 中的 webService [wcf] 中使用 [Bing Api]。 我想用必应恢复给定比例的卫星图像! 例如

比例 1:200(地图上的 1 厘米等于世界上的 200 厘米)

当然,我找到了解释如何计算图像分辨率卫星 bing 的这个函数,但这不是我想要的 ..

Map resolution = 156543.04 meters/pixel * cos(latitude) / (2 ^ zoomlevel)

这是我用来生成我的 bing 地图的函数,但我不知道要发送什么参数来检索 1:200 的图像比例。

我需要:

比例 = 1:200

我搜索:

int ma​​pSizeHeight = ?

int ma​​pSizeWidth = ?

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;
    }

【问题讨论】:

    标签: map geolocation bing-maps bing-api


    【解决方案1】:

    如果您还没有,您可能想查看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 比例。

    【讨论】:

    • 我很抱歉,但经过反思,我看不出如何计算缩放,以及具有已知比例的图像的分辨率.. 我不需要看比例,因为我已经知道 -> 地图比例 = 1:200 但 zoomLevel = ?..etc
    • 首先要调查的是您是否可以在 API 中将缩放级别设置为十进制值。如果您只能将缩放级别设置为整数值,那么您将被上面链接中定义的谨慎的地图比例步骤所困扰。然后,您必须拍摄照片并手动将其缩放到所需的 1:200 比例。基本上,如果您可以将缩放级别设置为十进制值,那么缩放图像的工作就会为您完成。请记住,卫星图像本身是以谨慎的比例拍摄的,因此任何比例变化都需要在软件中完成。
    • 我相信您可以通过数学计算得出给定地图比例的缩放级别值,您拥有所有方程式并且只求解一个变量...
    • 对于地图尺寸,我的理解是您可以选择任何允许大小(以像素为单位)的正方形区域,将其代入等式,您将获得一个缩放级别,以达到 1:200 的比例维度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 2022-12-06
    • 1970-01-01
    相关资源
    最近更新 更多