indexMap.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383
  1. <style lang='scss'>
  2. .mapContent {
  3. position: relative;
  4. margin-top: 10px;
  5. .center-add {
  6. position: absolute;
  7. top: 0;
  8. bottom: 0;
  9. left: 0;
  10. right: 0;
  11. margin: auto;
  12. z-index: 999;
  13. width: 30px;
  14. height: 30px;
  15. }
  16. }
  17. #mapContainer {
  18. width: 100%;
  19. height: 506px;
  20. }
  21. #tip {
  22. position: absolute;
  23. top: -45px;
  24. display: flex;
  25. }
  26. #tip .el-input {
  27. // width: 179px;
  28. margin-right: 0px;
  29. }
  30. #tip .el-select {
  31. margin-right: 10px;
  32. }
  33. #tip .el-select {
  34. width: 179px;
  35. }
  36. #tip .el-textarea {
  37. width: 179px;
  38. /deep/ .el-textarea__inner {
  39. height: 40px;
  40. resize: none;
  41. }
  42. }
  43. .el-button--primary {
  44. background-color: #5878e8;
  45. border-color: #5878e8;
  46. }
  47. .el-button--default {
  48. color: #5878e8;
  49. border-color: #5473e8;
  50. }
  51. .address {
  52. display: flex;
  53. align-items: center;
  54. margin-right: 20px;
  55. .address-input {
  56. display: inline-block;
  57. width: 480px;
  58. }
  59. }
  60. .amap-marker {
  61. opacity: 0;
  62. }
  63. .amap-marker-label {
  64. background: #0000004f;
  65. z-index: 1158;
  66. border: 0px solid rgb(102, 102, 102);
  67. color: #eee;
  68. padding: 10px 20px;
  69. font-size: 16px;
  70. font-weight: 500;
  71. border-radius: 4px;
  72. }
  73. /*动画*/
  74. /* .amap-marker-label {
  75. -webkit-animation: Tada 3s infinite;
  76. -moz-animation: Tada 3s infinite;
  77. -ms-animation: Tada 3s infinite;
  78. animation: Tada 3s infinite;
  79. }
  80. @keyframes Tada {
  81. 0% {
  82. opacity: 0;
  83. }
  84. 100% {
  85. opacity: 1;
  86. }
  87. } */
  88. </style>
  89. <template>
  90. <div class="mapContent">
  91. <div id="mapContainer"></div>
  92. </div>
  93. </template>
  94. <script>
  95. import {
  96. regionData,
  97. CodeToText,
  98. TextToCode
  99. } from 'element-china-area-data'
  100. import image from '../../../public/img/ic_locationmarker.jpg'
  101. import AMapLoader from '@amap/amap-jsapi-loader';
  102. export default {
  103. data() {
  104. return {
  105. mapPointData: {},
  106. mapLineData: {},
  107. map: null,
  108. provinces: [],
  109. province: '',
  110. districts: [],
  111. district: '',
  112. citys: [],
  113. city: '',
  114. polygons: [],
  115. selectedOptions1: [],
  116. areacode: '',
  117. address: '',
  118. objPoint: [],
  119. zoomEnable: true,
  120. dragEnable: true,
  121. status: true,
  122. center: '',
  123. markerList: [],
  124. timer: ''
  125. }
  126. },
  127. props: ['listData'],
  128. computed: {
  129. showFlag() {
  130. return this.flagVisible
  131. },
  132. },
  133. watch: {
  134. listData: function(val1, val2) {
  135. this.listData = val1
  136. var that = this
  137. this.makeJsonData()
  138. AMapLoader.load({
  139. "key": "211dd6f989e719022aaf47ddb0659c47", // 申请好的Web端开发者Key,首次调用 load 时必填
  140. "version": "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
  141. "plugins": ['plugin=AMap.Scale', 'AMap.ToolBar','AMap.AutoComplete', 'AMap.PlaceSearch', 'AMap.Geocoder', 'AMap.DistrictSearch','AMap.Geolocation', 'Geolocation'],
  142. "Loca": { // 是否加载 Loca, 缺省不加载
  143. "version": '2.0.0' // Loca 版本,缺省 1.3.2
  144. },
  145. }).then((AMap) => {
  146. this.loadmap()
  147. }).catch(e => {
  148. console.log(e);
  149. })
  150. }
  151. },
  152. async created() {},
  153. mounted() {},
  154. beforeDestroy() {
  155. clearInterval(this.timer);
  156. if (this.timer) {
  157. clearInterval(this.timer); // 在Vue实例销毁前,清除定时器
  158. }
  159. },
  160. methods: {
  161. makeJsonData() {
  162. let _features1 = []
  163. let _features2 = []
  164. for (let i = 0; i < this.listData.biViewInfoList.length; i++) {
  165. let _data = this.listData.biViewInfoList[i]
  166. let _coordinates1 = []
  167. let _coordinates11 = []
  168. let _position1 = _data.endPlace ? _data.endPlace.split(',') : []
  169. _coordinates1.push(Number(_position1[1]))
  170. _coordinates1.push(Number(_position1[0]))
  171. let _obj1 = {
  172. "type": "Feature",
  173. "properties": {
  174. "type": i,
  175. },
  176. "geometry": {
  177. "type": "Point",
  178. "coordinates": _coordinates1
  179. }
  180. }
  181. let _position11 = _data.startPlace ? _data.startPlace.split(',') : []
  182. _coordinates11.push(Number(_position11[1]))
  183. _coordinates11.push(Number(_position11[0]))
  184. let _obj11 = {
  185. "type": "Feature",
  186. "properties": {
  187. "type": i,
  188. },
  189. "geometry": {
  190. "type": "Point",
  191. "coordinates": _coordinates11
  192. }
  193. }
  194. _features1.push(_obj1)
  195. _features1.push(_obj11)
  196. let _coordinates2 = []
  197. let _start = []
  198. let _end = []
  199. let _marker = {}
  200. let _positionStart = _data.startPlace ? _data.startPlace.split(',') : []
  201. _start.push(Number(_positionStart[1]))
  202. _start.push(Number(_positionStart[0]))
  203. let _positionEnd = _data.endPlace ? _data.endPlace.split(',') : []
  204. _end.push(Number(_positionEnd[1]))
  205. _end.push(Number(_positionEnd[0]))
  206. _coordinates2.push(_start)
  207. _coordinates2.push(_end)
  208. _marker.iconSrc = _start
  209. _marker.name = _data.name
  210. this.markerList.push(_marker)
  211. let _obj2 = {
  212. "type": "Feature",
  213. "properties": {
  214. },
  215. "geometry": {
  216. "type": "LineString",
  217. "coordinates": _coordinates2
  218. }
  219. }
  220. _features2.push(_obj2)
  221. }
  222. this.mapPointData = {
  223. "type": "FeatureCollection",
  224. "features": _features1
  225. }
  226. this.mapLineData = {
  227. "type": "FeatureCollection",
  228. "features": _features2
  229. }
  230. console.log("this.mapPointData", this.mapPointData)
  231. console.log("this.mapPointData", this.mapLineData)
  232. },
  233. loadmap(val) {
  234. var map = new AMap.Map('mapContainer', {
  235. zoom: 4.89,
  236. showLabel: true,
  237. viewMode: '3D',
  238. pitch: 0, //地圖仰角
  239. center: [122.122, 40.227],
  240. mapStyle: 'amap://styles/c0ed286f357b7f4c7312476637a7ab04',
  241. buildingAnimation: false,
  242. showIndoorMap: false,
  243. });
  244. var loca = new Loca.Container({
  245. map,
  246. });
  247. for (let i = 0; i < this.markerList.length; i++) {
  248. // 构造点标记
  249. if (this.markerList[i].iconSrc[0] && this.markerList[i].iconSrc[1]) {
  250. var marker = new AMap.Marker({
  251. position: this.markerList[i].iconSrc,
  252. anchor: 'bottom-center',
  253. icon: new AMap.Icon({
  254. image: 'data:image/png;base64,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',
  255. size: new AMap.Size(30, 30), //图标所处区域大小
  256. imageSize: new AMap.Size(30, 30) //图标大小
  257. }),
  258. });
  259. map.add(marker);
  260. marker.setLabel({
  261. offset: new AMap.Pixel(0, 0), //设置文本标注偏移量
  262. content: "<div class = 'maker-item'>" + this.markerList[i].name + "</div>", //设置文本标注内容
  263. direction: 'right' //设置文本标注方位
  264. });
  265. }
  266. }
  267. // 定时刷新动画
  268. let _markerDom = document.getElementsByClassName('amap-marker')
  269. let _index = 0
  270. this.timer = setInterval(function() {
  271. _markerDom[_index].style.opacity = 1
  272. _markerDom[_index].style.transition = '2s'
  273. var elseLi = _markerDom;
  274. for (var i = 0; i < elseLi.length; i++) {
  275. if (elseLi[i] !== _markerDom[_index]) { //判断是否是ele节点,是否与触发事件的节点相同
  276. elseLi[i].style.opacity = 0
  277. _markerDom[_index].style.transition = '2s'
  278. }
  279. }
  280. _index++;
  281. if (_index == _markerDom.length) _index = 0
  282. }, 3000)
  283. // 呼吸点
  284. var scatter = new Loca.ScatterLayer({
  285. loca,
  286. zIndex: 10,
  287. opacity: 0.6,
  288. visible: true,
  289. zooms: [2, 22],
  290. });
  291. var pointGeo = new Loca.GeoJSONSource({
  292. // url: 'https://a.amap.com/Loca/static/loca-v2/demos/mock_data/pulselink-china-city-point.json',
  293. data: this.mapPointData
  294. });
  295. scatter.setSource(pointGeo);
  296. scatter.setStyle({
  297. unit: 'meter',
  298. size: [100000, 100000],
  299. borderWidth: 0,
  300. texture: 'https://a.amap.com/Loca/static/loca-v2/demos/images/breath_red.png',
  301. duration: 2000,
  302. animate: true,
  303. });
  304. loca.add(scatter);
  305. // 弧线
  306. var pulseLink = new Loca.PulseLinkLayer({
  307. // loca,
  308. zIndex: 10,
  309. opacity: 1,
  310. visible: true,
  311. zooms: [2, 22],
  312. depth: true,
  313. });
  314. var geo = new Loca.GeoJSONSource({
  315. // url: 'https://a.amap.com/Loca/static/loca-v2/demos/mock_data/data-line-out.json',
  316. data: this.mapLineData
  317. });
  318. pulseLink.setSource(geo);
  319. pulseLink.setStyle({
  320. unit: 'meter',
  321. dash: [40000, 0, 40000, 0],
  322. lineWidth: function() {
  323. return [25000, 10000];
  324. },
  325. height: function(index, feat) {
  326. return feat.distance / 3 + 1000;
  327. },
  328. // altitude: 1000,
  329. smoothSteps: 50,
  330. speed: function(index, prop) {
  331. return 1000 + Math.random() * 300000;
  332. },
  333. flowLength: 200000,
  334. lineColors: function(index, feat) {
  335. return ['#ebf0f700'];
  336. },
  337. maxHeightScale: 0.3, // 弧顶位置比例
  338. headColor: 'rgb(36, 131, 255)',
  339. trailColor: 'rgba(255, 255,0,0)',
  340. });
  341. loca.add(pulseLink);
  342. loca.animate.start();
  343. }
  344. },
  345. }
  346. </script>