关于百度地图分辨率resolution的计算

 

一、名词解释  

  分辨率(resolution,港台称之为解析度)就是屏幕图像的精密度,是指显示器所能显示的像素的多少。由于屏幕上的点、线和面都是由像素组成的,显示器可显示的像素越多,画面就越精细,同样的屏幕区域内能显示的信息也越多,所以分辨率是个非常重要的性能指标之一。(百度百科)

  而地面分辨率是以一个像素(pixel)代表的地面尺寸(米)。

二、百度地图坐标概述

  百度地图使用经纬度地理坐标(lng, lat)和像素坐标(x, y)两种,同时百度api提供两种坐标转换的方法

  经纬度转换为地理坐标的方法为:

方法     返回值描述    
pointToPixel(point:Point)    Pixel                              经纬度坐标转换为像素坐标。

  地理坐标转换为经纬度的方法为:

方法返回值描述
pixelToPoint(pixel:Pixel) Point 像素坐标转换为经纬度坐标。

 

------------------------------------------------

  博主经营一家发饰淘宝店,都是纯手工制作哦,开业冲钻,只为信誉!需要的亲们可以光顾一下!谢谢大家的支持!
店名:
  小鱼尼莫手工饰品店
经营:
  发饰、头花、发夹、耳环等(手工制作)
网店:
  http://shop117066935.taobao.com/

  ---------------------------------------------------------------------

继续正题... 

  


三、分辨率计算方法

  a) 分辨率与地图比例尺之间换算方法:

                

    Scale:地图比例尺;

    Resolution:地图分辨率;

    PPI:每英寸的像素点数。

    具体参考文章: http://www.cnblogs.com/qiongmiaoer/archive/2013/03/13/2958288.html

  b) 分辨率根据定义( 实际距离/像素值 ),在大比例尺地图下可以近似的用此方法进行计算,就不考虑地球形状因素了,计算方法为:

     分辨率res = (lng1-lng2)/ (x1-x2);

    或 res = (lat1-lat2)/(y1-y1);

四、一般地图中分辨率特性

  同级别地图中分辨率是固定值,因而无论使用经度还是纬度计算,结果都是不变的。

五、百度地图中分辨率特性

  同级别地图中百度分辨率不是固定值,且经度方向,纬度方向变化幅度也不相同,可以通过以下方法测试:  

  var bounds = map.getBounds();               //假设定义好了百度地图为map     
   var geoPointLB = bounds.getSouthWest();    //左下角点地理坐标
   var geoPointRT = bounds.getNorthEast();    //右上角点地理坐标
   var pixelPointLB = BaiduMap.map.pointToPixel(geoPointLB);  //左下角点像素坐标
   var pixelPointRT = BaiduMap.map.pointToPixel(geoPointRT);  //右上角点像素坐标
  
  var resX = (geoPointRT.lng - geoPointLB.lng) / (pixelPointRT.x - pixelPointLB.x);    //分辨率 = 经度差 / x差
  var resY = (geoPointRT.lat - geoPointLB.lat) / (pixelPointRT.y - pixelPointLB.y);    //分辨率 = 纬度差 / y差

  测试结果:resX和resY是不同的。

  原因:百度地图为了数据保密做的一些“纠正”,防止一些不法用途。

  目前解决方案:将百度地图分为经度方向分辨率、纬度方向分辨率,可以一定程度上减小误差,具体实现方法同上方代码示例。 

店名:
  小鱼尼莫手工饰品店
经营:
  发饰、头花、发夹、耳环等(手工制作)
网店:
  http://shop117066935.taobao.com/

原文地址:https://www.cnblogs.com/qiongmiaoer/p/2951812.html