ArcGIS API For JavaScript - toolbar工具条(测距)、站点要素显隐、线网要素显隐

Myth丶恋晨 2021-07-25 13:10 529阅读 0赞
  1. @{
  2. Layout = null;
  3. }
  4. <!DOCTYPE html>
  5. <html>
  6. <head>
  7. <meta name="viewport" content="width=device-width" />
  8. <title>Draw</title>
  9. @*加载高德地图*@
  10. <script type="text/javascript">
  11. var dojoConfig = {
  12. async: true,
  13. parseOnLoad: true,
  14. packages: [{
  15. name: "js",
  16. location: location.pathname.replace(/\/[^/]*$/, '') + '/js'
  17. }]
  18. };
  19. </script>
  20. <script src="~/Scripts/jquery-3.3.1.js"></script>
  21. <script src="~/Scripts/init.js"></script>
  22. <link href="~/Content/esri.css" rel="stylesheet" />
  23. <link href="~/Content/tundra.css" rel="stylesheet" />
  24. <style>
  25. * {
  26. margin: 0;
  27. padding: 0;
  28. }
  29. html, body, #map {
  30. width: 100%;
  31. height: 100%;
  32. position: absolute;
  33. }
  34. .list {
  35. width: 12%;
  36. background-color: rgba(22, 59, 90, 0.8);
  37. color: #fff;
  38. position: absolute;
  39. }
  40. button {
  41. width: 90%;
  42. margin: 10px 5%;
  43. border-radius: 5px;
  44. height: 26px;
  45. }
  46. </style>
  47. <script>
  48. var map;
  49. var urlMap = 'http://xxx:6080/arcgis/rest/services/njcs/MapServer'//总图层
  50. var stationUrl = 'http://xxx:6080/arcgis/rest/services/njcs/MapServer/0'//站点图层
  51. var lineUrl = 'http://xxx:6080/arcgis/rest/services/njcs/MapServer/1'//线路图层
  52. require(["esri/map", "js/gaodeLayer", "esri/layers/ArcGISDynamicMapServiceLayer", "esri/tasks/GeometryService", "esri/tasks/BufferParameters",
  53. "esri/toolbars/draw", "esri/symbols/Font", "esri/symbols/SimpleMarkerSymbol", "esri/symbols/SimpleLineSymbol", "esri/Color", "dojo/query", "esri/symbols/TextSymbol",
  54. "esri/graphic", "esri/tasks/LengthsParameters", "esri/geometry/Polyline", "dojo/number", "esri/layers/FeatureLayer",
  55. "dojo/domReady!"],
  56. function (Map, gaodeLayer, ArcGISDynamicMapServiceLayer, GeometryService, BufferParameters,
  57. Draw, Font, SimpleMarkerSymbol, SimpleLineSymbol, Color, query, TextSymbol,
  58. Graphic, LengthsParameters, Polyline, number, FeatureLayer) {
  59. /* code goes here */
  60. map = new Map("map", {
  61. center: [120.075892, 31.526844],
  62. zoom: 8,//缩放等级
  63. logo: false, //logo
  64. slider: false, //缩小按钮
  65. });
  66. var serverLayer = new ArcGISDynamicMapServiceLayer(urlMap, { "opacity": 0.6 });
  67. var baselayer1 = new gaodeLayer();//默认加载矢量 new gaodeLayer({layertype:"road"});也可以
  68. map.addLayer(baselayer1);//添加高德地图到map容器
  69. map.addLayer(serverLayer);
  70. //-------------toolbar工具条(测距、站点要素显隐、线网要素显隐)---------------
  71. var toolbar = new Draw(map); //map:地图
  72. //调用esri自带的服务(在arcgis server Manger中,记得开启服务)
  73. var geometryService = new GeometryService("http://xxx:6080/arcgis/rest/services/Utilities/Geometry/GeometryServer");
  74. var totleDistance = 0.0;//总距离
  75. var totalGraphic = null;//存储点集合
  76. var disFun = false;//距离测量
  77. var areaFun = false;//面积测量
  78. var inputPoints = [];//存储生成点的集合
  79. var startFont = new Font('12px').setWeight(Font.WEIGHT_BOLD);//定义文字样式
  80. var makerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE, 8,
  81. new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([204, 102, 51]), 1),
  82. new Color([158.184, 71, 0.65]));//定义标记点样式
  83. //给按钮添加绑定事件
  84. query("button").on("click", function (event) {
  85. console.log("111",event)
  86. //获得按钮的文本信息
  87. var value = this.innerHTML;
  88. switch (value) {
  89. case "测距":
  90. //测距操作
  91. map.graphics.clear();
  92. distanceMeasure();
  93. break;
  94. case "站点":
  95. //站点
  96. map.graphics.clear();
  97. Aurlstation();
  98. break;
  99. case "线网":
  100. //线网
  101. map.graphics.clear();
  102. Xurlline();
  103. break;
  104. }
  105. })
  106. //长度量算
  107. function distanceMeasure() {
  108. map.enableScrollWheelZoom();
  109. disFun = true;
  110. areaFun = false;
  111. toolbar.activate(Draw.POLYLINE);
  112. }
  113. // 量算功能触发
  114. map.on("click", function (evt) {
  115. mapClick(evt);
  116. });
  117. //触发完成的事件
  118. toolbar.on("draw-end", function (evt) {
  119. addToMap(evt); //添加图形函数;测距所点与点之间画的线
  120. });
  121. //生成两点之间的连线
  122. toolbar.setLineSymbol(new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([255, 0, 0]), 2));
  123. //量算函数
  124. function mapClick(evt) { //触发事件的方法
  125. if (disFun) {
  126. inputPoints.push(evt.mapPoint);
  127. var textSymbol;
  128. if (inputPoints.length === 1) {
  129. textSymbol = new TextSymbol("起点", startFont, new Color([204, 102, 51]));
  130. textSymbol.setOffset(0, -20);
  131. map.graphics.add(new Graphic(evt.mapPoint, textSymbol));
  132. }
  133. map.graphics.add(new Graphic(evt.mapPoint, makerSymbol));
  134. if (inputPoints.length >= 2) {
  135. // 设置距离测量的参数
  136. var lengthParams = new LengthsParameters();
  137. lengthParams.distanceUnit = GeometryService.UNIT_METER;
  138. lengthParams.calculationType = "preserveShape";
  139. var p1 = inputPoints[inputPoints.length - 2];
  140. var p2 = inputPoints[inputPoints.length - 1];
  141. if (p1.x === p2.x && p1.y === p2.y) {
  142. return;
  143. }
  144. // z在两点之间划线将两点链接起来
  145. var polyline = new Polyline(map.spatialReference);
  146. polyline.addPath([p1, p2]);
  147. lengthParams.polylines = [polyline];
  148. // 根据参数,动态的计算长度
  149. geometryService.lengths(lengthParams, function (distance) {
  150. var _distance = number.format(distance.lengths[0] / 1000);
  151. totleDistance += parseFloat(_distance);//计算总长度
  152. var beetwentDistances = _distance + "千米";
  153. var tdistance = new TextSymbol(beetwentDistances, startFont, new Color([204, 102, 51]));
  154. tdistance.setOffset(40, -3);
  155. map.graphics.add(new Graphic(p2, tdistance));
  156. if (totalGraphic) {
  157. map.graphics.remove(totalGraphic);
  158. }
  159. var total = number.format(totleDistance, {
  160. pattern: "#.000"
  161. });
  162. // 设置总长度的显示样式,并添加到地图上
  163. var totalSymbol = new TextSymbol("总长度:" + total + "千米", startFont, new Color([204, 102, 51]));
  164. totalSymbol.setOffset(40, -15);
  165. totalGraphic = map.graphics.add(new Graphic(p2, totalSymbol));
  166. });
  167. }
  168. }
  169. }
  170. // 添加图形函数
  171. function addToMap(evt) { //上面触发的addToMap方法,触发完成的方法
  172. if (disFun || areaFun) {
  173. var geometry = evt.geometry;//绘制图形的geometry
  174. //将绘制的图形添加到地图上去
  175. var symbol = null;
  176. switch (geometry.type) {
  177. case "point"://点
  178. symbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE, 10,
  179. new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([255, 0, 0]), 1),
  180. new Color([0, 255, 0, 0.25]));
  181. break;
  182. case "polyline"://线
  183. symbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,
  184. new Color([255, 0, 0, 0.8]), 2);
  185. break;
  186. case "polygon"://多边形
  187. symbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID,
  188. new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([255, 0, 0]), 2),
  189. new Color([255, 255, 0, 0.25]));
  190. break;
  191. case "extent": //矩形
  192. symbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID,
  193. new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([255, 0, 0]), 2),
  194. new Color([255, 255, 0, 0.25]));
  195. break;
  196. }
  197. map.graphics.add(new Graphic(geometry, symbol));
  198. toolbar.deactivate();
  199. if (disFun) {
  200. disFun = false;
  201. inputPoints.splice(0, inputPoints.length);//删除数组中的所有元素
  202. totleDistance = 0.0;
  203. totalGraphic = null;
  204. }
  205. }
  206. }
  207. //站点元素
  208. var Asta = false;
  209. function Aurlstation() {
  210. if (Asta) { //默认为显示
  211. map.removeLayer(map.getLayer("Fzd"));
  212. Asta = false;
  213. }
  214. else {
  215. var featureLayer = new FeatureLayer(stationUrl, { //stationUrl:站点图层,不可错
  216. mode: FeatureLayer.MODE_SNAPSHOT,
  217. outFields: ["*"]
  218. });
  219. featureLayer.id = "Fzd";
  220. map.addLayers([featureLayer]);
  221. Asta = true;
  222. }
  223. }
  224. //线网元素
  225. var Xw = false;
  226. function Xurlline() {
  227. if (Xw) {
  228. map.removeLayer(map.getLayer("Fxw"));
  229. Xw = false;
  230. }
  231. else {
  232. var featureLayer = new FeatureLayer(lineUrl, { //urlline:线路图层,不可错
  233. mode: FeatureLayer.MODE_SNAPSHOT,
  234. outFields: ["*"]
  235. });
  236. featureLayer.id = "Fxw";
  237. map.addLayers([featureLayer]);
  238. Xw = true;
  239. }
  240. }
  241. });
  242. </script>
  243. </head>
  244. <body>
  245. <div id="map"></div>
  246. <div class="list">
  247. <button>测距</button>
  248. <button>站点</button>
  249. <button>线网</button>
  250. </div>
  251. </body>
  252. </html>
  253. <script>
  254. </script>

发表评论

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

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

相关阅读