analysis_findPath.html 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  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_findPath"></title>
  9. <style type="text/css">
  10. body {
  11. margin: 0;
  12. overflow: hidden;
  13. background: #fff;
  14. width: 100%;
  15. height: 100%
  16. }
  17. #map {
  18. position: absolute;
  19. width: 100%;
  20. height: 100%;
  21. }
  22. #toolbar {
  23. position: absolute;
  24. top: 50px;
  25. right: 10px;
  26. text-align: center;
  27. z-index: 100;
  28. border-radius: 4px;
  29. }
  30. </style>
  31. </head>
  32. <body>
  33. <div id="toolbar" class="panel panel-primary">
  34. <div class='panel-heading'>
  35. <h5 class='panel-title text-center' data-i18n="resources.text_findPath"></h5></div>
  36. <div class='panel-body content'>
  37. <input type="button" class="btn btn-default" data-i18n="[value]resources.text_sites" onclick="selectPoints()"/>&nbsp;
  38. <input type="button" class="btn btn-default" data-i18n="[value]resources.text_input_value_submit" onclick="findPath()"/>&nbsp;
  39. <input type="button" class="btn btn-default" data-i18n="[value]resources.text_input_value_clear" onclick="clearElements()"/>
  40. </div>
  41. </div>
  42. <div id="map"></div>
  43. <script type="text/javascript" include="bootstrap,widgets.alert" src="../js/include-web.js"></script>
  44. <script type="text/javascript" exclude="iclient-classic" src="../../dist/classic/include-classic.js"></script>
  45. <script>
  46. var host = window.isLocal ? window.server : "https://iserver.supermap.io";
  47. var map, layer, vectorLayer, markerLayer,
  48. drawPoint, select,
  49. nodeArray = [], pathTime, pathListIndex = 0, routeCompsIndex = 0,
  50. style = {
  51. strokeColor: "#304DBE",
  52. strokeWidth: 3,
  53. pointerEvents: "visiblePainted",
  54. fill: false
  55. },
  56. styleGuidePoint = {
  57. pointRadius: 10,
  58. externalGraphic: "../img/walk.png"
  59. },
  60. styleGuideLine = {
  61. strokeColor: "#25FF25",
  62. strokeWidth: 6,
  63. fill: false
  64. },
  65. url1 = host + "/iserver/services/map-changchun/rest/maps/长春市区图",
  66. url2 = host + "/iserver/services/transportationanalyst-sample/rest/networkanalyst/RoadNet@Changchun";
  67. init();
  68. function init() {
  69. vectorLayer = new SuperMap.Layer.Vector("Vector Layer");
  70. drawPoint = new SuperMap.Control.DrawFeature(vectorLayer, SuperMap.Handler.Point);
  71. select = new SuperMap.Control.SelectFeature(vectorLayer, {
  72. onSelect: onFeatureSelect,
  73. onUnselect: onFeatureUnselect
  74. });
  75. drawPoint.events.on({"featureadded": drawCompleted});
  76. map = new SuperMap.Map("map", {
  77. controls: [
  78. new SuperMap.Control.Zoom(),
  79. new SuperMap.Control.Navigation({
  80. dragPanOptions: {
  81. enableKinetic: true
  82. }
  83. }),
  84. drawPoint,
  85. select], units: "m"
  86. });
  87. map.addControl(new SuperMap.Control.LayerSwitcher(), new SuperMap.Pixel(42, 80));
  88. layer = new SuperMap.Layer.TiledDynamicRESTLayer("Changchun", url1, {
  89. transparent: true,
  90. cacheEnabled: true
  91. }, {maxResolution: "auto"});
  92. layer.events.on({"layerInitialized": addLayer});
  93. markerLayer = new SuperMap.Layer.Markers("Markers");
  94. }
  95. function addLayer() {
  96. map.addLayers([layer, vectorLayer, markerLayer]);
  97. map.setCenter(new SuperMap.LonLat(4503.6240321526, -3861.911472192499), 1);
  98. }
  99. function selectPoints() {
  100. widgets.alert.clearAlert();
  101. clearElements();
  102. drawPoint.activate();
  103. }
  104. function drawCompleted(drawGeometryArgs) {
  105. var point = drawGeometryArgs.feature.geometry,
  106. size = new SuperMap.Size(44, 33),
  107. offset = new SuperMap.Pixel(-(size.w / 2), -size.h),
  108. icon = new SuperMap.Icon("./images/marker.png", size, offset);
  109. markerLayer.addMarker(new SuperMap.Marker(new SuperMap.LonLat(point.x, point.y), icon));
  110. nodeArray.push(point);
  111. }
  112. //选中时显示路径指引信息
  113. function onFeatureSelect(feature) {
  114. if (feature.attributes.description) {
  115. popup = new SuperMap.Popup("chicken",
  116. feature.geometry.getBounds().getCenterLonLat(),
  117. new SuperMap.Size(200, 30),
  118. "<div style='font-size:.8em; opacity: 0.8'>" + feature.attributes.description + "</div>",
  119. null, false);
  120. feature.popup = popup;
  121. map.addPopup(popup);
  122. }
  123. if (feature.geometry.CLASS_NAME != "SuperMap.Geometry.Point") {
  124. feature.style = styleGuideLine;
  125. vectorLayer.redraw();
  126. }
  127. }
  128. //清除要素时调用此函数
  129. function onFeatureUnselect(feature) {
  130. map.removePopup(feature.popup);
  131. feature.popup.destroy();
  132. feature.popup = null;
  133. if (feature.geometry.CLASS_NAME != "SuperMap.Geometry.Point") {
  134. feature.style = style;
  135. }
  136. vectorLayer.redraw();
  137. }
  138. function findPath() {
  139. widgets.alert.clearAlert();
  140. drawPoint.deactivate();
  141. var findPathService, parameter, analystParameter, resultSetting;
  142. resultSetting = new SuperMap.REST.TransportationAnalystResultSetting({
  143. returnEdgeFeatures: true,
  144. returnEdgeGeometry: true,
  145. returnEdgeIDs: true,
  146. returnNodeFeatures: true,
  147. returnNodeGeometry: true,
  148. returnNodeIDs: true,
  149. returnPathGuides: true,
  150. returnRoutes: true
  151. });
  152. analystParameter = new SuperMap.REST.TransportationAnalystParameter({
  153. resultSetting: resultSetting,
  154. weightFieldName: "length"
  155. });
  156. parameter = new SuperMap.REST.FindPathParameters({
  157. isAnalyzeById: false,
  158. nodes: nodeArray,
  159. hasLeastEdgeCount: false,
  160. parameter: analystParameter
  161. });
  162. if (nodeArray.length <= 1) {
  163. widgets.alert.showAlert(resources.msg_findPath,false);
  164. }
  165. findPathService = new SuperMap.REST.FindPathService(url2, {
  166. eventListeners: {"processCompleted": processCompleted}
  167. });
  168. findPathService.processAsync(parameter);
  169. }
  170. function processCompleted(findPathEventArgs) {
  171. var result = findPathEventArgs.result;
  172. allScheme(result);
  173. }
  174. function allScheme(result) {
  175. if (pathListIndex < result.pathList.length) {
  176. addPath(result);
  177. } else {
  178. pathListIndex = 0;
  179. //线绘制完成后会绘制关于路径指引点的信息
  180. addPathGuideItems(result);
  181. }
  182. }
  183. //以动画效果显示分析结果
  184. function addPath(result) {
  185. if (routeCompsIndex < result.pathList[pathListIndex].route.components[0].components.length) {
  186. var pathFeature = new SuperMap.Feature.Vector();
  187. var points = [];
  188. for (var k = 0; k < 2; k++) {
  189. if (result.pathList[pathListIndex].route.components[0].components[routeCompsIndex + k]) {
  190. points.push(new SuperMap.Geometry.Point(result.pathList[pathListIndex].route.components[0].components[routeCompsIndex + k].x, result.pathList[pathListIndex].route.components[0].components[routeCompsIndex + k].y));
  191. }
  192. }
  193. var curLine = new SuperMap.Geometry.LinearRing(points);
  194. pathFeature.geometry = curLine;
  195. pathFeature.style = style;
  196. vectorLayer.addFeatures(pathFeature);
  197. //每隔0.001毫秒加载一条弧段
  198. pathTime = setTimeout(function () {
  199. addPath(result);
  200. }, 0.001);
  201. routeCompsIndex++;
  202. } else {
  203. clearTimeout(pathTime);
  204. routeCompsIndex = 0;
  205. pathListIndex++;
  206. allScheme(result);
  207. }
  208. }
  209. function addPathGuideItems(result) {
  210. //vectorLayer.removeAllFeatures();
  211. //显示每个pathGuideItem和对应的描述信息
  212. for (var k = 0; k < result.pathList.length; k++) {
  213. var pathGuideItems = result.pathList[pathListIndex].pathGuideItems, len = pathGuideItems.length;
  214. for (var m = 0; m < len; m++) {
  215. if (pathGuideItems[m].geometry.CLASS_NAME !== "SuperMap.Geometry.Point") {
  216. continue;
  217. }
  218. var guideFeature = new SuperMap.Feature.Vector();
  219. guideFeature.geometry = pathGuideItems[m].geometry;
  220. guideFeature.attributes = {description: pathGuideItems[m].description};
  221. guideFeature.style = styleGuidePoint;
  222. vectorLayer.addFeatures(guideFeature);
  223. }
  224. }
  225. select.activate();
  226. }
  227. function clearElements() {
  228. widgets.alert.clearAlert();
  229. pathListIndex = 0;
  230. routeCompsIndex = 0;
  231. nodeArray = [];
  232. select.deactivate();
  233. if (vectorLayer.selectedFeatures.length > 0) {
  234. map.removePopup(vectorLayer.selectedFeatures[0].popup);
  235. }
  236. vectorLayer.removeAllFeatures();
  237. markerLayer.clearMarkers();
  238. }
  239. </script>
  240. </body>
  241. </html>