From 7fa52f6038b2e4f2c632b35cb4ba370c5b4fdf8b Mon Sep 17 00:00:00 2001 From: TiaStars Date: Thu, 5 Sep 2024 10:44:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=B0=E5=9B=BE=E6=B8=B2=E6=9F=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 + src/assets/images/address.png | Bin 0 -> 712 bytes src/assets/images/icon-jjsj-1@2x.png | Bin 0 -> 2084 bytes src/assets/images/icon-qtsj-1@2x.png | Bin 0 -> 2091 bytes src/assets/images/icon-trts-1@2x.png | Bin 0 -> 1960 bytes src/assets/images/icon-yrds-1@2x.png | Bin 0 -> 1984 bytes src/assets/images/icon-zdry-1@2x.png | Bin 0 -> 2066 bytes src/assets/images/time.png | Bin 0 -> 966 bytes src/assets/styles/public.scss | 158 ++++++--- src/layout/components/Sidebar/SidebarItem.vue | 2 - src/main.js | 2 + src/utils/lib/heatmap.min.js | 9 + src/utils/lib/leaflet-heatmap.js | 246 +++++++++++++ src/utils/lib/leaflet.ChineseTmsProviders.js | 221 ++++++++++++ src/utils/lib/leaflet.mapCorrection.min.js | 143 ++++++++ src/utils/lib/leaflet.polygon.gradient.js | 335 ++++++++++++++++++ src/views/warningManage/warningAppear.vue | 74 +++- .../warningAudit/instancyEvent.vue | 61 +++- 18 files changed, 1183 insertions(+), 70 deletions(-) create mode 100644 src/assets/images/address.png create mode 100644 src/assets/images/icon-jjsj-1@2x.png create mode 100644 src/assets/images/icon-qtsj-1@2x.png create mode 100644 src/assets/images/icon-trts-1@2x.png create mode 100644 src/assets/images/icon-yrds-1@2x.png create mode 100644 src/assets/images/icon-zdry-1@2x.png create mode 100644 src/assets/images/time.png create mode 100644 src/utils/lib/heatmap.min.js create mode 100644 src/utils/lib/leaflet-heatmap.js create mode 100644 src/utils/lib/leaflet.ChineseTmsProviders.js create mode 100644 src/utils/lib/leaflet.mapCorrection.min.js create mode 100644 src/utils/lib/leaflet.polygon.gradient.js diff --git a/package.json b/package.json index 32cfea2..7d0664e 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,8 @@ "js-beautify": "1.13.0", "js-cookie": "3.0.1", "jsencrypt": "3.0.0-rc.1", + "leaflet": "^1.9.4", + "leaflet.markercluster": "^1.5.3", "nprogress": "0.2.0", "quill": "1.3.7", "screenfull": "5.0.2", diff --git a/src/assets/images/address.png b/src/assets/images/address.png new file mode 100644 index 0000000000000000000000000000000000000000..ddb7a8ed697d91f0cddb5ddf5f0424a878983a20 GIT binary patch literal 712 zcmV;(0yq7MP)Px%f=NU{R7gvmR#9%^Fc2MEf^UuhHz+rN6Ks2fASH&+_5`ITfc*m}Qgegto}j%! zxk0(X=G#b~Wg<^BBo1^p5+braelzplJW%kBC(E)srPL2ZoGGR5LdXXI9KH9yi=v?S z=%cRPzgn%vi1>_%i8xn<_mNoJI_F->vgEyHs}~?-{R;rblqn*<0Kg&7^8-aENirS` z22{~ApV3;+ce~wDCLIMxl4LX-4&MQQ+Oc-d{fuQ7faolNJW?Xo+R04-W6UN5yjg1> zWB^rmI-RPrEH5%$E|;&Nm1}D)Ra-xu3PSdO&H$BjZo-+TX*$zdzlL^DED^k5f{8Eh zJyktE12p$`0K!G@N~viegIuqGela?GvqumNaW=ns#D40DPIuf-^(JDXWMpJqw}X$ry7F08~W-`cDz)=bVja8iOTGwEn;LQmNK>0PWwDdPQB#l zY6Zdq*e)7Xw1I?Nqlw&fQ=U%pBxwPGEApUqtd%z_-~+AxHp9n~q|0M2+6xc}uB^3h zd?;8qSp^V@^sTj~_Em^D=iy_4AmWH!;G#uhIy<&2GH!lw79syh+ybxvDEtMvL%3+_4bp}H0000Px+-bqA3RA@uZTU~4wMHD{M+uqx2^islu0VSmm5=lrvOd!OVf&wur1j~aE5`Ik7 z_=55vzSIcX7kCjdktbt`A^aGAR7{AN(4vtLrS<{AV4@dMi4Vl37~9_4+m&y+v&_uS z+}+u`6eqc9dw1vTd~?qE&d+QaWi))>UqVE)h^U>2<_EvyXE}I;M?~V&Pegx#Q^}o>|l)bxlR`Mrvl;o{w5-NHQ4dA&(`MwL@F>&Abj74xg5)Q z@ePAX48r&Qw{AUcd%bP1{dtbYubrdu>zBx{43U5HcYZr7l!)>rV)+s^O`AhaGZs;9 z`l2`u_7c(7Bt8=h!uS2QTh98?E!$mfdMXxP`}qjrr~l6%aSOYBJpk15=$3kb;4jZH z#soPS<<|ufn9u2eX%qq2<T;&jQx$;3;;I*VWBt$I8y;h9Dhp`!SFxcD44=@RVFxS4E z3M=*|F>iiPrGFbYDfr0v^^07iNwVO=Gy5qwLrLSe1BBuaP^(~)L@Uad_-(~?eY{@K z$Am9jEs)NKqOhc0HILpX#X~#L z3T`qys}CUH4=6kN06k*&T!zUPAXobDvPysq%HVH}=y(8ELFWY??qd2rZbRcUln553lv|kN3#y zJ06J>W0wwim2ck61VkMAG@39lA&(R2C!wpyhd=b2H+<-c|1AjkmezRN3J|a_l%(Ns zrCFOfWvvNTm^xV8@SRRN9U_ZW0$%m}dwtb`_myskz98gEqV`30X|wx!KoHSI{|ZbN zSLwCPd)aGQ__}N*6Im=bA+5u~Gs=T?F;Lpww}DFHAH@ydmsz1rX3pJ=v8@6GE`;eg z9wf3%+e3Lh(XNz>an@7!I0kEAhwj)l9v6>J9f~GU#h!XtL_HBh+q%Zl!-KKR$SjbAnaVX{M zwl@k~JKRF1p>u&tu}8j6j%@-MoUFp(6{;OR(3z+W8Ok*0L(TvoFR?ipG!lvIap}7( z!{P^cdjL%2G*W>G=+`-Y7b~+In8dPBCO%v_7HvhoX(RXl|fX3 zneM^y>lfxXP3iFRkG(xh>s}yFLKiPpzLdF71R!GHVAggp6Mx9eC#1+7X@gp984(&u zU&C6+97LdzI3Rcd5x$TKfI9*r00KuB|C#_c!p@^+_*A^NmnNv$=KKe}xFNp!2%hr* O0000Px+$R=E}#n&O%Op15kdkqA_fJ- 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 - All rights reserved. + * Dual licensed under MIT and Beerware license + * + * :: 2016-02-04 21:25 + */ +(function (a, b, c) { if (typeof module !== "undefined" && module.exports) { module.exports = c() } else if (typeof define === "function" && define.amd) { define(c) } else { b[a] = c() } })("h337", this, function () { var a = { defaultRadius: 40, defaultRenderer: "canvas2d", defaultGradient: { .25: "rgb(0,0,255)", .55: "rgb(0,255,0)", .85: "yellow", 1: "rgb(255,0,0)" }, defaultMaxOpacity: 1, defaultMinOpacity: 0, defaultBlur: .85, defaultXField: "x", defaultYField: "y", defaultValueField: "value", plugins: {} }; var b = function h() { var b = function d(a) { this._coordinator = {}; this._data = []; this._radi = []; this._min = 0; this._max = 1; this._xField = a["xField"] || a.defaultXField; this._yField = a["yField"] || a.defaultYField; this._valueField = a["valueField"] || a.defaultValueField; if (a["radius"]) { this._cfgRadius = a["radius"] } }; var c = a.defaultRadius; b.prototype = { _organiseData: function (a, b) { var d = a[this._xField]; var e = a[this._yField]; var f = this._radi; var g = this._data; var h = this._max; var i = this._min; var j = a[this._valueField] || 1; var k = a.radius || this._cfgRadius || c; if (!g[d]) { g[d] = []; f[d] = [] } if (!g[d][e]) { g[d][e] = j; f[d][e] = k } else { g[d][e] += j } if (g[d][e] > h) { if (!b) { this._max = g[d][e] } else { this.setDataMax(g[d][e]) } return false } else { return { x: d, y: e, value: j, radius: k, min: i, max: h } } }, _unOrganizeData: function () { var a = []; var b = this._data; var c = this._radi; for (var d in b) { for (var e in b[d]) { a.push({ x: d, y: e, radius: c[d][e], value: b[d][e] }) } } return { min: this._min, max: this._max, data: a } }, _onExtremaChange: function () { this._coordinator.emit("extremachange", { min: this._min, max: this._max }) }, addData: function () { if (arguments[0].length > 0) { var a = arguments[0]; var b = a.length; while (b--) { this.addData.call(this, a[b]) } } else { var c = this._organiseData(arguments[0], true); if (c) { this._coordinator.emit("renderpartial", { min: this._min, max: this._max, data: [c] }) } } return this }, setData: function (a) { var b = a.data; var c = b.length; this._data = []; this._radi = []; for (var d = 0; d < c; d++) { this._organiseData(b[d], false) } this._max = a.max; this._min = a.min || 0; this._onExtremaChange(); this._coordinator.emit("renderall", this._getInternalData()); return this }, removeData: function () { }, setDataMax: function (a) { this._max = a; this._onExtremaChange(); this._coordinator.emit("renderall", this._getInternalData()); return this }, setDataMin: function (a) { this._min = a; this._onExtremaChange(); this._coordinator.emit("renderall", this._getInternalData()); return this }, setCoordinator: function (a) { this._coordinator = a }, _getInternalData: function () { return { max: this._max, min: this._min, data: this._data, radi: this._radi } }, getData: function () { return this._unOrganizeData() } }; return b }(); var c = function i() { var a = function (a) { var b = a.gradient || a.defaultGradient; var c = document.createElement("canvas"); var d = c.getContext("2d"); c.width = 256; c.height = 1; var e = d.createLinearGradient(0, 0, 256, 1); for (var f in b) { e.addColorStop(f, b[f]) } d.fillStyle = e; d.fillRect(0, 0, 256, 1); return d.getImageData(0, 0, 256, 1).data }; var b = function (a, b) { var c = document.createElement("canvas"); var d = c.getContext("2d"); var e = a; var f = a; c.width = c.height = a * 2; if (b == 1) { d.beginPath(); d.arc(e, f, a, 0, 2 * Math.PI, false); d.fillStyle = "rgba(0,0,0,1)"; d.fill() } else { var g = d.createRadialGradient(e, f, a * b, e, f, a); g.addColorStop(0, "rgba(0,0,0,1)"); g.addColorStop(1, "rgba(0,0,0,0)"); d.fillStyle = g; d.fillRect(0, 0, 2 * a, 2 * a) } return c }; var c = function (a) { var b = []; var c = a.min; var d = a.max; var e = a.radi; var a = a.data; var f = Object.keys(a); var g = f.length; while (g--) { var h = f[g]; var i = Object.keys(a[h]); var j = i.length; while (j--) { var k = i[j]; var l = a[h][k]; var m = e[h][k]; b.push({ x: h, y: k, value: l, radius: m }) } } return { min: c, max: d, data: b } }; function d(b) { var c = b.container; var d = this.shadowCanvas = document.createElement("canvas"); var e = this.canvas = b.canvas || document.createElement("canvas"); var f = this._renderBoundaries = [1e4, 1e4, 0, 0]; var g = getComputedStyle(b.container) || {}; e.className = "heatmap-canvas"; this._width = e.width = d.width = b.width || +g.width.replace(/px/, ""); this._height = e.height = d.height = b.height || +g.height.replace(/px/, ""); this.shadowCtx = d.getContext("2d"); this.ctx = e.getContext("2d"); e.style.cssText = d.style.cssText = "position:absolute;left:0;top:0;"; c.style.position = "relative"; c.appendChild(e); this._palette = a(b); this._templates = {}; this._setStyles(b) } d.prototype = { renderPartial: function (a) { if (a.data.length > 0) { this._drawAlpha(a); this._colorize() } }, renderAll: function (a) { this._clear(); if (a.data.length > 0) { this._drawAlpha(c(a)); this._colorize() } }, _updateGradient: function (b) { this._palette = a(b) }, updateConfig: function (a) { if (a["gradient"]) { this._updateGradient(a) } this._setStyles(a) }, setDimensions: function (a, b) { this._width = a; this._height = b; this.canvas.width = this.shadowCanvas.width = a; this.canvas.height = this.shadowCanvas.height = b }, _clear: function () { this.shadowCtx.clearRect(0, 0, this._width, this._height); this.ctx.clearRect(0, 0, this._width, this._height) }, _setStyles: function (a) { this._blur = a.blur == 0 ? 0 : a.blur || a.defaultBlur; if (a.backgroundColor) { this.canvas.style.backgroundColor = a.backgroundColor } this._width = this.canvas.width = this.shadowCanvas.width = a.width || this._width; this._height = this.canvas.height = this.shadowCanvas.height = a.height || this._height; this._opacity = (a.opacity || 0) * 255; this._maxOpacity = (a.maxOpacity || a.defaultMaxOpacity) * 255; this._minOpacity = (a.minOpacity || a.defaultMinOpacity) * 255; this._useGradientOpacity = !!a.useGradientOpacity }, _drawAlpha: function (a) { var c = this._min = a.min; var d = this._max = a.max; var a = a.data || []; var e = a.length; var f = 1 - this._blur; while (e--) { var g = a[e]; var h = g.x; var i = g.y; var j = g.radius; var k = Math.min(g.value, d); var l = h - j; var m = i - j; var n = this.shadowCtx; var o; if (!this._templates[j]) { this._templates[j] = o = b(j, f) } else { o = this._templates[j] } var p = (k - c) / (d - c); n.globalAlpha = p < .01 ? .01 : p; n.drawImage(o, l, m); if (l < this._renderBoundaries[0]) { this._renderBoundaries[0] = l } if (m < this._renderBoundaries[1]) { this._renderBoundaries[1] = m } if (l + 2 * j > this._renderBoundaries[2]) { this._renderBoundaries[2] = l + 2 * j } if (m + 2 * j > this._renderBoundaries[3]) { this._renderBoundaries[3] = m + 2 * j } } }, _colorize: function () { var a = this._renderBoundaries[0]; var b = this._renderBoundaries[1]; var c = this._renderBoundaries[2] - a; var d = this._renderBoundaries[3] - b; var e = this._width; var f = this._height; var g = this._opacity; var h = this._maxOpacity; var i = this._minOpacity; var j = this._useGradientOpacity; if (a < 0) { a = 0 } if (b < 0) { b = 0 } if (a + c > e) { c = e - a } if (b + d > f) { d = f - b } var k = this.shadowCtx.getImageData(a, b, c, d); var l = k.data; var m = l.length; var n = this._palette; for (var o = 3; o < m; o += 4) { var p = l[o]; var q = p * 4; if (!q) { continue } var r; if (g > 0) { r = g } else { if (p < h) { if (p < i) { r = i } else { r = p } } else { r = h } } l[o - 3] = n[q]; l[o - 2] = n[q + 1]; l[o - 1] = n[q + 2]; l[o] = j ? n[q + 3] : r } k.data = l; this.ctx.putImageData(k, a, b); this._renderBoundaries = [1e3, 1e3, 0, 0] }, getValueAt: function (a) { var b; var c = this.shadowCtx; var d = c.getImageData(a.x, a.y, 1, 1); var e = d.data[3]; var f = this._max; var g = this._min; b = Math.abs(f - g) * (e / 255) >> 0; return b }, getDataURL: function () { return this.canvas.toDataURL() } }; return d }(); var d = function j() { var b = false; if (a["defaultRenderer"] === "canvas2d") { b = c } return b }(); var e = { merge: function () { var a = {}; var b = arguments.length; for (var c = 0; c < b; c++) { var d = arguments[c]; for (var e in d) { a[e] = d[e] } } return a } }; var f = function k() { var c = function h() { function a() { this.cStore = {} } a.prototype = { on: function (a, b, c) { var d = this.cStore; if (!d[a]) { d[a] = [] } d[a].push(function (a) { return b.call(c, a) }) }, emit: function (a, b) { var c = this.cStore; if (c[a]) { var d = c[a].length; for (var e = 0; e < d; e++) { var f = c[a][e]; f(b) } } } }; return a }(); var f = function (a) { var b = a._renderer; var c = a._coordinator; var d = a._store; c.on("renderpartial", b.renderPartial, b); c.on("renderall", b.renderAll, b); c.on("extremachange", function (b) { a._config.onExtremaChange && a._config.onExtremaChange({ min: b.min, max: b.max, gradient: a._config["gradient"] || a._config["defaultGradient"] }) }); d.setCoordinator(c) }; function g() { var g = this._config = e.merge(a, arguments[0] || {}); this._coordinator = new c; if (g["plugin"]) { var h = g["plugin"]; if (!a.plugins[h]) { throw new Error("Plugin '" + h + "' not found. Maybe it was not registered.") } else { var i = a.plugins[h]; this._renderer = new i.renderer(g); this._store = new i.store(g) } } else { this._renderer = new d(g); this._store = new b(g) } f(this) } g.prototype = { addData: function () { this._store.addData.apply(this._store, arguments); return this }, removeData: function () { this._store.removeData && this._store.removeData.apply(this._store, arguments); return this }, setData: function () { this._store.setData.apply(this._store, arguments); return this }, setDataMax: function () { this._store.setDataMax.apply(this._store, arguments); return this }, setDataMin: function () { this._store.setDataMin.apply(this._store, arguments); return this }, configure: function (a) { this._config = e.merge(this._config, a); this._renderer.updateConfig(this._config); this._coordinator.emit("renderall", this._store._getInternalData()); return this }, repaint: function () { this._coordinator.emit("renderall", this._store._getInternalData()); return this }, getData: function () { return this._store.getData() }, getDataURL: function () { return this._renderer.getDataURL() }, getValueAt: function (a) { if (this._store.getValueAt) { return this._store.getValueAt(a) } else if (this._renderer.getValueAt) { return this._renderer.getValueAt(a) } else { return null } } }; return g }(); var g = { create: function (a) { return new f(a) }, register: function (b, c) { a.plugins[b] = c } }; return g }); \ No newline at end of file diff --git a/src/utils/lib/leaflet-heatmap.js b/src/utils/lib/leaflet-heatmap.js new file mode 100644 index 0000000..e3f4881 --- /dev/null +++ b/src/utils/lib/leaflet-heatmap.js @@ -0,0 +1,246 @@ +/* +* Leaflet Heatmap Overlay +* +* Copyright (c) 2008-2016, Patrick Wied (https://www.patrick-wied.at) +* Dual-licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) +* and the Beerware (http://en.wikipedia.org/wiki/Beerware) license. +*/ +; (function (name, context, factory) { + // Supports UMD. AMD, CommonJS/Node.js and browser context + if (typeof module !== "undefined" && module.exports) { + module.exports = factory( + require('./heatmap.min.js'), + require('leaflet') + ); + } else if (typeof define === "function" && define.amd) { + define(['./heatmap.min.js', 'leaflet'], factory); + } else { + // browser globals + if (typeof window.h337 === 'undefined') { + throw new Error('heatmap.js must be loaded before the leaflet heatmap plugin'); + } + if (typeof window.L === 'undefined') { + throw new Error('Leaflet must be loaded before the leaflet heatmap plugin'); + } + context[name] = factory(window.h337, window.L); + } + +})("HeatmapOverlay", this, function (h337, L) { + 'use strict'; + + // Leaflet < 0.8 compatibility + if (typeof L.Layer === 'undefined') { + L.Layer = L.Class; + } + + var HeatmapOverlay = L.Layer.extend({ + + initialize: function (config) { + this.cfg = config; + this._el = L.DomUtil.create('div', 'leaflet-zoom-hide'); + this._data = []; + this._max = 1; + this._min = 0; + this.cfg.container = this._el; + }, + + onAdd: function (map) { + var size = map.getSize(); + + this._map = map; + + this._width = size.x; + this._height = size.y; + + this._el.style.width = size.x + 'px'; + this._el.style.height = size.y + 'px'; + this._el.style.position = 'absolute'; + + this._origin = this._map.layerPointToLatLng(new L.Point(0, 0)); + + map.getPanes().overlayPane.appendChild(this._el); + + if (!this._heatmap) { + this._heatmap = h337.create(this.cfg); + } + + // this resets the origin and redraws whenever + // the zoom changed or the map has been moved + map.on('moveend', this._reset, this); + this._draw(); + }, + + addTo: function (map) { + map.addLayer(this); + return this; + }, + + onRemove: function (map) { + // remove layer's DOM elements and listeners + map.getPanes().overlayPane.removeChild(this._el); + + map.off('moveend', this._reset, this); + }, + _draw: function () { + if (!this._map) { return; } + + var mapPane = this._map.getPanes().mapPane; + var point = mapPane._leaflet_pos; + + // reposition the layer + this._el.style[HeatmapOverlay.CSS_TRANSFORM] = 'translate(' + + -Math.round(point.x) + 'px,' + + -Math.round(point.y) + 'px)'; + + this._update(); + }, + _update: function () { + var bounds, zoom, scale; + var generatedData = { max: this._max, min: this._min, data: [] }; + + bounds = this._map.getBounds(); + zoom = this._map.getZoom(); + scale = Math.pow(2, zoom); + + if (this._data.length == 0) { + if (this._heatmap) { + this._heatmap.setData(generatedData); + } + return; + } + + + var latLngPoints = []; + var radiusMultiplier = this.cfg.scaleRadius ? scale : 1; + var localMax = 0; + var localMin = 0; + var valueField = this.cfg.valueField; + var len = this._data.length; + + while (len--) { + var entry = this._data[len]; + var value = entry[valueField]; + var latlng = entry.latlng; + + + // we don't wanna render points that are not even on the map ;-) + if (!bounds.contains(latlng)) { + continue; + } + // local max is the maximum within current bounds + localMax = Math.max(value, localMax); + localMin = Math.min(value, localMin); + + var point = this._map.latLngToContainerPoint(latlng); + var latlngPoint = { x: Math.round(point.x), y: Math.round(point.y) }; + latlngPoint[valueField] = value; + + var radius; + + if (entry.radius) { + radius = entry.radius * radiusMultiplier; + } else { + radius = (this.cfg.radius || 2) * radiusMultiplier; + } + latlngPoint.radius = radius; + latLngPoints.push(latlngPoint); + } + if (this.cfg.useLocalExtrema) { + generatedData.max = localMax; + generatedData.min = localMin; + } + + generatedData.data = latLngPoints; + + this._heatmap.setData(generatedData); + }, + setData: function (data) { + this._max = data.max || this._max; + this._min = data.min || this._min; + var latField = this.cfg.latField || 'lat'; + var lngField = this.cfg.lngField || 'lng'; + var valueField = this.cfg.valueField || 'value'; + + // transform data to latlngs + var data = data.data; + var len = data.length; + var d = []; + + while (len--) { + var entry = data[len]; + var latlng = new L.LatLng(entry[latField], entry[lngField]); + var dataObj = { latlng: latlng }; + dataObj[valueField] = entry[valueField]; + if (entry.radius) { + dataObj.radius = entry.radius; + } + d.push(dataObj); + } + this._data = d; + + this._draw(); + }, + // experimential... not ready. + addData: function (pointOrArray) { + if (pointOrArray.length > 0) { + var len = pointOrArray.length; + while (len--) { + this.addData(pointOrArray[len]); + } + } else { + var latField = this.cfg.latField || 'lat'; + var lngField = this.cfg.lngField || 'lng'; + var valueField = this.cfg.valueField || 'value'; + var entry = pointOrArray; + var latlng = new L.LatLng(entry[latField], entry[lngField]); + var dataObj = { latlng: latlng }; + + dataObj[valueField] = entry[valueField]; + this._max = Math.max(this._max, dataObj[valueField]); + this._min = Math.min(this._min, dataObj[valueField]); + + if (entry.radius) { + dataObj.radius = entry.radius; + } + this._data.push(dataObj); + this._draw(); + } + }, + _reset: function () { + this._origin = this._map.layerPointToLatLng(new L.Point(0, 0)); + + var size = this._map.getSize(); + if (this._width !== size.x || this._height !== size.y) { + this._width = size.x; + this._height = size.y; + + this._el.style.width = this._width + 'px'; + this._el.style.height = this._height + 'px'; + + this._heatmap._renderer.setDimensions(this._width, this._height); + } + this._draw(); + } + }); + + HeatmapOverlay.CSS_TRANSFORM = (function () { + var div = document.createElement('div'); + var props = [ + 'transform', + 'WebkitTransform', + 'MozTransform', + 'OTransform', + 'msTransform' + ]; + + for (var i = 0; i < props.length; i++) { + var prop = props[i]; + if (div.style[prop] !== undefined) { + return prop; + } + } + return props[0]; + })(); + + return HeatmapOverlay; +}); \ No newline at end of file diff --git a/src/utils/lib/leaflet.ChineseTmsProviders.js b/src/utils/lib/leaflet.ChineseTmsProviders.js new file mode 100644 index 0000000..73442dc --- /dev/null +++ b/src/utils/lib/leaflet.ChineseTmsProviders.js @@ -0,0 +1,221 @@ +// this L.CRS.Baidu from https://github.com/muyao1987/leaflet-tileLayer-baidugaode/blob/master/src/tileLayer.baidu.js + +if (L.Proj) { + L.CRS.Baidu = new L.Proj.CRS('EPSG:900913', '+proj=merc +a=6378206 +b=6356584.314245179 +lat_ts=0.0 +lon_0=0.0 +x_0=0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs', { + resolutions: function () { + var level = 19 + var res = []; + res[0] = Math.pow(2, 18); + for (var i = 1; i < level; i++) { + res[i] = Math.pow(2, (18 - i)) + } + return res; + }(), + origin: [0, 0], + bounds: L.bounds([20037508.342789244, 0], [0, 20037508.342789244]) + }); +} + +L.TileLayer.ChinaProvider = L.TileLayer.extend({ + + initialize: function (type, options) { // (type, Object) + var providers = L.TileLayer.ChinaProvider.providers; + + options = options || {} + + var parts = type.split('.'); + + var providerName = parts[0]; + var mapName = parts[1]; + var mapType = parts[2]; + + var url = providers[providerName][mapName][mapType]; + options.subdomains = providers[providerName].Subdomains; + options.key = options.key || providers[providerName].key; + + if ('tms' in providers[providerName]) { + options.tms = providers[providerName]['tms'] + } + + L.TileLayer.prototype.initialize.call(this, url, options); + }, + + getTileUrl: function (coords) { + var data = { + s: this._getSubdomain(coords), + x: coords.x, + y: coords.y, + z: this._getZoomForUrl(), + }; + if (this._map && !this._map.options.crs.infinite) { + var invertedY = this._globalTileRange.max.y - coords.y; + if (this.options.tms) { + data['y'] = invertedY; + } + data['-y'] = invertedY; + } + + data.sx = data.x >> 4 + data.sy = ((1 << data.z) - data.y) >> 4 + + return L.Util.template(this._url, L.Util.extend(data, this.options)); + }, + + createTile: function (coords) { + // 创建一个用于绘图的 元素 + var tile = L.DomUtil.create('canvas', 'leaflet-tile'); + + // 根据选项设置瓦片的宽度和高度 + var size = this.getTileSize(); + tile.width = size.x; + tile.height = size.y; + + // 获得一个 canvas 上下文,并使用 coords.x、coords.y 和 coords.z 在上面画东西 + var ctx = tile.getContext('2d'); + + // 使用传入的 URL 模板替换变量 + var url = this._url + .replace('{s}', this._getSubdomain(coords)) + .replace('{x}', coords.x) + .replace('{y}', coords.y) + .replace('{z}', this._getZoomForUrl()); + + + // 创建一个图像对象来加载瓦片 + var img = new Image(); + + img.src = url; // 替换为你的图片路径 + img.setAttribute('crossOrigin', 'anonymous') + + /**获取外部接受的颜色*/ + var color = this.options.color; + + // 当图片加载完成后,绘制到 Canvas 上 + img.onload = function () { + // 绘制图片到 Canvas 上 + ctx.drawImage(img, 0, 0, tile.width, tile.height); + + if (color) { + + // 获取图像的像素数据 + var imageData = ctx.getImageData(0, 0, tile.width, tile.height); + // 获取原来的图片的像素颜色 + var pixels = imageData.data; + for (let i = 0; i < pixels.length; i += 4) { + const r = pixels[i], + g = pixels[i + 1], + b = pixels[i + 2], + a = pixels[i + 3]; + //计算灰度 + var grayVal = (r + g + b) / 3; + //灰度反转--会使图片整体变成灰色--方便上色 + grayVal = 255 - grayVal; + //将灰度替换掉原始的颜色 + pixels[i] = grayVal + color.r; + pixels[i + 1] = grayVal + color.g; + pixels[i + 2] = grayVal + color.b; + //设置一个前景透明度,以便和背景混合 + if (color.a) { + pixels[i + 3] = a * color.a; + } + } + // 将修改后的像素数据放回 Canvas + ctx.putImageData(imageData, 0, 0); + } + }; + // 返回瓦片,以便在屏幕上呈现 + return tile; + } +}); + +L.TileLayer.ChinaProvider.providers = { + TianDiTu: { + Normal: { + Map: "//t{s}.tianditu.gov.cn/DataServer?T=vec_w&X={x}&Y={y}&L={z}&tk={key}", + Annotion: "//t{s}.tianditu.gov.cn/DataServer?T=cva_w&X={x}&Y={y}&L={z}&tk={key}" + }, + Satellite: { + Map: "//t{s}.tianditu.gov.cn/DataServer?T=img_w&X={x}&Y={y}&L={z}&tk={key}", + Annotion: "//t{s}.tianditu.gov.cn/DataServer?T=cia_w&X={x}&Y={y}&L={z}&tk={key}" + }, + Terrain: { + Map: "//t{s}.tianditu.gov.cn/DataServer?T=ter_w&X={x}&Y={y}&L={z}&tk={key}", + Annotion: "//t{s}.tianditu.gov.cn/DataServer?T=cta_w&X={x}&Y={y}&L={z}&tk={key}" + }, + Subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'], + key: "174705aebfe31b79b3587279e211cb9a" + }, + + GaoDe: { + Normal: { + // Map: 'https://webst0{s}.is.autonavi.com/appmaptile?style=7&x={x}&y={y}&z={z}' //高清 + Map: '//webrd0{s}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}' + }, + Satellite: { + Map: 'https://webst0{s}.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}', + Annotion: 'https://webst0{s}.is.autonavi.com/appmaptile?style=8&x={x}&y={y}&z={z}' + }, + Subdomains: ["1", "2", "3", "4"] + }, + + Google: { + Normal: { + Map: "//www.google.cn/maps/vt?lyrs=m@189&gl=cn&x={x}&y={y}&z={z}" + }, + Satellite: { + Map: "//www.google.cn/maps/vt?lyrs=s@189&gl=cn&x={x}&y={y}&z={z}", + Annotion: "//www.google.cn/maps/vt?lyrs=y@189&gl=cn&x={x}&y={y}&z={z}" + }, + Subdomains: [] + }, + + Geoq: { + Normal: { + Map: "//map.geoq.cn/ArcGIS/rest/services/ChinaOnlineCommunity/MapServer/tile/{z}/{y}/{x}", + PurplishBlue: "//map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}", + Gray: "//map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetGray/MapServer/tile/{z}/{y}/{x}", + Warm: "//map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetWarm/MapServer/tile/{z}/{y}/{x}", + }, + Theme: { + Hydro: "//thematic.geoq.cn/arcgis/rest/services/ThematicMaps/WorldHydroMap/MapServer/tile/{z}/{y}/{x}" + }, + Subdomains: [] + }, + + OSM: { + Normal: { + Map: "//{s}.tile.osm.org/{z}/{x}/{y}.png", + }, + Subdomains: ['a', 'b', 'c'] + }, + + Baidu: { + Normal: { + Map: '//online{s}.map.bdimg.com/onlinelabel/?qt=tile&x={x}&y={y}&z={z}&styles=pl&scaler=1&p=1' + }, + Satellite: { + Map: '//shangetu{s}.map.bdimg.com/it/u=x={x};y={y};z={z};v=009;type=sate&fm=46', + Annotion: '//online{s}.map.bdimg.com/tile/?qt=tile&x={x}&y={y}&z={z}&styles=sl&v=020' + }, + Subdomains: '0123456789', + tms: true + }, + + Tencent: { + Normal: { + Map: "//rt{s}.map.gtimg.com/tile?z={z}&x={x}&y={-y}&type=vector&styleid=3", + }, + Satellite: { + Map: "//p{s}.map.gtimg.com/sateTiles/{z}/{sx}/{sy}/{x}_{-y}.jpg", + }, + Terrain: { + Map: "//p{s}.map.gtimg.com/demTiles/{z}/{sx}/{sy}/{x}_{-y}.jpg" + }, + Subdomains: '0123', + } + +}; + +L.tileLayer.chinaProvider = function (type, options) { + return new L.TileLayer.ChinaProvider(type, options); +}; diff --git a/src/utils/lib/leaflet.mapCorrection.min.js b/src/utils/lib/leaflet.mapCorrection.min.js new file mode 100644 index 0000000..d3eb791 --- /dev/null +++ b/src/utils/lib/leaflet.mapCorrection.min.js @@ -0,0 +1,143 @@ +/* eslint-disable */ +L.CoordConver = function () { + function a(b, c) { + var d = + -100 + + 2 * b + + 3 * c + + 0.2 * c * c + + 0.1 * b * c + + 0.2 * Math.sqrt(Math.abs(b)), + d = d + (2 * (20 * Math.sin(6 * b * e) + 20 * Math.sin(2 * b * e))) / 3, + d = d + (2 * (20 * Math.sin(c * e) + 40 * Math.sin((c / 3) * e))) / 3 + return (d += + (2 * (160 * Math.sin((c / 12) * e) + 320 * Math.sin((c * e) / 30))) / 3) + } + function f(b, c) { + var d = + 300 + + b + + 2 * c + + 0.1 * b * b + + 0.1 * b * c + + 0.1 * Math.sqrt(Math.abs(b)), + d = d + (2 * (20 * Math.sin(6 * b * e) + 20 * Math.sin(2 * b * e))) / 3, + d = d + (2 * (20 * Math.sin(b * e) + 40 * Math.sin((b / 3) * e))) / 3 + return (d += + (2 * (150 * Math.sin((b / 12) * e) + 300 * Math.sin((b / 30) * e))) / 3) + } + this.getCorrdType = function (b) { + var c = 'wgs84' + switch (b.split('.')[0]) { + case 'Geoq': + case 'GaoDe': + case 'Google': + c = 'gcj02' + break + case 'Baidu': + c = 'bd09' + break + case 'OSM': + case 'TianDiTu': + c = 'wgs84' + } + return c + } + this.bd09_To_gps84 = function (b, c) { + var d = this.bd09_To_gcj02(b, c) + return this.gcj02_To_gps84(d.lng, d.lat) + } + this.gps84_To_bd09 = function (b, c) { + var d = this.gps84_To_gcj02(b, c) + return this.gcj02_To_bd09(d.lng, d.lat) + } + this.gps84_To_gcj02 = function (b, c) { + var d = a(b - 105, c - 35), + k = f(b - 105, c - 35), + l = (c / 180) * e, + g = Math.sin(l), + g = 1 - n * g * g, + m = Math.sqrt(g), + d = (180 * d) / (((h * (1 - n)) / (g * m)) * e), + k = (180 * k) / ((h / m) * Math.cos(l) * e) + return { lng: b + k, lat: c + d } + } + this.gcj02_To_gps84 = function (b, c) { + var d = a(b - 105, c - 35), + k = f(b - 105, c - 35), + l = (c / 180) * e, + g = Math.sin(l), + g = 1 - n * g * g, + m = Math.sqrt(g), + d = (180 * d) / (((h * (1 - n)) / (g * m)) * e), + k = (180 * k) / ((h / m) * Math.cos(l) * e) + return { lng: 2 * b - (b + k), lat: 2 * c - (c + d) } + } + this.gcj02_To_bd09 = function (b, c) { + var d = Math.sqrt(b * b + c * c) + 2e-5 * Math.sin(c * p), + a = Math.atan2(c, b) + 3e-6 * Math.cos(b * p) + return { lng: d * Math.cos(a) + 0.0065, lat: d * Math.sin(a) + 0.006 } + } + this.bd09_To_gcj02 = function (b, c) { + var d = b - 0.0065, + a = c - 0.006, + e = Math.sqrt(d * d + a * a) - 2e-5 * Math.sin(a * p), + d = Math.atan2(a, d) - 3e-6 * Math.cos(d * p) + return { lng: e * Math.cos(d), lat: e * Math.sin(d) } + } + var e = 3.141592653589793, + h = 6378245, + n = 0.006693421622965943, + p = (3e3 * e) / 180 +} +L.coordConver = function () { + return new L.CoordConver() +} +L.TileLayer.ChinaProvider.include({ + addTo: function (a) { + a.options.corrdType || (a.options.corrdType = this.options.corrdType) + a.addLayer(this) + return this + }, +}) +L.tileLayer.chinaProvider = function (a, f) { + f = f || {} + f.corrdType = L.coordConver().getCorrdType(a) + return new L.TileLayer.ChinaProvider(a, f) +} +L.GridLayer.include({ + _setZoomTransform: function (a, f, e) { + var h = f + void 0 != h && + this.options && + ('gcj02' == this.options.corrdType + ? (h = L.coordConver().gps84_To_gcj02(f.lng, f.lat)) + : 'bd09' == this.options.corrdType && + (h = L.coordConver().gps84_To_bd09(f.lng, f.lat))) + f = this._map.getZoomScale(e, a.zoom) + e = a.origin + .multiplyBy(f) + .subtract(this._map._getNewPixelOrigin(h, e)) + .round() + L.Browser.any3d + ? L.DomUtil.setTransform(a.el, e, f) + : L.DomUtil.setPosition(a.el, e) + }, + _getTiledPixelBounds: function (a) { + var f = a + void 0 != f && + this.options && + ('gcj02' == this.options.corrdType + ? (f = L.coordConver().gps84_To_gcj02(a.lng, a.lat)) + : 'bd09' == this.options.corrdType && + (f = L.coordConver().gps84_To_bd09(a.lng, a.lat))) + a = this._map + var e = a._animatingZoom + ? Math.max(a._animateToZoom, a.getZoom()) + : a.getZoom(), + e = a.getZoomScale(e, this._tileZoom), + f = a.project(f, this._tileZoom).floor() + a = a.getSize().divideBy(2 * e) + return new L.Bounds(f.subtract(a), f.add(a)) + }, +}) diff --git a/src/utils/lib/leaflet.polygon.gradient.js b/src/utils/lib/leaflet.polygon.gradient.js new file mode 100644 index 0000000..4c2db1f --- /dev/null +++ b/src/utils/lib/leaflet.polygon.gradient.js @@ -0,0 +1,335 @@ +/* eslint-disable */ +(function (factory, window) { + + // define an AMD module that relies on 'leaflet' + if (typeof define === 'function' && define.amd) { + define(['leaflet'], factory); + + // define a Common JS module that relies on 'leaflet' + } else if (typeof exports === 'object') { + module.exports = factory(require('leaflet')); + } + + // attach your plugin to the global 'L' letiable + if (typeof window !== 'undefined' && window.L) { + window.L.ArrowPath = factory(L); + } +}(function (L) { + + L.SVG.include({ + _updateStyle: function (layer) { + + let path = layer._path, + options = layer.options; + + if (!path) { + return; + } + + if (options.stroke) { + path.setAttribute('stroke', options.color); + path.setAttribute('stroke-opacity', options.opacity); + path.setAttribute('stroke-width', options.weight); + path.setAttribute('stroke-linecap', options.lineCap); + path.setAttribute('stroke-linejoin', options.lineJoin); + + if (options.dashArray) { + path.setAttribute('stroke-dasharray', options.dashArray); + } else { + path.removeAttribute('stroke-dasharray'); + } + + if (options.dashOffset) { + path.setAttribute('stroke-dashoffset', options.dashOffset); + } else { + path.removeAttribute('stroke-dashoffset'); + } + } else { + path.setAttribute('stroke', 'none'); + } + + if (options.fill) { + this._polyFill(layer, path, options); + path.setAttribute('fill-opacity', options.fillOpacity); + path.setAttribute('fill-rule', options.fillRule || 'evenodd'); + } else { + path.setAttribute('fill', 'none'); + } + }, + _polyFill(layer, path, options) { + let fillColor = options.fillColor; + let isLinearGradient = fillColor.match(/^linearGradient\(/); + let isRadialGradient = fillColor.match(/^radialGradient\(/); + + if (fillColor.match(/^#/)) { + path.setAttribute('fill', fillColor || options.color); + } else if (isLinearGradient || isRadialGradient) { + let gradientOpt = this._addGradient(fillColor); + if (isLinearGradient) { + this._addLinearGradient(layer, gradientOpt); + } else { + this._addRadialGradient(layer, gradientOpt); + } + } else if (fillColor.match(/^url\(/)) { + this._fillByImage(layer); + } + }, + _addLinearGradient: function (layer, gradientOpt) { + let path = layer._path; + let colorStr = layer.options.fillColor; + let gradientId = 'gradient' + gradientOpt.index; + + this._addDefs(); + + if (!gradientOpt.exist) { + let gradient = L.SVG.create('linearGradient'); + gradient.setAttribute('id', gradientId); + + let arrMap = this._getLinearProperties(colorStr, ['linearGradient(', ')']); + this._addStops(gradient, arrMap); + + this._addAngle(gradient, arrMap.angle); + + this._defs.appendChild(gradient); + } + + path.setAttribute('fill', 'url(#' + gradientId + ')'); + }, + _addRadialGradient: function (layer, gradientOpt) { + let path = layer._path; + let colorStr = layer.options.fillColor; + let gradientId = 'gradient' + gradientOpt.index; + + this._addDefs(); + + if (!gradientOpt.exist) { + let gradient = L.SVG.create('radialGradient'); + gradient.setAttribute('id', gradientId); + + let arrMap = this._getRadialProperties(colorStr, ['radialGradient(', ')']); + this._addStops(gradient, arrMap); + + this._addAttribute(gradient, arrMap); + // + this._defs.appendChild(gradient); + } + + path.setAttribute('fill', 'url(#' + gradientId + ')'); + }, + _addAttribute(gradient, arr) { + gradient.setAttribute('cx', arr.cx); + gradient.setAttribute('cy', arr.cy); + gradient.setAttribute('r', arr.r); + gradient.setAttribute('fx', arr.fx); + gradient.setAttribute('fy', arr.fy); + }, + + _getRadialProperties(colorStr, replaceArr) { + let string = colorStr; + for (let i = 0, l = replaceArr.length; i < l; i++) { + let str = replaceArr[i]; + string = string.replace(str, ''); + } + let arrays = string.split(/[\,]+/); + let colorArr = arrays.slice(5); + let resColors = []; + let resOffsets = []; + let offsetNum = 0; + for (let i = 0, l = colorArr.length; i < l; i++) { + let str = colorArr[i]; + let opts = str.trim().split(/\s+/); + resColors.push(opts[0]); + if (opts.length > 1 || i === l - 1) { + let offset; + if (opts.length > 1) { + offset = parseFloat(opts[1]); + } else { + offset = 100; + } + + let len = resOffsets.length; + if (offsetNum > 0) { + let startNum = len - offsetNum - 1; + let startVal = parseFloat(resOffsets[startNum]); + let step = (offset - startVal) / (offsetNum + 1); + for (let j = 1; j <= offsetNum; j++) { + resOffsets[startNum + j] = startVal + step * j + '%'; + } + offsetNum = 0; + } + resOffsets.push(offset + '%'); + } else { + if (i !== 0) { + offsetNum = offsetNum + 1; + resOffsets.push(''); + } else { + resOffsets.push('0%'); + } + } + } + return { + cx: arrays[0].trim(), + cy: arrays[1].trim(), + r: arrays[2].trim(), + fx: arrays[3].trim(), + fy: arrays[4].trim(), + colors: resColors, + offsets: resOffsets + } + }, + _addGradient(gradient) { + if (!this._gradientArray) { + this._gradientArray = []; + } + let gradientStr = gradient.split(/[\s\,\-\(\)]+/).join(''); + let index = this._gradientArray.indexOf(gradientStr); + if (index > -1) { + return { index: index, exist: true } + } + this._gradientArray.push(gradientStr); + return { index: this._gradientArray.length - 1, exist: false } + }, + _addDefs() { + if (!this._defs) { + this._defs = L.SVG.create('defs'); + this._container.appendChild(this._defs); + } + }, + _addAngle(gradient, angle) { + gradient.setAttribute('x1', '0'); + gradient.setAttribute('y1', '0'); + gradient.setAttribute('x2', '1'); + gradient.setAttribute('y2', '0'); + gradient.setAttribute('gradientTransform', 'rotate(' + angle.replace('deg', '') + ')'); + }, + _addStops(gradient, options) { + let colors = options.colors; + let offsets = options.offsets; + for (let i = 0, len = colors.length; i < len; i++) { + let stop = L.SVG.create('stop'); + stop.setAttribute('offset', offsets[i]); + stop.setAttribute('stop-color', colors[i]); + gradient.appendChild(stop); + } + }, + _getLinearProperties(colorStr, replaceArr) { + let string = colorStr; + for (let i = 0, l = replaceArr.length; i < l; i++) { + let str = replaceArr[i]; + string = string.replace(str, ''); + } + let arrays = string.split(/[\,]+/); + let colorArr = arrays.slice(1); + let resAngle = arrays[0].trim(); + let resColors = []; + let resOffsets = []; + let offsetNum = 0; + for (let i = 0, l = colorArr.length; i < l; i++) { + let str = colorArr[i]; + let opts = str.trim().split(/\s+/); + resColors.push(opts[0]); + if (opts.length > 1 || i === l - 1) { + let offset; + if (opts.length > 1) { + offset = parseFloat(opts[1]); + } else { + offset = 100; + } + + let len = resOffsets.length; + if (offsetNum > 0) { + let startNum = len - offsetNum - 1; + let startVal = parseFloat(resOffsets[startNum]); + let step = (offset - startVal) / (offsetNum + 1); + for (let j = 1; j <= offsetNum; j++) { + resOffsets[startNum + j] = startVal + step * j + '%'; + } + offsetNum = 0; + } + resOffsets.push(offset + '%'); + } else { + if (i !== 0) { + offsetNum = offsetNum + 1; + resOffsets.push(''); + } else { + resOffsets.push('0%'); + } + } + } + return { + angle: resAngle, + colors: resColors, + offsets: resOffsets + } + }, + + //借鉴自插件leaflet-polygon-fillPattern + _fillByImage: function (layer) { + let path = layer._path, + options = layer.options, + fill = options.fillColor; + this._addDefs(); + + let _img_url = fill.replace(/url\(+/, '').replace(/\)+/, '');/*.substring(4, fill.length - 1)*/ + let _refOption = this._addRefId(_img_url); + let _ref_id = _img_url + _refOption.index; + if (!_refOption.exist) { + this._addPattern(_img_url, _ref_id, options); + } + path.setAttribute('fill', "url(#" + _ref_id + ")"); + }, + _addRefId(url) { + if (!this._imgUrls) { + this._imgUrls = []; + } + let index = this._imgUrls.indexOf(url); + if (index > -1) { + return { index: index, exist: true } + } + this._imgUrls.push(url); + return { index: this._imgUrls.length - 1, exist: false } + }, + _addPattern(_img_url, _ref_id, options) { + let _im = new Image(); + _im.src = _img_url; + + let _p = L.SVG.create('pattern'); + _p.setAttribute('id', _ref_id); + _p.setAttribute('x', '0'); + _p.setAttribute('y', '0'); + _p.setAttribute('patternUnits', 'userSpaceOnUse'); + _p.setAttribute('width', '24'); + _p.setAttribute('height', '24'); + + let _rect = L.SVG.create('rect'); + _rect.setAttribute('width', 24); + _rect.setAttribute('height', 24); + _rect.setAttribute('x', 0); + _rect.setAttribute('x', 0); + _rect.setAttribute('fill', options.fillColor || options.color); + + let _img = L.SVG.create('image'); + _img.setAttribute('x', '0'); + _img.setAttribute('y', '0'); + _img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', _img_url); + _img.setAttribute('width', '24'); + _img.setAttribute('height', '24'); + + _p.appendChild(_rect); + _p.appendChild(_img); + + this._defs.appendChild(_p); + + _im.onload = function () { + _p.setAttribute('width', _im.width); + _p.setAttribute('height', _im.height); + _img.setAttribute('width', _im.width); + _img.setAttribute('height', _im.height); + }; + } + + }) + +}, window)); + + diff --git a/src/views/warningManage/warningAppear.vue b/src/views/warningManage/warningAppear.vue index ef5ea6f..9c862bd 100644 --- a/src/views/warningManage/warningAppear.vue +++ b/src/views/warningManage/warningAppear.vue @@ -1,28 +1,37 @@ +