diff --git a/dist/esri-leaflet-renderers-debug.js b/dist/esri-leaflet-renderers-debug.js new file mode 100644 index 0000000..3ec36fc --- /dev/null +++ b/dist/esri-leaflet-renderers-debug.js @@ -0,0 +1,1188 @@ +/* esri-leaflet-renderers - v2.1.2 - Mon Jul 06 2020 10:11:07 GMT-0500 (Central Daylight Time) + * Copyright (c) 2020 Environmental Systems Research Institute, Inc. + * Apache-2.0 */ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('leaflet'), require('esri-leaflet'), require('esri-leaflet-cluster')) : + typeof define === 'function' && define.amd ? define(['exports', 'leaflet', 'esri-leaflet', 'esri-leaflet-cluster'], factory) : + (global = global || self, factory((global.L = global.L || {}, global.L.esri = global.L.esri || {}, global.L.esri.Renderers = {}), global.L, global.L.esri, global.L.esri.Cluster)); +}(this, (function (exports, L, EsriLeaflet, EsriLeafletCluster) { 'use strict'; + + var L__default = 'default' in L ? L['default'] : L; + + var version = "2.1.2"; + + var Symbol = L.Class.extend({ + initialize: function (symbolJson, options) { + this._symbolJson = symbolJson; + this.val = null; + this._styles = {}; + this._isDefault = false; + this._layerTransparency = 1; + if (options && options.layerTransparency) { + this._layerTransparency = 1 - (options.layerTransparency / 100.0); + } + }, + + // the geojson values returned are in points + pixelValue: function (pointValue) { + return pointValue * 1.333; + }, + + // color is an array [r,g,b,a] + colorValue: function (color) { + return 'rgb(' + color[0] + ',' + color[1] + ',' + color[2] + ')'; + }, + + alphaValue: function (color) { + var alpha = color[3] / 255.0; + return alpha * this._layerTransparency; + }, + + getSize: function (feature, sizeInfo) { + var attr = feature.properties; + var field = sizeInfo.field; + var size = 0; + var featureValue = null; + + if (field) { + featureValue = attr[field]; + var minSize = sizeInfo.minSize; + var maxSize = sizeInfo.maxSize; + var minDataValue = sizeInfo.minDataValue; + var maxDataValue = sizeInfo.maxDataValue; + var featureRatio; + var normField = sizeInfo.normalizationField; + var normValue = attr ? parseFloat(attr[normField]) : undefined; + + if (featureValue === null || (normField && ((isNaN(normValue) || normValue === 0)))) { + return null; + } + + if (!isNaN(normValue)) { + featureValue /= normValue; + } + + if (minSize !== null && maxSize !== null && minDataValue !== null && maxDataValue !== null) { + if (featureValue <= minDataValue) { + size = minSize; + } else if (featureValue >= maxDataValue) { + size = maxSize; + } else { + featureRatio = (featureValue - minDataValue) / (maxDataValue - minDataValue); + size = minSize + (featureRatio * (maxSize - minSize)); + } + } + size = isNaN(size) ? 0 : size; + } + return size; + }, + + getColor: function (feature, colorInfo) { + // required information to get color + if (!(feature.properties && colorInfo && colorInfo.field && colorInfo.stops)) { + return null; + } + + var attr = feature.properties; + var featureValue = attr[colorInfo.field]; + var lowerBoundColor, upperBoundColor, lowerBound, upperBound; + var normField = colorInfo.normalizationField; + var normValue = attr ? parseFloat(attr[normField]) : undefined; + if (featureValue === null || (normField && ((isNaN(normValue) || normValue === 0)))) { + return null; + } + + if (!isNaN(normValue)) { + featureValue /= normValue; + } + + if (featureValue <= colorInfo.stops[0].value) { + return colorInfo.stops[0].color; + } + var lastStop = colorInfo.stops[colorInfo.stops.length - 1]; + if (featureValue >= lastStop.value) { + return lastStop.color; + } + + // go through the stops to find min and max + for (var i = 0; i < colorInfo.stops.length; i++) { + var stopInfo = colorInfo.stops[i]; + + if (stopInfo.value <= featureValue) { + lowerBoundColor = stopInfo.color; + lowerBound = stopInfo.value; + } else if (stopInfo.value > featureValue) { + upperBoundColor = stopInfo.color; + upperBound = stopInfo.value; + break; + } + } + + // feature falls between two stops, interplate the colors + if (!isNaN(lowerBound) && !isNaN(upperBound)) { + var range = upperBound - lowerBound; + if (range > 0) { + // more weight the further it is from the lower bound + var upperBoundColorWeight = (featureValue - lowerBound) / range; + if (upperBoundColorWeight) { + // more weight the further it is from the upper bound + var lowerBoundColorWeight = (upperBound - featureValue) / range; + if (lowerBoundColorWeight) { + // interpolate the lower and upper bound color by applying the + // weights to each of the rgba colors and adding them together + var interpolatedColor = []; + for (var j = 0; j < 4; j++) { + interpolatedColor[j] = Math.round((lowerBoundColor[j] * lowerBoundColorWeight) + (upperBoundColor[j] * upperBoundColorWeight)); + } + return interpolatedColor; + } else { + // no difference between featureValue and upperBound, 100% of upperBoundColor + return upperBoundColor; + } + } else { + // no difference between featureValue and lowerBound, 100% of lowerBoundColor + return lowerBoundColor; + } + } + } + // if we get to here, none of the cases apply so return null + return null; + } + }); + + var ShapeMarker = L__default.Path.extend({ + + initialize: function (latlng, size, options) { + L__default.setOptions(this, options); + this._size = size; + this._latlng = L__default.latLng(latlng); + this._svgCanvasIncludes(); + }, + + toGeoJSON: function () { + return L__default.GeoJSON.getFeature(this, { + type: 'Point', + coordinates: L__default.GeoJSON.latLngToCoords(this.getLatLng()) + }); + }, + + _svgCanvasIncludes: function () { + // implement in sub class + }, + + _project: function () { + this._point = this._map.latLngToLayerPoint(this._latlng); + }, + + _update: function () { + if (this._map) { + this._updatePath(); + } + }, + + _updatePath: function () { + // implement in sub class + }, + + setLatLng: function (latlng) { + this._latlng = L__default.latLng(latlng); + this.redraw(); + return this.fire('move', {latlng: this._latlng}); + }, + + getLatLng: function () { + return this._latlng; + }, + + setSize: function (size) { + this._size = size; + return this.redraw(); + }, + + getSize: function () { + return this._size; + } + }); + + var CrossMarker = ShapeMarker.extend({ + + initialize: function (latlng, size, options) { + ShapeMarker.prototype.initialize.call(this, latlng, size, options); + }, + + _updatePath: function () { + this._renderer._updateCrossMarker(this); + }, + + _svgCanvasIncludes: function () { + L__default.Canvas.include({ + _updateCrossMarker: function (layer) { + var latlng = layer._point; + var offset = layer._size / 2.0; + var ctx = this._ctx; + + ctx.beginPath(); + ctx.moveTo(latlng.x, latlng.y + offset); + ctx.lineTo(latlng.x, latlng.y - offset); + this._fillStroke(ctx, layer); + + ctx.moveTo(latlng.x - offset, latlng.y); + ctx.lineTo(latlng.x + offset, latlng.y); + this._fillStroke(ctx, layer); + } + }); + + L__default.SVG.include({ + _updateCrossMarker: function (layer) { + var latlng = layer._point; + var offset = layer._size / 2.0; + + if (L__default.Browser.vml) { + latlng._round(); + offset = Math.round(offset); + } + + var str = 'M' + latlng.x + ',' + (latlng.y + offset) + + 'L' + latlng.x + ',' + (latlng.y - offset) + + 'M' + (latlng.x - offset) + ',' + latlng.y + + 'L' + (latlng.x + offset) + ',' + latlng.y; + + this._setPath(layer, str); + } + }); + } + }); + + var crossMarker = function (latlng, size, options) { + return new CrossMarker(latlng, size, options); + }; + + var XMarker = ShapeMarker.extend({ + + initialize: function (latlng, size, options) { + ShapeMarker.prototype.initialize.call(this, latlng, size, options); + }, + + _updatePath: function () { + this._renderer._updateXMarker(this); + }, + + _svgCanvasIncludes: function () { + L__default.Canvas.include({ + _updateXMarker: function (layer) { + var latlng = layer._point; + var offset = layer._size / 2.0; + var ctx = this._ctx; + + ctx.beginPath(); + + ctx.moveTo(latlng.x + offset, latlng.y + offset); + ctx.lineTo(latlng.x - offset, latlng.y - offset); + this._fillStroke(ctx, layer); + } + }); + + L__default.SVG.include({ + _updateXMarker: function (layer) { + var latlng = layer._point; + var offset = layer._size / 2.0; + + if (L__default.Browser.vml) { + latlng._round(); + offset = Math.round(offset); + } + + var str = 'M' + (latlng.x + offset) + ',' + (latlng.y + offset) + + 'L' + (latlng.x - offset) + ',' + (latlng.y - offset) + + 'M' + (latlng.x - offset) + ',' + (latlng.y + offset) + + 'L' + (latlng.x + offset) + ',' + (latlng.y - offset); + + this._setPath(layer, str); + } + }); + } + }); + + var xMarker = function (latlng, size, options) { + return new XMarker(latlng, size, options); + }; + + var SquareMarker = ShapeMarker.extend({ + options: { + fill: true + }, + + initialize: function (latlng, size, options) { + ShapeMarker.prototype.initialize.call(this, latlng, size, options); + }, + + _updatePath: function () { + this._renderer._updateSquareMarker(this); + }, + + _svgCanvasIncludes: function () { + L__default.Canvas.include({ + _updateSquareMarker: function (layer) { + var latlng = layer._point; + var offset = layer._size / 2.0; + var ctx = this._ctx; + + ctx.beginPath(); + + ctx.moveTo(latlng.x + offset, latlng.y + offset); + ctx.lineTo(latlng.x - offset, latlng.y + offset); + ctx.lineTo(latlng.x - offset, latlng.y - offset); + ctx.lineTo(latlng.x + offset, latlng.y - offset); + + ctx.closePath(); + + this._fillStroke(ctx, layer); + } + }); + + L__default.SVG.include({ + _updateSquareMarker: function (layer) { + var latlng = layer._point; + var offset = layer._size / 2.0; + + if (L__default.Browser.vml) { + latlng._round(); + offset = Math.round(offset); + } + + var str = 'M' + (latlng.x + offset) + ',' + (latlng.y + offset) + + 'L' + (latlng.x - offset) + ',' + (latlng.y + offset) + + 'L' + (latlng.x - offset) + ',' + (latlng.y - offset) + + 'L' + (latlng.x + offset) + ',' + (latlng.y - offset); + + str = str + (L__default.Browser.svg ? 'z' : 'x'); + + this._setPath(layer, str); + } + }); + } + }); + + var squareMarker = function (latlng, size, options) { + return new SquareMarker(latlng, size, options); + }; + + var DiamondMarker = ShapeMarker.extend({ + options: { + fill: true + }, + + initialize: function (latlng, size, options) { + ShapeMarker.prototype.initialize.call(this, latlng, size, options); + }, + + _updatePath: function () { + this._renderer._updateDiamondMarker(this); + }, + + _svgCanvasIncludes: function () { + L__default.Canvas.include({ + _updateDiamondMarker: function (layer) { + var latlng = layer._point; + var offset = layer._size / 2.0; + var ctx = this._ctx; + + ctx.beginPath(); + + ctx.moveTo(latlng.x, latlng.y + offset); + ctx.lineTo(latlng.x - offset, latlng.y); + ctx.lineTo(latlng.x, latlng.y - offset); + ctx.lineTo(latlng.x + offset, latlng.y); + + ctx.closePath(); + + this._fillStroke(ctx, layer); + } + }); + + L__default.SVG.include({ + _updateDiamondMarker: function (layer) { + var latlng = layer._point; + var offset = layer._size / 2.0; + + if (L__default.Browser.vml) { + latlng._round(); + offset = Math.round(offset); + } + + var str = 'M' + latlng.x + ',' + (latlng.y + offset) + + 'L' + (latlng.x - offset) + ',' + latlng.y + + 'L' + latlng.x + ',' + (latlng.y - offset) + + 'L' + (latlng.x + offset) + ',' + latlng.y; + + str = str + (L__default.Browser.svg ? 'z' : 'x'); + + this._setPath(layer, str); + } + }); + } + }); + + var diamondMarker = function (latlng, size, options) { + return new DiamondMarker(latlng, size, options); + }; + + var PointSymbol = Symbol.extend({ + + statics: { + MARKERTYPES: ['esriSMSCircle', 'esriSMSCross', 'esriSMSDiamond', 'esriSMSSquare', 'esriSMSX', 'esriPMS'] + }, + + initialize: function (symbolJson, options) { + var url; + Symbol.prototype.initialize.call(this, symbolJson, options); + if (options) { + this.serviceUrl = options.url; + } + if (symbolJson) { + if (symbolJson.type === 'esriPMS') { + var imageUrl = this._symbolJson.url; + if ((imageUrl && imageUrl.substr(0, 7) === 'http://') || (imageUrl.substr(0, 8) === 'https://')) { + // web image + url = this.sanitize(imageUrl); + this._iconUrl = url; + } else { + url = this.serviceUrl + 'images/' + imageUrl; + this._iconUrl = options && options.token ? url + '?token=' + options.token : url; + } + if (symbolJson.imageData) { + this._iconUrl = 'data:' + symbolJson.contentType + ';base64,' + symbolJson.imageData; + } + // leaflet does not allow resizing icons so keep a hash of different + // icon sizes to try and keep down on the number of icons created + this._icons = {}; + // create base icon + this.icon = this._createIcon(this._symbolJson); + } else { + this._fillStyles(); + } + } + }, + + // prevent html injection in strings + sanitize: function (str) { + if (!str) { + return ''; + } + var text; + try { + // removes html but leaves url link text + text = str.replace(/
/gi, '\n'); + text = text.replace(//gi, '\n'); + text = text.replace(/(.*?)<\/a>/gi, ' $2 ($1) '); + text = text.replace(/<(?:.|\s)*?>/g, ''); + } catch (ex) { + text = null; + } + return text; + }, + + _fillStyles: function () { + if (this._symbolJson.outline && this._symbolJson.size > 0 && this._symbolJson.outline.style !== 'esriSLSNull') { + this._styles.stroke = true; + this._styles.weight = this.pixelValue(this._symbolJson.outline.width); + this._styles.color = this.colorValue(this._symbolJson.outline.color); + this._styles.opacity = this.alphaValue(this._symbolJson.outline.color); + } else { + this._styles.stroke = false; + } + if (this._symbolJson.color) { + this._styles.fillColor = this.colorValue(this._symbolJson.color); + this._styles.fillOpacity = this.alphaValue(this._symbolJson.color); + } else { + this._styles.fillOpacity = 0; + } + + if (this._symbolJson.style === 'esriSMSCircle') { + this._styles.radius = this.pixelValue(this._symbolJson.size) / 2.0; + } + }, + + _createIcon: function (options) { + var width = this.pixelValue(options.width); + var height = width; + if (options.height) { + height = this.pixelValue(options.height); + } + var xOffset = width / 2.0; + var yOffset = height / 2.0; + + if (options.xoffset) { + xOffset += this.pixelValue(options.xoffset); + } + if (options.yoffset) { + yOffset += this.pixelValue(options.yoffset); + } + + var icon = L.icon({ + iconUrl: this._iconUrl, + iconSize: [width, height], + iconAnchor: [xOffset, yOffset] + }); + this._icons[options.width.toString()] = icon; + return icon; + }, + + _getIcon: function (size) { + // check to see if it is already created by size + var icon = this._icons[size.toString()]; + if (!icon) { + icon = this._createIcon({width: size}); + } + return icon; + }, + + pointToLayer: function (geojson, latlng, visualVariables, options) { + var size = this._symbolJson.size || this._symbolJson.width; + if (!this._isDefault) { + if (visualVariables.sizeInfo) { + var calculatedSize = this.getSize(geojson, visualVariables.sizeInfo); + if (calculatedSize) { + size = calculatedSize; + } + } + if (visualVariables.colorInfo) { + var color = this.getColor(geojson, visualVariables.colorInfo); + if (color) { + this._styles.fillColor = this.colorValue(color); + this._styles.fillOpacity = this.alphaValue(color); + } + } + } + + if (this._symbolJson.type === 'esriPMS') { + var layerOptions = L.extend({}, {icon: this._getIcon(size)}, options); + return L.marker(latlng, layerOptions); + } + size = this.pixelValue(size); + + switch (this._symbolJson.style) { + case 'esriSMSSquare': + return squareMarker(latlng, size, L.extend({}, this._styles, options)); + case 'esriSMSDiamond': + return diamondMarker(latlng, size, L.extend({}, this._styles, options)); + case 'esriSMSCross': + return crossMarker(latlng, size, L.extend({}, this._styles, options)); + case 'esriSMSX': + return xMarker(latlng, size, L.extend({}, this._styles, options)); + } + this._styles.radius = size / 2.0; + return L.circleMarker(latlng, L.extend({}, this._styles, options)); + } + }); + + function pointSymbol (symbolJson, options) { + return new PointSymbol(symbolJson, options); + } + + var LineSymbol = Symbol.extend({ + statics: { + // Not implemented 'esriSLSNull' + LINETYPES: ['esriSLSDash', 'esriSLSDot', 'esriSLSDashDotDot', 'esriSLSDashDot', 'esriSLSSolid'] + }, + initialize: function (symbolJson, options) { + Symbol.prototype.initialize.call(this, symbolJson, options); + this._fillStyles(); + }, + + _fillStyles: function () { + // set the defaults that show up on arcgis online + this._styles.lineCap = 'butt'; + this._styles.lineJoin = 'miter'; + this._styles.fill = false; + this._styles.weight = 0; + + if (!this._symbolJson) { + return this._styles; + } + + if (this._symbolJson.color) { + this._styles.color = this.colorValue(this._symbolJson.color); + this._styles.opacity = this.alphaValue(this._symbolJson.color); + } + + if (!isNaN(this._symbolJson.width)) { + this._styles.weight = this.pixelValue(this._symbolJson.width); + + var dashValues = []; + + switch (this._symbolJson.style) { + case 'esriSLSDash': + dashValues = [4, 3]; + break; + case 'esriSLSDot': + dashValues = [1, 3]; + break; + case 'esriSLSDashDot': + dashValues = [8, 3, 1, 3]; + break; + case 'esriSLSDashDotDot': + dashValues = [8, 3, 1, 3, 1, 3]; + break; + } + + // use the dash values and the line weight to set dash array + if (dashValues.length > 0) { + for (var i = 0; i < dashValues.length; i++) { + dashValues[i] *= this._styles.weight; + } + + this._styles.dashArray = dashValues.join(','); + } + } + }, + + style: function (feature, visualVariables) { + if (!this._isDefault && visualVariables) { + if (visualVariables.sizeInfo) { + var calculatedSize = this.pixelValue(this.getSize(feature, visualVariables.sizeInfo)); + if (calculatedSize) { + this._styles.weight = calculatedSize; + } + } + if (visualVariables.colorInfo) { + var color = this.getColor(feature, visualVariables.colorInfo); + if (color) { + this._styles.color = this.colorValue(color); + this._styles.opacity = this.alphaValue(color); + } + } + } + return this._styles; + } + }); + + function lineSymbol (symbolJson, options) { + return new LineSymbol(symbolJson, options); + } + + var PolygonSymbol = Symbol.extend({ + statics: { + // not implemented: 'esriSFSBackwardDiagonal','esriSFSCross','esriSFSDiagonalCross','esriSFSForwardDiagonal','esriSFSHorizontal','esriSFSNull','esriSFSVertical' + POLYGONTYPES: ['esriSFSSolid'] + }, + initialize: function (symbolJson, options) { + Symbol.prototype.initialize.call(this, symbolJson, options); + if (symbolJson) { + if (symbolJson.outline && symbolJson.outline.style === 'esriSLSNull') { + this._lineStyles = { weight: 0 }; + } else { + this._lineStyles = lineSymbol(symbolJson.outline, options).style(); + } + this._fillStyles(); + } + }, + + _fillStyles: function () { + if (this._lineStyles) { + if (this._lineStyles.weight === 0) { + // when weight is 0, setting the stroke to false can still look bad + // (gaps between the polygons) + this._styles.stroke = false; + } else { + // copy the line symbol styles into this symbol's styles + for (var styleAttr in this._lineStyles) { + this._styles[styleAttr] = this._lineStyles[styleAttr]; + } + } + } + + // set the fill for the polygon + if (this._symbolJson) { + if (this._symbolJson.color && + // don't fill polygon if type is not supported + PolygonSymbol.POLYGONTYPES.indexOf(this._symbolJson.style >= 0)) { + this._styles.fill = true; + this._styles.fillColor = this.colorValue(this._symbolJson.color); + this._styles.fillOpacity = this.alphaValue(this._symbolJson.color); + } else { + this._styles.fill = false; + this._styles.fillOpacity = 0; + } + } + }, + + style: function (feature, visualVariables) { + if (!this._isDefault && visualVariables && visualVariables.colorInfo) { + var color = this.getColor(feature, visualVariables.colorInfo); + if (color) { + this._styles.fillColor = this.colorValue(color); + this._styles.fillOpacity = this.alphaValue(color); + } + } + return this._styles; + } + }); + + function polygonSymbol (symbolJson, options) { + return new PolygonSymbol(symbolJson, options); + } + + var Renderer = L.Class.extend({ + options: { + proportionalPolygon: false, + clickable: true + }, + + initialize: function (rendererJson, options) { + this._rendererJson = rendererJson; + this._pointSymbols = false; + this._symbols = []; + this._visualVariables = this._parseVisualVariables(rendererJson.visualVariables); + L.Util.setOptions(this, options); + }, + + _parseVisualVariables: function (visualVariables) { + var visVars = {}; + if (visualVariables) { + for (var i = 0; i < visualVariables.length; i++) { + visVars[visualVariables[i].type] = visualVariables[i]; + } + } + return visVars; + }, + + _createDefaultSymbol: function () { + if (this._rendererJson.defaultSymbol) { + this._defaultSymbol = this._newSymbol(this._rendererJson.defaultSymbol); + this._defaultSymbol._isDefault = true; + } + }, + + _newSymbol: function (symbolJson) { + if (symbolJson.type === 'esriSMS' || symbolJson.type === 'esriPMS') { + this._pointSymbols = true; + return pointSymbol(symbolJson, this.options); + } + if (symbolJson.type === 'esriSLS') { + return lineSymbol(symbolJson, this.options); + } + if (symbolJson.type === 'esriSFS') { + return polygonSymbol(symbolJson, this.options); + } + }, + + _getSymbol: function () { + // override + }, + + attachStylesToLayer: function (layer) { + if (this._pointSymbols) { + layer.options.pointToLayer = L.Util.bind(this.pointToLayer, this); + } else { + layer.options.style = L.Util.bind(this.style, this); + layer._originalStyle = layer.options.style; + } + }, + + pointToLayer: function (geojson, latlng) { + var sym = this._getSymbol(geojson); + if (sym && sym.pointToLayer) { + // right now custom panes are the only option pushed through + return sym.pointToLayer(geojson, latlng, this._visualVariables, this.options); + } + // invisible symbology + return L.circleMarker(latlng, {radius: 0, opacity: 0}); + }, + + style: function (feature) { + var userStyles; + if (this.options.userDefinedStyle) { + userStyles = this.options.userDefinedStyle(feature); + } + // find the symbol to represent this feature + var sym = this._getSymbol(feature); + if (sym) { + return this.mergeStyles(sym.style(feature, this._visualVariables), userStyles); + } else { + // invisible symbology + return this.mergeStyles({opacity: 0, fillOpacity: 0}, userStyles); + } + }, + + mergeStyles: function (styles, userStyles) { + var mergedStyles = {}; + var attr; + // copy renderer style attributes + for (attr in styles) { + if (styles.hasOwnProperty(attr)) { + mergedStyles[attr] = styles[attr]; + } + } + // override with user defined style attributes + if (userStyles) { + for (attr in userStyles) { + if (userStyles.hasOwnProperty(attr)) { + mergedStyles[attr] = userStyles[attr]; + } + } + } + return mergedStyles; + } + }); + + var SimpleRenderer = Renderer.extend({ + initialize: function (rendererJson, options) { + Renderer.prototype.initialize.call(this, rendererJson, options); + this._createSymbol(); + }, + + _createSymbol: function () { + if (this._rendererJson.symbol) { + this._symbols.push(this._newSymbol(this._rendererJson.symbol)); + } + }, + + _getSymbol: function () { + return this._symbols[0]; + } + }); + + function simpleRenderer (rendererJson, options) { + return new SimpleRenderer(rendererJson, options); + } + + var ClassBreaksRenderer = Renderer.extend({ + initialize: function (rendererJson, options) { + Renderer.prototype.initialize.call(this, rendererJson, options); + this._field = this._rendererJson.field; + if (this._rendererJson.normalizationType && this._rendererJson.normalizationType === 'esriNormalizeByField') { + this._normalizationField = this._rendererJson.normalizationField; + } + this._createSymbols(); + }, + + _createSymbols: function () { + var symbol; + var classbreaks = this._rendererJson.classBreakInfos; + + this._symbols = []; + + // create a symbol for each class break + for (var i = classbreaks.length - 1; i >= 0; i--) { + if (this.options.proportionalPolygon && this._rendererJson.backgroundFillSymbol) { + symbol = this._newSymbol(this._rendererJson.backgroundFillSymbol); + } else { + symbol = this._newSymbol(classbreaks[i].symbol); + } + symbol.val = classbreaks[i].classMaxValue; + this._symbols.push(symbol); + } + // sort the symbols in ascending value + this._symbols.sort(function (a, b) { + return a.val > b.val ? 1 : -1; + }); + this._createDefaultSymbol(); + this._maxValue = this._symbols[this._symbols.length - 1].val; + }, + + _getSymbol: function (feature) { + var val = feature.properties[this._field]; + if (this._normalizationField) { + var normValue = feature.properties[this._normalizationField]; + if (!isNaN(normValue) && normValue !== 0) { + val = val / normValue; + } else { + return this._defaultSymbol; + } + } + + if (val > this._maxValue) { + return this._defaultSymbol; + } + var symbol = this._symbols[0]; + for (var i = this._symbols.length - 1; i >= 0; i--) { + if (val > this._symbols[i].val) { + break; + } + symbol = this._symbols[i]; + } + return symbol; + } + }); + + function classBreaksRenderer (rendererJson, options) { + return new ClassBreaksRenderer(rendererJson, options); + } + + var UniqueValueRenderer = Renderer.extend({ + initialize: function (rendererJson, options) { + Renderer.prototype.initialize.call(this, rendererJson, options); + this._field = this._rendererJson.field1; + this._createSymbols(); + }, + + _createSymbols: function () { + var symbol; + var uniques = this._rendererJson.uniqueValueInfos; + + // create a symbol for each unique value + for (var i = uniques.length - 1; i >= 0; i--) { + symbol = this._newSymbol(uniques[i].symbol); + symbol.val = uniques[i].value; + this._symbols.push(symbol); + } + this._createDefaultSymbol(); + }, + + _getSymbol: function (feature) { + var val = feature.properties[this._field]; + // accumulate values if there is more than one field defined + if (this._rendererJson.fieldDelimiter && this._rendererJson.field2) { + var val2 = feature.properties[this._rendererJson.field2]; + if (val2) { + val += this._rendererJson.fieldDelimiter + val2; + var val3 = feature.properties[this._rendererJson.field3]; + if (val3) { + val += this._rendererJson.fieldDelimiter + val3; + } + } + } + + var symbol = this._defaultSymbol; + for (var i = this._symbols.length - 1; i >= 0; i--) { + // using the === operator does not work if the field + // of the unique renderer is not a string + /*eslint-disable */ + if (this._symbols[i].val == val) { + symbol = this._symbols[i]; + } + /*eslint-enable */ + } + return symbol; + } + }); + + function uniqueValueRenderer (rendererJson, options) { + return new UniqueValueRenderer(rendererJson, options); + } + + function wireUpRenderers () { + if (this.options.ignoreRenderer) { + return; + } + var oldOnAdd = L.Util.bind(this.onAdd, this); + var oldUnbindPopup = L.Util.bind(this.unbindPopup, this); + var oldOnRemove = L.Util.bind(this.onRemove, this); + + L.Util.bind(this.createNewLayer, this); + + this.onAdd = function (map) { + this.metadata(function (error, response) { + if (error) { + console.warn('failed to load metadata from the service.'); + return; + } if (response && response.drawingInfo) { + if (this.options.drawingInfo) { + // allow L.esri.webmap (and others) to override service symbology with info provided in layer constructor + response.drawingInfo = this.options.drawingInfo; + } + + // the default pane for lines and polygons is 'overlayPane', for points it is 'markerPane' + if (this.options.pane === 'overlayPane' && response.geometryType === 'esriGeometryPoint') { + this.options.pane = 'markerPane'; + } + + this._setRenderers(response); + oldOnAdd(map); + this._addPointLayer(map); + } + }, this); + }; + + this.onRemove = function (map) { + oldOnRemove(map); + if (this._pointLayer) { + var pointLayers = this._pointLayer.getLayers(); + for (var i in pointLayers) { + map.removeLayer(pointLayers[i]); + } + } + }; + + this.unbindPopup = function () { + oldUnbindPopup(); + if (this._pointLayer) { + var pointLayers = this._pointLayer.getLayers(); + for (var i in pointLayers) { + pointLayers[i].unbindPopup(); + } + } + }; + + this._addPointLayer = function (map) { + if (this._pointLayer) { + this._pointLayer.addTo(map); + this._pointLayer.bringToFront(); + } + }; + + this._createPointLayer = function () { + if (!this._pointLayer) { + this._pointLayer = L.geoJson(); + // store the feature ids that have already been added to the map + this._pointLayerIds = {}; + + if (this._popup) { + var popupFunction = function (feature, layer) { + layer.bindPopup(this._popup(feature, layer), this._popupOptions); + }; + this._pointLayer.options.onEachFeature = L.Util.bind(popupFunction, this); + } + } + }; + + this.createNewLayer = function (geojson) { + var fLayer = L.GeoJSON.geometryToLayer(geojson, this.options); + + // add a point layer when the polygon is represented as proportional marker symbols + if (this._hasProportionalSymbols) { + var centroid = this.getPolygonCentroid(geojson.geometry.coordinates); + if (!(isNaN(centroid[0]) || isNaN(centroid[0]))) { + this._createPointLayer(); + + var featureId = geojson.id.toString(); + // only add the feature if it does not already exist on the map + if (!this._pointLayerIds[featureId]) { + var pointjson = this.getPointJson(geojson, centroid); + + this._pointLayer.addData(pointjson); + this._pointLayerIds[featureId] = true; + } + + this._pointLayer.bringToFront(); + } + } + return fLayer; + }; + + this.getPolygonCentroid = function (coordinates) { + var pts = coordinates[0][0]; + if (pts.length === 2) { + pts = coordinates[0]; + } + + var twicearea = 0; + var x = 0; + var y = 0; + var nPts = pts.length; + var p1; + var p2; + var f; + + for (var i = 0, j = nPts - 1; i < nPts; j = i++) { + p1 = pts[i]; p2 = pts[j]; + twicearea += p1[0] * p2[1]; + twicearea -= p1[1] * p2[0]; + f = (p1[0] * p2[1]) - (p2[0] * p1[1]); + x += (p1[0] + p2[0]) * f; + y += (p1[1] + p2[1]) * f; + } + f = twicearea * 3; + return [x / f, y / f]; + }; + + this.getPointJson = function (geojson, centroid) { + return { + type: 'Feature', + properties: geojson.properties, + id: geojson.id, + geometry: { + type: 'Point', + coordinates: [centroid[0], centroid[1]] + } + }; + }; + + this._checkForProportionalSymbols = function (geometryType, renderer) { + this._hasProportionalSymbols = false; + if (geometryType === 'esriGeometryPolygon') { + if (renderer.backgroundFillSymbol) { + this._hasProportionalSymbols = true; + } + // check to see if the first symbol in the classbreaks is a marker symbol + if (renderer.classBreakInfos && renderer.classBreakInfos.length) { + var sym = renderer.classBreakInfos[0].symbol; + if (sym && (sym.type === 'esriSMS' || sym.type === 'esriPMS')) { + this._hasProportionalSymbols = true; + } + } + } + }; + + this._setRenderers = function (serviceInfo) { + var rend; + var rendererInfo = serviceInfo.drawingInfo.renderer; + + var options = { + url: this.options.url + }; + + if (this.options.token) { + options.token = this.options.token; + } + + if (this.options.pane) { + options.pane = this.options.pane; + } + + if (serviceInfo.drawingInfo.transparency) { + options.layerTransparency = serviceInfo.drawingInfo.transparency; + } + + if (this.options.style) { + options.userDefinedStyle = this.options.style; + } + + switch (rendererInfo.type) { + case 'classBreaks': + this._checkForProportionalSymbols(serviceInfo.geometryType, rendererInfo); + if (this._hasProportionalSymbols) { + this._createPointLayer(); + var pRend = classBreaksRenderer(rendererInfo, options); + pRend.attachStylesToLayer(this._pointLayer); + options.proportionalPolygon = true; + } + rend = classBreaksRenderer(rendererInfo, options); + break; + case 'uniqueValue': + rend = uniqueValueRenderer(rendererInfo, options); + break; + default: + rend = simpleRenderer(rendererInfo, options); + } + rend.attachStylesToLayer(this); + }; + } + + EsriLeaflet.FeatureLayer.addInitHook(wireUpRenderers); + + if (typeof EsriLeafletCluster !== 'undefined') { + EsriLeafletCluster.FeatureLayer.addInitHook(wireUpRenderers); + } + + exports.ClassBreaksRenderer = ClassBreaksRenderer; + exports.LineSymbol = LineSymbol; + exports.PointSymbol = PointSymbol; + exports.PolygonSymbol = PolygonSymbol; + exports.Renderer = Renderer; + exports.SimpleRenderer = SimpleRenderer; + exports.Symbol = Symbol; + exports.UniqueValueRenderer = UniqueValueRenderer; + exports.VERSION = version; + exports.classBreaksRenderer = classBreaksRenderer; + exports.lineSymbol = lineSymbol; + exports.pointSymbol = pointSymbol; + exports.polygonSymbol = polygonSymbol; + exports.simpleRenderer = simpleRenderer; + exports.uniqueValueRenderer = uniqueValueRenderer; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}))); +//# sourceMappingURL=esri-leaflet-renderers-debug.js.map diff --git a/dist/esri-leaflet-renderers-debug.js.map b/dist/esri-leaflet-renderers-debug.js.map new file mode 100644 index 0000000..3e6371d --- /dev/null +++ b/dist/esri-leaflet-renderers-debug.js.map @@ -0,0 +1 @@ +{"version":3,"file":"esri-leaflet-renderers-debug.js","sources":["../src/Symbols/Symbol.js","../node_modules/leaflet-shape-markers/src/ShapeMarker.js","../node_modules/leaflet-shape-markers/src/CrossMarker.js","../node_modules/leaflet-shape-markers/src/XMarker.js","../node_modules/leaflet-shape-markers/src/SquareMarker.js","../node_modules/leaflet-shape-markers/src/DiamondMarker.js","../src/Symbols/PointSymbol.js","../src/Symbols/LineSymbol.js","../src/Symbols/PolygonSymbol.js","../src/Renderers/Renderer.js","../src/Renderers/SimpleRenderer.js","../src/Renderers/ClassBreaksRenderer.js","../src/Renderers/UniqueValueRenderer.js","../src/FeatureLayerHook.js"],"sourcesContent":["import { Class } from 'leaflet';\r\n\r\nexport var Symbol = Class.extend({\r\n initialize: function (symbolJson, options) {\r\n this._symbolJson = symbolJson;\r\n this.val = null;\r\n this._styles = {};\r\n this._isDefault = false;\r\n this._layerTransparency = 1;\r\n if (options && options.layerTransparency) {\r\n this._layerTransparency = 1 - (options.layerTransparency / 100.0);\r\n }\r\n },\r\n\r\n // the geojson values returned are in points\r\n pixelValue: function (pointValue) {\r\n return pointValue * 1.333;\r\n },\r\n\r\n // color is an array [r,g,b,a]\r\n colorValue: function (color) {\r\n return 'rgb(' + color[0] + ',' + color[1] + ',' + color[2] + ')';\r\n },\r\n\r\n alphaValue: function (color) {\r\n var alpha = color[3] / 255.0;\r\n return alpha * this._layerTransparency;\r\n },\r\n\r\n getSize: function (feature, sizeInfo) {\r\n var attr = feature.properties;\r\n var field = sizeInfo.field;\r\n var size = 0;\r\n var featureValue = null;\r\n\r\n if (field) {\r\n featureValue = attr[field];\r\n var minSize = sizeInfo.minSize;\r\n var maxSize = sizeInfo.maxSize;\r\n var minDataValue = sizeInfo.minDataValue;\r\n var maxDataValue = sizeInfo.maxDataValue;\r\n var featureRatio;\r\n var normField = sizeInfo.normalizationField;\r\n var normValue = attr ? parseFloat(attr[normField]) : undefined;\r\n\r\n if (featureValue === null || (normField && ((isNaN(normValue) || normValue === 0)))) {\r\n return null;\r\n }\r\n\r\n if (!isNaN(normValue)) {\r\n featureValue /= normValue;\r\n }\r\n\r\n if (minSize !== null && maxSize !== null && minDataValue !== null && maxDataValue !== null) {\r\n if (featureValue <= minDataValue) {\r\n size = minSize;\r\n } else if (featureValue >= maxDataValue) {\r\n size = maxSize;\r\n } else {\r\n featureRatio = (featureValue - minDataValue) / (maxDataValue - minDataValue);\r\n size = minSize + (featureRatio * (maxSize - minSize));\r\n }\r\n }\r\n size = isNaN(size) ? 0 : size;\r\n }\r\n return size;\r\n },\r\n\r\n getColor: function (feature, colorInfo) {\r\n // required information to get color\r\n if (!(feature.properties && colorInfo && colorInfo.field && colorInfo.stops)) {\r\n return null;\r\n }\r\n\r\n var attr = feature.properties;\r\n var featureValue = attr[colorInfo.field];\r\n var lowerBoundColor, upperBoundColor, lowerBound, upperBound;\r\n var normField = colorInfo.normalizationField;\r\n var normValue = attr ? parseFloat(attr[normField]) : undefined;\r\n if (featureValue === null || (normField && ((isNaN(normValue) || normValue === 0)))) {\r\n return null;\r\n }\r\n\r\n if (!isNaN(normValue)) {\r\n featureValue /= normValue;\r\n }\r\n\r\n if (featureValue <= colorInfo.stops[0].value) {\r\n return colorInfo.stops[0].color;\r\n }\r\n var lastStop = colorInfo.stops[colorInfo.stops.length - 1];\r\n if (featureValue >= lastStop.value) {\r\n return lastStop.color;\r\n }\r\n\r\n // go through the stops to find min and max\r\n for (var i = 0; i < colorInfo.stops.length; i++) {\r\n var stopInfo = colorInfo.stops[i];\r\n\r\n if (stopInfo.value <= featureValue) {\r\n lowerBoundColor = stopInfo.color;\r\n lowerBound = stopInfo.value;\r\n } else if (stopInfo.value > featureValue) {\r\n upperBoundColor = stopInfo.color;\r\n upperBound = stopInfo.value;\r\n break;\r\n }\r\n }\r\n\r\n // feature falls between two stops, interplate the colors\r\n if (!isNaN(lowerBound) && !isNaN(upperBound)) {\r\n var range = upperBound - lowerBound;\r\n if (range > 0) {\r\n // more weight the further it is from the lower bound\r\n var upperBoundColorWeight = (featureValue - lowerBound) / range;\r\n if (upperBoundColorWeight) {\r\n // more weight the further it is from the upper bound\r\n var lowerBoundColorWeight = (upperBound - featureValue) / range;\r\n if (lowerBoundColorWeight) {\r\n // interpolate the lower and upper bound color by applying the\r\n // weights to each of the rgba colors and adding them together\r\n var interpolatedColor = [];\r\n for (var j = 0; j < 4; j++) {\r\n interpolatedColor[j] = Math.round((lowerBoundColor[j] * lowerBoundColorWeight) + (upperBoundColor[j] * upperBoundColorWeight));\r\n }\r\n return interpolatedColor;\r\n } else {\r\n // no difference between featureValue and upperBound, 100% of upperBoundColor\r\n return upperBoundColor;\r\n }\r\n } else {\r\n // no difference between featureValue and lowerBound, 100% of lowerBoundColor\r\n return lowerBoundColor;\r\n }\r\n }\r\n }\r\n // if we get to here, none of the cases apply so return null\r\n return null;\r\n }\r\n});\r\n\r\n// export function symbol (symbolJson) {\r\n// return new Symbol(symbolJson);\r\n// }\r\n\r\nexport default Symbol;\r\n","import L from 'leaflet';\n\nexport var ShapeMarker = L.Path.extend({\n\n initialize: function (latlng, size, options) {\n L.setOptions(this, options);\n this._size = size;\n this._latlng = L.latLng(latlng);\n this._svgCanvasIncludes();\n },\n\n toGeoJSON: function () {\n return L.GeoJSON.getFeature(this, {\n type: 'Point',\n coordinates: L.GeoJSON.latLngToCoords(this.getLatLng())\n });\n },\n\n _svgCanvasIncludes: function () {\n // implement in sub class\n },\n\n _project: function () {\n this._point = this._map.latLngToLayerPoint(this._latlng);\n },\n\n _update: function () {\n if (this._map) {\n this._updatePath();\n }\n },\n\n _updatePath: function () {\n // implement in sub class\n },\n\n setLatLng: function (latlng) {\n this._latlng = L.latLng(latlng);\n this.redraw();\n return this.fire('move', {latlng: this._latlng});\n },\n\n getLatLng: function () {\n return this._latlng;\n },\n\n setSize: function (size) {\n this._size = size;\n return this.redraw();\n },\n\n getSize: function () {\n return this._size;\n }\n});\n","import L from 'leaflet';\nimport { ShapeMarker } from './ShapeMarker';\n\nexport var CrossMarker = ShapeMarker.extend({\n\n initialize: function (latlng, size, options) {\n ShapeMarker.prototype.initialize.call(this, latlng, size, options);\n },\n\n _updatePath: function () {\n this._renderer._updateCrossMarker(this);\n },\n\n _svgCanvasIncludes: function () {\n L.Canvas.include({\n _updateCrossMarker: function (layer) {\n var latlng = layer._point;\n var offset = layer._size / 2.0;\n var ctx = this._ctx;\n\n ctx.beginPath();\n ctx.moveTo(latlng.x, latlng.y + offset);\n ctx.lineTo(latlng.x, latlng.y - offset);\n this._fillStroke(ctx, layer);\n\n ctx.moveTo(latlng.x - offset, latlng.y);\n ctx.lineTo(latlng.x + offset, latlng.y);\n this._fillStroke(ctx, layer);\n }\n });\n\n L.SVG.include({\n _updateCrossMarker: function (layer) {\n var latlng = layer._point;\n var offset = layer._size / 2.0;\n\n if (L.Browser.vml) {\n latlng._round();\n offset = Math.round(offset);\n }\n\n var str = 'M' + latlng.x + ',' + (latlng.y + offset) +\n 'L' + latlng.x + ',' + (latlng.y - offset) +\n 'M' + (latlng.x - offset) + ',' + latlng.y +\n 'L' + (latlng.x + offset) + ',' + latlng.y;\n\n this._setPath(layer, str);\n }\n });\n }\n});\n\nexport var crossMarker = function (latlng, size, options) {\n return new CrossMarker(latlng, size, options);\n};\n\nexport default crossMarker;\n","import L from 'leaflet';\nimport { ShapeMarker } from './ShapeMarker';\n\nexport var XMarker = ShapeMarker.extend({\n\n initialize: function (latlng, size, options) {\n ShapeMarker.prototype.initialize.call(this, latlng, size, options);\n },\n\n _updatePath: function () {\n this._renderer._updateXMarker(this);\n },\n\n _svgCanvasIncludes: function () {\n L.Canvas.include({\n _updateXMarker: function (layer) {\n var latlng = layer._point;\n var offset = layer._size / 2.0;\n var ctx = this._ctx;\n\n ctx.beginPath();\n\n ctx.moveTo(latlng.x + offset, latlng.y + offset);\n ctx.lineTo(latlng.x - offset, latlng.y - offset);\n this._fillStroke(ctx, layer);\n }\n });\n\n L.SVG.include({\n _updateXMarker: function (layer) {\n var latlng = layer._point;\n var offset = layer._size / 2.0;\n\n if (L.Browser.vml) {\n latlng._round();\n offset = Math.round(offset);\n }\n\n var str = 'M' + (latlng.x + offset) + ',' + (latlng.y + offset) +\n 'L' + (latlng.x - offset) + ',' + (latlng.y - offset) +\n 'M' + (latlng.x - offset) + ',' + (latlng.y + offset) +\n 'L' + (latlng.x + offset) + ',' + (latlng.y - offset);\n\n this._setPath(layer, str);\n }\n });\n }\n});\n\nexport var xMarker = function (latlng, size, options) {\n return new XMarker(latlng, size, options);\n};\n\nexport default xMarker;\n","import L from 'leaflet';\nimport { ShapeMarker } from './ShapeMarker';\n\nexport var SquareMarker = ShapeMarker.extend({\n options: {\n fill: true\n },\n\n initialize: function (latlng, size, options) {\n ShapeMarker.prototype.initialize.call(this, latlng, size, options);\n },\n\n _updatePath: function () {\n this._renderer._updateSquareMarker(this);\n },\n\n _svgCanvasIncludes: function () {\n L.Canvas.include({\n _updateSquareMarker: function (layer) {\n var latlng = layer._point;\n var offset = layer._size / 2.0;\n var ctx = this._ctx;\n\n ctx.beginPath();\n\n ctx.moveTo(latlng.x + offset, latlng.y + offset);\n ctx.lineTo(latlng.x - offset, latlng.y + offset);\n ctx.lineTo(latlng.x - offset, latlng.y - offset);\n ctx.lineTo(latlng.x + offset, latlng.y - offset);\n\n ctx.closePath();\n\n this._fillStroke(ctx, layer);\n }\n });\n\n L.SVG.include({\n _updateSquareMarker: function (layer) {\n var latlng = layer._point;\n var offset = layer._size / 2.0;\n\n if (L.Browser.vml) {\n latlng._round();\n offset = Math.round(offset);\n }\n\n var str = 'M' + (latlng.x + offset) + ',' + (latlng.y + offset) +\n 'L' + (latlng.x - offset) + ',' + (latlng.y + offset) +\n 'L' + (latlng.x - offset) + ',' + (latlng.y - offset) +\n 'L' + (latlng.x + offset) + ',' + (latlng.y - offset);\n\n str = str + (L.Browser.svg ? 'z' : 'x');\n\n this._setPath(layer, str);\n }\n });\n }\n});\n\nexport var squareMarker = function (latlng, size, options) {\n return new SquareMarker(latlng, size, options);\n};\n\nexport default squareMarker;\n","import L from 'leaflet';\nimport { ShapeMarker } from './ShapeMarker';\n\nexport var DiamondMarker = ShapeMarker.extend({\n options: {\n fill: true\n },\n\n initialize: function (latlng, size, options) {\n ShapeMarker.prototype.initialize.call(this, latlng, size, options);\n },\n\n _updatePath: function () {\n this._renderer._updateDiamondMarker(this);\n },\n\n _svgCanvasIncludes: function () {\n L.Canvas.include({\n _updateDiamondMarker: function (layer) {\n var latlng = layer._point;\n var offset = layer._size / 2.0;\n var ctx = this._ctx;\n\n ctx.beginPath();\n\n ctx.moveTo(latlng.x, latlng.y + offset);\n ctx.lineTo(latlng.x - offset, latlng.y);\n ctx.lineTo(latlng.x, latlng.y - offset);\n ctx.lineTo(latlng.x + offset, latlng.y);\n\n ctx.closePath();\n\n this._fillStroke(ctx, layer);\n }\n });\n\n L.SVG.include({\n _updateDiamondMarker: function (layer) {\n var latlng = layer._point;\n var offset = layer._size / 2.0;\n\n if (L.Browser.vml) {\n latlng._round();\n offset = Math.round(offset);\n }\n\n var str = 'M' + latlng.x + ',' + (latlng.y + offset) +\n 'L' + (latlng.x - offset) + ',' + latlng.y +\n 'L' + latlng.x + ',' + (latlng.y - offset) +\n 'L' + (latlng.x + offset) + ',' + latlng.y;\n\n str = str + (L.Browser.svg ? 'z' : 'x');\n\n this._setPath(layer, str);\n }\n });\n }\n});\n\nexport var diamondMarker = function (latlng, size, options) {\n return new DiamondMarker(latlng, size, options);\n};\n\nexport default diamondMarker;\n","import {\r\n marker,\r\n icon as leafletIcon,\r\n extend,\r\n circleMarker\r\n} from 'leaflet';\r\nimport Symbol from './Symbol';\r\nimport { squareMarker, xMarker, crossMarker, diamondMarker } from 'leaflet-shape-markers';\r\n\r\nexport var PointSymbol = Symbol.extend({\r\n\r\n statics: {\r\n MARKERTYPES: ['esriSMSCircle', 'esriSMSCross', 'esriSMSDiamond', 'esriSMSSquare', 'esriSMSX', 'esriPMS']\r\n },\r\n\r\n initialize: function (symbolJson, options) {\r\n var url;\r\n Symbol.prototype.initialize.call(this, symbolJson, options);\r\n if (options) {\r\n this.serviceUrl = options.url;\r\n }\r\n if (symbolJson) {\r\n if (symbolJson.type === 'esriPMS') {\r\n var imageUrl = this._symbolJson.url;\r\n if ((imageUrl && imageUrl.substr(0, 7) === 'http://') || (imageUrl.substr(0, 8) === 'https://')) {\r\n // web image\r\n url = this.sanitize(imageUrl);\r\n this._iconUrl = url;\r\n } else {\r\n url = this.serviceUrl + 'images/' + imageUrl;\r\n this._iconUrl = options && options.token ? url + '?token=' + options.token : url;\r\n }\r\n if (symbolJson.imageData) {\r\n this._iconUrl = 'data:' + symbolJson.contentType + ';base64,' + symbolJson.imageData;\r\n }\r\n // leaflet does not allow resizing icons so keep a hash of different\r\n // icon sizes to try and keep down on the number of icons created\r\n this._icons = {};\r\n // create base icon\r\n this.icon = this._createIcon(this._symbolJson);\r\n } else {\r\n this._fillStyles();\r\n }\r\n }\r\n },\r\n\r\n // prevent html injection in strings\r\n sanitize: function (str) {\r\n if (!str) {\r\n return '';\r\n }\r\n var text;\r\n try {\r\n // removes html but leaves url link text\r\n text = str.replace(/
/gi, '\\n');\r\n text = text.replace(//gi, '\\n');\r\n text = text.replace(/(.*?)<\\/a>/gi, ' $2 ($1) ');\r\n text = text.replace(/<(?:.|\\s)*?>/g, '');\r\n } catch (ex) {\r\n text = null;\r\n }\r\n return text;\r\n },\r\n\r\n _fillStyles: function () {\r\n if (this._symbolJson.outline && this._symbolJson.size > 0 && this._symbolJson.outline.style !== 'esriSLSNull') {\r\n this._styles.stroke = true;\r\n this._styles.weight = this.pixelValue(this._symbolJson.outline.width);\r\n this._styles.color = this.colorValue(this._symbolJson.outline.color);\r\n this._styles.opacity = this.alphaValue(this._symbolJson.outline.color);\r\n } else {\r\n this._styles.stroke = false;\r\n }\r\n if (this._symbolJson.color) {\r\n this._styles.fillColor = this.colorValue(this._symbolJson.color);\r\n this._styles.fillOpacity = this.alphaValue(this._symbolJson.color);\r\n } else {\r\n this._styles.fillOpacity = 0;\r\n }\r\n\r\n if (this._symbolJson.style === 'esriSMSCircle') {\r\n this._styles.radius = this.pixelValue(this._symbolJson.size) / 2.0;\r\n }\r\n },\r\n\r\n _createIcon: function (options) {\r\n var width = this.pixelValue(options.width);\r\n var height = width;\r\n if (options.height) {\r\n height = this.pixelValue(options.height);\r\n }\r\n var xOffset = width / 2.0;\r\n var yOffset = height / 2.0;\r\n\r\n if (options.xoffset) {\r\n xOffset += this.pixelValue(options.xoffset);\r\n }\r\n if (options.yoffset) {\r\n yOffset += this.pixelValue(options.yoffset);\r\n }\r\n\r\n var icon = leafletIcon({\r\n iconUrl: this._iconUrl,\r\n iconSize: [width, height],\r\n iconAnchor: [xOffset, yOffset]\r\n });\r\n this._icons[options.width.toString()] = icon;\r\n return icon;\r\n },\r\n\r\n _getIcon: function (size) {\r\n // check to see if it is already created by size\r\n var icon = this._icons[size.toString()];\r\n if (!icon) {\r\n icon = this._createIcon({width: size});\r\n }\r\n return icon;\r\n },\r\n\r\n pointToLayer: function (geojson, latlng, visualVariables, options) {\r\n var size = this._symbolJson.size || this._symbolJson.width;\r\n if (!this._isDefault) {\r\n if (visualVariables.sizeInfo) {\r\n var calculatedSize = this.getSize(geojson, visualVariables.sizeInfo);\r\n if (calculatedSize) {\r\n size = calculatedSize;\r\n }\r\n }\r\n if (visualVariables.colorInfo) {\r\n var color = this.getColor(geojson, visualVariables.colorInfo);\r\n if (color) {\r\n this._styles.fillColor = this.colorValue(color);\r\n this._styles.fillOpacity = this.alphaValue(color);\r\n }\r\n }\r\n }\r\n\r\n if (this._symbolJson.type === 'esriPMS') {\r\n var layerOptions = extend({}, {icon: this._getIcon(size)}, options);\r\n return marker(latlng, layerOptions);\r\n }\r\n size = this.pixelValue(size);\r\n\r\n switch (this._symbolJson.style) {\r\n case 'esriSMSSquare':\r\n return squareMarker(latlng, size, extend({}, this._styles, options));\r\n case 'esriSMSDiamond':\r\n return diamondMarker(latlng, size, extend({}, this._styles, options));\r\n case 'esriSMSCross':\r\n return crossMarker(latlng, size, extend({}, this._styles, options));\r\n case 'esriSMSX':\r\n return xMarker(latlng, size, extend({}, this._styles, options));\r\n }\r\n this._styles.radius = size / 2.0;\r\n return circleMarker(latlng, extend({}, this._styles, options));\r\n }\r\n});\r\n\r\nexport function pointSymbol (symbolJson, options) {\r\n return new PointSymbol(symbolJson, options);\r\n}\r\n\r\nexport default pointSymbol;\r\n","import Symbol from './Symbol';\r\n\r\nexport var LineSymbol = Symbol.extend({\r\n statics: {\r\n // Not implemented 'esriSLSNull'\r\n LINETYPES: ['esriSLSDash', 'esriSLSDot', 'esriSLSDashDotDot', 'esriSLSDashDot', 'esriSLSSolid']\r\n },\r\n initialize: function (symbolJson, options) {\r\n Symbol.prototype.initialize.call(this, symbolJson, options);\r\n this._fillStyles();\r\n },\r\n\r\n _fillStyles: function () {\r\n // set the defaults that show up on arcgis online\r\n this._styles.lineCap = 'butt';\r\n this._styles.lineJoin = 'miter';\r\n this._styles.fill = false;\r\n this._styles.weight = 0;\r\n\r\n if (!this._symbolJson) {\r\n return this._styles;\r\n }\r\n\r\n if (this._symbolJson.color) {\r\n this._styles.color = this.colorValue(this._symbolJson.color);\r\n this._styles.opacity = this.alphaValue(this._symbolJson.color);\r\n }\r\n\r\n if (!isNaN(this._symbolJson.width)) {\r\n this._styles.weight = this.pixelValue(this._symbolJson.width);\r\n\r\n var dashValues = [];\r\n\r\n switch (this._symbolJson.style) {\r\n case 'esriSLSDash':\r\n dashValues = [4, 3];\r\n break;\r\n case 'esriSLSDot':\r\n dashValues = [1, 3];\r\n break;\r\n case 'esriSLSDashDot':\r\n dashValues = [8, 3, 1, 3];\r\n break;\r\n case 'esriSLSDashDotDot':\r\n dashValues = [8, 3, 1, 3, 1, 3];\r\n break;\r\n }\r\n\r\n // use the dash values and the line weight to set dash array\r\n if (dashValues.length > 0) {\r\n for (var i = 0; i < dashValues.length; i++) {\r\n dashValues[i] *= this._styles.weight;\r\n }\r\n\r\n this._styles.dashArray = dashValues.join(',');\r\n }\r\n }\r\n },\r\n\r\n style: function (feature, visualVariables) {\r\n if (!this._isDefault && visualVariables) {\r\n if (visualVariables.sizeInfo) {\r\n var calculatedSize = this.pixelValue(this.getSize(feature, visualVariables.sizeInfo));\r\n if (calculatedSize) {\r\n this._styles.weight = calculatedSize;\r\n }\r\n }\r\n if (visualVariables.colorInfo) {\r\n var color = this.getColor(feature, visualVariables.colorInfo);\r\n if (color) {\r\n this._styles.color = this.colorValue(color);\r\n this._styles.opacity = this.alphaValue(color);\r\n }\r\n }\r\n }\r\n return this._styles;\r\n }\r\n});\r\n\r\nexport function lineSymbol (symbolJson, options) {\r\n return new LineSymbol(symbolJson, options);\r\n}\r\n\r\nexport default lineSymbol;\r\n","import Symbol from './Symbol';\r\nimport lineSymbol from './LineSymbol';\r\n\r\nexport var PolygonSymbol = Symbol.extend({\r\n statics: {\r\n // not implemented: 'esriSFSBackwardDiagonal','esriSFSCross','esriSFSDiagonalCross','esriSFSForwardDiagonal','esriSFSHorizontal','esriSFSNull','esriSFSVertical'\r\n POLYGONTYPES: ['esriSFSSolid']\r\n },\r\n initialize: function (symbolJson, options) {\r\n Symbol.prototype.initialize.call(this, symbolJson, options);\r\n if (symbolJson) {\r\n if (symbolJson.outline && symbolJson.outline.style === 'esriSLSNull') {\r\n this._lineStyles = { weight: 0 };\r\n } else {\r\n this._lineStyles = lineSymbol(symbolJson.outline, options).style();\r\n }\r\n this._fillStyles();\r\n }\r\n },\r\n\r\n _fillStyles: function () {\r\n if (this._lineStyles) {\r\n if (this._lineStyles.weight === 0) {\r\n // when weight is 0, setting the stroke to false can still look bad\r\n // (gaps between the polygons)\r\n this._styles.stroke = false;\r\n } else {\r\n // copy the line symbol styles into this symbol's styles\r\n for (var styleAttr in this._lineStyles) {\r\n this._styles[styleAttr] = this._lineStyles[styleAttr];\r\n }\r\n }\r\n }\r\n\r\n // set the fill for the polygon\r\n if (this._symbolJson) {\r\n if (this._symbolJson.color &&\r\n // don't fill polygon if type is not supported\r\n PolygonSymbol.POLYGONTYPES.indexOf(this._symbolJson.style >= 0)) {\r\n this._styles.fill = true;\r\n this._styles.fillColor = this.colorValue(this._symbolJson.color);\r\n this._styles.fillOpacity = this.alphaValue(this._symbolJson.color);\r\n } else {\r\n this._styles.fill = false;\r\n this._styles.fillOpacity = 0;\r\n }\r\n }\r\n },\r\n\r\n style: function (feature, visualVariables) {\r\n if (!this._isDefault && visualVariables && visualVariables.colorInfo) {\r\n var color = this.getColor(feature, visualVariables.colorInfo);\r\n if (color) {\r\n this._styles.fillColor = this.colorValue(color);\r\n this._styles.fillOpacity = this.alphaValue(color);\r\n }\r\n }\r\n return this._styles;\r\n }\r\n});\r\n\r\nexport function polygonSymbol (symbolJson, options) {\r\n return new PolygonSymbol(symbolJson, options);\r\n}\r\n\r\nexport default polygonSymbol;\r\n","import { Class, Util, circleMarker } from 'leaflet';\r\n\r\nimport pointSymbol from '../Symbols/PointSymbol';\r\nimport lineSymbol from '../Symbols/LineSymbol';\r\nimport polygonSymbol from '../Symbols/PolygonSymbol';\r\n\r\nexport var Renderer = Class.extend({\r\n options: {\r\n proportionalPolygon: false,\r\n clickable: true\r\n },\r\n\r\n initialize: function (rendererJson, options) {\r\n this._rendererJson = rendererJson;\r\n this._pointSymbols = false;\r\n this._symbols = [];\r\n this._visualVariables = this._parseVisualVariables(rendererJson.visualVariables);\r\n Util.setOptions(this, options);\r\n },\r\n\r\n _parseVisualVariables: function (visualVariables) {\r\n var visVars = {};\r\n if (visualVariables) {\r\n for (var i = 0; i < visualVariables.length; i++) {\r\n visVars[visualVariables[i].type] = visualVariables[i];\r\n }\r\n }\r\n return visVars;\r\n },\r\n\r\n _createDefaultSymbol: function () {\r\n if (this._rendererJson.defaultSymbol) {\r\n this._defaultSymbol = this._newSymbol(this._rendererJson.defaultSymbol);\r\n this._defaultSymbol._isDefault = true;\r\n }\r\n },\r\n\r\n _newSymbol: function (symbolJson) {\r\n if (symbolJson.type === 'esriSMS' || symbolJson.type === 'esriPMS') {\r\n this._pointSymbols = true;\r\n return pointSymbol(symbolJson, this.options);\r\n }\r\n if (symbolJson.type === 'esriSLS') {\r\n return lineSymbol(symbolJson, this.options);\r\n }\r\n if (symbolJson.type === 'esriSFS') {\r\n return polygonSymbol(symbolJson, this.options);\r\n }\r\n },\r\n\r\n _getSymbol: function () {\r\n // override\r\n },\r\n\r\n attachStylesToLayer: function (layer) {\r\n if (this._pointSymbols) {\r\n layer.options.pointToLayer = Util.bind(this.pointToLayer, this);\r\n } else {\r\n layer.options.style = Util.bind(this.style, this);\r\n layer._originalStyle = layer.options.style;\r\n }\r\n },\r\n\r\n pointToLayer: function (geojson, latlng) {\r\n var sym = this._getSymbol(geojson);\r\n if (sym && sym.pointToLayer) {\r\n // right now custom panes are the only option pushed through\r\n return sym.pointToLayer(geojson, latlng, this._visualVariables, this.options);\r\n }\r\n // invisible symbology\r\n return circleMarker(latlng, {radius: 0, opacity: 0});\r\n },\r\n\r\n style: function (feature) {\r\n var userStyles;\r\n if (this.options.userDefinedStyle) {\r\n userStyles = this.options.userDefinedStyle(feature);\r\n }\r\n // find the symbol to represent this feature\r\n var sym = this._getSymbol(feature);\r\n if (sym) {\r\n return this.mergeStyles(sym.style(feature, this._visualVariables), userStyles);\r\n } else {\r\n // invisible symbology\r\n return this.mergeStyles({opacity: 0, fillOpacity: 0}, userStyles);\r\n }\r\n },\r\n\r\n mergeStyles: function (styles, userStyles) {\r\n var mergedStyles = {};\r\n var attr;\r\n // copy renderer style attributes\r\n for (attr in styles) {\r\n if (styles.hasOwnProperty(attr)) {\r\n mergedStyles[attr] = styles[attr];\r\n }\r\n }\r\n // override with user defined style attributes\r\n if (userStyles) {\r\n for (attr in userStyles) {\r\n if (userStyles.hasOwnProperty(attr)) {\r\n mergedStyles[attr] = userStyles[attr];\r\n }\r\n }\r\n }\r\n return mergedStyles;\r\n }\r\n});\r\n\r\nexport default Renderer;\r\n","import Renderer from './Renderer';\r\n\r\nexport var SimpleRenderer = Renderer.extend({\r\n initialize: function (rendererJson, options) {\r\n Renderer.prototype.initialize.call(this, rendererJson, options);\r\n this._createSymbol();\r\n },\r\n\r\n _createSymbol: function () {\r\n if (this._rendererJson.symbol) {\r\n this._symbols.push(this._newSymbol(this._rendererJson.symbol));\r\n }\r\n },\r\n\r\n _getSymbol: function () {\r\n return this._symbols[0];\r\n }\r\n});\r\n\r\nexport function simpleRenderer (rendererJson, options) {\r\n return new SimpleRenderer(rendererJson, options);\r\n}\r\n\r\nexport default simpleRenderer;\r\n","import Renderer from './Renderer';\r\n\r\nexport var ClassBreaksRenderer = Renderer.extend({\r\n initialize: function (rendererJson, options) {\r\n Renderer.prototype.initialize.call(this, rendererJson, options);\r\n this._field = this._rendererJson.field;\r\n if (this._rendererJson.normalizationType && this._rendererJson.normalizationType === 'esriNormalizeByField') {\r\n this._normalizationField = this._rendererJson.normalizationField;\r\n }\r\n this._createSymbols();\r\n },\r\n\r\n _createSymbols: function () {\r\n var symbol;\r\n var classbreaks = this._rendererJson.classBreakInfos;\r\n\r\n this._symbols = [];\r\n\r\n // create a symbol for each class break\r\n for (var i = classbreaks.length - 1; i >= 0; i--) {\r\n if (this.options.proportionalPolygon && this._rendererJson.backgroundFillSymbol) {\r\n symbol = this._newSymbol(this._rendererJson.backgroundFillSymbol);\r\n } else {\r\n symbol = this._newSymbol(classbreaks[i].symbol);\r\n }\r\n symbol.val = classbreaks[i].classMaxValue;\r\n this._symbols.push(symbol);\r\n }\r\n // sort the symbols in ascending value\r\n this._symbols.sort(function (a, b) {\r\n return a.val > b.val ? 1 : -1;\r\n });\r\n this._createDefaultSymbol();\r\n this._maxValue = this._symbols[this._symbols.length - 1].val;\r\n },\r\n\r\n _getSymbol: function (feature) {\r\n var val = feature.properties[this._field];\r\n if (this._normalizationField) {\r\n var normValue = feature.properties[this._normalizationField];\r\n if (!isNaN(normValue) && normValue !== 0) {\r\n val = val / normValue;\r\n } else {\r\n return this._defaultSymbol;\r\n }\r\n }\r\n\r\n if (val > this._maxValue) {\r\n return this._defaultSymbol;\r\n }\r\n var symbol = this._symbols[0];\r\n for (var i = this._symbols.length - 1; i >= 0; i--) {\r\n if (val > this._symbols[i].val) {\r\n break;\r\n }\r\n symbol = this._symbols[i];\r\n }\r\n return symbol;\r\n }\r\n});\r\n\r\nexport function classBreaksRenderer (rendererJson, options) {\r\n return new ClassBreaksRenderer(rendererJson, options);\r\n}\r\n\r\nexport default classBreaksRenderer;\r\n","import Renderer from './Renderer';\r\n\r\nexport var UniqueValueRenderer = Renderer.extend({\r\n initialize: function (rendererJson, options) {\r\n Renderer.prototype.initialize.call(this, rendererJson, options);\r\n this._field = this._rendererJson.field1;\r\n this._createSymbols();\r\n },\r\n\r\n _createSymbols: function () {\r\n var symbol;\r\n var uniques = this._rendererJson.uniqueValueInfos;\r\n\r\n // create a symbol for each unique value\r\n for (var i = uniques.length - 1; i >= 0; i--) {\r\n symbol = this._newSymbol(uniques[i].symbol);\r\n symbol.val = uniques[i].value;\r\n this._symbols.push(symbol);\r\n }\r\n this._createDefaultSymbol();\r\n },\r\n\r\n _getSymbol: function (feature) {\r\n var val = feature.properties[this._field];\r\n // accumulate values if there is more than one field defined\r\n if (this._rendererJson.fieldDelimiter && this._rendererJson.field2) {\r\n var val2 = feature.properties[this._rendererJson.field2];\r\n if (val2) {\r\n val += this._rendererJson.fieldDelimiter + val2;\r\n var val3 = feature.properties[this._rendererJson.field3];\r\n if (val3) {\r\n val += this._rendererJson.fieldDelimiter + val3;\r\n }\r\n }\r\n }\r\n\r\n var symbol = this._defaultSymbol;\r\n for (var i = this._symbols.length - 1; i >= 0; i--) {\r\n // using the === operator does not work if the field\r\n // of the unique renderer is not a string\r\n /*eslint-disable */\r\n if (this._symbols[i].val == val) {\r\n symbol = this._symbols[i];\r\n }\r\n /*eslint-enable */\r\n }\r\n return symbol;\r\n }\r\n});\r\n\r\nexport function uniqueValueRenderer (rendererJson, options) {\r\n return new UniqueValueRenderer(rendererJson, options);\r\n}\r\n\r\nexport default uniqueValueRenderer;\r\n","import { Util, GeoJSON, geoJson } from 'leaflet';\r\nimport * as EsriLeaflet from 'esri-leaflet';\r\nimport * as EsriLeafletCluster from 'esri-leaflet-cluster';\r\nimport classBreaksRenderer from './Renderers/ClassBreaksRenderer';\r\nimport uniqueValueRenderer from './Renderers/UniqueValueRenderer';\r\nimport simpleRenderer from './Renderers/SimpleRenderer';\r\n\r\nfunction wireUpRenderers () {\r\n if (this.options.ignoreRenderer) {\r\n return;\r\n }\r\n var oldOnAdd = Util.bind(this.onAdd, this);\r\n var oldUnbindPopup = Util.bind(this.unbindPopup, this);\r\n var oldOnRemove = Util.bind(this.onRemove, this);\r\n\r\n Util.bind(this.createNewLayer, this);\r\n\r\n this.onAdd = function (map) {\r\n this.metadata(function (error, response) {\r\n if (error) {\r\n console.warn('failed to load metadata from the service.');\r\n return;\r\n } if (response && response.drawingInfo) {\r\n if (this.options.drawingInfo) {\r\n // allow L.esri.webmap (and others) to override service symbology with info provided in layer constructor\r\n response.drawingInfo = this.options.drawingInfo;\r\n }\r\n\r\n // the default pane for lines and polygons is 'overlayPane', for points it is 'markerPane'\r\n if (this.options.pane === 'overlayPane' && response.geometryType === 'esriGeometryPoint') {\r\n this.options.pane = 'markerPane';\r\n }\r\n\r\n this._setRenderers(response);\r\n oldOnAdd(map);\r\n this._addPointLayer(map);\r\n }\r\n }, this);\r\n };\r\n\r\n this.onRemove = function (map) {\r\n oldOnRemove(map);\r\n if (this._pointLayer) {\r\n var pointLayers = this._pointLayer.getLayers();\r\n for (var i in pointLayers) {\r\n map.removeLayer(pointLayers[i]);\r\n }\r\n }\r\n };\r\n\r\n this.unbindPopup = function () {\r\n oldUnbindPopup();\r\n if (this._pointLayer) {\r\n var pointLayers = this._pointLayer.getLayers();\r\n for (var i in pointLayers) {\r\n pointLayers[i].unbindPopup();\r\n }\r\n }\r\n };\r\n\r\n this._addPointLayer = function (map) {\r\n if (this._pointLayer) {\r\n this._pointLayer.addTo(map);\r\n this._pointLayer.bringToFront();\r\n }\r\n };\r\n\r\n this._createPointLayer = function () {\r\n if (!this._pointLayer) {\r\n this._pointLayer = geoJson();\r\n // store the feature ids that have already been added to the map\r\n this._pointLayerIds = {};\r\n\r\n if (this._popup) {\r\n var popupFunction = function (feature, layer) {\r\n layer.bindPopup(this._popup(feature, layer), this._popupOptions);\r\n };\r\n this._pointLayer.options.onEachFeature = Util.bind(popupFunction, this);\r\n }\r\n }\r\n };\r\n\r\n this.createNewLayer = function (geojson) {\r\n var fLayer = GeoJSON.geometryToLayer(geojson, this.options);\r\n\r\n // add a point layer when the polygon is represented as proportional marker symbols\r\n if (this._hasProportionalSymbols) {\r\n var centroid = this.getPolygonCentroid(geojson.geometry.coordinates);\r\n if (!(isNaN(centroid[0]) || isNaN(centroid[0]))) {\r\n this._createPointLayer();\r\n\r\n var featureId = geojson.id.toString();\r\n // only add the feature if it does not already exist on the map\r\n if (!this._pointLayerIds[featureId]) {\r\n var pointjson = this.getPointJson(geojson, centroid);\r\n\r\n this._pointLayer.addData(pointjson);\r\n this._pointLayerIds[featureId] = true;\r\n }\r\n\r\n this._pointLayer.bringToFront();\r\n }\r\n }\r\n return fLayer;\r\n };\r\n\r\n this.getPolygonCentroid = function (coordinates) {\r\n var pts = coordinates[0][0];\r\n if (pts.length === 2) {\r\n pts = coordinates[0];\r\n }\r\n\r\n var twicearea = 0;\r\n var x = 0;\r\n var y = 0;\r\n var nPts = pts.length;\r\n var p1;\r\n var p2;\r\n var f;\r\n\r\n for (var i = 0, j = nPts - 1; i < nPts; j = i++) {\r\n p1 = pts[i]; p2 = pts[j];\r\n twicearea += p1[0] * p2[1];\r\n twicearea -= p1[1] * p2[0];\r\n f = (p1[0] * p2[1]) - (p2[0] * p1[1]);\r\n x += (p1[0] + p2[0]) * f;\r\n y += (p1[1] + p2[1]) * f;\r\n }\r\n f = twicearea * 3;\r\n return [x / f, y / f];\r\n };\r\n\r\n this.getPointJson = function (geojson, centroid) {\r\n return {\r\n type: 'Feature',\r\n properties: geojson.properties,\r\n id: geojson.id,\r\n geometry: {\r\n type: 'Point',\r\n coordinates: [centroid[0], centroid[1]]\r\n }\r\n };\r\n };\r\n\r\n this._checkForProportionalSymbols = function (geometryType, renderer) {\r\n this._hasProportionalSymbols = false;\r\n if (geometryType === 'esriGeometryPolygon') {\r\n if (renderer.backgroundFillSymbol) {\r\n this._hasProportionalSymbols = true;\r\n }\r\n // check to see if the first symbol in the classbreaks is a marker symbol\r\n if (renderer.classBreakInfos && renderer.classBreakInfos.length) {\r\n var sym = renderer.classBreakInfos[0].symbol;\r\n if (sym && (sym.type === 'esriSMS' || sym.type === 'esriPMS')) {\r\n this._hasProportionalSymbols = true;\r\n }\r\n }\r\n }\r\n };\r\n\r\n this._setRenderers = function (serviceInfo) {\r\n var rend;\r\n var rendererInfo = serviceInfo.drawingInfo.renderer;\r\n\r\n var options = {\r\n url: this.options.url\r\n };\r\n\r\n if (this.options.token) {\r\n options.token = this.options.token;\r\n }\r\n\r\n if (this.options.pane) {\r\n options.pane = this.options.pane;\r\n }\r\n\r\n if (serviceInfo.drawingInfo.transparency) {\r\n options.layerTransparency = serviceInfo.drawingInfo.transparency;\r\n }\r\n\r\n if (this.options.style) {\r\n options.userDefinedStyle = this.options.style;\r\n }\r\n\r\n switch (rendererInfo.type) {\r\n case 'classBreaks':\r\n this._checkForProportionalSymbols(serviceInfo.geometryType, rendererInfo);\r\n if (this._hasProportionalSymbols) {\r\n this._createPointLayer();\r\n var pRend = classBreaksRenderer(rendererInfo, options);\r\n pRend.attachStylesToLayer(this._pointLayer);\r\n options.proportionalPolygon = true;\r\n }\r\n rend = classBreaksRenderer(rendererInfo, options);\r\n break;\r\n case 'uniqueValue':\r\n rend = uniqueValueRenderer(rendererInfo, options);\r\n break;\r\n default:\r\n rend = simpleRenderer(rendererInfo, options);\r\n }\r\n rend.attachStylesToLayer(this);\r\n };\r\n}\r\n\r\nEsriLeaflet.FeatureLayer.addInitHook(wireUpRenderers);\r\n\r\nif (typeof EsriLeafletCluster !== 'undefined') {\r\n EsriLeafletCluster.FeatureLayer.addInitHook(wireUpRenderers);\r\n}\r\n"],"names":["Class","L","leafletIcon","extend","marker","circleMarker","Util","geoJson","GeoJSON","EsriLeaflet.FeatureLayer","EsriLeafletCluster.FeatureLayer"],"mappings":"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"} \ No newline at end of file diff --git a/dist/esri-leaflet-renderers.js b/dist/esri-leaflet-renderers.js new file mode 100644 index 0000000..7d207ad --- /dev/null +++ b/dist/esri-leaflet-renderers.js @@ -0,0 +1,5 @@ +/* esri-leaflet-renderers - v2.1.2 - Mon Jul 06 2020 10:11:07 GMT-0500 (Central Daylight Time) + * Copyright (c) 2020 Environmental Systems Research Institute, Inc. + * Apache-2.0 */ +!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?i(exports,require("leaflet"),require("esri-leaflet"),require("esri-leaflet-cluster")):"function"==typeof define&&define.amd?define(["exports","leaflet","esri-leaflet","esri-leaflet-cluster"],i):i(((t=t||self).L=t.L||{},t.L.esri=t.L.esri||{},t.L.esri.Renderers={}),t.L,t.L.esri,t.L.esri.Cluster)}(this,function(t,v,i,e){"use strict";var o="default"in v?v.default:v,n=v.Class.extend({initialize:function(t,i){this._symbolJson=t,this.val=null,this._styles={},this._isDefault=!1,this._layerTransparency=1,i&&i.layerTransparency&&(this._layerTransparency=1-i.layerTransparency/100)},pixelValue:function(t){return 1.333*t},colorValue:function(t){return"rgb("+t[0]+","+t[1]+","+t[2]+")"},alphaValue:function(t){return t[3]/255*this._layerTransparency},getSize:function(t,i){var e=t.properties,s=i.field,o=0,n=null;if(s){n=e[s];var r=i.minSize,l=i.maxSize,a=i.minDataValue,h=i.maxDataValue,y=i.normalizationField,u=e?parseFloat(e[y]):void 0;if(null===n||y&&(isNaN(u)||0===u))return null;isNaN(u)||(n/=u),null!==r&&null!==l&&null!==a&&null!==h&&(o=n<=a?r:h<=n?l:r+(n-a)/(h-a)*(l-r)),o=isNaN(o)?0:o}return o},getColor:function(t,i){if(!(t.properties&&i&&i.field&&i.stops))return null;var e,s,o,n,r=t.properties,l=r[i.field],a=i.normalizationField,h=r?parseFloat(r[a]):void 0;if(null===l||a&&(isNaN(h)||0===h))return null;if(isNaN(h)||(l/=h),l<=i.stops[0].value)return i.stops[0].color;var y=i.stops[i.stops.length-1];if(l>=y.value)return y.color;for(var u=0;ul){s=_.color,n=_.value;break}}if(!isNaN(o)&&!isNaN(n)){var c=n-o;if(0/gi,"\n")).replace(//gi,"\n")).replace(/(.*?)<\/a>/gi," $2 ($1) ")).replace(/<(?:.|\s)*?>/g,"")}catch(t){i=null}return i},_fillStyles:function(){this._symbolJson.outline&&0i.val?1:-1}),this._createDefaultSymbol(),this._maxValue=this._symbols[this._symbols.length-1].val},_getSymbol:function(t){var i=t.properties[this._field];if(this._normalizationField){var e=t.properties[this._normalizationField];if(isNaN(e)||0===e)return this._defaultSymbol;i/=e}if(i>this._maxValue)return this._defaultSymbol;for(var s=this._symbols[0],o=this._symbols.length-1;0<=o&&!(i>this._symbols[o].val);o--)s=this._symbols[o];return s}});function d(t,i){return new f(t,i)}var S=_.extend({initialize:function(t,i){_.prototype.initialize.call(this,t,i),this._field=this._rendererJson.field1,this._createSymbols()},_createSymbols:function(){for(var t,i=this._rendererJson.uniqueValueInfos,e=i.length-1;0<=e;e--)(t=this._newSymbol(i[e].symbol)).val=i[e].value,this._symbols.push(t);this._createDefaultSymbol()},_getSymbol:function(t){var i,e,s=t.properties[this._field];this._rendererJson.fieldDelimiter&&this._rendererJson.field2&&((i=t.properties[this._rendererJson.field2])&&(s+=this._rendererJson.fieldDelimiter+i,(e=t.properties[this._rendererJson.field3])&&(s+=this._rendererJson.fieldDelimiter+e)));for(var o=this._defaultSymbol,n=this._symbols.length-1;0<=n;n--)this._symbols[n].val==s&&(o=this._symbols[n]);return o}});function m(t,i){return new S(t,i)}function b(){var s,e,o;this.options.ignoreRenderer||(s=v.Util.bind(this.onAdd,this),e=v.Util.bind(this.unbindPopup,this),o=v.Util.bind(this.onRemove,this),v.Util.bind(this.createNewLayer,this),this.onAdd=function(e){this.metadata(function(t,i){t?console.warn("failed to load metadata from the service."):i&&i.drawingInfo&&(this.options.drawingInfo&&(i.drawingInfo=this.options.drawingInfo),"overlayPane"===this.options.pane&&"esriGeometryPoint"===i.geometryType&&(this.options.pane="markerPane"),this._setRenderers(i),s(e),this._addPointLayer(e))},this)},this.onRemove=function(t){if(o(t),this._pointLayer){var i=this._pointLayer.getLayers();for(var e in i)t.removeLayer(i[e])}},this.unbindPopup=function(){if(e(),this._pointLayer){var t=this._pointLayer.getLayers();for(var i in t)t[i].unbindPopup()}},this._addPointLayer=function(t){this._pointLayer&&(this._pointLayer.addTo(t),this._pointLayer.bringToFront())},this._createPointLayer=function(){this._pointLayer||(this._pointLayer=v.geoJson(),this._pointLayerIds={},this._popup&&(this._pointLayer.options.onEachFeature=v.Util.bind(function(t,i){i.bindPopup(this._popup(t,i),this._popupOptions)},this)))},this.createNewLayer=function(t){var i,e,s,o=v.GeoJSON.geometryToLayer(t,this.options);return this._hasProportionalSymbols&&(i=this.getPolygonCentroid(t.geometry.coordinates),isNaN(i[0])||isNaN(i[0])||(this._createPointLayer(),e=t.id.toString(),this._pointLayerIds[e]||(s=this.getPointJson(t,i),this._pointLayer.addData(s),this._pointLayerIds[e]=!0),this._pointLayer.bringToFront())),o},this.getPolygonCentroid=function(t){var i=t[0][0];2===i.length&&(i=t[0]);for(var e,s,o,n=0,r=0,l=0,a=i.length,h=0,y=a-1;h= maxDataValue) {\r\n size = maxSize;\r\n } else {\r\n featureRatio = (featureValue - minDataValue) / (maxDataValue - minDataValue);\r\n size = minSize + (featureRatio * (maxSize - minSize));\r\n }\r\n }\r\n size = isNaN(size) ? 0 : size;\r\n }\r\n return size;\r\n },\r\n\r\n getColor: function (feature, colorInfo) {\r\n // required information to get color\r\n if (!(feature.properties && colorInfo && colorInfo.field && colorInfo.stops)) {\r\n return null;\r\n }\r\n\r\n var attr = feature.properties;\r\n var featureValue = attr[colorInfo.field];\r\n var lowerBoundColor, upperBoundColor, lowerBound, upperBound;\r\n var normField = colorInfo.normalizationField;\r\n var normValue = attr ? parseFloat(attr[normField]) : undefined;\r\n if (featureValue === null || (normField && ((isNaN(normValue) || normValue === 0)))) {\r\n return null;\r\n }\r\n\r\n if (!isNaN(normValue)) {\r\n featureValue /= normValue;\r\n }\r\n\r\n if (featureValue <= colorInfo.stops[0].value) {\r\n return colorInfo.stops[0].color;\r\n }\r\n var lastStop = colorInfo.stops[colorInfo.stops.length - 1];\r\n if (featureValue >= lastStop.value) {\r\n return lastStop.color;\r\n }\r\n\r\n // go through the stops to find min and max\r\n for (var i = 0; i < colorInfo.stops.length; i++) {\r\n var stopInfo = colorInfo.stops[i];\r\n\r\n if (stopInfo.value <= featureValue) {\r\n lowerBoundColor = stopInfo.color;\r\n lowerBound = stopInfo.value;\r\n } else if (stopInfo.value > featureValue) {\r\n upperBoundColor = stopInfo.color;\r\n upperBound = stopInfo.value;\r\n break;\r\n }\r\n }\r\n\r\n // feature falls between two stops, interplate the colors\r\n if (!isNaN(lowerBound) && !isNaN(upperBound)) {\r\n var range = upperBound - lowerBound;\r\n if (range > 0) {\r\n // more weight the further it is from the lower bound\r\n var upperBoundColorWeight = (featureValue - lowerBound) / range;\r\n if (upperBoundColorWeight) {\r\n // more weight the further it is from the upper bound\r\n var lowerBoundColorWeight = (upperBound - featureValue) / range;\r\n if (lowerBoundColorWeight) {\r\n // interpolate the lower and upper bound color by applying the\r\n // weights to each of the rgba colors and adding them together\r\n var interpolatedColor = [];\r\n for (var j = 0; j < 4; j++) {\r\n interpolatedColor[j] = Math.round((lowerBoundColor[j] * lowerBoundColorWeight) + (upperBoundColor[j] * upperBoundColorWeight));\r\n }\r\n return interpolatedColor;\r\n } else {\r\n // no difference between featureValue and upperBound, 100% of upperBoundColor\r\n return upperBoundColor;\r\n }\r\n } else {\r\n // no difference between featureValue and lowerBound, 100% of lowerBoundColor\r\n return lowerBoundColor;\r\n }\r\n }\r\n }\r\n // if we get to here, none of the cases apply so return null\r\n return null;\r\n }\r\n});\r\n\r\n// export function symbol (symbolJson) {\r\n// return new Symbol(symbolJson);\r\n// }\r\n\r\nexport default Symbol;\r\n","import L from 'leaflet';\n\nexport var ShapeMarker = L.Path.extend({\n\n initialize: function (latlng, size, options) {\n L.setOptions(this, options);\n this._size = size;\n this._latlng = L.latLng(latlng);\n this._svgCanvasIncludes();\n },\n\n toGeoJSON: function () {\n return L.GeoJSON.getFeature(this, {\n type: 'Point',\n coordinates: L.GeoJSON.latLngToCoords(this.getLatLng())\n });\n },\n\n _svgCanvasIncludes: function () {\n // implement in sub class\n },\n\n _project: function () {\n this._point = this._map.latLngToLayerPoint(this._latlng);\n },\n\n _update: function () {\n if (this._map) {\n this._updatePath();\n }\n },\n\n _updatePath: function () {\n // implement in sub class\n },\n\n setLatLng: function (latlng) {\n this._latlng = L.latLng(latlng);\n this.redraw();\n return this.fire('move', {latlng: this._latlng});\n },\n\n getLatLng: function () {\n return this._latlng;\n },\n\n setSize: function (size) {\n this._size = size;\n return this.redraw();\n },\n\n getSize: function () {\n return this._size;\n }\n});\n","import L from 'leaflet';\nimport { ShapeMarker } from './ShapeMarker';\n\nexport var CrossMarker = ShapeMarker.extend({\n\n initialize: function (latlng, size, options) {\n ShapeMarker.prototype.initialize.call(this, latlng, size, options);\n },\n\n _updatePath: function () {\n this._renderer._updateCrossMarker(this);\n },\n\n _svgCanvasIncludes: function () {\n L.Canvas.include({\n _updateCrossMarker: function (layer) {\n var latlng = layer._point;\n var offset = layer._size / 2.0;\n var ctx = this._ctx;\n\n ctx.beginPath();\n ctx.moveTo(latlng.x, latlng.y + offset);\n ctx.lineTo(latlng.x, latlng.y - offset);\n this._fillStroke(ctx, layer);\n\n ctx.moveTo(latlng.x - offset, latlng.y);\n ctx.lineTo(latlng.x + offset, latlng.y);\n this._fillStroke(ctx, layer);\n }\n });\n\n L.SVG.include({\n _updateCrossMarker: function (layer) {\n var latlng = layer._point;\n var offset = layer._size / 2.0;\n\n if (L.Browser.vml) {\n latlng._round();\n offset = Math.round(offset);\n }\n\n var str = 'M' + latlng.x + ',' + (latlng.y + offset) +\n 'L' + latlng.x + ',' + (latlng.y - offset) +\n 'M' + (latlng.x - offset) + ',' + latlng.y +\n 'L' + (latlng.x + offset) + ',' + latlng.y;\n\n this._setPath(layer, str);\n }\n });\n }\n});\n\nexport var crossMarker = function (latlng, size, options) {\n return new CrossMarker(latlng, size, options);\n};\n\nexport default crossMarker;\n","import L from 'leaflet';\nimport { ShapeMarker } from './ShapeMarker';\n\nexport var XMarker = ShapeMarker.extend({\n\n initialize: function (latlng, size, options) {\n ShapeMarker.prototype.initialize.call(this, latlng, size, options);\n },\n\n _updatePath: function () {\n this._renderer._updateXMarker(this);\n },\n\n _svgCanvasIncludes: function () {\n L.Canvas.include({\n _updateXMarker: function (layer) {\n var latlng = layer._point;\n var offset = layer._size / 2.0;\n var ctx = this._ctx;\n\n ctx.beginPath();\n\n ctx.moveTo(latlng.x + offset, latlng.y + offset);\n ctx.lineTo(latlng.x - offset, latlng.y - offset);\n this._fillStroke(ctx, layer);\n }\n });\n\n L.SVG.include({\n _updateXMarker: function (layer) {\n var latlng = layer._point;\n var offset = layer._size / 2.0;\n\n if (L.Browser.vml) {\n latlng._round();\n offset = Math.round(offset);\n }\n\n var str = 'M' + (latlng.x + offset) + ',' + (latlng.y + offset) +\n 'L' + (latlng.x - offset) + ',' + (latlng.y - offset) +\n 'M' + (latlng.x - offset) + ',' + (latlng.y + offset) +\n 'L' + (latlng.x + offset) + ',' + (latlng.y - offset);\n\n this._setPath(layer, str);\n }\n });\n }\n});\n\nexport var xMarker = function (latlng, size, options) {\n return new XMarker(latlng, size, options);\n};\n\nexport default xMarker;\n","import L from 'leaflet';\nimport { ShapeMarker } from './ShapeMarker';\n\nexport var SquareMarker = ShapeMarker.extend({\n options: {\n fill: true\n },\n\n initialize: function (latlng, size, options) {\n ShapeMarker.prototype.initialize.call(this, latlng, size, options);\n },\n\n _updatePath: function () {\n this._renderer._updateSquareMarker(this);\n },\n\n _svgCanvasIncludes: function () {\n L.Canvas.include({\n _updateSquareMarker: function (layer) {\n var latlng = layer._point;\n var offset = layer._size / 2.0;\n var ctx = this._ctx;\n\n ctx.beginPath();\n\n ctx.moveTo(latlng.x + offset, latlng.y + offset);\n ctx.lineTo(latlng.x - offset, latlng.y + offset);\n ctx.lineTo(latlng.x - offset, latlng.y - offset);\n ctx.lineTo(latlng.x + offset, latlng.y - offset);\n\n ctx.closePath();\n\n this._fillStroke(ctx, layer);\n }\n });\n\n L.SVG.include({\n _updateSquareMarker: function (layer) {\n var latlng = layer._point;\n var offset = layer._size / 2.0;\n\n if (L.Browser.vml) {\n latlng._round();\n offset = Math.round(offset);\n }\n\n var str = 'M' + (latlng.x + offset) + ',' + (latlng.y + offset) +\n 'L' + (latlng.x - offset) + ',' + (latlng.y + offset) +\n 'L' + (latlng.x - offset) + ',' + (latlng.y - offset) +\n 'L' + (latlng.x + offset) + ',' + (latlng.y - offset);\n\n str = str + (L.Browser.svg ? 'z' : 'x');\n\n this._setPath(layer, str);\n }\n });\n }\n});\n\nexport var squareMarker = function (latlng, size, options) {\n return new SquareMarker(latlng, size, options);\n};\n\nexport default squareMarker;\n","import L from 'leaflet';\nimport { ShapeMarker } from './ShapeMarker';\n\nexport var DiamondMarker = ShapeMarker.extend({\n options: {\n fill: true\n },\n\n initialize: function (latlng, size, options) {\n ShapeMarker.prototype.initialize.call(this, latlng, size, options);\n },\n\n _updatePath: function () {\n this._renderer._updateDiamondMarker(this);\n },\n\n _svgCanvasIncludes: function () {\n L.Canvas.include({\n _updateDiamondMarker: function (layer) {\n var latlng = layer._point;\n var offset = layer._size / 2.0;\n var ctx = this._ctx;\n\n ctx.beginPath();\n\n ctx.moveTo(latlng.x, latlng.y + offset);\n ctx.lineTo(latlng.x - offset, latlng.y);\n ctx.lineTo(latlng.x, latlng.y - offset);\n ctx.lineTo(latlng.x + offset, latlng.y);\n\n ctx.closePath();\n\n this._fillStroke(ctx, layer);\n }\n });\n\n L.SVG.include({\n _updateDiamondMarker: function (layer) {\n var latlng = layer._point;\n var offset = layer._size / 2.0;\n\n if (L.Browser.vml) {\n latlng._round();\n offset = Math.round(offset);\n }\n\n var str = 'M' + latlng.x + ',' + (latlng.y + offset) +\n 'L' + (latlng.x - offset) + ',' + latlng.y +\n 'L' + latlng.x + ',' + (latlng.y - offset) +\n 'L' + (latlng.x + offset) + ',' + latlng.y;\n\n str = str + (L.Browser.svg ? 'z' : 'x');\n\n this._setPath(layer, str);\n }\n });\n }\n});\n\nexport var diamondMarker = function (latlng, size, options) {\n return new DiamondMarker(latlng, size, options);\n};\n\nexport default diamondMarker;\n","import {\r\n marker,\r\n icon as leafletIcon,\r\n extend,\r\n circleMarker\r\n} from 'leaflet';\r\nimport Symbol from './Symbol';\r\nimport { squareMarker, xMarker, crossMarker, diamondMarker } from 'leaflet-shape-markers';\r\n\r\nexport var PointSymbol = Symbol.extend({\r\n\r\n statics: {\r\n MARKERTYPES: ['esriSMSCircle', 'esriSMSCross', 'esriSMSDiamond', 'esriSMSSquare', 'esriSMSX', 'esriPMS']\r\n },\r\n\r\n initialize: function (symbolJson, options) {\r\n var url;\r\n Symbol.prototype.initialize.call(this, symbolJson, options);\r\n if (options) {\r\n this.serviceUrl = options.url;\r\n }\r\n if (symbolJson) {\r\n if (symbolJson.type === 'esriPMS') {\r\n var imageUrl = this._symbolJson.url;\r\n if ((imageUrl && imageUrl.substr(0, 7) === 'http://') || (imageUrl.substr(0, 8) === 'https://')) {\r\n // web image\r\n url = this.sanitize(imageUrl);\r\n this._iconUrl = url;\r\n } else {\r\n url = this.serviceUrl + 'images/' + imageUrl;\r\n this._iconUrl = options && options.token ? url + '?token=' + options.token : url;\r\n }\r\n if (symbolJson.imageData) {\r\n this._iconUrl = 'data:' + symbolJson.contentType + ';base64,' + symbolJson.imageData;\r\n }\r\n // leaflet does not allow resizing icons so keep a hash of different\r\n // icon sizes to try and keep down on the number of icons created\r\n this._icons = {};\r\n // create base icon\r\n this.icon = this._createIcon(this._symbolJson);\r\n } else {\r\n this._fillStyles();\r\n }\r\n }\r\n },\r\n\r\n // prevent html injection in strings\r\n sanitize: function (str) {\r\n if (!str) {\r\n return '';\r\n }\r\n var text;\r\n try {\r\n // removes html but leaves url link text\r\n text = str.replace(/
/gi, '\\n');\r\n text = text.replace(//gi, '\\n');\r\n text = text.replace(/(.*?)<\\/a>/gi, ' $2 ($1) ');\r\n text = text.replace(/<(?:.|\\s)*?>/g, '');\r\n } catch (ex) {\r\n text = null;\r\n }\r\n return text;\r\n },\r\n\r\n _fillStyles: function () {\r\n if (this._symbolJson.outline && this._symbolJson.size > 0 && this._symbolJson.outline.style !== 'esriSLSNull') {\r\n this._styles.stroke = true;\r\n this._styles.weight = this.pixelValue(this._symbolJson.outline.width);\r\n this._styles.color = this.colorValue(this._symbolJson.outline.color);\r\n this._styles.opacity = this.alphaValue(this._symbolJson.outline.color);\r\n } else {\r\n this._styles.stroke = false;\r\n }\r\n if (this._symbolJson.color) {\r\n this._styles.fillColor = this.colorValue(this._symbolJson.color);\r\n this._styles.fillOpacity = this.alphaValue(this._symbolJson.color);\r\n } else {\r\n this._styles.fillOpacity = 0;\r\n }\r\n\r\n if (this._symbolJson.style === 'esriSMSCircle') {\r\n this._styles.radius = this.pixelValue(this._symbolJson.size) / 2.0;\r\n }\r\n },\r\n\r\n _createIcon: function (options) {\r\n var width = this.pixelValue(options.width);\r\n var height = width;\r\n if (options.height) {\r\n height = this.pixelValue(options.height);\r\n }\r\n var xOffset = width / 2.0;\r\n var yOffset = height / 2.0;\r\n\r\n if (options.xoffset) {\r\n xOffset += this.pixelValue(options.xoffset);\r\n }\r\n if (options.yoffset) {\r\n yOffset += this.pixelValue(options.yoffset);\r\n }\r\n\r\n var icon = leafletIcon({\r\n iconUrl: this._iconUrl,\r\n iconSize: [width, height],\r\n iconAnchor: [xOffset, yOffset]\r\n });\r\n this._icons[options.width.toString()] = icon;\r\n return icon;\r\n },\r\n\r\n _getIcon: function (size) {\r\n // check to see if it is already created by size\r\n var icon = this._icons[size.toString()];\r\n if (!icon) {\r\n icon = this._createIcon({width: size});\r\n }\r\n return icon;\r\n },\r\n\r\n pointToLayer: function (geojson, latlng, visualVariables, options) {\r\n var size = this._symbolJson.size || this._symbolJson.width;\r\n if (!this._isDefault) {\r\n if (visualVariables.sizeInfo) {\r\n var calculatedSize = this.getSize(geojson, visualVariables.sizeInfo);\r\n if (calculatedSize) {\r\n size = calculatedSize;\r\n }\r\n }\r\n if (visualVariables.colorInfo) {\r\n var color = this.getColor(geojson, visualVariables.colorInfo);\r\n if (color) {\r\n this._styles.fillColor = this.colorValue(color);\r\n this._styles.fillOpacity = this.alphaValue(color);\r\n }\r\n }\r\n }\r\n\r\n if (this._symbolJson.type === 'esriPMS') {\r\n var layerOptions = extend({}, {icon: this._getIcon(size)}, options);\r\n return marker(latlng, layerOptions);\r\n }\r\n size = this.pixelValue(size);\r\n\r\n switch (this._symbolJson.style) {\r\n case 'esriSMSSquare':\r\n return squareMarker(latlng, size, extend({}, this._styles, options));\r\n case 'esriSMSDiamond':\r\n return diamondMarker(latlng, size, extend({}, this._styles, options));\r\n case 'esriSMSCross':\r\n return crossMarker(latlng, size, extend({}, this._styles, options));\r\n case 'esriSMSX':\r\n return xMarker(latlng, size, extend({}, this._styles, options));\r\n }\r\n this._styles.radius = size / 2.0;\r\n return circleMarker(latlng, extend({}, this._styles, options));\r\n }\r\n});\r\n\r\nexport function pointSymbol (symbolJson, options) {\r\n return new PointSymbol(symbolJson, options);\r\n}\r\n\r\nexport default pointSymbol;\r\n","import Symbol from './Symbol';\r\n\r\nexport var LineSymbol = Symbol.extend({\r\n statics: {\r\n // Not implemented 'esriSLSNull'\r\n LINETYPES: ['esriSLSDash', 'esriSLSDot', 'esriSLSDashDotDot', 'esriSLSDashDot', 'esriSLSSolid']\r\n },\r\n initialize: function (symbolJson, options) {\r\n Symbol.prototype.initialize.call(this, symbolJson, options);\r\n this._fillStyles();\r\n },\r\n\r\n _fillStyles: function () {\r\n // set the defaults that show up on arcgis online\r\n this._styles.lineCap = 'butt';\r\n this._styles.lineJoin = 'miter';\r\n this._styles.fill = false;\r\n this._styles.weight = 0;\r\n\r\n if (!this._symbolJson) {\r\n return this._styles;\r\n }\r\n\r\n if (this._symbolJson.color) {\r\n this._styles.color = this.colorValue(this._symbolJson.color);\r\n this._styles.opacity = this.alphaValue(this._symbolJson.color);\r\n }\r\n\r\n if (!isNaN(this._symbolJson.width)) {\r\n this._styles.weight = this.pixelValue(this._symbolJson.width);\r\n\r\n var dashValues = [];\r\n\r\n switch (this._symbolJson.style) {\r\n case 'esriSLSDash':\r\n dashValues = [4, 3];\r\n break;\r\n case 'esriSLSDot':\r\n dashValues = [1, 3];\r\n break;\r\n case 'esriSLSDashDot':\r\n dashValues = [8, 3, 1, 3];\r\n break;\r\n case 'esriSLSDashDotDot':\r\n dashValues = [8, 3, 1, 3, 1, 3];\r\n break;\r\n }\r\n\r\n // use the dash values and the line weight to set dash array\r\n if (dashValues.length > 0) {\r\n for (var i = 0; i < dashValues.length; i++) {\r\n dashValues[i] *= this._styles.weight;\r\n }\r\n\r\n this._styles.dashArray = dashValues.join(',');\r\n }\r\n }\r\n },\r\n\r\n style: function (feature, visualVariables) {\r\n if (!this._isDefault && visualVariables) {\r\n if (visualVariables.sizeInfo) {\r\n var calculatedSize = this.pixelValue(this.getSize(feature, visualVariables.sizeInfo));\r\n if (calculatedSize) {\r\n this._styles.weight = calculatedSize;\r\n }\r\n }\r\n if (visualVariables.colorInfo) {\r\n var color = this.getColor(feature, visualVariables.colorInfo);\r\n if (color) {\r\n this._styles.color = this.colorValue(color);\r\n this._styles.opacity = this.alphaValue(color);\r\n }\r\n }\r\n }\r\n return this._styles;\r\n }\r\n});\r\n\r\nexport function lineSymbol (symbolJson, options) {\r\n return new LineSymbol(symbolJson, options);\r\n}\r\n\r\nexport default lineSymbol;\r\n","import Symbol from './Symbol';\r\nimport lineSymbol from './LineSymbol';\r\n\r\nexport var PolygonSymbol = Symbol.extend({\r\n statics: {\r\n // not implemented: 'esriSFSBackwardDiagonal','esriSFSCross','esriSFSDiagonalCross','esriSFSForwardDiagonal','esriSFSHorizontal','esriSFSNull','esriSFSVertical'\r\n POLYGONTYPES: ['esriSFSSolid']\r\n },\r\n initialize: function (symbolJson, options) {\r\n Symbol.prototype.initialize.call(this, symbolJson, options);\r\n if (symbolJson) {\r\n if (symbolJson.outline && symbolJson.outline.style === 'esriSLSNull') {\r\n this._lineStyles = { weight: 0 };\r\n } else {\r\n this._lineStyles = lineSymbol(symbolJson.outline, options).style();\r\n }\r\n this._fillStyles();\r\n }\r\n },\r\n\r\n _fillStyles: function () {\r\n if (this._lineStyles) {\r\n if (this._lineStyles.weight === 0) {\r\n // when weight is 0, setting the stroke to false can still look bad\r\n // (gaps between the polygons)\r\n this._styles.stroke = false;\r\n } else {\r\n // copy the line symbol styles into this symbol's styles\r\n for (var styleAttr in this._lineStyles) {\r\n this._styles[styleAttr] = this._lineStyles[styleAttr];\r\n }\r\n }\r\n }\r\n\r\n // set the fill for the polygon\r\n if (this._symbolJson) {\r\n if (this._symbolJson.color &&\r\n // don't fill polygon if type is not supported\r\n PolygonSymbol.POLYGONTYPES.indexOf(this._symbolJson.style >= 0)) {\r\n this._styles.fill = true;\r\n this._styles.fillColor = this.colorValue(this._symbolJson.color);\r\n this._styles.fillOpacity = this.alphaValue(this._symbolJson.color);\r\n } else {\r\n this._styles.fill = false;\r\n this._styles.fillOpacity = 0;\r\n }\r\n }\r\n },\r\n\r\n style: function (feature, visualVariables) {\r\n if (!this._isDefault && visualVariables && visualVariables.colorInfo) {\r\n var color = this.getColor(feature, visualVariables.colorInfo);\r\n if (color) {\r\n this._styles.fillColor = this.colorValue(color);\r\n this._styles.fillOpacity = this.alphaValue(color);\r\n }\r\n }\r\n return this._styles;\r\n }\r\n});\r\n\r\nexport function polygonSymbol (symbolJson, options) {\r\n return new PolygonSymbol(symbolJson, options);\r\n}\r\n\r\nexport default polygonSymbol;\r\n","import { Class, Util, circleMarker } from 'leaflet';\r\n\r\nimport pointSymbol from '../Symbols/PointSymbol';\r\nimport lineSymbol from '../Symbols/LineSymbol';\r\nimport polygonSymbol from '../Symbols/PolygonSymbol';\r\n\r\nexport var Renderer = Class.extend({\r\n options: {\r\n proportionalPolygon: false,\r\n clickable: true\r\n },\r\n\r\n initialize: function (rendererJson, options) {\r\n this._rendererJson = rendererJson;\r\n this._pointSymbols = false;\r\n this._symbols = [];\r\n this._visualVariables = this._parseVisualVariables(rendererJson.visualVariables);\r\n Util.setOptions(this, options);\r\n },\r\n\r\n _parseVisualVariables: function (visualVariables) {\r\n var visVars = {};\r\n if (visualVariables) {\r\n for (var i = 0; i < visualVariables.length; i++) {\r\n visVars[visualVariables[i].type] = visualVariables[i];\r\n }\r\n }\r\n return visVars;\r\n },\r\n\r\n _createDefaultSymbol: function () {\r\n if (this._rendererJson.defaultSymbol) {\r\n this._defaultSymbol = this._newSymbol(this._rendererJson.defaultSymbol);\r\n this._defaultSymbol._isDefault = true;\r\n }\r\n },\r\n\r\n _newSymbol: function (symbolJson) {\r\n if (symbolJson.type === 'esriSMS' || symbolJson.type === 'esriPMS') {\r\n this._pointSymbols = true;\r\n return pointSymbol(symbolJson, this.options);\r\n }\r\n if (symbolJson.type === 'esriSLS') {\r\n return lineSymbol(symbolJson, this.options);\r\n }\r\n if (symbolJson.type === 'esriSFS') {\r\n return polygonSymbol(symbolJson, this.options);\r\n }\r\n },\r\n\r\n _getSymbol: function () {\r\n // override\r\n },\r\n\r\n attachStylesToLayer: function (layer) {\r\n if (this._pointSymbols) {\r\n layer.options.pointToLayer = Util.bind(this.pointToLayer, this);\r\n } else {\r\n layer.options.style = Util.bind(this.style, this);\r\n layer._originalStyle = layer.options.style;\r\n }\r\n },\r\n\r\n pointToLayer: function (geojson, latlng) {\r\n var sym = this._getSymbol(geojson);\r\n if (sym && sym.pointToLayer) {\r\n // right now custom panes are the only option pushed through\r\n return sym.pointToLayer(geojson, latlng, this._visualVariables, this.options);\r\n }\r\n // invisible symbology\r\n return circleMarker(latlng, {radius: 0, opacity: 0});\r\n },\r\n\r\n style: function (feature) {\r\n var userStyles;\r\n if (this.options.userDefinedStyle) {\r\n userStyles = this.options.userDefinedStyle(feature);\r\n }\r\n // find the symbol to represent this feature\r\n var sym = this._getSymbol(feature);\r\n if (sym) {\r\n return this.mergeStyles(sym.style(feature, this._visualVariables), userStyles);\r\n } else {\r\n // invisible symbology\r\n return this.mergeStyles({opacity: 0, fillOpacity: 0}, userStyles);\r\n }\r\n },\r\n\r\n mergeStyles: function (styles, userStyles) {\r\n var mergedStyles = {};\r\n var attr;\r\n // copy renderer style attributes\r\n for (attr in styles) {\r\n if (styles.hasOwnProperty(attr)) {\r\n mergedStyles[attr] = styles[attr];\r\n }\r\n }\r\n // override with user defined style attributes\r\n if (userStyles) {\r\n for (attr in userStyles) {\r\n if (userStyles.hasOwnProperty(attr)) {\r\n mergedStyles[attr] = userStyles[attr];\r\n }\r\n }\r\n }\r\n return mergedStyles;\r\n }\r\n});\r\n\r\nexport default Renderer;\r\n","import Renderer from './Renderer';\r\n\r\nexport var SimpleRenderer = Renderer.extend({\r\n initialize: function (rendererJson, options) {\r\n Renderer.prototype.initialize.call(this, rendererJson, options);\r\n this._createSymbol();\r\n },\r\n\r\n _createSymbol: function () {\r\n if (this._rendererJson.symbol) {\r\n this._symbols.push(this._newSymbol(this._rendererJson.symbol));\r\n }\r\n },\r\n\r\n _getSymbol: function () {\r\n return this._symbols[0];\r\n }\r\n});\r\n\r\nexport function simpleRenderer (rendererJson, options) {\r\n return new SimpleRenderer(rendererJson, options);\r\n}\r\n\r\nexport default simpleRenderer;\r\n","import Renderer from './Renderer';\r\n\r\nexport var ClassBreaksRenderer = Renderer.extend({\r\n initialize: function (rendererJson, options) {\r\n Renderer.prototype.initialize.call(this, rendererJson, options);\r\n this._field = this._rendererJson.field;\r\n if (this._rendererJson.normalizationType && this._rendererJson.normalizationType === 'esriNormalizeByField') {\r\n this._normalizationField = this._rendererJson.normalizationField;\r\n }\r\n this._createSymbols();\r\n },\r\n\r\n _createSymbols: function () {\r\n var symbol;\r\n var classbreaks = this._rendererJson.classBreakInfos;\r\n\r\n this._symbols = [];\r\n\r\n // create a symbol for each class break\r\n for (var i = classbreaks.length - 1; i >= 0; i--) {\r\n if (this.options.proportionalPolygon && this._rendererJson.backgroundFillSymbol) {\r\n symbol = this._newSymbol(this._rendererJson.backgroundFillSymbol);\r\n } else {\r\n symbol = this._newSymbol(classbreaks[i].symbol);\r\n }\r\n symbol.val = classbreaks[i].classMaxValue;\r\n this._symbols.push(symbol);\r\n }\r\n // sort the symbols in ascending value\r\n this._symbols.sort(function (a, b) {\r\n return a.val > b.val ? 1 : -1;\r\n });\r\n this._createDefaultSymbol();\r\n this._maxValue = this._symbols[this._symbols.length - 1].val;\r\n },\r\n\r\n _getSymbol: function (feature) {\r\n var val = feature.properties[this._field];\r\n if (this._normalizationField) {\r\n var normValue = feature.properties[this._normalizationField];\r\n if (!isNaN(normValue) && normValue !== 0) {\r\n val = val / normValue;\r\n } else {\r\n return this._defaultSymbol;\r\n }\r\n }\r\n\r\n if (val > this._maxValue) {\r\n return this._defaultSymbol;\r\n }\r\n var symbol = this._symbols[0];\r\n for (var i = this._symbols.length - 1; i >= 0; i--) {\r\n if (val > this._symbols[i].val) {\r\n break;\r\n }\r\n symbol = this._symbols[i];\r\n }\r\n return symbol;\r\n }\r\n});\r\n\r\nexport function classBreaksRenderer (rendererJson, options) {\r\n return new ClassBreaksRenderer(rendererJson, options);\r\n}\r\n\r\nexport default classBreaksRenderer;\r\n","import Renderer from './Renderer';\r\n\r\nexport var UniqueValueRenderer = Renderer.extend({\r\n initialize: function (rendererJson, options) {\r\n Renderer.prototype.initialize.call(this, rendererJson, options);\r\n this._field = this._rendererJson.field1;\r\n this._createSymbols();\r\n },\r\n\r\n _createSymbols: function () {\r\n var symbol;\r\n var uniques = this._rendererJson.uniqueValueInfos;\r\n\r\n // create a symbol for each unique value\r\n for (var i = uniques.length - 1; i >= 0; i--) {\r\n symbol = this._newSymbol(uniques[i].symbol);\r\n symbol.val = uniques[i].value;\r\n this._symbols.push(symbol);\r\n }\r\n this._createDefaultSymbol();\r\n },\r\n\r\n _getSymbol: function (feature) {\r\n var val = feature.properties[this._field];\r\n // accumulate values if there is more than one field defined\r\n if (this._rendererJson.fieldDelimiter && this._rendererJson.field2) {\r\n var val2 = feature.properties[this._rendererJson.field2];\r\n if (val2) {\r\n val += this._rendererJson.fieldDelimiter + val2;\r\n var val3 = feature.properties[this._rendererJson.field3];\r\n if (val3) {\r\n val += this._rendererJson.fieldDelimiter + val3;\r\n }\r\n }\r\n }\r\n\r\n var symbol = this._defaultSymbol;\r\n for (var i = this._symbols.length - 1; i >= 0; i--) {\r\n // using the === operator does not work if the field\r\n // of the unique renderer is not a string\r\n /*eslint-disable */\r\n if (this._symbols[i].val == val) {\r\n symbol = this._symbols[i];\r\n }\r\n /*eslint-enable */\r\n }\r\n return symbol;\r\n }\r\n});\r\n\r\nexport function uniqueValueRenderer (rendererJson, options) {\r\n return new UniqueValueRenderer(rendererJson, options);\r\n}\r\n\r\nexport default uniqueValueRenderer;\r\n","import { Util, GeoJSON, geoJson } from 'leaflet';\r\nimport * as EsriLeaflet from 'esri-leaflet';\r\nimport * as EsriLeafletCluster from 'esri-leaflet-cluster';\r\nimport classBreaksRenderer from './Renderers/ClassBreaksRenderer';\r\nimport uniqueValueRenderer from './Renderers/UniqueValueRenderer';\r\nimport simpleRenderer from './Renderers/SimpleRenderer';\r\n\r\nfunction wireUpRenderers () {\r\n if (this.options.ignoreRenderer) {\r\n return;\r\n }\r\n var oldOnAdd = Util.bind(this.onAdd, this);\r\n var oldUnbindPopup = Util.bind(this.unbindPopup, this);\r\n var oldOnRemove = Util.bind(this.onRemove, this);\r\n\r\n Util.bind(this.createNewLayer, this);\r\n\r\n this.onAdd = function (map) {\r\n this.metadata(function (error, response) {\r\n if (error) {\r\n console.warn('failed to load metadata from the service.');\r\n return;\r\n } if (response && response.drawingInfo) {\r\n if (this.options.drawingInfo) {\r\n // allow L.esri.webmap (and others) to override service symbology with info provided in layer constructor\r\n response.drawingInfo = this.options.drawingInfo;\r\n }\r\n\r\n // the default pane for lines and polygons is 'overlayPane', for points it is 'markerPane'\r\n if (this.options.pane === 'overlayPane' && response.geometryType === 'esriGeometryPoint') {\r\n this.options.pane = 'markerPane';\r\n }\r\n\r\n this._setRenderers(response);\r\n oldOnAdd(map);\r\n this._addPointLayer(map);\r\n }\r\n }, this);\r\n };\r\n\r\n this.onRemove = function (map) {\r\n oldOnRemove(map);\r\n if (this._pointLayer) {\r\n var pointLayers = this._pointLayer.getLayers();\r\n for (var i in pointLayers) {\r\n map.removeLayer(pointLayers[i]);\r\n }\r\n }\r\n };\r\n\r\n this.unbindPopup = function () {\r\n oldUnbindPopup();\r\n if (this._pointLayer) {\r\n var pointLayers = this._pointLayer.getLayers();\r\n for (var i in pointLayers) {\r\n pointLayers[i].unbindPopup();\r\n }\r\n }\r\n };\r\n\r\n this._addPointLayer = function (map) {\r\n if (this._pointLayer) {\r\n this._pointLayer.addTo(map);\r\n this._pointLayer.bringToFront();\r\n }\r\n };\r\n\r\n this._createPointLayer = function () {\r\n if (!this._pointLayer) {\r\n this._pointLayer = geoJson();\r\n // store the feature ids that have already been added to the map\r\n this._pointLayerIds = {};\r\n\r\n if (this._popup) {\r\n var popupFunction = function (feature, layer) {\r\n layer.bindPopup(this._popup(feature, layer), this._popupOptions);\r\n };\r\n this._pointLayer.options.onEachFeature = Util.bind(popupFunction, this);\r\n }\r\n }\r\n };\r\n\r\n this.createNewLayer = function (geojson) {\r\n var fLayer = GeoJSON.geometryToLayer(geojson, this.options);\r\n\r\n // add a point layer when the polygon is represented as proportional marker symbols\r\n if (this._hasProportionalSymbols) {\r\n var centroid = this.getPolygonCentroid(geojson.geometry.coordinates);\r\n if (!(isNaN(centroid[0]) || isNaN(centroid[0]))) {\r\n this._createPointLayer();\r\n\r\n var featureId = geojson.id.toString();\r\n // only add the feature if it does not already exist on the map\r\n if (!this._pointLayerIds[featureId]) {\r\n var pointjson = this.getPointJson(geojson, centroid);\r\n\r\n this._pointLayer.addData(pointjson);\r\n this._pointLayerIds[featureId] = true;\r\n }\r\n\r\n this._pointLayer.bringToFront();\r\n }\r\n }\r\n return fLayer;\r\n };\r\n\r\n this.getPolygonCentroid = function (coordinates) {\r\n var pts = coordinates[0][0];\r\n if (pts.length === 2) {\r\n pts = coordinates[0];\r\n }\r\n\r\n var twicearea = 0;\r\n var x = 0;\r\n var y = 0;\r\n var nPts = pts.length;\r\n var p1;\r\n var p2;\r\n var f;\r\n\r\n for (var i = 0, j = nPts - 1; i < nPts; j = i++) {\r\n p1 = pts[i]; p2 = pts[j];\r\n twicearea += p1[0] * p2[1];\r\n twicearea -= p1[1] * p2[0];\r\n f = (p1[0] * p2[1]) - (p2[0] * p1[1]);\r\n x += (p1[0] + p2[0]) * f;\r\n y += (p1[1] + p2[1]) * f;\r\n }\r\n f = twicearea * 3;\r\n return [x / f, y / f];\r\n };\r\n\r\n this.getPointJson = function (geojson, centroid) {\r\n return {\r\n type: 'Feature',\r\n properties: geojson.properties,\r\n id: geojson.id,\r\n geometry: {\r\n type: 'Point',\r\n coordinates: [centroid[0], centroid[1]]\r\n }\r\n };\r\n };\r\n\r\n this._checkForProportionalSymbols = function (geometryType, renderer) {\r\n this._hasProportionalSymbols = false;\r\n if (geometryType === 'esriGeometryPolygon') {\r\n if (renderer.backgroundFillSymbol) {\r\n this._hasProportionalSymbols = true;\r\n }\r\n // check to see if the first symbol in the classbreaks is a marker symbol\r\n if (renderer.classBreakInfos && renderer.classBreakInfos.length) {\r\n var sym = renderer.classBreakInfos[0].symbol;\r\n if (sym && (sym.type === 'esriSMS' || sym.type === 'esriPMS')) {\r\n this._hasProportionalSymbols = true;\r\n }\r\n }\r\n }\r\n };\r\n\r\n this._setRenderers = function (serviceInfo) {\r\n var rend;\r\n var rendererInfo = serviceInfo.drawingInfo.renderer;\r\n\r\n var options = {\r\n url: this.options.url\r\n };\r\n\r\n if (this.options.token) {\r\n options.token = this.options.token;\r\n }\r\n\r\n if (this.options.pane) {\r\n options.pane = this.options.pane;\r\n }\r\n\r\n if (serviceInfo.drawingInfo.transparency) {\r\n options.layerTransparency = serviceInfo.drawingInfo.transparency;\r\n }\r\n\r\n if (this.options.style) {\r\n options.userDefinedStyle = this.options.style;\r\n }\r\n\r\n switch (rendererInfo.type) {\r\n case 'classBreaks':\r\n this._checkForProportionalSymbols(serviceInfo.geometryType, rendererInfo);\r\n if (this._hasProportionalSymbols) {\r\n this._createPointLayer();\r\n var pRend = classBreaksRenderer(rendererInfo, options);\r\n pRend.attachStylesToLayer(this._pointLayer);\r\n options.proportionalPolygon = true;\r\n }\r\n rend = classBreaksRenderer(rendererInfo, options);\r\n break;\r\n case 'uniqueValue':\r\n rend = uniqueValueRenderer(rendererInfo, options);\r\n break;\r\n default:\r\n rend = simpleRenderer(rendererInfo, options);\r\n }\r\n rend.attachStylesToLayer(this);\r\n };\r\n}\r\n\r\nEsriLeaflet.FeatureLayer.addInitHook(wireUpRenderers);\r\n\r\nif (typeof EsriLeafletCluster !== 'undefined') {\r\n EsriLeafletCluster.FeatureLayer.addInitHook(wireUpRenderers);\r\n}\r\n"],"names":["Symbol","Class","extend","initialize","symbolJson","options","this","_symbolJson","val","_styles","_isDefault","_layerTransparency","layerTransparency","pixelValue","pointValue","colorValue","color","alphaValue","getSize","feature","sizeInfo","attr","properties","field","size","featureValue","minSize","maxSize","minDataValue","maxDataValue","normField","normalizationField","normValue","parseFloat","undefined","isNaN","getColor","colorInfo","stops","lowerBoundColor","upperBoundColor","lowerBound","upperBound","value","lastStop","length","i","stopInfo","range","upperBoundColorWeight","lowerBoundColorWeight","interpolatedColor","j","Math","round","ShapeMarker","L","Path","latlng","setOptions","_size","_latlng","latLng","_svgCanvasIncludes","toGeoJSON","GeoJSON","getFeature","type","coordinates","latLngToCoords","getLatLng","_project","_point","_map","latLngToLayerPoint","_update","_updatePath","setLatLng","redraw","fire","setSize","CrossMarker","prototype","call","_renderer","_updateCrossMarker","Canvas","include","layer","offset","ctx","_ctx","beginPath","moveTo","x","y","lineTo","_fillStroke","SVG","Browser","vml","_round","str","_setPath","XMarker","_updateXMarker","SquareMarker","fill","_updateSquareMarker","closePath","svg","DiamondMarker","_updateDiamondMarker","PointSymbol","statics","MARKERTYPES","url","imageUrl","serviceUrl","substr","sanitize","_iconUrl","token","imageData","contentType","_icons","icon","_createIcon","_fillStyles","text","replace","ex","outline","style","stroke","weight","width","opacity","fillColor","fillOpacity","radius","height","xOffset","yOffset","xoffset","yoffset","leafletIcon","iconUrl","iconSize","iconAnchor","toString","_getIcon","pointToLayer","geojson","visualVariables","calculatedSize","layerOptions","marker","circleMarker","pointSymbol","LineSymbol","LINETYPES","lineCap","lineJoin","dashValues","dashArray","join","lineSymbol","PolygonSymbol","POLYGONTYPES","_lineStyles","styleAttr","indexOf","polygonSymbol","Renderer","proportionalPolygon","clickable","rendererJson","_rendererJson","_pointSymbols","_symbols","_visualVariables","_parseVisualVariables","Util","visVars","_createDefaultSymbol","defaultSymbol","_defaultSymbol","_newSymbol","_getSymbol","attachStylesToLayer","bind","_originalStyle","sym","userStyles","userDefinedStyle","mergeStyles","styles","mergedStyles","hasOwnProperty","SimpleRenderer","_createSymbol","symbol","push","simpleRenderer","ClassBreaksRenderer","_field","normalizationType","_normalizationField","_createSymbols","classbreaks","classBreakInfos","backgroundFillSymbol","classMaxValue","sort","a","b","_maxValue","classBreaksRenderer","UniqueValueRenderer","field1","uniques","uniqueValueInfos","val2","val3","fieldDelimiter","field2","field3","uniqueValueRenderer","wireUpRenderers","oldOnAdd","oldUnbindPopup","oldOnRemove","ignoreRenderer","onAdd","unbindPopup","onRemove","createNewLayer","map","metadata","error","response","console","warn","drawingInfo","pane","geometryType","_setRenderers","_addPointLayer","_pointLayer","pointLayers","getLayers","removeLayer","addTo","bringToFront","_createPointLayer","geoJson","_pointLayerIds","_popup","onEachFeature","bindPopup","_popupOptions","centroid","featureId","pointjson","fLayer","geometryToLayer","_hasProportionalSymbols","getPolygonCentroid","geometry","id","getPointJson","addData","pts","p1","p2","f","twicearea","nPts","_checkForProportionalSymbols","renderer","serviceInfo","rend","rendererInfo","transparency","addInitHook","EsriLeafletCluster","EsriLeafletCluster.FeatureLayer"],"mappings":"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"} \ No newline at end of file