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