components_rangetheme_vue.html 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. <!--********************************************************************
  2. * Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
  3. *********************************************************************-->
  4. <!DOCTYPE html>
  5. <html lang="en-US">
  6. <head>
  7. <meta charset="UTF-8" />
  8. <title data-i18n="resources.title_componentsRangeTheme_Vue"></title>
  9. <style>
  10. #main {
  11. margin: 0 auto;
  12. }
  13. #main,
  14. #map {
  15. position: absolute;
  16. width: 100%;
  17. height: 100%
  18. }
  19. .legendItemHeader,
  20. .legendItemValue {
  21. width: 120px;
  22. height: 18px;
  23. font-size: 14px;
  24. }
  25. </style>
  26. </head>
  27. <body style=" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%;position: absolute;top: 0;">
  28. <div id="main">
  29. <sm-web-map :map-options="mapOptions" @load="mapIsLoaded">
  30. <sm-range-theme-layer :options="themeOptions" layer-name="RangeThemeLayer"
  31. :data="features" @load="layerLoaded" v-show="!!features.length">
  32. </sm-range-theme-layer>
  33. </sm-web-map>
  34. <!-- 属性表 -->
  35. <div style="width: 272px;float:right">
  36. <div id="infoBox" class="panel panel-primary infoPane"
  37. style="width:272px;margin-top: 250px;position: absolute;fontSize:14px;display: none;float:right">
  38. <div class="panel-heading">
  39. <h5 class='panel-title text-center' data-i18n="resources.text_attributeTable"></h5>
  40. </div>
  41. <div id="infoContent" class="panel-body content">
  42. </div>
  43. </div>
  44. </div>
  45. </div>
  46. <script type="text/javascript" include="widgets,vue,bootstrap" src="../js/include-web.js"></script>
  47. <script include="iclient-mapboxgl-vue,mapbox-gl-enhance"
  48. src="../../dist/mapboxgl/include-mapboxgl.js"></script>
  49. <script>
  50. widgets.loader.showLoader('data loading...');
  51. var HOST = window.isLocal ? window.server : "https://iserver.supermap.io";
  52. var features = [];
  53. function createThemeFeatures() {
  54. var getFeatureParam, getFeatureBySQLService, getFeatureBySQLParams;
  55. getFeatureParam = new SuperMap.FilterParameter({
  56. name: "Jingjin",
  57. attributeFilter: "SMID > -1"
  58. });
  59. getFeatureBySQLParams = new SuperMap.GetFeaturesBySQLParameters({
  60. queryParameter: getFeatureParam,
  61. toIndex: 500,
  62. datasetNames: ["Jingjin:BaseMap_R"]
  63. });
  64. var dataUrl = HOST + '/iserver/services/data-jingjin/rest/data';
  65. getFeatureBySQLService = new SuperMap.GetFeaturesBySQLService(dataUrl, {
  66. format: SuperMap.DataFormat.ISERVER,
  67. eventListeners: { "processCompleted": processCompleted }
  68. });
  69. getFeatureBySQLService.processAsync(getFeatureBySQLParams);
  70. };
  71. createThemeFeatures();
  72. function processCompleted(getFeaturesEventArgs) {
  73. var result = getFeaturesEventArgs.result;
  74. if (result && result.features) {
  75. widgets.loader.removeLoader();
  76. features = result.features;
  77. new Vue({
  78. el: '#main',
  79. data() {
  80. var attribution =
  81. "<a href='https://www.mapbox.com/about/maps/' target='_blank'>© Mapbox </a>" +
  82. " with <span>© <a href='https://iclient.supermap.io' target='_blank'>SuperMap iClient</a> | </span>" +
  83. " Map Data <span>© <a href='http://support.supermap.com.cn/product/iServer.aspx' target='_blank'>SuperMap iServer</a></span> ";
  84. return {
  85. mapOptions: {
  86. container: 'map',
  87. style: {
  88. "version": 8,
  89. "sources": {
  90. "raster-tiles": {
  91. "attribution": attribution,
  92. "type": "raster",
  93. "tiles": [HOST + '/iserver/services/map-jingjin/rest/maps/京津地区地图/zxyTileImage.png?z={z}&x={x}&y={y}'],
  94. "tileSize": 256,
  95. },
  96. },
  97. "layers": [{
  98. "id": "simple-tiles",
  99. "type": "raster",
  100. "source": "raster-tiles",
  101. "minzoom": 0,
  102. "maxzoom": 22
  103. }]
  104. },
  105. center: [116.85, 39.79],
  106. zoom: 7
  107. },
  108. features,
  109. themeOptions: {
  110. // map: map,//该可选参数将在下个版本遗弃
  111. attributions: " ",
  112. opacity: 0.8,
  113. style: {
  114. shadowBlur: 16,
  115. shadowColor: "#000000",
  116. fillColor: "#FFFFFF"
  117. },
  118. isHoverAble: true,
  119. highlightStyle: {
  120. stroke: true,
  121. strokeWidth: 4,
  122. strokeColor: 'blue',
  123. fillColor: "#00EEEE",
  124. fillOpacity: 0.8
  125. },
  126. themeField: "POP_DENSITY99",
  127. styleGroups: [
  128. {
  129. start: 0,
  130. end: 0.02,
  131. style: {
  132. color: '#FDE2CA'
  133. }
  134. },
  135. {
  136. start: 0.02,
  137. end: 0.04,
  138. style: {
  139. color: '#FACE9C'
  140. }
  141. },
  142. {
  143. start: 0.04,
  144. end: 0.06,
  145. style: {
  146. color: '#F09C42'
  147. }
  148. },
  149. {
  150. start: 0.06,
  151. end: 0.1,
  152. style: {
  153. color: '#D0770B'
  154. }
  155. },
  156. {
  157. start: 0.1,
  158. end: 0.2,
  159. style: {
  160. color: '#945305'
  161. }
  162. }]
  163. }
  164. };
  165. },
  166. methods: {
  167. mapIsLoaded(e) {
  168. this.map = e.map;
  169. },
  170. layerLoaded(themeLayer) {
  171. themeLayer.on('mousemove', function (e) {
  172. if (e.target && e.target.refDataID) {
  173. document.getElementById("infoBox").style.display = "block";
  174. var fid = e.target.refDataID;
  175. var fea = themeLayer.getFeatureById(fid);
  176. if (fea) {
  177. document.getElementById("infoContent").innerHTML = "";
  178. document.getElementById("infoContent").innerHTML += "ID: " + fea.attributes.SMID + "<br/>";
  179. document.getElementById("infoContent").innerHTML += resources.text_districtName + fea.attributes.NAME + "<br/>";
  180. document.getElementById("infoContent").innerHTML += resources.text_populationDensity + parseFloat(fea.attributes.POP_DENSITY99).toFixed(5) + "<br/>";
  181. }
  182. }
  183. else {
  184. document.getElementById("infoContent").innerHTML = "";
  185. document.getElementById("infoBox").style.display = "none";
  186. }
  187. });
  188. }
  189. }
  190. });
  191. }
  192. };
  193. </script>
  194. </body>
  195. </html>