From 7607d55d6597d772de1a37598d36e74c4542223e Mon Sep 17 00:00:00 2001 From: riku <risaku@163.com> Date: 星期一, 05 二月 2024 17:33:00 +0800 Subject: [PATCH] 优化地图联动相关逻辑 --- lib/map.js | 237 ++++++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 154 insertions(+), 83 deletions(-) diff --git a/lib/map.js b/lib/map.js index 5bf7a0d..e4a9a35 100644 --- a/lib/map.js +++ b/lib/map.js @@ -50,18 +50,49 @@ this._map.remove(views); }, - addMarkers(markers) { + addElasticMarkers(markers) { + const zoomStyleMapping = { + 14: 0, + 15: 0, + 16: 0, + 17: 0, + 18: 0, + 19: 0, + 20: 0, + }; const mList = []; markers.forEach((m) => { - var marker = new AMap.Marker({ - position: new AMap.LngLat(m.lng, m.lat), // 缁忕含搴﹀璞★紝涔熷彲浠ユ槸缁忕含搴︽瀯鎴愮殑涓�缁存暟缁刐116.39, 39.9] + let name = m.name; + if (m.name.length > 9) { + const i = m.name.length / 2; + const str1 = m.name.slice(0, i + 1); + const str2 = m.name.slice(i + 1, m.name.length); + name = `${str1}<br />${str2}`; + } + var marker = new AMap.ElasticMarker({ title: m.name, - offset: new AMap.Pixel(-13, -12), - // anchor: 'center', - icon: new AMap.Icon({ - image: './asset/mipmap/c_level_no.png', - // imageSize: [12, 12], - }), + zoom: [14, 20], + position: new AMap.LngLat(m.lng, m.lat), + styles: [ + { + icon: { + img: './asset/mipmap/scene.png', + size: [16, 16], //鍙鍖哄煙鐨勫ぇ灏� + ancher: [8, 16], //閿氱偣 + fitZoom: 14, //鏈�鍚堥�傜殑绾у埆 + scaleFactor: 1.4, //鍦板浘鏀惧ぇ涓�绾х殑缂╂斁姣斾緥绯绘暟 + maxScale: 2, //鏈�澶ф斁澶ф瘮渚� + minScale: 1, //鏈�灏忔斁澶ф瘮渚� + }, + label: { + content: `<div>${name}</div>`, + offset: [-35, 0], + position: 'BM', + minZoom: 15, + }, + }, + ], + zoomStyleMapping: zoomStyleMapping, }); mList.push(marker); }); @@ -180,14 +211,14 @@ // 鍒涘缓鏍峰紡瀵硅薄 var styleObject = { - url: 'https://a.amap.com/jsapi_demos/static/images/mass0.png', + url: 'https://a.amap.com/jsapi_demos/static/images/mass1.png', // url: './asset/mipmap/ic_up_white.png', // 鍥炬爣鍦板潃 size: new AMap.Size(11, 11), // 鍥炬爣澶у皬 anchor: new AMap.Pixel(5, 5), // 鍥炬爣鏄剧ず浣嶇疆鍋忕Щ閲忥紝鍩哄噯鐐逛负鍥炬爣宸︿笂瑙� }; var massMarks = new AMap.MassMarks(data, { zIndex: 5, // 娴烽噺鐐瑰浘灞傚彔鍔犵殑椤哄簭 - zooms: [3, 18], // 鍦ㄦ寚瀹氬湴鍥剧缉鏀剧骇鍒寖鍥村唴灞曠ず娴烽噺鐐瑰浘灞� + zooms: [15, 18], // 鍦ㄦ寚瀹氬湴鍥剧缉鏀剧骇鍒寖鍥村唴灞曠ず娴烽噺鐐瑰浘灞� style: styleObject, // 璁剧疆鏍峰紡瀵硅薄 }); massMarks.on('click', (event) => { @@ -207,11 +238,10 @@ this.drawSector3(lnglats[i], windDir, windSpeed); // 2. 缁樺埗瀵硅瘽妗� - const window = DialogUtil.createInfoWindow(fDatas, i, () => { + DialogUtil.openNewWindow(fDatas, i, MapUtil._map, lnglats[i], () => { // 绉婚櫎鎵囧舰鍖哄煙 - this.clearSector3(); + // this.clearSector3(); }); - window.open(MapUtil._map, lnglats[i]); // 3. 瓒嬪娍鍥捐烦杞畾浣� const progress = FChart.locate( @@ -289,10 +319,11 @@ _sector: undefined, _sectorViews3: {}, drawSector3: function (lnglat, windDir, windSpeed) { - // this._map.remove(MapUtil._sectorViews) - // MapUtil._sectorViews = [] if (windSpeed > 10) { return; + } + if (MapUtil._sectorViews3['text10'] != undefined) { + this.clearSector3(); } var sector = new AMap.Object3D.Mesh(); @@ -364,89 +395,129 @@ geometry.faces.push(index + 3, index + 4, index + 5); geometry.faces.push(index + 4, index + 5, index + 6); } - - if (this._sector != undefined) { - this._object3Dlayer.remove(this._sector); - } this._object3Dlayer.add(sector); this._sector = sector; distance = distance.toFixed(0); distance2 = distance2.toFixed(0); + const zoomStyleMapping = { + 14: 0, + 15: 0, + 16: 0, + 17: 0, + 18: 0, + 19: 0, + 20: 0, + }; //10鍒嗛挓鎵囧舰 - if (MapUtil._sectorViews3['text10'] == undefined) { - var text15 = new AMap.Text({ - text: '10鍒嗛挓', - position: list[2], - // animation: "AMAP_ANIMATION_DROP" - }); - MapUtil._sectorViews3['text10'] = text15; - var textM = new AMap.Text({ - text: distance + 'm', - position: list[1], - // animation: "AMAP_ANIMATION_DROP" - }); - MapUtil._sectorViews3['textM'] = textM; - } else { - MapUtil._sectorViews3['text10'].setPosition(list[2]); - MapUtil._sectorViews3['textM'].setPosition(list[1]); - MapUtil._sectorViews3['textM'].setText(distance + 'm'); - } + var text15 = new AMap.ElasticMarker({ + zoom: [14, 20], + position: list[2], + styles: [ + { + icon: { + img: './asset/mipmap/location.png', + size: [16, 16], //鍙鍖哄煙鐨勫ぇ灏� + ancher: [8, 16], //閿氱偣 + fitZoom: 18, //鏈�鍚堥�傜殑绾у埆 + scaleFactor: 1, //鍦板浘鏀惧ぇ涓�绾х殑缂╂斁姣斾緥绯绘暟 + maxScale: 2, //鏈�澶ф斁澶ф瘮渚� + minScale: 1, //鏈�灏忔斁澶ф瘮渚� + }, + label: { + content: '<div>10鍒嗛挓</div>', + offset: [-35, 0], + position: 'BM', + minZoom: 15, + }, + }, + ], + zoomStyleMapping: zoomStyleMapping, + }); + MapUtil._sectorViews3['text10'] = text15; + var textM = new AMap.ElasticMarker({ + zoom: [14, 20], + position: list[1], + styles: [ + { + icon: { + img: './asset/mipmap/location.png', + size: [16, 16], //鍙鍖哄煙鐨勫ぇ灏� + ancher: [8, 16], //閿氱偣 + fitZoom: 18, //鏈�鍚堥�傜殑绾у埆 + scaleFactor: 1, //鍦板浘鏀惧ぇ涓�绾х殑缂╂斁姣斾緥绯绘暟 + maxScale: 2, //鏈�澶ф斁澶ф瘮渚� + minScale: 1, //鏈�灏忔斁澶ф瘮渚� + }, + label: { + content: `<div>${distance}m</div>`, + offset: [-35, 0], + position: 'BM', + minZoom: 15, + }, + }, + ], + zoomStyleMapping: zoomStyleMapping, + }); + MapUtil._sectorViews3['textM'] = textM; MapUtil._map.add(MapUtil._sectorViews3['text10']); MapUtil._map.add(MapUtil._sectorViews3['textM']); - // 缂╂斁鍦板浘鍒板悎閫傜殑瑙嗛噹绾у埆 - // if (animation != false) { - // MapUtil._map.setFitView([bezierCurve, line1, line2]) - // } - //5鍒嗛挓鎵囧舰 - pList = list2; - // MapUtil._map.setCenter(pList[0]) path = [ [pList[0].lng, pList[0].lat], [pList[1].lng, pList[1].lat, pList[2].lng, pList[2].lat], ]; - if (MapUtil._sectorViews3['textM5'] == undefined) { - var bezierCurve = new AMap.BezierCurve({ - path: path, - // isOutline: true, - // outlineColor: '#ffeeff', - borderWeight: 1, - strokeColor: '#ffeeff', - strokeOpacity: 1, - // strokeWeight: 6, - // 绾挎牱寮忚繕鏀寔 'dashed' - strokeStyle: 'solid', - // strokeStyle鏄痙ashed鏃舵湁鏁� - strokeDasharray: [10, 10], - lineJoin: 'round', - lineCap: 'round', - zIndex: 50, - }); - // bezierCurve.setMap(MapUtil._map) - // MapUtil._sectorViews3['bezierCurve'] = bezierCurve - - var text5 = new AMap.Text({ - text: '5鍒嗛挓', - position: pList[1], - // animation: "AMAP_ANIMATION_DROP" - }); - MapUtil._sectorViews3['text5'] = text5; - var textM5 = new AMap.Text({ - text: distance2 + 'm', - position: pList[0], - // animation: "AMAP_ANIMATION_DROP" - }); - MapUtil._sectorViews3['textM5'] = textM5; - } else { - // MapUtil._sectorViews3['bezierCurve'].setPath(path) - MapUtil._sectorViews3['text5'].setPosition(pList[1]); - MapUtil._sectorViews3['textM5'].setPosition(pList[0]); - MapUtil._sectorViews3['textM5'].setText(distance2 + 'm'); - } + var text5 = new AMap.ElasticMarker({ + position: pList[1], + styles: [ + { + icon: { + img: './asset/mipmap/location.png', + size: [16, 16], //鍙鍖哄煙鐨勫ぇ灏� + ancher: [8, 16], //閿氱偣 + fitZoom: 18, //鏈�鍚堥�傜殑绾у埆 + scaleFactor: 1, //鍦板浘鏀惧ぇ涓�绾х殑缂╂斁姣斾緥绯绘暟 + maxScale: 2, //鏈�澶ф斁澶ф瘮渚� + minScale: 1, //鏈�灏忔斁澶ф瘮渚� + }, + label: { + content: `<div>5鍒嗛挓</div>`, + offset: [-35, 0], + position: 'BM', + minZoom: 15, + }, + }, + ], + zoomStyleMapping: zoomStyleMapping, + }); + MapUtil._sectorViews3['text5'] = text5; + var textM5 = new AMap.ElasticMarker({ + position: pList[0], + styles: [ + { + icon: { + img: './asset/mipmap/location.png', + size: [16, 16], //鍙鍖哄煙鐨勫ぇ灏� + ancher: [8, 16], //閿氱偣 + fitZoom: 18, //鏈�鍚堥�傜殑绾у埆 + scaleFactor: 1, //鍦板浘鏀惧ぇ涓�绾х殑缂╂斁姣斾緥绯绘暟 + maxScale: 2, //鏈�澶ф斁澶ф瘮渚� + minScale: 1, //鏈�灏忔斁澶ф瘮渚� + }, + label: { + content: `<div>${distance2}m</div>`, + offset: [-35, 0], + position: 'BM', + minZoom: 15, + }, + }, + ], + zoomStyleMapping: zoomStyleMapping, + }); + MapUtil._sectorViews3['textM5'] = textM5; MapUtil._map.add(MapUtil._sectorViews3['textM5']); MapUtil._map.add(MapUtil._sectorViews3['text5']); -- Gitblit v1.9.3