From 6a5c681cfad3b2fb1d5d52b7646f0baec6afabc5 Mon Sep 17 00:00:00 2001 From: wangqi <magical1908@outlook.com> Date: 星期四, 08 四月 2021 17:31:28 +0800 Subject: [PATCH] Merge branch 'develop' of http://xearth.cn:6600/r/wuyushui/SewerAndRainNetwork into develop --- src/components/plugin/leaflet-measure-path/leaflet-measure-path.js | 840 ++++++++++++++++++++++++++++++------------------------------ 1 files changed, 420 insertions(+), 420 deletions(-) diff --git a/src/components/plugin/leaflet-measure-path/leaflet-measure-path.js b/src/components/plugin/leaflet-measure-path/leaflet-measure-path.js index 2f8a696..88338eb 100644 --- a/src/components/plugin/leaflet-measure-path/leaflet-measure-path.js +++ b/src/components/plugin/leaflet-measure-path/leaflet-measure-path.js @@ -1,421 +1,421 @@ -/* eslint-disable */ - !(function() { - 'use strict' - - L.Marker.Measurement = L[L.Layer ? 'Layer' : 'Class'].extend({ - options: { - pane: 'markerPane' - }, - - initialize: function(latlng, measurement, title, rotation, options) { - L.setOptions(this, options) - - this._latlng = latlng - this._measurement = measurement - this._title = title - this._rotation = rotation - }, - - addTo: function(map) { - map.addLayer(this) - return this - }, - - onAdd: function(map) { - this._map = map - var pane = this.getPane ? this.getPane() : map.getPanes().markerPane - var el = this._element = L.DomUtil.create('div', 'leaflet-zoom-animated leaflet-measure-path-measurement', pane) - var inner = L.DomUtil.create('div', '', el) - inner.title = this._title - inner.innerHTML = this._measurement - - map.on('zoomanim', this._animateZoom, this) - - this._setPosition() - }, - - onRemove: function(map) { - map.off('zoomanim', this._animateZoom, this) - var pane = this.getPane ? this.getPane() : map.getPanes().markerPane - pane.removeChild(this._element) - this._map = null - }, - - _setPosition: function() { - L.DomUtil.setPosition(this._element, this._map.latLngToLayerPoint(this._latlng)) - this._element.style.transform += ' rotate(' + this._rotation + 'rad)' - }, - - _animateZoom: function(opt) { - var pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center).round() - L.DomUtil.setPosition(this._element, pos) - this._element.style.transform += ' rotate(' + this._rotation + 'rad)' - } - }) - - L.marker.measurement = function(latLng, measurement, title, rotation, options) { - return new L.Marker.Measurement(latLng, measurement, title, rotation, options) - } - - var formatDistance = function(d) { - var unit, - feet - - if (this._measurementOptions.imperial) { - feet = d / 0.3048 - if (feet > 3000) { - d = d / 1609.344 - unit = 'mi' - } else { - d = feet - unit = 'ft' - } - } else { - if (d > 1000) { - d = d / 1000 - unit = 'km' - } else { - unit = 'm' - } - } - - if (d < 100) { - return d.toFixed(1) + ' ' + unit - } else { - return Math.round(d) + ' ' + unit - } - } - - var formatArea = function(a) { - var unit, - sqfeet - - if (this._measurementOptions.imperial) { - if (a > 404.685642) { - a = a / 4046.85642 - unit = 'ac' - } else { - a = a / 0.09290304 - unit = 'ft虏' - } - } else { - if (a > 1000000) { - a = a / 1000000 - unit = 'km虏' - } else { - unit = 'm虏' - } - } - - if (a < 100) { - return a.toFixed(1) + ' ' + unit - } else { - return Math.round(a) + ' ' + unit - } - } - - var RADIUS = 6378137 - // ringArea function copied from geojson-area - // (https://github.com/mapbox/geojson-area) - // This function is distributed under a separate license, - // see LICENSE.md. - var ringArea = function ringArea(coords) { - var rad = function rad(_) { - return _ * Math.PI / 180 - } - var p1, p2, p3, lowerIndex, middleIndex, upperIndex, - area = 0, - coordsLength = coords.length - - if (coordsLength > 2) { - for (var i = 0; i < coordsLength; i++) { - if (i === coordsLength - 2) {// i = N-2 - lowerIndex = coordsLength - 2 - middleIndex = coordsLength -1 - upperIndex = 0 - } else if (i === coordsLength - 1) {// i = N-1 - lowerIndex = coordsLength - 1 - middleIndex = 0 - upperIndex = 1 - } else { // i = 0 to N-3 - lowerIndex = i - middleIndex = i+1 - upperIndex = i+2 - } - p1 = coords[lowerIndex] - p2 = coords[middleIndex] - p3 = coords[upperIndex] - area += ( rad(p3.lng) - rad(p1.lng) ) * Math.sin( rad(p2.lat)) - } - - area = area * RADIUS * RADIUS / 2 - } - - return Math.abs(area) - } - /** - * Handles the init hook for polylines and circles. - * Implements the showOnHover functionality if called for. - */ - var addInitHook = function() { - var showOnHover = this.options.measurementOptions && this.options.measurementOptions.showOnHover - if (this.options.showMeasurements && !showOnHover) { - this.showMeasurements() - } - if (this.options.showMeasurements && showOnHover) { - this.on('mouseover', function() { - this.showMeasurements() - }) - this.on('mouseout', function() { - this.hideMeasurements() - }) - } - } - - var circleArea = function circleArea(d) { - var rho = d / RADIUS - return 2 * Math.PI * RADIUS * RADIUS * (1 - Math.cos(rho)) - } - - var override = function(method, fn, hookAfter) { - if (!hookAfter) { - return function() { - var originalReturnValue = method.apply(this, arguments) - var args = Array.prototype.slice.call(arguments) - args.push(originalReturnValue) - return fn.apply(this, args) - } - } else { - return function() { - fn.apply(this, arguments) - return method.apply(this, arguments) - } - } - } - - L.Polyline.include({ - showMeasurements: function(options) { - if (!this._map || this._measurementLayer) return this - - this._measurementOptions = L.extend({ - showOnHover: (options && options.showOnHover) || false, - minPixelDistance: 30, - showDistances: true, - showArea: true, - showTotalDistance: true, - lang: { - totalLength: 'Total length', - totalArea: 'Total area', - segmentLength: 'Segment length' - } - }, options || {}) - - this._measurementLayer = L.layerGroup().addTo(this._map) - this.updateMeasurements() - - this._map.on('zoomend', this.updateMeasurements, this) - - return this - }, - - hideMeasurements: function() { - if (!this._map) return this - - this._map.off('zoomend', this.updateMeasurements, this) - - if (!this._measurementLayer) return this - this._map.removeLayer(this._measurementLayer) - this._measurementLayer = null - - return this - }, - - onAdd: override(L.Polyline.prototype.onAdd, function(originalReturnValue) { - var showOnHover = this.options.measurementOptions && this.options.measurementOptions.showOnHover - if (this.options.showMeasurements && !showOnHover) { - this.showMeasurements(this.options.measurementOptions) - } - - return originalReturnValue - }), - - onRemove: override(L.Polyline.prototype.onRemove, function(originalReturnValue) { - this.hideMeasurements() - - return originalReturnValue - }, true), - - setLatLngs: override(L.Polyline.prototype.setLatLngs, function(originalReturnValue) { - this.updateMeasurements() - - return originalReturnValue - }), - - spliceLatLngs: override(L.Polyline.prototype.spliceLatLngs, function(originalReturnValue) { - this.updateMeasurements() - - return originalReturnValue - }), - - formatDistance: formatDistance, - formatArea: formatArea, - - updateMeasurements: function() { - if (!this._measurementLayer) return this - - var latLngs = this.getLatLngs(), - isPolygon = this instanceof L.Polygon, - options = this._measurementOptions, - totalDist = 0, - formatter, - ll1, - ll2, - p1, - p2, - pixelDist, - dist - - if (latLngs && latLngs.length && L.Util.isArray(latLngs[0])) { - // Outer ring is stored as an array in the first element, - // use that instead. - latLngs = latLngs[0] - } - - this._measurementLayer.clearLayers() - - if (this._measurementOptions.showDistances && latLngs.length > 1) { - formatter = this._measurementOptions.formatDistance || L.bind(this.formatDistance, this) - - for (var i = 1, len = latLngs.length; (isPolygon && i <= len) || i < len; i++) { - ll1 = latLngs[i - 1] - ll2 = latLngs[i % len] - dist = ll1.distanceTo(ll2) - totalDist += dist - - p1 = this._map.latLngToLayerPoint(ll1) - p2 = this._map.latLngToLayerPoint(ll2) - - pixelDist = p1.distanceTo(p2) - - if (pixelDist >= options.minPixelDistance) { - L.marker.measurement( - this._map.layerPointToLatLng([(p1.x + p2.x) / 2, (p1.y + p2.y) / 2]), - formatter(dist), options.lang.segmentLength, this._getRotation(ll1, ll2), options) - .addTo(this._measurementLayer) - } - } - - // Show total length for polylines - if (!isPolygon && this._measurementOptions.showTotalDistance) { - L.marker.measurement(ll2, formatter(totalDist), options.lang.totalLength, 0, options) - .addTo(this._measurementLayer) - } - } - - if (isPolygon && options.showArea && latLngs.length > 2) { - formatter = options.formatArea || L.bind(this.formatArea, this) - var area = ringArea(latLngs) - L.marker.measurement(this.getBounds().getCenter(), - formatter(area), options.lang.totalArea, 0, options) - .addTo(this._measurementLayer) - } - - return this - }, - - _getRotation: function(ll1, ll2) { - var p1 = this._map.project(ll1), - p2 = this._map.project(ll2) - - return Math.atan((p2.y - p1.y) / (p2.x - p1.x)) - } - }) - - L.Polyline.addInitHook(function() { - addInitHook.call(this) - }) - - L.Circle.include({ - showMeasurements: function(options) { - if (!this._map || this._measurementLayer) return this - - this._measurementOptions = L.extend({ - showOnHover: false, - showArea: true, - lang: { - totalArea: 'Total area', - } - }, options || {}) - - this._measurementLayer = L.layerGroup().addTo(this._map) - this.updateMeasurements() - - this._map.on('zoomend', this.updateMeasurements, this) - - return this - }, - - hideMeasurements: function() { - if (!this._map) return this - - this._map.on('zoomend', this.updateMeasurements, this) - - if (!this._measurementLayer) return this - this._map.removeLayer(this._measurementLayer) - this._measurementLayer = null - - return this - }, - - onAdd: override(L.Circle.prototype.onAdd, function(originalReturnValue) { - var showOnHover = this.options.measurementOptions && this.options.measurementOptions.showOnHover - if (this.options.showMeasurements && !showOnHover) { - this.showMeasurements(this.options.measurementOptions) - } - - return originalReturnValue - }), - - onRemove: override(L.Circle.prototype.onRemove, function(originalReturnValue) { - this.hideMeasurements() - - return originalReturnValue - }, true), - - setLatLng: override(L.Circle.prototype.setLatLng, function(originalReturnValue) { - this.updateMeasurements() - - return originalReturnValue - }), - - setRadius: override(L.Circle.prototype.setRadius, function(originalReturnValue) { - this.updateMeasurements() - - return originalReturnValue - }), - - formatArea: formatArea, - - updateMeasurements: function() { - if (!this._measurementLayer) return - - var latLng = this.getLatLng(), - options = this._measurementOptions, - formatter = options.formatArea || L.bind(this.formatArea, this) - - this._measurementLayer.clearLayers() - - if (options.showArea) { - formatter = options.formatArea || L.bind(this.formatArea, this) - var area = circleArea(this.getRadius()) - L.marker.measurement(latLng, - formatter(area), options.lang.totalArea, 0, options) - .addTo(this._measurementLayer) - } - } - }) - - L.Circle.addInitHook(function() { - addInitHook.call(this) - }) +/* eslint-disable */ + !(function() { + 'use strict' + + L.Marker.Measurement = L[L.Layer ? 'Layer' : 'Class'].extend({ + options: { + pane: 'markerPane' + }, + + initialize: function(latlng, measurement, title, rotation, options) { + L.setOptions(this, options) + + this._latlng = latlng + this._measurement = measurement + this._title = title + this._rotation = rotation + }, + + addTo: function(map) { + map.addLayer(this) + return this + }, + + onAdd: function(map) { + this._map = map + var pane = this.getPane ? this.getPane() : map.getPanes().markerPane + var el = this._element = L.DomUtil.create('div', 'leaflet-zoom-animated leaflet-measure-path-measurement', pane) + var inner = L.DomUtil.create('div', '', el) + inner.title = this._title + inner.innerHTML = this._measurement + + map.on('zoomanim', this._animateZoom, this) + + this._setPosition() + }, + + onRemove: function(map) { + map.off('zoomanim', this._animateZoom, this) + var pane = this.getPane ? this.getPane() : map.getPanes().markerPane + pane.removeChild(this._element) + this._map = null + }, + + _setPosition: function() { + L.DomUtil.setPosition(this._element, this._map.latLngToLayerPoint(this._latlng)) + this._element.style.transform += ' rotate(' + this._rotation + 'rad)' + }, + + _animateZoom: function(opt) { + var pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center).round() + L.DomUtil.setPosition(this._element, pos) + this._element.style.transform += ' rotate(' + this._rotation + 'rad)' + } + }) + + L.marker.measurement = function(latLng, measurement, title, rotation, options) { + return new L.Marker.Measurement(latLng, measurement, title, rotation, options) + } + + var formatDistance = function(d) { + var unit, + feet + + if (this._measurementOptions.imperial) { + feet = d / 0.3048 + if (feet > 3000) { + d = d / 1609.344 + unit = 'mi' + } else { + d = feet + unit = 'ft' + } + } else { + if (d > 1000) { + d = d / 1000 + unit = 'km' + } else { + unit = 'm' + } + } + + if (d < 100) { + return d.toFixed(1) + ' ' + unit + } else { + return Math.round(d) + ' ' + unit + } + } + + var formatArea = function(a) { + var unit, + sqfeet + + if (this._measurementOptions.imperial) { + if (a > 404.685642) { + a = a / 4046.85642 + unit = 'ac' + } else { + a = a / 0.09290304 + unit = 'ft虏' + } + } else { + if (a > 1000000) { + a = a / 1000000 + unit = 'km虏' + } else { + unit = 'm虏' + } + } + + if (a < 100) { + return a.toFixed(1) + ' ' + unit + } else { + return Math.round(a) + ' ' + unit + } + } + + var RADIUS = 6378137 + // ringArea function copied from geojson-area + // (https://github.com/mapbox/geojson-area) + // This function is distributed under a separate license, + // see LICENSE.md. + var ringArea = function ringArea(coords) { + var rad = function rad(_) { + return _ * Math.PI / 180 + } + var p1, p2, p3, lowerIndex, middleIndex, upperIndex, + area = 0, + coordsLength = coords.length + + if (coordsLength > 2) { + for (var i = 0; i < coordsLength; i++) { + if (i === coordsLength - 2) {// i = N-2 + lowerIndex = coordsLength - 2 + middleIndex = coordsLength -1 + upperIndex = 0 + } else if (i === coordsLength - 1) {// i = N-1 + lowerIndex = coordsLength - 1 + middleIndex = 0 + upperIndex = 1 + } else { // i = 0 to N-3 + lowerIndex = i + middleIndex = i+1 + upperIndex = i+2 + } + p1 = coords[lowerIndex] + p2 = coords[middleIndex] + p3 = coords[upperIndex] + area += ( rad(p3.lng) - rad(p1.lng) ) * Math.sin( rad(p2.lat)) + } + + area = area * RADIUS * RADIUS / 2 + } + + return Math.abs(area) + } + /** + * Handles the init hook for polylines and circles. + * Implements the showOnHover functionality if called for. + */ + var addInitHook = function() { + var showOnHover = this.options.measurementOptions && this.options.measurementOptions.showOnHover + if (this.options.showMeasurements && !showOnHover) { + this.showMeasurements() + } + if (this.options.showMeasurements && showOnHover) { + this.on('mouseover', function() { + this.showMeasurements() + }) + this.on('mouseout', function() { + this.hideMeasurements() + }) + } + } + + var circleArea = function circleArea(d) { + var rho = d / RADIUS + return 2 * Math.PI * RADIUS * RADIUS * (1 - Math.cos(rho)) + } + + var override = function(method, fn, hookAfter) { + if (!hookAfter) { + return function() { + var originalReturnValue = method.apply(this, arguments) + var args = Array.prototype.slice.call(arguments) + args.push(originalReturnValue) + return fn.apply(this, args) + } + } else { + return function() { + fn.apply(this, arguments) + return method.apply(this, arguments) + } + } + } + + L.Polyline.include({ + showMeasurements: function(options) { + if (!this._map || this._measurementLayer) return this + + this._measurementOptions = L.extend({ + showOnHover: (options && options.showOnHover) || false, + minPixelDistance: 30, + showDistances: true, + showArea: true, + showTotalDistance: true, + lang: { + totalLength: 'Total length', + totalArea: 'Total area', + segmentLength: 'Segment length' + } + }, options || {}) + + this._measurementLayer = L.layerGroup().addTo(this._map) + this.updateMeasurements() + + this._map.on('zoomend', this.updateMeasurements, this) + + return this + }, + + hideMeasurements: function() { + if (!this._map) return this + + this._map.off('zoomend', this.updateMeasurements, this) + + if (!this._measurementLayer) return this + this._map.removeLayer(this._measurementLayer) + this._measurementLayer = null + + return this + }, + + onAdd: override(L.Polyline.prototype.onAdd, function(originalReturnValue) { + var showOnHover = this.options.measurementOptions && this.options.measurementOptions.showOnHover + if (this.options.showMeasurements && !showOnHover) { + this.showMeasurements(this.options.measurementOptions) + } + + return originalReturnValue + }), + + onRemove: override(L.Polyline.prototype.onRemove, function(originalReturnValue) { + this.hideMeasurements() + + return originalReturnValue + }, true), + + setLatLngs: override(L.Polyline.prototype.setLatLngs, function(originalReturnValue) { + this.updateMeasurements() + + return originalReturnValue + }), + + spliceLatLngs: override(L.Polyline.prototype.spliceLatLngs, function(originalReturnValue) { + this.updateMeasurements() + + return originalReturnValue + }), + + formatDistance: formatDistance, + formatArea: formatArea, + + updateMeasurements: function() { + if (!this._measurementLayer) return this + + var latLngs = this.getLatLngs(), + isPolygon = this instanceof L.Polygon, + options = this._measurementOptions, + totalDist = 0, + formatter, + ll1, + ll2, + p1, + p2, + pixelDist, + dist + + if (latLngs && latLngs.length && L.Util.isArray(latLngs[0])) { + // Outer ring is stored as an array in the first element, + // use that instead. + latLngs = latLngs[0] + } + + this._measurementLayer.clearLayers() + + if (this._measurementOptions.showDistances && latLngs.length > 1) { + formatter = this._measurementOptions.formatDistance || L.bind(this.formatDistance, this) + + for (var i = 1, len = latLngs.length; (isPolygon && i <= len) || i < len; i++) { + ll1 = latLngs[i - 1] + ll2 = latLngs[i % len] + dist = ll1.distanceTo(ll2) + totalDist += dist + + p1 = this._map.latLngToLayerPoint(ll1) + p2 = this._map.latLngToLayerPoint(ll2) + + pixelDist = p1.distanceTo(p2) + + if (pixelDist >= options.minPixelDistance) { + L.marker.measurement( + this._map.layerPointToLatLng([(p1.x + p2.x) / 2, (p1.y + p2.y) / 2]), + formatter(dist), options.lang.segmentLength, this._getRotation(ll1, ll2), options) + .addTo(this._measurementLayer) + } + } + + // Show total length for polylines + if (!isPolygon && this._measurementOptions.showTotalDistance) { + L.marker.measurement(ll2, formatter(totalDist), options.lang.totalLength, 0, options) + .addTo(this._measurementLayer) + } + } + + if (isPolygon && options.showArea && latLngs.length > 2) { + formatter = options.formatArea || L.bind(this.formatArea, this) + var area = ringArea(latLngs) + L.marker.measurement(this.getBounds().getCenter(), + formatter(area), options.lang.totalArea, 0, options) + .addTo(this._measurementLayer) + } + + return this + }, + + _getRotation: function(ll1, ll2) { + var p1 = this._map.project(ll1), + p2 = this._map.project(ll2) + + return Math.atan((p2.y - p1.y) / (p2.x - p1.x)) + } + }) + + L.Polyline.addInitHook(function() { + addInitHook.call(this) + }) + + L.Circle.include({ + showMeasurements: function(options) { + if (!this._map || this._measurementLayer) return this + + this._measurementOptions = L.extend({ + showOnHover: false, + showArea: true, + lang: { + totalArea: 'Total area', + } + }, options || {}) + + this._measurementLayer = L.layerGroup().addTo(this._map) + this.updateMeasurements() + + this._map.on('zoomend', this.updateMeasurements, this) + + return this + }, + + hideMeasurements: function() { + if (!this._map) return this + + this._map.on('zoomend', this.updateMeasurements, this) + + if (!this._measurementLayer) return this + this._map.removeLayer(this._measurementLayer) + this._measurementLayer = null + + return this + }, + + onAdd: override(L.Circle.prototype.onAdd, function(originalReturnValue) { + var showOnHover = this.options.measurementOptions && this.options.measurementOptions.showOnHover + if (this.options.showMeasurements && !showOnHover) { + this.showMeasurements(this.options.measurementOptions) + } + + return originalReturnValue + }), + + onRemove: override(L.Circle.prototype.onRemove, function(originalReturnValue) { + this.hideMeasurements() + + return originalReturnValue + }, true), + + setLatLng: override(L.Circle.prototype.setLatLng, function(originalReturnValue) { + this.updateMeasurements() + + return originalReturnValue + }), + + setRadius: override(L.Circle.prototype.setRadius, function(originalReturnValue) { + this.updateMeasurements() + + return originalReturnValue + }), + + formatArea: formatArea, + + updateMeasurements: function() { + if (!this._measurementLayer) return + + var latLng = this.getLatLng(), + options = this._measurementOptions, + formatter = options.formatArea || L.bind(this.formatArea, this) + + this._measurementLayer.clearLayers() + + if (options.showArea) { + formatter = options.formatArea || L.bind(this.formatArea, this) + var area = circleArea(this.getRadius()) + L.marker.measurement(latLng, + formatter(area), options.lang.totalArea, 0, options) + .addTo(this._measurementLayer) + } + } + }) + + L.Circle.addInitHook(function() { + addInitHook.call(this) + }) })() \ No newline at end of file -- Gitblit v1.8.0