一、概述
在OpenLayers中,地圖必須具有一個縮放級別的范圍,縮放級別可以用比例尺(scale)或者分辨率(resolution)表示。
比例尺——屏幕上1米代表多少地圖坐標單位(度或者米);分辨率——屏幕上一個像素代表多少地圖坐標單位。
兩者的轉換關系是:scale = resolution * 72 * 39.3701(1米=39.3701英寸,1英寸=72像素,有的是1英寸=96像素,這里我也沒弄清楚咋回事,72或者96代表72dpi、96dpi,如果是瓦片的話可以通過看瓦片圖像來確定dpi)
地圖具有一個總的縮放級別,每個圖層可以有各自的縮放級別,這樣可以控制圖層只在合適的級別上顯示。
二、縮放級別范圍的確定方法
1、比例尺數組或者分辨率數組來確定(相鄰兩級之間不一定是2倍的關系,可以是任意值)。示例:
scales: [50000000, 30000000, 10000000, 5000000]
2、用最大分辨率(maxResolution)和縮放級別總數(numZoomLevels)確定,相鄰兩級是2倍關系
2.1最大分辨率的確定方法:
a. 直接指定maxResolution,例如:
b. 直接指定minScale,例如:
c. 由maxExtent確定(maxResolution需設置為‘auto’),例如:
maxResolution: "auto"
2.2 縮放級別總數的確定方法:
a. 直接指定numZoomLevels,例如:numZoomLevels: 5
b. 由最大分辨率和最小分辨率的比值確定,最小分辨率同2.1有三種方法可以確定:
b.1 直接指定minResolution
b.2 直接指定maxScale
b.3 由minExtent確定(minResolution需設置為‘auto’)
如果指定的參數過多,導致縮放級別范圍不一致時,上述方法順序決定了OpenLayers確定縮放級別范圍的優先級。
GeoServer中先根據符號大小計算分辨率,再根據分辨率計算sld中的比例尺
分辨率=相鄰兩點間實際距離(米)/符號大小(像素):即resolution=distance/symbol
根據分辨率計算sld中的比例尺:scale = (distance/symbol)* 72 * 39.3701
舉例子:設distance=0.8,符號大小為8、16、32、64、128、256
第一級:
R1=0.8/8=0.1
s1=
R2=0.8/16=0.05