ArcGIS API for JavaScript 通过identifyTask实现点击选择要素

小鱼儿 2021-09-14 09:30 476阅读 0赞

需求

  1. 在浏览器界面中,在浏览器画定范围,使其高亮显示,查询当前空间中的要素。

思路

  1. 先利用identifyTask根据自己画的要素实现图层查询,将选中的要素以自己实例化的符号显示出来

效果截图

在这里插入图片描述

实现代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Hello World</title>
  6. <link rel="stylesheet" type="text/css" href="http://10.10.70.85:6090/arcgis_js_api/library/3.25/3.25/esri/css/esri.css" />
  7. <script type="text/javascript" src="http://10.10.70.85:6090/arcgis_js_api/library/3.25/3.25/init.js"></script>
  8. <style>
  9. *{
  10. padding: 0px;
  11. margin:0px;
  12. }
  13. table{
  14. margin-top: 10px;
  15. border-collapse: collapse;
  16. overflow-y: scroll;
  17. }
  18. th,td{
  19. padding: 0px;
  20. border:1px solid #000;
  21. }
  22. </style>
  23. </head>
  24. <body>
  25. <div id="mapDiv" style="width:calc(100% - 2px); height:800px; border:1px solid #000;"></div>
  26. <input id="btn" type="button" value="选择">
  27. <table >
  28. <thead>
  29. <tr>
  30. <th width="100px">名称</th>
  31. <th width="100px">类型</th>
  32. <th width="100px">面积</th>
  33. </tr>
  34. </thead>
  35. <tbody id="infoBody">
  36. </tbody>
  37. </table>
  38. <script>
  39. require(["esri/map",
  40. "dojo/query",
  41. "dojo/dom",
  42. "dojo/on",
  43. "esri/toolbars/draw",
  44. "esri/layers/ArcGISDynamicMapServiceLayer",
  45. "esri/tasks/IdentifyTask",
  46. "esri/tasks/IdentifyParameters",
  47. "esri/symbols/SimpleMarkerSymbol",
  48. "esri/symbols/SimpleLineSymbol",
  49. "esri/symbols/SimpleFillSymbol",
  50. "esri/geometry/Point",
  51. "esri/Color",
  52. "esri/graphic",
  53. "dojo/domReady!"],
  54. function(Map,query,dom,on,Draw,ArcGISDynamicMapServiceLayer,IdentifyTask,IdentifyParameters,SimpleMarkerSymbol,
  55. SimpleLineSymbol,SimpleFillSymbol,Point,Color,Graphic){
  56. var nameArr=[];//用于存储查询地点名称
  57. var shapeArr=[];//用于存储查询shape
  58. var areaArr=[];//用于存储面积
  59. var map = new Map("mapDiv");
  60. var layer=new ArcGISDynamicMapServiceLayer("http://10.10.70.50:6080/arcgis/rest/services/jsDemo/china/MapServer");
  61. map.addLayer(layer);
  62. var tb = new Draw(map);
  63. var pointSymbol = new SimpleMarkerSymbol(//定义点符号
  64. SimpleMarkerSymbol.STYLE_CIRCLE, 10,
  65. new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,
  66. new Color([255,0,0]), 1),
  67. new Color([255,0,0]));
  68. var outline= new SimpleLineSymbol(SimpleLineSymbol.STYLE_DASHDOT,new Color([255, 0, 0]), 1); //定义面的边界线符号
  69. var PolygonSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, outline,new Color([0, 255, 0, 1])); //定义面符号
  70. query("#btn").on("click",function(){
  71. map.graphics.clear();//清空graphics
  72. tb.activate(Draw["POLYGON"]);
  73. tb.on("draw-end", doIdentify);
  74. });
  75. function doIdentify(evt){
  76. tb.deactivate();
  77. //添加draw画的区域
  78. map.graphics.add(new Graphic(evt.geometry,PolygonSymbol));
  79. // 实例化IdentifyTask
  80. var identifyTask = new IdentifyTask("http://10.10.70.50:6080/arcgis/rest/services/jsDemo/china/MapServer");
  81. // IdentifyTask参数设置
  82. identifyParams = new IdentifyParameters();
  83. // 冗余范围
  84. identifyParams.tolerance = 3;
  85. // 返回地理元素
  86. identifyParams.returnGeometry = true;
  87. // 进行Identify的图层
  88. identifyParams.layerIds = [0];
  89. // 进行Identify的图层为全部
  90. identifyParams.layerOption = IdentifyParameters.LAYER_OPTION_ALL;
  91. // Identify的geometry
  92. identifyParams.geometry = evt.geometry;
  93. // Identify范围
  94. identifyParams.mapExtent = map.extent;
  95. identifyTask.execute(identifyParams,showFindResult);
  96. };
  97. function showFindResult(queryResult){
  98. //初始化信息暂存数组
  99. nameArr=[];
  100. shapeArr=[];
  101. areaArr=[];
  102. if (queryResult.length === 0) {
  103. alert("查询无结果");
  104. return;
  105. }
  106. for (var i = 0; i < queryResult.length; i++) {
  107. nameArr[i]=queryResult[i].feature.attributes.name;
  108. shapeArr[i]=queryResult[i].feature.attributes.Shape;
  109. areaArr[i]=queryResult[i].feature.attributes.AREA;
  110. //定义高亮图形的符号
  111. var graphic ={}; //创建graphic
  112. var locationPoint ={};//创建定位点
  113. var geometry = queryResult[i].feature.geometry;//获得该图形的形状
  114. if(geometry.type ==="polygon"){
  115. graphic = new Graphic(geometry, PolygonSymbol);
  116. locationPoint=geometry.getCentroid();
  117. }
  118. else if(geometry.type ==="point"){
  119. graphic = new Graphic(geometry, pointSymbol);
  120. locationPoint=geometry;
  121. }
  122. //将图形添加到map中
  123. map.graphics.add(graphic);
  124. map.centerAndZoom(locationPoint,1);
  125. }
  126. var html="";
  127. for(var i=0;i<nameArr.length;i++){
  128. html+="<tr>" +
  129. " <td >"+nameArr[i]+"</td>" +
  130. "<td >"+shapeArr[i]+"</td>" +
  131. "<td >"+areaArr[i]+"</td>"+
  132. "</tr>";
  133. }
  134. dom.byId("infoBody").innerHTML =html;
  135. }
  136. })
  137. </script>
  138. </body>
  139. </html>

发表评论

表情:
评论列表 (有 0 条评论,476人围观)

还没有评论,来说两句吧...

相关阅读