UTFGridLayerTopic.html 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"/>
  6. <meta name="apple-mobile-web-app-capable" content="yes"/>
  7. <title>属性图专题</title>
  8. <link href='./css/bootstrap.min.css' rel='stylesheet'/>
  9. <link href='./css/bootstrap-responsive.min.css' rel='stylesheet'/>
  10. <link href='./css/sm-extend.css' rel='stylesheet'/>
  11. <link href='./css/sm-doc.css' rel='stylesheet'/>
  12. </head>
  13. <body data-spy="scroll" data-target=".subnav" data-offset="50">
  14. <!--导航条-->
  15. <div class="navbar navbar-fixed-top" id="navbar">
  16. </div>
  17. <div id='container' class='container'>
  18. <div class='page-header'>
  19. <h1>属性图专题</h1>
  20. <hr/>
  21. <h2>一、简介</h2>
  22. <p>
  23. SuperMap iClient for JavaScript 提供了UTFGrid图层(属性图),用于客户端属性信息的快速交互。
  24. UTFGrid图层从UTFGrid切片数据源读取数据,其本质是基于JSON的ASCII 码’字符画’与属性数据的结合。
  25. UTFGrid图层不能被可视化渲染,在地图中使用这个图层,
  26. 必须同时添加 SuperMap.Control.UTFGrid 控件类来控制触发事件类型。
  27. </p>
  28. <ul style="list-style-type:disc;">
  29. <li>原理:通过请求瓦片数据(非图片),将属性信息保存到客服端UTFGrid图层中,提高客户端属性信息的交互速度。</li>
  30. <li>特点:根据屏幕像素位置在客户端快速获取图层的属性信息。</li>
  31. <li>应用场景:
  32. UTFGrid图层常用于客户端需要快速响应属性信息的场景。
  33. 当需要实时查询地图上某些地物属性并且地物数量很大时,采用与服务器交互获取属性信息的方式需要频繁的发起请求,
  34. 时间消耗较大, 而通过UTFGrid图层,可以快速的获取地物属性信息,极大的提高用户体验。
  35. 例如:实现鼠标悬停或鼠标单击某一地物时,快速获取该地物某些属性信息。
  36. </li>
  37. </ul>
  38. <h2>二、使用</h2>
  39. <p>下面展示属性图使用方式:</p>
  40. <h4>1、创建UTFGrid图层</h4>
  41. <p></p>
  42. <p>
  43. 首先创建一个属性图对象。由于属性图从UTFGrid切片数据源读取数据,
  44. 所以在创建属性图对象时可以根据需要指定utfTileSize 、pixcell、utfgridResolution等图层属性。
  45. </p>
  46. <p>
  47. <pre>
  48. var utfgrid = new SuperMap.Layer.UTFGrid("UTFGridLayer", url,
  49. {
  50. layerName: "China_Province_R@China400",
  51. utfTileSize: 256,
  52. pixcell: 8,
  53. isUseCache: true
  54. },
  55. {
  56. utfgridResolution: 8
  57. }
  58. );
  59. </pre>
  60. </p>
  61. <p>
  62. 说明:pixcell与utfgridResolution两个属性有对应关系,在使用的时候要注意应用场景:
  63. </p>
  64. <p>
  65. &nbsp;&nbsp; 1.其中pixcell为发送给服务端请求utfgrid瓦片的精度,数值越小,精度越高,相应的瓦片大小也就越大;
  66. </p>
  67. <p>
  68. &nbsp;&nbsp; 2.utfgridResolution为客户端解析瓦片使用的精度,应该与pixcell的值相等,否则会产生位置与属性对应不上的问题;
  69. </p>
  70. <p>
  71. &nbsp;&nbsp; 3.通常如果UTFGrid图层为面图层,对应的数据量会比较大,为了不影响页面的正常浏览,可以将这两个属性设的大一些;
  72. </p>
  73. <p>
  74. &nbsp;&nbsp; 4.isUseCache设置是否使用缓存,使用缓存能够提高性能。
  75. </p>
  76. <h4>2、添加到地图</h4>
  77. <p></p>
  78. <p>
  79. 然后将此图层添加到map里面。
  80. </p>
  81. <p>
  82. <pre>
  83. //向map中添加图层
  84. map.addLayers([utfgrid]);
  85. </pre>
  86. </p>
  87. <h4>3、创建UTFGrid控件</h4>
  88. <p></p>
  89. <p>
  90. 创建UTFGrid控件,通过layers属性与先前创建的属性图utfgrid关联,指定触发事件类型为move。
  91. </p>
  92. <p>
  93. <pre>
  94. control = new SuperMap.Control.UTFGrid({
  95. layers: [utfgrid],
  96. callback: callback,
  97. handlerMode: "move"
  98. });
  99. </pre>
  100. </p>
  101. <h4>4、添加控件到地图</h4>
  102. <p></p>
  103. <p>
  104. 将此控件添加到map里面。
  105. </p>
  106. <p>
  107. <pre>
  108. //向map中添加控件
  109. map.addControl(control);
  110. </pre>
  111. </p>
  112. <h4>5、处理事件</h4>
  113. <p></p>
  114. <p>
  115. 当鼠标事件触发的位置恰好在UTFGrid图层上有对应数据的时候调用回调函数callback。
  116. </p>
  117. <p>
  118. 回调函数callback的参数 infoLookup 是一个返回对象,该对象由一个或多个键值对组成,
  119. 其中键值为图层索引,值为鼠标位置对应该图层的数据(属性信息),数据格式为JSON类型。
  120. 通过 infoLookup 对象,无需与服务器交互就可以快速获取鼠标位置对应地物的属性信息。
  121. </p>
  122. <p>
  123. <pre>
  124. var callback = function (infoLookup, loc, pixel) {
  125. closeInfoWin();
  126. if (infoLookup) {
  127. var info;
  128. for (var idx in infoLookup) {
  129. info = infoLookup[idx];
  130. if (info && info.data) {
  131. //弹出框内容,info.data.NAME 就是当前鼠标位置对应要素的NAME属性字段值
  132. var dom = "&lt;div style='font-size: 12px; color: #000000;border: 0.5px solid #000000'&gt;"
  133. + info.data.NAME + "&lt; /div &gt;";
  134. //设置x与y的像素偏移量,不影响地图浏览;
  135. var xOff = (1 / map.getScale()) * 0.001;
  136. var yOff = -(1 / map.getScale()) * 0.005;
  137. var pos = new SuperMap.LonLat(loc.lon+xOff, loc.lat+yOff);
  138. //新建一个弹出框对象
  139. infowin = new SuperMap.Popup("chicken",
  140. pos,
  141. new SuperMap.Size(100, 20),
  142. dom,
  143. true, null);
  144. infowin.autoSize=true;
  145. map.addPopup(infowin);
  146. }
  147. }
  148. }
  149. };
  150. //关闭弹出窗
  151. function closeInfoWin() {
  152. if (infowin) {
  153. try {
  154. map.removePopup(infowin)
  155. }
  156. catch (e) {
  157. }
  158. }
  159. }
  160. </pre>
  161. </p>
  162. <p>这样我们就可以获得以下下效果:</p>
  163. <p>当鼠标移动到中国的某个省份上时,弹出框显示该省份的名称。</p>
  164. <div class="pageImage"><img src="images/utfgridTopic1.png"/></div>
  165. <br />
  166. <p>
  167. 完整范例请见 示范程序->高级示例->UTFGrid图层。
  168. </p>
  169. <h4>6、示例:UTFGrid国旗版</h4>
  170. <p>
  171. 产品示例程序中提供了另一个属性专题图范例:UTFGrid国旗版。
  172. 该示例展示通过UTFGrid图层快速的响应用户的鼠标移动事件,显示出当前鼠标对应国家的国旗和名称。
  173. </p>
  174. <p>
  175. 完整范例请见 示范程序->可视化->可视化图层->UTFGrid国旗版。
  176. </p>
  177. </div>
  178. <div class='footer'>
  179. <p>版权所有&nbsp;&copy; 2000-2016 &nbsp;北京超图软件股份有限公司</p>
  180. </div>
  181. </div>
  182. <script src='./js/jquery.js'></script>
  183. <script src='./js/bootstrap.js'></script>
  184. <script src="./js/navbar.js"></script>
  185. <script src="./js/GoTop.js" id="js_gotop"></script>
  186. </body>
  187. </html>