com.supermap.web.utils
public class ScaleUtil
继承 ScaleUtil Inheritance Object

该类用于实现地图分辨率与比例尺之间的相互转换.

分辨率与比例尺的概念及关系:
1. 地图分辨率表示屏幕上一个像素(pixel)所代表的地面实际距离。
2. 比例尺通常以比率(如 1:10000 )来表示,表示图上距离与实地距离之比。例如 1:10000 表示图上 1cm 代表实际距离 10000cm,即100米。
3. 地图分辨率与比例尺之间的转换关系:
..........................(1)
Scale————地图比例尺;
Resolution————地图分辨率;
PPI————每英寸的像素点数。
4. PPI 与 DPI 之间的关系:PPI (pixels per inch)是指图像分辨率,表示每英寸内的像素(pixel)个数,图像 PPI 值越高,画面的细节就越丰富。DPI 是指设备分辨率,意指每英寸上的网点数(dot per inch),如:屏幕分辨率、打印机分辨率。DPI 中的点(Dot)与图像分辨率中的像素(Pixel)是两个容易混淆的概念,DPI 中的点可以说是硬件设备最小的显示单元,而像素则既可是一个点,又可是多个点的集合。目前在 GIS 行业,大多数地图在显示于屏幕上时,地图图片 PPI 中的像素默认与屏幕 DPI 中的点是一一对应的。在 SuperMap iClient 8C for Flash 产品中,所指的 DPI 即为图像分辨率 PPI。

另请参见

scaleToResolutionWithoutDPI()


公共方法
  方法 定义方
   
getDpi(referViewBounds:Rectangle2D, referViewer:Rectangle, referScale:Number, datumAxis:Number = 6378137):Number
[static] 获取地图 dpi,dpi 作用在于根据公式(1)进行比例尺与分辨率之间的相互转换...
ScaleUtil
   
resolutionToScale(resolution:Number, dpi:Number, unit:String = degree, datumAxis:Number = 6378137):Number
[static] 根据公式(1)将分辨率转换为比例尺,其中分辨率单位需为:米/像素。
ScaleUtil
   
scalesToResolutions(scales:Array, dpi:Number, unit:String = degree, datumAxis:Number = 6378137):Array
[static] 将比例尺数组转换为分辨率数组。
ScaleUtil
   
scalesToResolutionsWithoutDPI(scales:Array, map:Map):Array
[static] 在无 DPI 的条件下,将比例尺数组转换为分辨率数组...
ScaleUtil
   
scaleToResolution(scale:Number, dpi:Number, unit:String = degree, datumAxis:Number = 6378137):Number
[static] 根据公式(1)将比例尺转换为分辨率。
ScaleUtil
   
scaleToResolutionWithoutDPI(scale:Number, map:Map):Number
[static] 在无 DPI 的条件下,将比例尺转换为分辨率...
ScaleUtil
方法详细描述
getDpi () 方法
public static function getDpi(referViewBounds:Rectangle2D, referViewer:Rectangle, referScale:Number, datumAxis:Number = 6378137):Number

获取地图 dpi,dpi 作用在于根据公式(1)进行比例尺与分辨率之间的相互转换...

计算地图 dpi 需要 referViewBounds(地理范围)、referViewer(图片大小)、referScale(比例尺)、datumAxis(椭球半径,可选)四个参数:
referViewBounds ———— 表示 referScale 所指定的比例尺下,由 referViewer 所指定的图片大小所代表的实际地理范围;
referViewer ———— 表示图片像素大小,Rectangle 类型;
referScale ———— referViewBounds 与 referViewer 所对应的比例尺。
datumAxis ———— 【可选】地图所采用的地球椭球体长轴半径。该参数用于经纬度向平面米制单位的转换,作用于地图单位为经纬度的地图,若地图单位为米,可视该参数无效。该参数默认为 WGS84 椭球体的长轴半径(赤道半径):6378137 m
下面简单列举几个常用椭球长轴半径:Krassovsky 1940:6378245、IAG 78:6378140、WGS 1984:6378137

上述四个参数(以下简称 DPI 参数)可以通过 SuperMap iServer 获取,方法如下:
假设通过 SuperMap iServer Java 6R 已发布“世界地图”,访问服务地址:http://supermapiserver:8090/iserver/services/map-world/rest/maps/世界地图.rjson,可以获取“世界地图” DPI 参数,如下图:
...........
获取到 referViewBounds、referViewer、referScale、referScale、datumAxis 后,getDpi() 方法根据公式(2)计算 DPI 值:
..........................(2)
其中 Resolution = referViewBounds/referViewer,Scale = referScale。

参数

referViewBounds:Rectangle2D
 
referViewer:Rectangle
 
referScale:Number
 
datumAxis:Number (default = 6378137)

返回
Number — 返回 DPI 值。
resolutionToScale () 方法  
public static function resolutionToScale(resolution:Number, dpi:Number, unit:String = degree, datumAxis:Number = 6378137):Number

根据公式(1)将分辨率转换为比例尺,其中分辨率单位需为:米/像素。

参数

resolution:Number — 待转换的分辨率。
 
dpi:Number — DPI 值。
 
unit:String (default = degree) — 地图单位。默认为 degree。
 
datumAxis:Number (default = 6378137) — 地图坐标系统所采用的椭球长轴半径,默认为 WGS_84 椭球:6378137。

返回
Number — 返回比例尺。
scalesToResolutions () 方法  
public static function scalesToResolutions(scales:Array, dpi:Number, unit:String = degree, datumAxis:Number = 6378137):Array

将比例尺数组转换为分辨率数组。

参数

scales:Array — 比例尺数组。
 
dpi:Number — dpi 值。
 
unit:String (default = degree) — 地图单位。默认为 degree。
 
datumAxis:Number (default = 6378137) — 地图坐标系统所采用的椭球长轴半径,默认为 WGS_84 椭球:6378137。

返回
Array — 返回分辨率数组。
scalesToResolutionsWithoutDPI () 方法  
public static function scalesToResolutionsWithoutDPI(scales:Array, map:Map):Array

在无 DPI 的条件下,将比例尺数组转换为分辨率数组...

该方法遍历比例尺数组中的每一元素,同时调用 scaleToResolutionWithoutDPI() 方法实现每个比例尺向分辨率的转换。

参数

scales:Array — 待转换的比例尺数组。
 
map:Map — 与比例尺关联的地图 Map 对象。

返回
Array — 返回分辨率数组。

另请参见

scaleToResolutionWithoutDPI()
scaleToResolution () 方法  
public static function scaleToResolution(scale:Number, dpi:Number, unit:String = degree, datumAxis:Number = 6378137):Number

根据公式(1)将比例尺转换为分辨率。

参数

scale:Number — 待转换的比例尺。
 
dpi:Number — DPI 值。
 
unit:String (default = degree) — 地图单位。默认为 degree。
 
datumAxis:Number (default = 6378137) — 地图坐标系统所采用的椭球长轴半径,默认为 WGS_84 椭球:6378137。

返回
Number — 返回分辨率,单位:米/像素。
scaleToResolutionWithoutDPI () 方法  
public static function scaleToResolutionWithoutDPI(scale:Number, map:Map):Number

在无 DPI 的条件下,将比例尺转换为分辨率...

根据公式(1)可以看出,分辨率与比例尺之间的相互转换必需使用到 DPI,但在某些特殊情况下没有 DPI,如用户自定义的缓存图层,通过 SuperMap Deskpro 生成的缓存图片一般仅知道地图的比例尺,无法知道缓存图片的 DPI,此时若想使用 Map.zoomToResolution()方法将地图缩放到某一显示级别下会出现障碍。针对这种情况,SuperMap iClient 8C for Flash 提供了 scaleToResolutionWithoutDPI() 方法,在没有 DPI 的情况下,可以将比例尺转换为分辨率。该方法需要设置与待转换的比例尺关联的地图 Map 参数。

看完上述的描述之后,您肯定有这样的疑惑:有了比例尺之后,用 Map.zoomToScale()就可实现地图缩放到某一显示级别下,为何非要用分辨率?
原因:使用 Map.zoomToScale() 方法的前提是必需知道地图 DPI,即没有 DPI 是无法使用 Map.zoomToScale() 方法的。

注意: scaleToResolutionWithoutDPI() 方法表面上似乎没有使用 DPI,但它的内核其实使用的是通用 DPI 值——96。因此,如果您的地图 DPI 与 96 可能有所偏差,建议不要使用该方法。

参数

scale:Number — 待转换的比例尺值。
 
map:Map — 与待转换的比例尺关联的地图 Map 对象。

返回
Number — 返回分辨率值。