(function (window, mars3d) { //创建widget类,需要继承BaseWidget class MyWidget extends mars3d.widget.BaseWidget { //初始化[仅执行1次] create() {} //打开激活 activate() { this.map.setCameraView({ x: 110.597446, y: 29.808307, z: 7852845.8, heading: 352.7, pitch: -86.3, roll: 0.7 }, 0); $.ajax({ url: "//data.mars3d.cn/file/geojson/mapvchina.json", type: "GET", dataType: "json", success: (rs) => { this.createMapvLayer(rs); }, }); } //关闭释放 disable() { if (this.groupLayer) { this.map.removeLayer(this.groupLayer); } } createMapvLayer(geojson) { //图层管理使用的分组 this.groupLayer = new mars3d.layer.GroupLayer({ name: this.config.name, pid: 99, //图层管理 中使用,父节点id }); var geojsonDataSet = mapv.geojson.getDataSet(geojson); var to = "北京"; var qianxi = new mapv.DataSet([ { from: "河北", count: 354551, to: to, }, { from: "天津", count: 97323, to: to, }, { from: "山东", count: 28664, to: to, }, { from: "山西", count: 16650, to: to, }, { from: "辽宁", count: 14379, to: to, }, { from: "河南", count: 10980, to: to, }, { from: "内蒙古自治区", count: 9603, to: to, }, { from: "江苏", count: 4536, to: to, }, { from: "上海", count: 3556, to: to, }, { from: "广东", count: 2600, to: to, }, ]); var lineData = []; var pointData = []; var textData = []; var timeData = []; var citys = {}; var qianxiData = qianxi.get(); for (let i = 0; i < qianxiData.length; i++) { var fromCenter = mapv.utilCityCenter.getCenterByCityName(qianxiData[i].from); var toCenter = mapv.utilCityCenter.getCenterByCityName(qianxiData[i].to); if (!fromCenter || !toCenter) { continue; } citys[qianxiData[i].from] = qianxiData[i].count; citys[qianxiData[i].to] = 100; pointData.push({ geometry: { type: "Point", coordinates: [fromCenter.lng, fromCenter.lat], }, }); pointData.push({ geometry: { type: "Point", coordinates: [toCenter.lng, toCenter.lat], }, }); textData.push({ geometry: { type: "Point", coordinates: [fromCenter.lng, fromCenter.lat], }, text: qianxiData[i].from, }); textData.push({ geometry: { type: "Point", coordinates: [toCenter.lng, toCenter.lat], }, text: qianxiData[i].to, }); var curve = mapv.utilCurve.getPoints([fromCenter, toCenter]); for (let j = 0; j < curve.length; j++) { timeData.push({ geometry: { type: "Point", coordinates: curve[j], }, count: 1, time: j, }); } lineData.push({ geometry: { type: "LineString", coordinates: curve, //coordinates: [[fromCenter.lng, fromCenter.lat], [toCenter.lng, toCenter.lat]] }, count: 30 * Math.random(), }); } var data = geojsonDataSet.get({ filter: function (item) { if (!citys[item.name]) { return false; } item.count = citys[item.name]; return true; }, }); geojsonDataSet = new mapv.DataSet(data); var geojsonOptions = { gradient: { 0: "rgba(55, 50, 250, 0.4)", 1: "rgba(55, 50, 250, 1)", }, max: 354551, draw: "intensity", depthTest: false, }; //创建MapV图层 var mapVLayer = new mars3d.layer.MapVLayer(geojsonOptions, geojsonDataSet); this.groupLayer.addLayer(mapVLayer); //加入分组 var textDataSet = new mapv.DataSet(textData); var textOptions = { draw: "text", font: "14px Arial", fillStyle: "white", shadowColor: "yellow", shadowBlue: 10, zIndex: 11, shadowBlur: 10, }; //创建MapV图层 var textmapVLayer = new mars3d.layer.MapVLayer(textOptions, textDataSet); this.groupLayer.addLayer(textmapVLayer); //加入分组 var lineOptions = { strokeStyle: "rgba(255, 250, 50, 0.8)", shadowColor: "rgba(255, 250, 50, 1)", shadowBlur: 20, lineWidth: 2, zIndex: 100, draw: "simple", }; var lineDataSet = new mapv.DataSet(lineData); //创建MapV图层 var linemapVLayer = new mars3d.layer.MapVLayer(lineOptions, lineDataSet); this.groupLayer.addLayer(linemapVLayer); //加入分组 var pointOptions = { fillStyle: "rgba(254,175,3,0.7)", shadowColor: "rgba(55, 50, 250, 0.5)", shadowBlur: 10, size: 5, zIndex: 10, draw: "simple", }; var pointDataSet = new mapv.DataSet(pointData); //创建MapV图层 var pointmapVLayer = new mars3d.layer.MapVLayer(pointOptions, pointDataSet); this.groupLayer.addLayer(pointmapVLayer); //加入分组 var timeDataSet = new mapv.DataSet(timeData); var timeOptions = { fillStyle: "rgba(255, 250, 250, 0.5)", zIndex: 200, size: 2.5, animation: { type: "time", stepsRange: { start: 0, end: 50, }, trails: 10, duration: 2, }, draw: "simple", }; //创建MapV图层 var timemapVLayer = new mars3d.layer.MapVLayer(timeOptions, timeDataSet); this.groupLayer.addLayer(timemapVLayer); //加入分组 this.map.addLayer(this.groupLayer); } } //注册到widget管理器中。 mars3d.widget.bindClass(MyWidget); //每个widet之间都是直接引入到index.html中,会存在彼此命名冲突,所以闭包处理下。 })(window, mars3d);