<template> <div class="map-container"> <div id="map" class="container"></div> </div> </template> <script> import axios from "axios"; import * as mapv from "mapv"; export default { name: "Map", components: {}, data() { return {}; }, created() {}, mounted() { this.$nextTick(() => { const map = this.$baseMap(); axios .get( "https://cdn.jsdelivr.net/npm/mapv@2.0.12/examples/data/od-xierqi.txt" ) .then((rs) => { let data = []; let timeData = []; rs = rs.data.split("\n"); let maxLength = 0; for (let i = 0; i < rs.length; i++) { let item = rs[i].split(","); let coordinates = []; if (item.length > maxLength) { maxLength = item.length; } for (let j = 0; j < item.length; j += 2) { let x = (Number(item[j]) / 20037508.34) * 180; let y = (Number(item[j + 1]) / 20037508.34) * 180; y = (180 / Math.PI) * (2 * Math.atan(Math.exp((y * Math.PI) / 180)) - Math.PI / 2); if (x == 0 || y == NaN) { continue; } coordinates.push([x, y]); timeData.push({ geometry: { type: "Point", coordinates: [x, y], }, count: 1, time: j, }); } data.push({ geometry: { type: "LineString", coordinates: coordinates, }, }); } let dataSet = new mapv.DataSet(data); let options = { strokeStyle: "rgba(53,57,255,0.5)", // globalCompositeOperation: 'lighter', shadowColor: "rgba(53,57,255,0.2)", shadowBlur: 3, lineWidth: 3.0, draw: "simple", }; let mapvLayer = new mapv.MaptalksLayer( "mapv1", dataSet, options ).addTo(map); let dataSet2 = new mapv.DataSet(timeData); let options2 = { fillStyle: "rgba(255, 250, 250, 0.2)", globalCompositeOperation: "lighter", size: 1.5, animation: { stepsRange: { start: 0, end: 100, }, trails: 3, duration: 5, }, draw: "simple", }; let mapvLayer2 = new mapv.MaptalksLayer( "mapv2", dataSet2, options2 ).addTo(map); }); }); }, methods: {}, }; </script> <style lang="scss" scoped> .map-container { .container { width: 100%; height: calc(100vh - 214px); } } </style>