Bing.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. /**
  2. * @requires SuperMap/Util.js
  3. * @requires SuperMap/Layer/CanvasLayer.js
  4. */
  5. /**
  6. * Class: SuperMap.Layer.Bing
  7. * 此图层可以访问Bing地图服务。
  8. *
  9. * Inherits from:
  10. * - <SuperMap.Layer.CanvasLayer>
  11. */
  12. SuperMap.Layer.Bing = SuperMap.Class(SuperMap.CanvasLayer, {
  13. /**
  14. * APIProperty: dpi
  15. * {Float} 屏幕上每英寸包含像素点的个数。
  16. * 该参数结合图层比例尺可以推算出该比例尺下图层的分辨率.默认为96。
  17. */
  18. dpi: 96,
  19. /**
  20. * APIProperty: name
  21. * {String}图层名称,默认为“Bing Map”,防止初始化时未设置图层名
  22. *
  23. */
  24. name: "Bing Map",
  25. /**
  26. * Property: url
  27. * {String}默认的Bing的三个中国范围地图的服器地址,不需要要用户设置
  28. */
  29. url: [
  30. 'http://dynamic.t0.tiles.ditu.live.com/comp/ch/${quadKey}?it=G,TW,L,LA&mkt=zh-cn&og=109&cstl=w4c&ur=CN&n=z',
  31. 'http://dynamic.t1.tiles.ditu.live.com/comp/ch/${quadKey}?it=G,TW,L,LA&mkt=zh-cn&og=109&cstl=w4c&ur=CN&n=z',
  32. 'http://dynamic.t2.tiles.ditu.live.com/comp/ch/${quadKey}?it=G,TW,L,LA&mkt=zh-cn&og=109&cstl=w4c&ur=CN&n=z'
  33. ],
  34. /**
  35. * Property: attribution
  36. * {String} The layer attribution.
  37. */
  38. attribution: "Data CC-By-SA by <a style='white-space: nowrap' target='_blank' href='http://www.bing.com/maps/'>BingMap</a>",
  39. /**
  40. * Property: serverResolutions
  41. * {Array} the resolutions provided by the Bing servers.
  42. * 0 级没有切片 156543.03390625, z+1
  43. */
  44. serverResolutions: [
  45. 19567.87923828125,9783.939619140625, 4891.9698095703125,
  46. 2445.9849047851562,1222.9924523925781, 611.4962261962891,
  47. 305.74811309814453,152.87405654907226, 76.43702827453613,
  48. 38.218514137268066,19.109257068634033, 9.554628534317017,
  49. 4.777314267158508,2.388657133579254, 1.194328566789627,
  50. 0.5971642833948135
  51. ],
  52. /**
  53. * Property: zOffset
  54. * {Number} 图片url中z值偏移量
  55. */
  56. zOffset:3,
  57. /**
  58. * Constructor: SuperMap.Layer.Bing
  59. * 创建Bing图层,可以浏览Bing地图
  60. * Example:
  61. * (code)
  62. *
  63. * var bing = new SuperMap.Layer.Bing("Bing Map");
  64. *
  65. * (end)
  66. *
  67. * 默认为墨卡托投影,所以当需要地图定位以及添加元素在地图上时都需要坐标转换
  68. * Example:
  69. * (code)
  70. *
  71. * var markers = new SuperMap.Layer.Markers( "Markers" );
  72. * map.addLayer(markers);
  73. * var size = new SuperMap.Size(21,25);
  74. * var offset = new SuperMap.Pixel(-(size.w/2), -size.h);
  75. * var icon = new SuperMap.Icon('图片地址', size, offset);
  76. * markers.addMarker(new SuperMap.Marker(new SuperMap.LonLat(118,40 ).transform(
  77. * new SuperMap.Projection("EPSG:4326"),
  78. * map.getProjectionObject()),icon));
  79. *
  80. * (end)
  81. * Parameters:
  82. * name - {String} 图层名称
  83. */
  84. initialize: function(name, options) {
  85. options = SuperMap.Util.extend({
  86. projection: "EPSG:900913",
  87. resolutions: this.serverResolutions,
  88. numZoomLevels: 16
  89. }, options);
  90. SuperMap.CanvasLayer.prototype.initialize.apply(this,[name || this.name,this.url,{},options] );
  91. },
  92. /**
  93. * Method: clone
  94. */
  95. clone: function(obj) {
  96. if (obj == null) {
  97. obj = new SuperMap.Layer.Bing(
  98. this.name, this.url, this.getOptions());
  99. }
  100. obj = SuperMap.CanvasLayer.prototype.clone.apply(this, [obj]);
  101. return obj;
  102. },
  103. /**
  104. * APIMethod: destroy
  105. * 解构Bing类,释放资源。
  106. */
  107. destroy: function () {
  108. var me = this;
  109. SuperMap.CanvasLayer.prototype.destroy.apply(me, arguments);
  110. },
  111. /**
  112. * Method: getTileUrl
  113. * 获取瓦片的URL。
  114. *
  115. * Parameters:
  116. * xyz - {Object} 一组键值对,表示瓦片X, Y, Z方向上的索引。
  117. *
  118. * Returns
  119. * {String} 瓦片的 URL 。
  120. */
  121. getTileUrl: function (xyz) {
  122. var me = this, url;
  123. if (SuperMap.Util.isArray(this.url)) {
  124. url = me.selectUrl(xyz, this.url);
  125. }
  126. var x = xyz.x, y = xyz.y, z = xyz.z+this.zOffset; //已在分辨率移除0、1、2级
  127. var quadDigits = [];
  128. for (var i = z; i > 0; --i) {
  129. var digit = '0';
  130. var mask = 1 << (i - 1);
  131. if ((x & mask) != 0) {
  132. digit++;
  133. }
  134. if ((y & mask) != 0) {
  135. digit++;
  136. digit++;
  137. }
  138. quadDigits.push(digit);
  139. }
  140. var quadKey = quadDigits.join("");
  141. return SuperMap.String.format(url, {'quadKey': quadKey});
  142. },
  143. /**
  144. * Method: selectUrl
  145. * 通过某种方式实现在一组url数组中选出合理的url
  146. * Parameters:
  147. * xyz - {Object} 一组键值对,表示瓦片X, Y, Z方向上的索引。
  148. * urls - {Array(String)} url数组
  149. *
  150. * Returns:
  151. * {String} 一个合理的url,主要用于出图访问多个服务器,提高效率
  152. */
  153. selectUrl: function(xyz, urls) {
  154. var id=Math.abs(xyz.x+xyz.y)%urls.length;
  155. var url=urls[id];
  156. return url;
  157. },
  158. CLASS_NAME: "SuperMap.Layer.Bing"
  159. });