12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- GeoGlobe.INCHES_PER_UNIT["m"] = 1/0.0254;//1/0.025399998;
- //获取层级比例尺分母对应的级别
- //var lvl_tdt = getLevelFormScale(2.958293554545656E8); //1
- function getRealLevel(relativeLvl,scale, units, dpi){
- var lvl = getLevelFormScale(scale, units, dpi);
- return parseInt(relativeLvl) == lvl ? 0 : lvl;
- }
- //获得级别 scale第一个级别比例尺 units单位
- function getLevelFormScale(scale, units, dpi){
- var units = units ? units : "degrees";
- var dpi = dpi ? dpi : 96;
- var resolution = getResolutionFromScale_DPI(scale, units, dpi);
- var lvl = getLevelFormResolution(resolution, units);
- return lvl;
- }
- function getResolutionFromScale_DPI(scale, units, dpi) {
- var resolution;
- if (scale) {
- if (units == null) {
- units = "degrees";
- }
- var normScale = GeoGlobe.Util.normalizeScale(scale);
- resolution = 1 / (normScale * GeoGlobe.INCHES_PER_UNIT[units] * dpi);
- }
- return resolution;
- }
- function getLevelFormResolution(resolution, units){
- if (!resolution) {
- return 0;
- }
- var zoom, i, diff;
- var minDiff = Number.POSITIVE_INFINITY;
- var resolutions = getResolutions(units);
- for (i = 0, len = resolutions.length; i < len; i++) {
- //判断当前分辨率与金字塔中分辨率最接近的
- diff = Math.abs(resolutions[i] - resolution);
- if (diff > minDiff) {
- break;
- }
- minDiff = diff;
- }
- zoom = Math.max(0, i - 1);//0和(i - 1)中取大数。
- return zoom ;
- }
- function getResolutions(units){
- var resolutions = new Array();
- for (var i = 0; i <= 20; i++) {
- resolutions.push(getResolutionForLevel(i, units));
- }
- return resolutions;
- }
- function getResolutionForLevel(level, units){
- //var topTileWidth = Math.abs(this.topTileToX - this.topTileFromX);//360
- var units = units ? units : "degrees";
- var topTileWidth = 360;//周长360度
- if(units === "m"){
- topTileWidth = 40075016.6855784;//周长40075016.6855784米=20037508.3427892*2
- }
- var tileSize = 256;//256
- var maxResolution = (topTileWidth / 256);
- return maxResolution / Math.pow(2, level);
- }
|