vizLayer_elements.html 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. <!--********************************************************************
  2. * Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
  3. *********************************************************************-->
  4. <!DOCTYPE html>
  5. <html>
  6. <head>
  7. <meta charset="utf-8">
  8. <title data-i18n="resources.title_elementsLayerExtension"></title>
  9. <script type="text/javascript" include="bootstrap" src="../js/include-web.js"></script>
  10. <script type="text/javascript" exclude="iclient-classic" src="../../dist/classic/include-classic.js"></script>
  11. <style type="text/css">
  12. body {
  13. margin: 0;
  14. overflow: hidden;
  15. background: #fff;
  16. width: 100%;
  17. height: 100%
  18. }
  19. #map {
  20. position: absolute;
  21. width: 100%;
  22. height: 100%;
  23. }
  24. </style>
  25. </head>
  26. <body>
  27. <div id="map"></div>
  28. <script>
  29. var map, layer, elementsLayer, myDom, lonlat = new SuperMap.LonLat(109, 35),
  30. host = window.isLocal ? window.server : "https://iserver.supermap.io",
  31. url = host + "/iserver/services/map-world/rest/maps/World";
  32. init();
  33. function init() {
  34. map = new SuperMap.Map("map", {
  35. controls: [
  36. new SuperMap.Control.ScaleLine(),
  37. new SuperMap.Control.Zoom(),
  38. new SuperMap.Control.Navigation({
  39. dragPanOptions: {
  40. enableKinetic: true
  41. }
  42. })
  43. ]
  44. });
  45. map.addControl(new SuperMap.Control.LayerSwitcher(), new SuperMap.Pixel(42, 80));
  46. layer = new SuperMap.Layer.TiledDynamicRESTLayer("World", url, {
  47. transparent: true,
  48. cacheEnabled: true
  49. }, {maxResolution: "auto"});
  50. layer.events.on({"layerInitialized": addLayer});
  51. }
  52. function addLayer() {
  53. map.addLayers([layer]);
  54. map.setCenter(lonlat, 1);
  55. //创建Elements的实例,获得其div
  56. elementsLayer = new SuperMap.Layer.Elements("elementsLayer");
  57. map.addLayers([elementsLayer]);
  58. var elementsDiv = elementsLayer.getDiv();
  59. //设置Elements实例的div为地图大小
  60. var size = map.getSize();
  61. elementsDiv.style.width = size.w;
  62. elementsDiv.style.height = size.h;
  63. //创建一个图片对象并添加到Elements的实例,获得其div
  64. myDom = document.createElement("img");
  65. myDom.src = "./images/china.png";
  66. myDom.style.opacity = "0.6";
  67. elementsDiv.appendChild(myDom);
  68. //设置自定义图片的位置,大小。
  69. setDom();
  70. //监听地图的moveend事件
  71. map.events.on({
  72. moveend: function (evt) {
  73. //判断是否缩放
  74. if (evt.zoomChanged) {
  75. //通过map获得缩放的级数
  76. var level = map.getZoom();
  77. //根据当前地图缩放级别设置图片透明度
  78. if (level > 1) {
  79. myDom.style.opacity = "0.6";
  80. }
  81. else if (level == 1) {
  82. myDom.style.opacity = "0.8";
  83. }
  84. else {
  85. myDom.style.opacity = "1";
  86. }
  87. }
  88. //重置图片的大小和位置,让图片可以随地图缩放
  89. setDom();
  90. }
  91. });
  92. }
  93. //设置图片的位置,大小。
  94. function setDom() {
  95. //这里将图片放到中国地理范围中({left:73.620048522949, right:134.76846313477, top:53.553741455078, bottom:3.8537260781999}),让图片可以随着地图缩放。
  96. var bounds = new SuperMap.Bounds(73.620048522949, 3.8537260781999, 134.76846313477, 53.553741455078);
  97. //该范围的左上角右下角点分别为:
  98. var lonlatLeftTop = new SuperMap.LonLat(bounds.left, bounds.top);
  99. var lonlatRightBottom = new SuperMap.LonLat(bounds.right, bounds.bottom);
  100. //然后分别将左下右上角点转换为像素点
  101. var pxLeftTop = elementsLayer.getLayerPxFromLonLat(lonlatLeftTop);
  102. //设置图片右下角位置
  103. var pxRightBottom = elementsLayer.getLayerPxFromLonLat(lonlatRightBottom);
  104. //设置图片的大小
  105. myDom.style.width = pxRightBottom.x - pxLeftTop.x + "px";
  106. myDom.style.height = pxRightBottom.y - pxLeftTop.y + "px";
  107. //设置图片的位置
  108. myDom.style.position = "absolute";
  109. myDom.style.left = pxLeftTop.x + "px";
  110. myDom.style.top = pxLeftTop.y + "px";
  111. }
  112. </script>
  113. </body>
  114. </html>