GeoLevel.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. GeoGlobe.INCHES_PER_UNIT["m"] = 1/0.0254;//1/0.025399998;
  2. //获取层级比例尺分母对应的级别
  3. //var lvl_tdt = getLevelFormScale(2.958293554545656E8); //1
  4. function getRealLevel(relativeLvl,scale, units, dpi){
  5. var lvl = getLevelFormScale(scale, units, dpi);
  6. return parseInt(relativeLvl) == lvl ? 0 : lvl;
  7. }
  8. //获得级别 scale第一个级别比例尺 units单位
  9. function getLevelFormScale(scale, units, dpi){
  10. var units = units ? units : "degrees";
  11. var dpi = dpi ? dpi : 96;
  12. var resolution = getResolutionFromScale_DPI(scale, units, dpi);
  13. var lvl = getLevelFormResolution(resolution, units);
  14. return lvl;
  15. }
  16. function getResolutionFromScale_DPI(scale, units, dpi) {
  17. var resolution;
  18. if (scale) {
  19. if (units == null) {
  20. units = "degrees";
  21. }
  22. var normScale = GeoGlobe.Util.normalizeScale(scale);
  23. resolution = 1 / (normScale * GeoGlobe.INCHES_PER_UNIT[units] * dpi);
  24. }
  25. return resolution;
  26. }
  27. function getLevelFormResolution(resolution, units){
  28. if (!resolution) {
  29. return 0;
  30. }
  31. var zoom, i, diff;
  32. var minDiff = Number.POSITIVE_INFINITY;
  33. var resolutions = getResolutions(units);
  34. for (i = 0, len = resolutions.length; i < len; i++) {
  35. //判断当前分辨率与金字塔中分辨率最接近的
  36. diff = Math.abs(resolutions[i] - resolution);
  37. if (diff > minDiff) {
  38. break;
  39. }
  40. minDiff = diff;
  41. }
  42. zoom = Math.max(0, i - 1);//0和(i - 1)中取大数。
  43. return zoom ;
  44. }
  45. function getResolutions(units){
  46. var resolutions = new Array();
  47. for (var i = 0; i <= 20; i++) {
  48. resolutions.push(getResolutionForLevel(i, units));
  49. }
  50. return resolutions;
  51. }
  52. function getResolutionForLevel(level, units){
  53. //var topTileWidth = Math.abs(this.topTileToX - this.topTileFromX);//360
  54. var units = units ? units : "degrees";
  55. var topTileWidth = 360;//周长360度
  56. if(units === "m"){
  57. topTileWidth = 40075016.6855784;//周长40075016.6855784米=20037508.3427892*2
  58. }
  59. var tileSize = 256;//256
  60. var maxResolution = (topTileWidth / 256);
  61. return maxResolution / Math.pow(2, level);
  62. }