{"version":3,"sources":["webpack://@amcharts/amcharts5/./node_modules/polylabel/polylabel.js","webpack://@amcharts/amcharts5/./node_modules/tinyqueue/index.js","webpack://@amcharts/amcharts5/./src/.internal/charts/map/MapSeries.ts","webpack://@amcharts/amcharts5/./node_modules/d3-array/src/fsum.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/math.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/noop.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/stream.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/length.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/distance.js","webpack://@amcharts/amcharts5/./src/.internal/charts/map/MapLine.ts","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/interpolate.js","webpack://@amcharts/amcharts5/./src/.internal/charts/map/MapLineSeries.ts","webpack://@amcharts/amcharts5/./node_modules/d3-array/src/range.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/graticule.js","webpack://@amcharts/amcharts5/./src/.internal/charts/map/GraticuleSeries.ts","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/compose.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/rotation.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/clip/buffer.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/pointEqual.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/clip/rejoin.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/cartesian.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/polygonContains.js","webpack://@amcharts/amcharts5/./node_modules/d3-array/src/merge.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/clip/index.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/clip/antimeridian.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/constant.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/circle.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/clip/circle.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/clip/rectangle.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/clip/line.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/identity.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/transform.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/path/bounds.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/projection/fit.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/projection/resample.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/projection/index.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/projection/mercator.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/path/area.js","webpack://@amcharts/amcharts5/./src/.internal/charts/map/MapChartDefaultTheme.ts","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/path/centroid.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/path/context.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/path/measure.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/path/string.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/centroid.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/area.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/bounds.js","webpack://@amcharts/amcharts5/./src/.internal/charts/map/MapUtils.ts","webpack://@amcharts/amcharts5/./src/.internal/charts/map/MapChart.ts","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/path/index.js","webpack://@amcharts/amcharts5/./src/.internal/charts/map/MapPointSeries.ts","webpack://@amcharts/amcharts5/./src/.internal/charts/map/MapPolygon.ts","webpack://@amcharts/amcharts5/./src/.internal/charts/map/MapPolygonSeries.ts","webpack://@amcharts/amcharts5/./src/.internal/charts/map/ZoomControl.ts","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/projection/orthographic.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/projection/equirectangular.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/projection/conicEqualArea.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/projection/cylindricalEqualArea.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/projection/conic.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/projection/albersUsa.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/projection/albers.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/projection/azimuthal.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/projection/equalEarth.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/projection/naturalEarth1.js","webpack://@amcharts/amcharts5/./tmp/webpack/map.js"],"names":["Queue","polylabel","polygon","precision","debug","minX","minY","maxX","maxY","i","length","p","width","height","cellSize","Math","min","h","degeneratePoleOfInaccessibility","distance","cellQueue","undefined","compareMax","x","y","push","Cell","bestCell","area","points","len","j","a","b","f","getCentroidCell","bboxCell","d","numProbes","cell","pop","console","log","round","max","poleOfInaccessibility","this","inside","minDistSq","Infinity","k","ring","getSegDistSq","sqrt","pointToPolygonDist","SQRT2","px","py","dx","dy","t","default","module","exports","TinyQueue","data","compare","defaultCompare","_down","item","_up","top","bottom","pos","parent","current","halfLength","left","best","right","fields","_setRawDefault","on","geoJSON","previous","_prevSettings","clear","_afterNew","_prepareChildren","_valuesDirty","isDirty","get","_geoJSONparsed","_parseGeoJSON","id","includes","excludes","indexOf","features","type","geometry","feature","_types","checkInclude","dataItem","dataItems","value","dataObject","dataContext","geometryType","set","processDataItem","madeFromGeoData","properties","events","isEnabled","dispatch","target","_chart","children","moveValue","bulletsContainer","chart","getPrivate","_geometries","markDirtyGeometries","_dispose","series","removeValue","Series","MapSeries","className","Adder","_partials","Float64Array","_n","hi","lo","abs","n","epsilon","epsilon2","pi","PI","halfPi","quarterPi","tau","degrees","radians","atan","atan2","cos","ceil","exp","hypot","floor","pow","sin","sign","tan","asin","haversin","noop","streamGeometry","stream","streamGeometryType","hasOwnProperty","lengthSum","lambda0","sinPhi0","cosPhi0","streamObjectType","Feature","object","FeatureCollection","Sphere","sphere","Point","coordinates","point","MultiPoint","LineString","streamLine","MultiLineString","Polygon","streamPolygon","MultiPolygon","GeometryCollection","geometries","closed","coordinate","lineStart","lineEnd","polygonStart","polygonEnd","lengthStream","lengthPointFirst","lengthLineEnd","lambda","phi","lengthPoint","sinPhi","cosPhi","delta","cosDelta","z","add","_beforeChanged","_projectionDirty","clipAngle","_clear","_display","context","markDirty","_clearDirty","position","totalDistance","currentDistance","positionA","positionB","pointA","pointB","segments","s","segment","positionAB","x0","y0","x1","y1","cy0","sy0","cy1","sy1","kx0","ky0","kx1","ky1","interpolate","B","A","longitude","latitude","Graphics","MapLine","List","Template","_root","mapLines","template","mapLine","make","_setDataItem","markDirtyProjection","makeMapLine","pointsToConnect","markDirtyValues","setPrivate","coords","setRaw","disposeDataItem","dispose","classNames","concat","MapLineSeries","start","stop","step","arguments","range","Array","graticuleX","map","graticuleY","makeDataItem","_dataItem","_generate","_updateChildren","graticule","X1","X0","Y1","Y0","X","Y","DX","DY","lines","filter","outline","slice","reverse","extent","_","extentMajor","extentMinor","stepMajor","stepMinor","GraticuleSeries","compose","invert","rotationIdentity","rotateRadians","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","rotation","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","line","m","rejoin","shift","result","Intersection","other","entry","o","e","v","compareIntersection","startInside","subject","clip","forEach","p0","p1","pointEqual","sort","isSubject","array","spherical","cartesian","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","vector","cartesianNormalizeInPlace","l","merge","arrays","from","flatten","pointVisible","clipLine","sink","ringBuffer","ringSink","polygonStarted","pointRing","ringStart","ringEnd","normal","angle","winding","sum","point0","phi0","lambda1","sinPhi1","cosPhi1","point1","phi1","absDelta","antimeridian","arc","intersection","phiArc","polygonContains","pointLine","clean","ringSegments","validSegment","NaN","sign0","sign1","sinLambda0Lambda1","clipAntimeridianIntersect","to","direction","circleStream","radius","t0","t1","cosRadius","sinRadius","circleRadius","acos","cr","smallRadius","notHemisphere","visible","intersect","two","n1","n2","n2n2","n1n2","determinant","c1","c2","n1xn2","u","w","uu","t2","q","polar","q1","code","r","c0","v0","v00","point2","c","clipMax","clipMin","clipRectangle","a1","corner","comparePoint","ca","cb","x__","y__","v__","x_","y_","v_","first","activeStream","bufferStream","clipStream","linePoint","a0","b0","b1","polygonInside","cleanInside","ax","ay","transformer","methods","TransformStream","key","prototype","constructor","bounds","fit","projection","fitBounds","clipExtent","scale","translate","fitExtent","fitSize","size","fitWidth","fitHeight","cosMinDistance","project","delta2","resampleLineTo","depth","d2","phi2","lambda2","x2","y2","dx2","dy2","dz","lambda00","x00","y00","a00","b00","c00","resampleStream","ringPoint","resampleNone","transformRadians","scaleTranslateRotate","sx","sy","alpha","transform","scaleTranslate","cosAlpha","sinAlpha","ai","bi","ci","fi","projectionMutator","projectAt","rotate","projectResample","projectTransform","projectRotateTransform","cache","cacheStream","theta","preclip","postclip","identity","recenter","center","apply","resample","reset","transformRotate","reflectX","reflectY","mercatorRaw","reclip","forward","mercatorProjection","setupDefaultRules","rule","ic","interfaceColors","bind","setAll","panX","panY","pinchZoom","zoomStep","zoomLevel","rotationX","rotationY","rotationZ","maxZoomLevel","minZoomLevel","wheelY","wheelX","animationEasing","wheelEasing","wheelDuration","wheelSensitivity","maxPanOut","role","clipFront","clipBack","isMeasured","fillOpacity","strokeWidth","strokeOpacity","draw","display","moveTo","lineTo","Theme","areaSum","areaRingSum","areaStream","areaRingStart","areaRingEnd","areaPointFirst","areaPoint","Z0","Z1","X2","Y2","Z2","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","centroid","centroidPointFirstLine","centroidPointLine","centroidPointFirstRing","centroidPointRing","PathContext","_context","_radius","pointRadius","_line","_point","closePath","lengthRing","PathString","_string","_circle","join","W0","W1","phi00","z0","centroidPointCartesian","centroidLinePointFirst","centroidLinePoint","centroidRingPointFirst","centroidRingPoint","cx","cy","cz","deltaSum","ranges","areaRing","dLambda","sdLambda","adLambda","boundsLineStart","boundsLineEnd","boundsRingPoint","boundsRingStart","boundsRingEnd","inflection","phii","lambdai","rangeCompare","rangeContains","getGeoCircle","geoPoint","constant","circle","getGeoCentroid","getGeoBounds","merged","deltaMax","getGeoRectangle","north","east","south","west","multiPolygon","stepLong","stepLat","ln","surface","ll","lt","normalizeGeoPoint","wrapAngleTo180","latitude180","path","projectionStream","contextStream","measure","setPrivateRaw","_geoCentroid","_geoBounds","chartContainer","_wheelDp","event","wheelEvent","originalEvent","preventDefault","toLocal","_handleWheelZoom","deltaY","_handleWheelRotateY","_handleWheelRotateX","deltaX","_disposers","innerWidth","innerHeight","_makeGeoPath","_fitMap","prev","hw","hh","centerLocation","xy","xx","yy","_handleSetWheel","previousGeometries","_geometryColection","_dirtyGeometries","each","_pw","_ph","newScale","_centerLocation","zoomControl","_disposeProperty","_mapBounds","prevGeoBounds","_prevGeoBounds","_dispatchBounds","_mapFitted","duration","homeGeoPoint","homeZoomLevel","zoomToGeoPoint","_afterChanged","_defaultThemes","MapChartDefaultTheme","new","_settings","themeTags","seriesContainer","Rectangle","fill","Color","_handleChartDown","_handleChartUp","_handleChartMove","license","match","_showBranding","_downZoomLevel","count","_downPoints","_downTranslateX","_downTranslateY","_downRotationX","_downRotationY","_downRotationZ","downId","_getDownPointId","movePoint","_movePoints","bg","enableType","_za","_txa","_tya","_rxa","_rya","downPoint","l0","l1","_pLon","_pLat","_event","downPoints","movePoints","downPoint0","downPoint1","movePoint0","movePoint1","initialDistance","level","moveCenter","downCenter","tx","ty","_getDownPoint","downPointId","pointerId","_handlePinch","local","disableType","downLocation","location","easing","animate","newZoomLevel","zoomToPoint","geoBounds","mapBounds","convert","zl","readerAlert","_t","locale","SerialChart","MapChart","_positionBullets","bullets","bulletFunction","_makeBullet","bullet","sprite","lineDataItem","isType","lineDI","getDataItemById","polygonDataItem","polygonDI","positionOnLine","visualCentroid","positionToGeoPoint","geoPoint0","geoPoint1","_positionBulletReal","index","_index","geoPath","MapPointSeries","isHover","showTooltip","biggestArea","MapPolygon","mapPolygons","mapPolygon","makeMapPolygon","_addGeometry","_removeGeometry","zoomToGeoBounds","MapPolygonSeries","Button","verticalLayout","plusButton","icon","layout","minusButton","isPrivateDirty","_prevPrivateSettings","_disposer","zoomIn","zoomOut","Container","ZoomControl","orthographicRaw","equirectangularRaw","conicEqualAreaRaw","cylindricalEqualAreaRaw","r0","r0y","parallels","conicProjection","lower48Point","alaskaPoint","hawaiiPoint","lower48","conicEqualArea","alaska","hawaii","pointStream","albersUsa","streams","sc","cc","azimuthalInvert","A1","A2","A3","A4","M","equalEarthRaw","l2","l6","naturalEarth1Raw","phi4","am5map"],"mappings":"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","file":"map.js","sourcesContent":["'use strict';\n\nvar Queue = require('tinyqueue');\n\nif (Queue.default) Queue = Queue.default; // temporary webpack fix\n\nmodule.exports = polylabel;\nmodule.exports.default = polylabel;\n\nfunction polylabel(polygon, precision, debug) {\n precision = precision || 1.0;\n\n // find the bounding box of the outer ring\n var minX, minY, maxX, maxY;\n for (var i = 0; i < polygon[0].length; i++) {\n var p = polygon[0][i];\n if (!i || p[0] < minX) minX = p[0];\n if (!i || p[1] < minY) minY = p[1];\n if (!i || p[0] > maxX) maxX = p[0];\n if (!i || p[1] > maxY) maxY = p[1];\n }\n\n var width = maxX - minX;\n var height = maxY - minY;\n var cellSize = Math.min(width, height);\n var h = cellSize / 2;\n\n if (cellSize === 0) {\n var degeneratePoleOfInaccessibility = [minX, minY];\n degeneratePoleOfInaccessibility.distance = 0;\n return degeneratePoleOfInaccessibility;\n }\n\n // a priority queue of cells in order of their \"potential\" (max distance to polygon)\n var cellQueue = new Queue(undefined, compareMax);\n\n // cover polygon with initial cells\n for (var x = minX; x < maxX; x += cellSize) {\n for (var y = minY; y < maxY; y += cellSize) {\n cellQueue.push(new Cell(x + h, y + h, h, polygon));\n }\n }\n\n // take centroid as the first best guess\n var bestCell = getCentroidCell(polygon);\n\n // special case for rectangular polygons\n var bboxCell = new Cell(minX + width / 2, minY + height / 2, 0, polygon);\n if (bboxCell.d > bestCell.d) bestCell = bboxCell;\n\n var numProbes = cellQueue.length;\n\n while (cellQueue.length) {\n // pick the most promising cell from the queue\n var cell = cellQueue.pop();\n\n // update the best cell if we found a better one\n if (cell.d > bestCell.d) {\n bestCell = cell;\n if (debug) console.log('found best %d after %d probes', Math.round(1e4 * cell.d) / 1e4, numProbes);\n }\n\n // do not drill down further if there's no chance of a better solution\n if (cell.max - bestCell.d <= precision) continue;\n\n // split the cell into four cells\n h = cell.h / 2;\n cellQueue.push(new Cell(cell.x - h, cell.y - h, h, polygon));\n cellQueue.push(new Cell(cell.x + h, cell.y - h, h, polygon));\n cellQueue.push(new Cell(cell.x - h, cell.y + h, h, polygon));\n cellQueue.push(new Cell(cell.x + h, cell.y + h, h, polygon));\n numProbes += 4;\n }\n\n if (debug) {\n console.log('num probes: ' + numProbes);\n console.log('best distance: ' + bestCell.d);\n }\n\n var poleOfInaccessibility = [bestCell.x, bestCell.y];\n poleOfInaccessibility.distance = bestCell.d;\n return poleOfInaccessibility;\n}\n\nfunction compareMax(a, b) {\n return b.max - a.max;\n}\n\nfunction Cell(x, y, h, polygon) {\n this.x = x; // cell center x\n this.y = y; // cell center y\n this.h = h; // half the cell size\n this.d = pointToPolygonDist(x, y, polygon); // distance from cell center to polygon\n this.max = this.d + this.h * Math.SQRT2; // max distance to polygon within a cell\n}\n\n// signed distance from point to polygon outline (negative if point is outside)\nfunction pointToPolygonDist(x, y, polygon) {\n var inside = false;\n var minDistSq = Infinity;\n\n for (var k = 0; k < polygon.length; k++) {\n var ring = polygon[k];\n\n for (var i = 0, len = ring.length, j = len - 1; i < len; j = i++) {\n var a = ring[i];\n var b = ring[j];\n\n if ((a[1] > y !== b[1] > y) &&\n (x < (b[0] - a[0]) * (y - a[1]) / (b[1] - a[1]) + a[0])) inside = !inside;\n\n minDistSq = Math.min(minDistSq, getSegDistSq(x, y, a, b));\n }\n }\n\n return minDistSq === 0 ? 0 : (inside ? 1 : -1) * Math.sqrt(minDistSq);\n}\n\n// get polygon centroid\nfunction getCentroidCell(polygon) {\n var area = 0;\n var x = 0;\n var y = 0;\n var points = polygon[0];\n\n for (var i = 0, len = points.length, j = len - 1; i < len; j = i++) {\n var a = points[i];\n var b = points[j];\n var f = a[0] * b[1] - b[0] * a[1];\n x += (a[0] + b[0]) * f;\n y += (a[1] + b[1]) * f;\n area += f * 3;\n }\n if (area === 0) return new Cell(points[0][0], points[0][1], 0, polygon);\n return new Cell(x / area, y / area, 0, polygon);\n}\n\n// get squared distance from a point to a segment\nfunction getSegDistSq(px, py, a, b) {\n\n var x = a[0];\n var y = a[1];\n var dx = b[0] - x;\n var dy = b[1] - y;\n\n if (dx !== 0 || dy !== 0) {\n\n var t = ((px - x) * dx + (py - y) * dy) / (dx * dx + dy * dy);\n\n if (t > 1) {\n x = b[0];\n y = b[1];\n\n } else if (t > 0) {\n x += dx * t;\n y += dy * t;\n }\n }\n\n dx = px - x;\n dy = py - y;\n\n return dx * dx + dy * dy;\n}\n","\nexport default class TinyQueue {\n constructor(data = [], compare = defaultCompare) {\n this.data = data;\n this.length = this.data.length;\n this.compare = compare;\n\n if (this.length > 0) {\n for (let i = (this.length >> 1) - 1; i >= 0; i--) this._down(i);\n }\n }\n\n push(item) {\n this.data.push(item);\n this.length++;\n this._up(this.length - 1);\n }\n\n pop() {\n if (this.length === 0) return undefined;\n\n const top = this.data[0];\n const bottom = this.data.pop();\n this.length--;\n\n if (this.length > 0) {\n this.data[0] = bottom;\n this._down(0);\n }\n\n return top;\n }\n\n peek() {\n return this.data[0];\n }\n\n _up(pos) {\n const {data, compare} = this;\n const item = data[pos];\n\n while (pos > 0) {\n const parent = (pos - 1) >> 1;\n const current = data[parent];\n if (compare(item, current) >= 0) break;\n data[pos] = current;\n pos = parent;\n }\n\n data[pos] = item;\n }\n\n _down(pos) {\n const {data, compare} = this;\n const halfLength = this.length >> 1;\n const item = data[pos];\n\n while (pos < halfLength) {\n let left = (pos << 1) + 1;\n let best = data[left];\n const right = left + 1;\n\n if (right < this.length && compare(data[right], best) < 0) {\n left = right;\n best = data[right];\n }\n if (compare(best, item) >= 0) break;\n\n data[pos] = best;\n pos = left;\n }\n\n data[pos] = item;\n }\n}\n\nfunction defaultCompare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n","import type { MapChart } from \"./MapChart\";\nimport type { GeoProjection, GeoPath } from \"d3-geo\";\n\nimport { Series, ISeriesSettings, ISeriesDataItem, ISeriesPrivate, ISeriesEvents } from \"../../core/render/Series\";\n\nimport * as $array from \"../../core/util/Array\";\nimport * as $object from \"../../core/util/Object\";\n\nexport interface IMapSeriesDataItem extends ISeriesDataItem {\n\tgeometry?: GeoJSON.Geometry;\n\tgeometryType?: GeoJSON.GeoJsonGeometryTypes;\n\tvalue?: number;\n}\n\nexport interface IMapSeriesSettings extends ISeriesSettings {\n\n\t/**\n\t * Map data in GeoJSON format.\n\t */\n\tgeoJSON?: GeoJSON.GeoJSON;\n\n\t/**\n\t * An array of map object ids from geodata to include in the map.\n\t *\n\t * If set, only those objects listed in `include` will be shown.\n\t */\n\tinclude?: Array;\n\n\t/**\n\t * An array of map object ids from geodata to omit when showing the map.\n\t */\n\texclude?: Array;\n\n\t/**\n\t * A field in series `data` that will hold map object's numeric value.\n\t *\n\t * It can be used in a number of places, e.g. tooltips, heat rules, etc.\n\t */\n\tvalueField?: string;\n\n\t/**\n\t * @ignore\n\t */\n\tgeometryField?: string;\n\n\t/**\n\t * @ignore\n\t */\n\tgeometryTypeField?: string;\n}\n\nexport interface IMapSeriesPrivate extends ISeriesPrivate {\n}\n\nexport interface IMapSeriesEvents extends ISeriesEvents {\n\n\t/**\n\t * Invoked when geodata is finished loading and processed.\n\t */\n\tgeodataprocessed: {};\n\n}\n\n/**\n * Base class for map series.\n */\nexport abstract class MapSeries extends Series {\n\tpublic static className: string = \"MapSeries\";\n\tpublic static classNames: Array = Series.classNames.concat([MapSeries.className]);\n\n\tdeclare public chart: MapChart | undefined;\n\tdeclare public _settings: IMapSeriesSettings;\n\tdeclare public _privateSettings: IMapSeriesPrivate;\n\tdeclare public _dataItemSettings: IMapSeriesDataItem;\n\tdeclare public _events: IMapSeriesEvents;\n\n\tprotected _types: Array = [];\n\n\tpublic _geometries: Array = [];\n\tprotected _geoJSONparsed: boolean = false;\n\n\tprotected _afterNew() {\n\t\tthis.fields.push(\"geometry\", \"geometryType\");\n\t\tthis._setRawDefault(\"geometryField\", \"geometry\");\n\t\tthis._setRawDefault(\"geometryTypeField\", \"geometryType\");\n\t\tthis._setRawDefault(\"idField\", \"id\");\n\n\t\tthis.on(\"geoJSON\", (geoJSON) => {\n\t\t\tlet previous = this._prevSettings.geoJSON;\n\t\t\tif (previous && previous != geoJSON) {\n\t\t\t\tthis.data.clear();\n\t\t\t}\n\t\t})\n\n\t\tsuper._afterNew();\n\t}\n\n\tpublic _prepareChildren() {\n\t\tsuper._prepareChildren();\n\n\t\tif (this._valuesDirty || this.isDirty(\"geoJSON\") || this.isDirty(\"include\") || this.isDirty(\"exclude\")) {\n\t\t\tconst geoJSON = this.get(\"geoJSON\");\n\t\t\tlet previous = this._prevSettings.geoJSON;\n\n\t\t\tif (previous && previous != geoJSON) {\n\t\t\t\tthis._prevSettings.geoJSON = undefined;\n\t\t\t\tthis._geoJSONparsed = false;\n\t\t\t}\n\n\t\t\tif (!this._geoJSONparsed) {\n\t\t\t\tthis._parseGeoJSON();\n\t\t\t\tthis._geoJSONparsed = true;\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected checkInclude(id: string, includes: string[] | undefined, excludes?: string[] | undefined): boolean {\n\t\tif (includes) {\n\t\t\tif (includes.length == 0) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (includes.indexOf(id) == -1) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (excludes && excludes.length > 0) {\n\t\t\tif (excludes.indexOf(id) != -1) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tprotected _parseGeoJSON() {\n\n\t\tconst geoJSON = this.get(\"geoJSON\");\n\t\tif (geoJSON) {\n\n\t\t\tlet features!: any[];\n\n\t\t\tif (geoJSON.type == \"FeatureCollection\") {\n\t\t\t\tfeatures = geoJSON.features;\n\t\t\t}\n\t\t\telse if (geoJSON.type == \"Feature\") {\n\t\t\t\tfeatures = [geoJSON];\n\t\t\t}\n\t\t\telse if ([\"Point\", \"LineString\", \"Polygon\", \"MultiPoint\", \"MultiLineString\", \"MultiPolygon\"].indexOf(geoJSON.type) != -1) {\n\t\t\t\tfeatures = [{ geometry: geoJSON }];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconsole.log(\"nothing found in geoJSON\");\n\t\t\t}\n\n\t\t\tif (features) {\n\n\t\t\t\tfor (let i = 0, len = features.length; i < len; i++) {\n\t\t\t\t\tlet feature: any = features[i];\n\t\t\t\t\tlet geometry: any = feature.geometry;\n\n\t\t\t\t\tif (geometry) {\n\t\t\t\t\t\tlet type = geometry.type;\n\t\t\t\t\t\tlet id: string = feature.id;\n\n\t\t\t\t\t\t// @todo\n\t\t\t\t\t\t//if (this.chart.geodataNames && this.chart.geodataNames[id]) {\n\t\t\t\t\t\t//\tfeature.properties.name = this.chart.geodataNames[id];\n\t\t\t\t\t\t//}\n\n\t\t\t\t\t\tif (this._types.indexOf(type) != -1) {\n\t\t\t\t\t\t\tif (!this.checkInclude(id, this.get(\"include\"), this.get(\"exclude\"))) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlet dataItem: any;\n\n\t\t\t\t\t\t\tif (id != null) {\n\t\t\t\t\t\t\t\t// find data object in user-provided data\n\t\t\t\t\t\t\t\tdataItem = $array.find(this.dataItems, (value: any) => {\n\t\t\t\t\t\t\t\t\treturn value.get(\"id\") == id;\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlet dataObject: any;\n\n\t\t\t\t\t\t\tif (dataItem) {\n\t\t\t\t\t\t\t\tdataObject = dataItem.dataContext;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// create one if not found\n\t\t\t\t\t\t\tif (!dataItem) {\n\t\t\t\t\t\t\t\tdataObject = { geometry: geometry, geometryType: type, id: id, madeFromGeoData: true };\n\t\t\t\t\t\t\t\tthis.data.push(dataObject);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// in case found\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t// if user-provided object doesn't have points data provided in any way:\n\t\t\t\t\t\t\t\tif (!dataObject.geometry) {\n\t\t\t\t\t\t\t\t\tdataObject.geometry = geometry;\n\t\t\t\t\t\t\t\t\tdataObject.geometryType = type;\n\t\t\t\t\t\t\t\t\tdataItem.set(\"geometry\", geometry);\n\t\t\t\t\t\t\t\t\tdataItem.set(\"geometryType\", type);\n\t\t\t\t\t\t\t\t\tthis.processDataItem(dataItem);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// copy properties data to datacontext\n\t\t\t\t\t\t\t$object.softCopyProperties(feature.properties, dataObject);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst type = \"geodataprocessed\";\n\t\t\tif (this.events.isEnabled(type)) {\n\t\t\t\tthis.events.dispatch(type, { type: type, target: this });\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic abstract markDirtyProjection(): void\n\n\tpublic _placeBulletsContainer(_chart: MapChart) {\n\t\tthis.children.moveValue(this.bulletsContainer);\n\t}\n\n\tpublic _removeBulletsContainer() {\n\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic projection(): GeoProjection | undefined {\n\t\tconst chart = this.chart;\n\t\tif (chart) {\n\t\t\treturn chart.get(\"projection\");\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic geoPath(): GeoPath | undefined {\n\t\tconst chart = this.chart;\n\t\tif (chart) {\n\t\t\treturn chart.getPrivate(\"geoPath\");\n\t\t}\n\t}\n\n\tprotected _addGeometry(geometry: any) {\n\t\tif (geometry) {\n\t\t\tthis._geometries.push(geometry);\n\n\t\t\tconst chart = this.chart;\n\t\t\tif (chart) {\n\t\t\t\tchart.markDirtyGeometries();\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected _removeGeometry(geometry: any) {\n\t\tif (geometry) {\n\t\t\t$array.remove(this._geometries, geometry);\n\n\t\t\tconst chart = this.chart;\n\t\t\tif (chart) {\n\t\t\t\tchart.markDirtyGeometries();\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected _dispose() {\n\t\tsuper._dispose();\n\n\t\tconst chart = this.chart;\n\t\tif (chart) {\n\t\t\tchart.series.removeValue(this);\n\t\t}\n\t}\n}\n","// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nexport class Adder {\n constructor() {\n this._partials = new Float64Array(32);\n this._n = 0;\n }\n add(x) {\n const p = this._partials;\n let i = 0;\n for (let j = 0; j < this._n && j < 32; j++) {\n const y = p[j],\n hi = x + y,\n lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n if (lo) p[i++] = lo;\n x = hi;\n }\n p[i] = x;\n this._n = i + 1;\n return this;\n }\n valueOf() {\n const p = this._partials;\n let n = this._n, x, y, lo, hi = 0;\n if (n > 0) {\n hi = p[--n];\n while (n > 0) {\n x = hi;\n y = p[--n];\n hi = x + y;\n lo = y - (hi - x);\n if (lo) break;\n }\n if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {\n y = lo * 2;\n x = hi + y;\n if (y == x - hi) hi = x;\n }\n }\n return hi;\n }\n}\n\nexport function fsum(values, valueof) {\n const adder = new Adder();\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n adder.add(value);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n adder.add(value);\n }\n }\n }\n return +adder;\n}\n\nexport function fcumsum(values, valueof) {\n const adder = new Adder();\n let index = -1;\n return Float64Array.from(values, valueof === undefined\n ? v => adder.add(+v || 0)\n : v => adder.add(+valueof(v, ++index, values) || 0)\n );\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var hypot = Math.hypot;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n","import {Adder} from \"d3-array\";\nimport {abs, atan2, cos, radians, sin, sqrt} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nvar lengthSum,\n lambda0,\n sinPhi0,\n cosPhi0;\n\nvar lengthStream = {\n sphere: noop,\n point: noop,\n lineStart: lengthLineStart,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop\n};\n\nfunction lengthLineStart() {\n lengthStream.point = lengthPointFirst;\n lengthStream.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n lengthStream.point = lengthStream.lineEnd = noop;\n}\n\nfunction lengthPointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n lambda0 = lambda, sinPhi0 = sin(phi), cosPhi0 = cos(phi);\n lengthStream.point = lengthPoint;\n}\n\nfunction lengthPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var sinPhi = sin(phi),\n cosPhi = cos(phi),\n delta = abs(lambda - lambda0),\n cosDelta = cos(delta),\n sinDelta = sin(delta),\n x = cosPhi * sinDelta,\n y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta,\n z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta;\n lengthSum.add(atan2(sqrt(x * x + y * y), z));\n lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi;\n}\n\nexport default function(object) {\n lengthSum = new Adder();\n stream(object, lengthStream);\n return +lengthSum;\n}\n","import length from \"./length.js\";\n\nvar coordinates = [null, null],\n object = {type: \"LineString\", coordinates: coordinates};\n\nexport default function(a, b) {\n coordinates[0] = a;\n coordinates[1] = b;\n return length(object);\n}\n","import type { MapLineSeries } from \"./MapLineSeries\";\nimport type { IGeoPoint } from \"../../core/util/IGeoPoint\";\n\nimport { Graphics, IGraphicsSettings, IGraphicsPrivate } from \"../../core/render/Graphics\";\nimport { geoLength, geoInterpolate, geoDistance } from \"d3-geo\";\n\nexport interface IMapLineSettings extends IGraphicsSettings {\n\n\t/**\n\t * A GeoJSON representation of the polygons geometry.\n\t */\n\tgeometry?: GeoJSON.LineString | GeoJSON.MultiLineString;\n\n\t/**\n\t * @todo needs description\n\t * @default 0.5\n\t */\n\tprecision?: number;\n\n}\n\nexport interface IMapLinePrivate extends IGraphicsPrivate {\n\n\t/**\n\t * @ignore\n\t */\n\tseries: MapLineSeries;\n\n}\n\n/**\n * A line object in a [[MapLineSeries]].\n */\nexport class MapLine extends Graphics {\n\n\tdeclare public _settings: IMapLineSettings;\n\tdeclare public _privateSettings: IMapLinePrivate;\n\n\tpublic static className: string = \"MapLine\";\n\tpublic static classNames: Array = Graphics.classNames.concat([MapLine.className]);\n\tprotected _projectionDirty: boolean = false;\n\n\tpublic _beforeChanged() {\n\t\tsuper._beforeChanged();\n\n\t\tif (this._projectionDirty || this.isDirty(\"geometry\") || this.isDirty(\"precision\")) {\n\t\t\tconst geometry = this.get(\"geometry\")!;\n\t\t\tif (geometry) {\n\t\t\t\tconst series = this.getPrivate(\"series\");\n\t\t\t\tif (series) {\n\t\t\t\t\tconst chart = series.chart;\n\t\t\t\t\tif (chart) {\n\t\t\t\t\t\tconst projection = chart.get(\"projection\");\n\t\t\t\t\t\tlet clipAngle: number | null = null;\n\n\t\t\t\t\t\tif (projection) {\n\t\t\t\t\t\t\tclipAngle = projection.clipAngle();\n\t\t\t\t\t\t\tprojection.precision(this.get(\"precision\", 0.5));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst geoPath = chart.getPrivate(\"geoPath\");\n\t\t\t\t\t\tif (geoPath) {\n\t\t\t\t\t\t\tthis._clear = true;\n\n\t\t\t\t\t\t\tthis.set(\"draw\", (_display) => {\n\t\t\t\t\t\t\t\tif (projection && series.get(\"clipBack\") === false) {\n\t\t\t\t\t\t\t\t\tprojection.clipAngle(180);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tgeoPath.context(this._display as any);\n\t\t\t\t\t\t\t\tgeoPath(geometry);\n\t\t\t\t\t\t\t\tgeoPath.context(null);\n\n\t\t\t\t\t\t\t\tif (projection) {\n\t\t\t\t\t\t\t\t\tprojection.clipAngle(clipAngle as any);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic markDirtyProjection() {\n\t\tthis.markDirty();\n\t\tthis._projectionDirty = true;\n\t}\n\n\tpublic _clearDirty() {\n\t\tsuper._clearDirty();\n\t\tthis._projectionDirty = false;\n\t}\n\n\t/**\n\t * Converts relative position along the line (0-1) into pixel coordinates.\n\t *\n\t * @param position Position (0-1)\n\t * @return Coordinates\n\t */\n\tpublic positionToGeoPoint(position: number): IGeoPoint {\n\n\t\tconst geometry = this.get(\"geometry\")!;\n\n\t\tif (geometry) {\n\t\t\tlet totalDistance: number = geoLength(geometry);\n\t\t\tlet currentDistance: number = 0;\n\n\t\t\tlet distanceAB: number;\n\t\t\tlet positionA: number = 0;\n\t\t\tlet positionB: number = 0;\n\t\t\tlet pointA!: [number, number];\n\t\t\tlet pointB!: [number, number];\n\n\t\t\tlet coordinates = geometry.coordinates;\n\t\t\tif (coordinates) {\n\n\t\t\t\tlet segments!: number[][][];\n\n\t\t\t\tif (geometry.type == \"LineString\") {\n\t\t\t\t\tsegments = [coordinates] as number[][][];\n\t\t\t\t}\n\t\t\t\telse if (geometry.type == \"MultiLineString\") {\n\t\t\t\t\tsegments = coordinates as number[][][];\n\t\t\t\t}\n\n\t\t\t\tfor (let s = 0; s < segments.length; s++) {\n\t\t\t\t\tlet segment = segments[s];\n\t\t\t\t\tif (segment.length > 1) {\n\t\t\t\t\t\tfor (let p = 1; p < segment.length; p++) {\n\t\t\t\t\t\t\tpointA = segment[p - 1] as [number, number];\n\t\t\t\t\t\t\tpointB = segment[p] as [number, number];\n\n\t\t\t\t\t\t\tpositionA = currentDistance / totalDistance;\n\t\t\t\t\t\t\tdistanceAB = geoDistance(pointA, pointB);\n\t\t\t\t\t\t\tcurrentDistance += distanceAB;\n\t\t\t\t\t\t\tpositionB = currentDistance / totalDistance;\n\n\t\t\t\t\t\t\tif (positionA <= position && positionB > position) {\n\t\t\t\t\t\t\t\ts = segments.length;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (segment.length == 1) {\n\t\t\t\t\t\tpointA = segment[0] as [number, number];;\n\t\t\t\t\t\tpointB = segment[0] as [number, number];;\n\t\t\t\t\t\tpositionA = 0;\n\t\t\t\t\t\tpositionB = 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (pointA && pointB) {\n\t\t\t\t\tlet positionAB: number = (position - positionA) / (positionB - positionA);\n\t\t\t\t\tlet location = geoInterpolate(pointA, pointB)(positionAB);\n\t\t\t\t\treturn { longitude: location[0], latitude: location[1] }\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn { longitude: 0, latitude: 0 };\n\t}\n}\n","import {asin, atan2, cos, degrees, haversin, radians, sin, sqrt} from \"./math.js\";\n\nexport default function(a, b) {\n var x0 = a[0] * radians,\n y0 = a[1] * radians,\n x1 = b[0] * radians,\n y1 = b[1] * radians,\n cy0 = cos(y0),\n sy0 = sin(y0),\n cy1 = cos(y1),\n sy1 = sin(y1),\n kx0 = cy0 * cos(x0),\n ky0 = cy0 * sin(x0),\n kx1 = cy1 * cos(x1),\n ky1 = cy1 * sin(x1),\n d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),\n k = sin(d);\n\n var interpolate = d ? function(t) {\n var B = sin(t *= d) / k,\n A = sin(d - t) / k,\n x = A * kx0 + B * kx1,\n y = A * ky0 + B * ky1,\n z = A * sy0 + B * sy1;\n return [\n atan2(y, x) * degrees,\n atan2(z, sqrt(x * x + y * y)) * degrees\n ];\n } : function() {\n return [x0 * degrees, y0 * degrees];\n };\n\n interpolate.distance = d;\n\n return interpolate;\n}\n","import type { IMapPointSeriesDataItem } from \"./MapPointSeries\";\nimport type { DataItem } from \"../../core/render/Component\";\n\nimport { MapSeries, IMapSeriesSettings, IMapSeriesDataItem, IMapSeriesPrivate } from \"./MapSeries\";\nimport { MapLine } from \"./MapLine\";\nimport { ListTemplate } from \"../../core/util/List\";\nimport { Template } from \"../../core/util/Template\";\n\nimport * as $array from \"../../core/util/Array\";\n\n/**\n * @ignore\n */\nexport interface IMapLineSeriesPrivate extends IMapSeriesPrivate {\n}\n\nexport interface IMapLineSeriesDataItem extends IMapSeriesDataItem {\n\n\t/**\n\t * Related [[MapLine]] object.\n\t */\n\tmapLine?: MapLine;\n\n\t/**\n\t * GeoJSON geometry of the line.\n\t */\n\tgeometry?: GeoJSON.LineString | GeoJSON.MultiLineString;\n\n\t/**\n\t * An array of data items from [[MapPointSeries]] to use as line end-points.\n\t */\n\tpointsToConnect?: Array>;\n\n}\n\nexport interface IMapLineSeriesSettings extends IMapSeriesSettings {\n\n\t/**\n\t * If set to `true` will hide line segments that are in the invisible range\n\t * of the map.\n\t *\n\t * For example on the side of the globe facing away from the viewer when\n\t * used with Orthographic projection.\n\t *\n\t * NOTE: not all projections have invisible side.\n\t */\n\tclipBack?: boolean;\n\n}\n\n/**\n * Creates a map series for displaying lines on the map.\n *\n * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/map-line-series/} for more info\n * @important\n */\nexport class MapLineSeries extends MapSeries {\n\n\t/**\n\t * @ignore\n\t */\n\tpublic makeMapLine(dataItem: DataItem): MapLine {\n\t\tconst mapLine = this.children.push(this.mapLines.make());\n\t\tmapLine._setDataItem(dataItem);\n\t\tthis.mapLines.push(mapLine);\n\t\treturn mapLine;\n\t}\n\n\t/**\n\t * A [[ListTemplate]] of all lines in series.\n\t *\n\t * `mapLines.template` can also be used to configure lines.\n\t *\n\t * @default new ListTemplate\n\t */\n\tpublic readonly mapLines: ListTemplate = new ListTemplate(\n\t\tTemplate.new({}),\n\t\t() => MapLine._new(this._root, {}, [this.mapLines.template])\n\t);\n\n\tpublic static className: string = \"MapLineSeries\";\n\tpublic static classNames: Array = MapSeries.classNames.concat([MapLineSeries.className]);\n\n\tdeclare public _settings: IMapLineSeriesSettings;\n\tdeclare public _privateSettings: IMapLineSeriesPrivate;\n\tdeclare public _dataItemSettings: IMapLineSeriesDataItem;\n\n\tprotected _types: Array = [\"LineString\", \"MultiLineString\"];\n\n\t/**\n\t * @ignore\n\t */\n\tpublic markDirtyProjection() {\n\t\t$array.each(this.dataItems, (dataItem) => {\n\t\t\tlet mapLine = dataItem.get(\"mapLine\");\n\t\t\tif (mapLine) {\n\t\t\t\tmapLine.markDirtyProjection();\n\t\t\t}\n\t\t})\n\t}\n\n\tpublic _prepareChildren() {\n\t\tsuper._prepareChildren();\n\n\t\tif (this.isDirty(\"stroke\")) {\n\t\t\tthis.mapLines.template.set(\"stroke\", this.get(\"stroke\"));\n\t\t}\n\t}\n\n\tprotected processDataItem(dataItem: DataItem) {\n\t\tsuper.processDataItem(dataItem);\n\n\t\tlet mapLine = dataItem.get(\"mapLine\");\n\t\tif (!mapLine) {\n\t\t\tmapLine = this.makeMapLine(dataItem);\n\t\t}\n\n\t\tdataItem.set(\"mapLine\", mapLine);\n\t\tconst pointsToConnect = dataItem.get(\"pointsToConnect\");\n\t\tif (pointsToConnect) {\n\t\t\t$array.each(pointsToConnect, (point) => {\n\n\t\t\t\tpoint.on(\"geometry\", () => {\n\t\t\t\t\tthis.markDirtyValues(dataItem);\n\t\t\t\t})\n\n\t\t\t\tpoint.on(\"longitude\", () => {\n\t\t\t\t\tthis.markDirtyValues(dataItem);\n\t\t\t\t})\n\n\t\t\t\tpoint.on(\"latitude\", () => {\n\t\t\t\t\tthis.markDirtyValues(dataItem);\n\t\t\t\t})\n\t\t\t})\n\n\t\t\tthis.markDirtyValues(dataItem);\n\t\t}\n\n\t\tmapLine.setPrivate(\"series\", this);\n\t}\n\n\t/**\n\t * Forces a repaint of the element which relies on data.\n\t *\n\t * @since 5.0.21\n\t */\n\tpublic markDirtyValues(dataItem: DataItem) {\n\t\tsuper.markDirtyValues();\n\t\tif (dataItem) {\n\t\t\tconst mapLine = dataItem.get(\"mapLine\");\n\t\t\tif (mapLine) {\n\t\t\t\tconst pointsToConnect = dataItem.get(\"pointsToConnect\");\n\t\t\t\tif (pointsToConnect) {\n\t\t\t\t\tlet coordinates: Array> = [];\n\t\t\t\t\t$array.each(pointsToConnect, (point) => {\n\t\t\t\t\t\tconst longitude = point.get(\"longitude\");\n\t\t\t\t\t\tconst latitude = point.get(\"latitude\");\n\t\t\t\t\t\tif (longitude != null && latitude != null) {\n\t\t\t\t\t\t\tcoordinates.push([longitude, latitude]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tconst geometry = point.get(\"geometry\");\n\t\t\t\t\t\t\tif (geometry) {\n\t\t\t\t\t\t\t\tconst coords = geometry.coordinates;\n\t\t\t\t\t\t\t\tif (coords) {\n\t\t\t\t\t\t\t\t\tcoordinates.push([coords[0] as any, coords[1] as any]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\n\t\t\t\t\tlet geometry: any = { type: \"LineString\", coordinates: coordinates };\n\n\t\t\t\t\tdataItem.setRaw(\"geometry\", geometry);\n\t\t\t\t\tmapLine.set(\"geometry\", geometry);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tmapLine.set(\"geometry\", dataItem.get(\"geometry\"));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic disposeDataItem(dataItem: DataItem) {\n\t\tsuper.disposeDataItem(dataItem);\n\t\tconst mapLine = dataItem.get(\"mapLine\");\n\t\tif (mapLine) {\n\t\t\tthis.mapLines.removeValue(mapLine);\n\t\t\tmapLine.dispose();\n\t\t}\n\t}\n}\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","import {range} from \"d3-array\";\nimport {abs, ceil, epsilon} from \"./math.js\";\n\nfunction graticuleX(y0, y1, dy) {\n var y = range(y0, y1 - epsilon, dy).concat(y1);\n return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n var x = range(x0, x1 - epsilon, dx).concat(x1);\n return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nexport default function graticule() {\n var x1, x0, X1, X0,\n y1, y0, Y1, Y0,\n dx = 10, dy = dx, DX = 90, DY = 360,\n x, y, X, Y,\n precision = 2.5;\n\n function graticule() {\n return {type: \"MultiLineString\", coordinates: lines()};\n }\n\n function lines() {\n return range(ceil(X0 / DX) * DX, X1, DX).map(X)\n .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x))\n .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y));\n }\n\n graticule.lines = function() {\n return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n };\n\n graticule.outline = function() {\n return {\n type: \"Polygon\",\n coordinates: [\n X(X0).concat(\n Y(Y1).slice(1),\n X(X1).reverse().slice(1),\n Y(Y0).reverse().slice(1))\n ]\n };\n };\n\n graticule.extent = function(_) {\n if (!arguments.length) return graticule.extentMinor();\n return graticule.extentMajor(_).extentMinor(_);\n };\n\n graticule.extentMajor = function(_) {\n if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n X0 = +_[0][0], X1 = +_[1][0];\n Y0 = +_[0][1], Y1 = +_[1][1];\n if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.extentMinor = function(_) {\n if (!arguments.length) return [[x0, y0], [x1, y1]];\n x0 = +_[0][0], x1 = +_[1][0];\n y0 = +_[0][1], y1 = +_[1][1];\n if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.step = function(_) {\n if (!arguments.length) return graticule.stepMinor();\n return graticule.stepMajor(_).stepMinor(_);\n };\n\n graticule.stepMajor = function(_) {\n if (!arguments.length) return [DX, DY];\n DX = +_[0], DY = +_[1];\n return graticule;\n };\n\n graticule.stepMinor = function(_) {\n if (!arguments.length) return [dx, dy];\n dx = +_[0], dy = +_[1];\n return graticule;\n };\n\n graticule.precision = function(_) {\n if (!arguments.length) return precision;\n precision = +_;\n x = graticuleX(y0, y1, 90);\n y = graticuleY(x0, x1, precision);\n X = graticuleX(Y0, Y1, 90);\n Y = graticuleY(X0, X1, precision);\n return graticule;\n };\n\n return graticule\n .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\n .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n}\n\nexport function graticule10() {\n return graticule()();\n}\n","import { MapLineSeries, IMapLineSeriesSettings, IMapLineSeriesPrivate, IMapLineSeriesDataItem } from \"./MapLineSeries\";\nimport type { DataItem } from \"../../core/render/Component\";\nimport { geoGraticule } from \"d3-geo\";\n\n\nexport interface IGraticuleSeriesDataItem extends IMapLineSeriesDataItem {\n}\n\nexport interface IGraticuleSeriesPrivate extends IMapLineSeriesPrivate {\n}\n\nexport interface IGraticuleSeriesSettings extends IMapLineSeriesSettings {\n\n\t/**\n\t * Place a grid line every Xth latitude/longitude.\n\t *\n\t * @default 10\n\t */\n\tstep?: number;\n}\n\n/**\n * A [[MapChart]] series to draw a map grid.\n *\n * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/graticule-series/} for more info\n * @important\n */\nexport class GraticuleSeries extends MapLineSeries {\n\n\tpublic static className: string = \"GraticuleSeries\";\n\tpublic static classNames: Array = MapLineSeries.classNames.concat([GraticuleSeries.className]);\n\n\tdeclare public _settings: IGraticuleSeriesSettings;\n\tdeclare public _privateSettings: IGraticuleSeriesPrivate;\n\n\tprotected _dataItem: DataItem = this.makeDataItem({});\n\n\tprotected _afterNew() {\n\t\tsuper._afterNew();\n\t\tthis.dataItems.push(this._dataItem);\n\t\tthis._generate();\n\t}\n\n\tpublic _updateChildren() {\n\t\tsuper._updateChildren();\n\n\t\tif (this.isDirty(\"step\")) {\n\t\t\tthis._generate();\n\t\t}\n\t}\n\n\tprotected _generate() {\n\t\tlet graticule = geoGraticule();\n\n\t\tif (graticule) {\n\t\t\tconst step = this.get(\"step\", 10);\n\n\t\t\tgraticule.stepMinor([360, 360]);\n\t\t\tgraticule.stepMajor([step, step]);\n\t\t\tthis._dataItem.set(\"geometry\", graticule());\n\t\t}\n\t}\n}\n","export default function(a, b) {\n\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n\n return compose;\n}\n","import compose from \"./compose.js\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi),\n sinDeltaPhi = sin(deltaPhi),\n cosDeltaGamma = cos(deltaGamma),\n sinDeltaGamma = sin(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n\n rotation.invert = function(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n\n return rotation;\n}\n\nexport default function(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n\n return forward;\n}\n","import noop from \"../noop.js\";\n\nexport default function() {\n var lines = [],\n line;\n return {\n point: function(x, y, m) {\n line.push([x, y, m]);\n },\n lineStart: function() {\n lines.push(line = []);\n },\n lineEnd: noop,\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n },\n result: function() {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n}\n","import {abs, epsilon} from \"./math.js\";\n\nexport default function(a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual.js\";\nimport {epsilon} from \"../math.js\";\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\n if (pointEqual(p0, p1)) {\n if (!p0[2] && !p1[2]) {\n stream.lineStart();\n for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n // handle degenerate cases by moving the point\n p1[0] += 2 * epsilon;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n}\n\nfunction link(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\n\nexport function spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import {Adder} from \"d3-array\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, epsilon2, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nfunction longitude(point) {\n if (abs(point[0]) <= pi)\n return point[0];\n else\n return sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n var lambda = longitude(point),\n phi = point[1],\n sinPhi = sin(phi),\n normal = [sin(lambda), -cos(lambda), 0],\n angle = 0,\n winding = 0;\n\n var sum = new Adder();\n\n if (sinPhi === 1) phi = halfPi + epsilon;\n else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = longitude(point0),\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin(phi0),\n cosPhi0 = cos(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = longitude(point1),\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin(phi1),\n cosPhi1 = cos(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi,\n k = sinPhi0 * sinPhi1;\n\n sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign * tau : delta;\n\n // Are the longitudes either side of the point’s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n return (angle < -epsilon || angle < epsilon && sum < -epsilon2) ^ (winding & 1);\n}\n","function* flatten(arrays) {\n for (const array of arrays) {\n yield* array;\n }\n}\n\nexport default function merge(arrays) {\n return Array.from(flatten(arrays));\n}\n","import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {epsilon, halfPi} from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n return function(sink) {\n var line = clipLine(sink),\n ringBuffer = clipBuffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = merge(segments);\n var startInside = polygonContains(polygon, start);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n line.point(lambda, phi);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n ringSink.point(lambda, phi);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index.js\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\n\nexport default clip(\n function() { return true; },\n clipAntimeridianLine,\n clipAntimeridianInterpolate,\n [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n clean; // no intersections\n\n return {\n lineStart: function() {\n stream.lineStart();\n clean = 1;\n },\n point: function(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi : -pi,\n delta = abs(lambda1 - lambda0);\n if (abs(delta - pi) < epsilon) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function() {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function() {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n sinLambda0Lambda1 = sin(lambda0 - lambda1);\n return abs(sinLambda0Lambda1) > epsilon\n ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * halfPi;\n stream.point(-pi, phi);\n stream.point(0, phi);\n stream.point(pi, phi);\n stream.point(pi, 0);\n stream.point(pi, -phi);\n stream.point(0, -phi);\n stream.point(-pi, -phi);\n stream.point(-pi, 0);\n stream.point(-pi, phi);\n } else if (abs(from[0] - to[0]) > epsilon) {\n var lambda = from[0] < to[0] ? pi : -pi;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n } else {\n stream.point(to[0], to[1]);\n }\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport constant from \"./constant.js\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\nimport {rotateRadians} from \"./rotation.js\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = cos(radius),\n sinRadius = sin(radius),\n step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n stream.point(point[0], point[1]);\n }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n var center = constant([0, 0]),\n radius = constant(90),\n precision = constant(6),\n ring,\n rotate,\n stream = {point: point};\n\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n\n function circle() {\n var c = center.apply(this, arguments),\n r = radius.apply(this, arguments) * radians,\n p = precision.apply(this, arguments) * radians;\n ring = [];\n rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = {type: \"Polygon\", coordinates: [ring]};\n ring = rotate = null;\n return c;\n }\n\n circle.center = function(_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n };\n\n circle.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n };\n\n circle.precision = function(_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n };\n\n return circle;\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian.js\";\nimport {circleStream} from \"../circle.js\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\n\nexport default function(radius) {\n var cr = cos(radius),\n delta = 6 * radians,\n smallRadius = cr > 0,\n notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return cos(lambda) * cos(phi) > cr;\n }\n\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(lambda, phi) {\n var point1 = [lambda, phi],\n point2,\n v = visible(lambda, phi),\n c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n if (!point0 && (v00 = v0 = v)) stream.lineStart();\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n point1[2] = 1;\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n } else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1], 2);\n stream.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n } else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1], 3);\n }\n }\n }\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function() {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a),\n pb = cartesian(b);\n\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n var n1 = [1, 0, 0], // normal\n n2 = cartesianCross(pa, pb),\n n2n2 = cartesianDot(n2, n2),\n n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n\n // Two polar points.\n if (!determinant) return !two && a;\n\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = cartesianCross(n1, n2),\n A = cartesianScale(n1, c1),\n B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n\n // Solve |p(t)|^2 = 1.\n var u = n1xn2,\n w = cartesianDot(A, u),\n uu = cartesianDot(u, u),\n t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n if (t2 < 0) return;\n\n var t = sqrt(t2),\n q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n\n if (!two) return q;\n\n // Two intersection points.\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n var delta = lambda1 - lambda0,\n polar = abs(delta - pi) < epsilon,\n meridian = polar || delta < epsilon;\n\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n }\n\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi - radius,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n return code;\n }\n\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","import {abs, epsilon} from \"../math.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\n }\n\n function corner(p, direction) {\n return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n\n return function(stream) {\n var activeStream = stream,\n bufferStream = clipBuffer(),\n segments,\n polygon,\n ring,\n x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first,\n clean;\n\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n }\n }\n\n return winding;\n }\n\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = merge(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n } else {\n if (v && v_) activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if (clipLine(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v) activeStream.lineEnd();\n clean = false;\n } else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n\n return clipStream;\n };\n}\n","export default function(a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n}\n","export default x => x;\n","export default function(methods) {\n return {\n stream: transformer(methods)\n };\n}\n\nexport function transformer(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function(x, y) { this.stream.point(x, y); },\n sphere: function() { this.stream.sphere(); },\n lineStart: function() { this.stream.lineStart(); },\n lineEnd: function() { this.stream.lineEnd(); },\n polygonStart: function() { this.stream.polygonStart(); },\n polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function() {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, y) {\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {default as geoStream} from \"../stream.js\";\nimport boundsStream from \"../path/bounds.js\";\n\nfunction fit(projection, fitBounds, object) {\n var clip = projection.clipExtent && projection.clipExtent();\n projection.scale(150).translate([0, 0]);\n if (clip != null) projection.clipExtent(null);\n geoStream(object, projection.stream(boundsStream));\n fitBounds(boundsStream.result());\n if (clip != null) projection.clipExtent(clip);\n return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n return fit(projection, function(b) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n return fit(projection, function(b) {\n var w = +width,\n k = w / (b[1][0] - b[0][0]),\n x = (w - k * (b[1][0] + b[0][0])) / 2,\n y = -k * b[0][1];\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n return fit(projection, function(b) {\n var h = +height,\n k = h / (b[1][1] - b[0][1]),\n x = -k * b[0][0],\n y = (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n","import {cartesian} from \"../cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\nimport {transformer} from \"../transform.js\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n return transformer({\n point: function(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt(a * a + b * b + c * c),\n phi2 = asin(c /= m),\n lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function(stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}\n","import clipAntimeridian from \"../clip/antimeridian.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\nimport {rotateRadians} from \"../rotation.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport resample from \"./resample.js\";\n\nvar transformRadians = transformer({\n point: function(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nfunction transformRotate(rotate) {\n return transformer({\n point: function(x, y) {\n var r = rotate(x, y);\n return this.stream.point(r[0], r[1]);\n }\n });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n function transform(x, y) {\n x *= sx; y *= sy;\n return [dx + k * x, dy - k * y];\n }\n transform.invert = function(x, y) {\n return [(x - dx) / k * sx, (dy - y) / k * sy];\n };\n return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n if (!alpha) return scaleTranslate(k, dx, dy, sx, sy);\n var cosAlpha = cos(alpha),\n sinAlpha = sin(alpha),\n a = cosAlpha * k,\n b = sinAlpha * k,\n ai = cosAlpha / k,\n bi = sinAlpha / k,\n ci = (sinAlpha * dy - cosAlpha * dx) / k,\n fi = (sinAlpha * dx + cosAlpha * dy) / k;\n function transform(x, y) {\n x *= sx; y *= sy;\n return [a * x - b * y + dx, dy - b * x - a * y];\n }\n transform.invert = function(x, y) {\n return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n };\n return transform;\n}\n\nexport default function projection(project) {\n return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n var project,\n k = 150, // scale\n x = 480, y = 250, // translate\n lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n alpha = 0, // post-rotate angle\n sx = 1, // reflectX\n sy = 1, // reflectX\n theta = null, preclip = clipAntimeridian, // pre-clip angle\n x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n delta2 = 0.5, // precision\n projectResample,\n projectTransform,\n projectRotateTransform,\n cache,\n cacheStream;\n\n function projection(point) {\n return projectRotateTransform(point[0] * radians, point[1] * radians);\n }\n\n function invert(point) {\n point = projectRotateTransform.invert(point[0], point[1]);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n };\n\n projection.preclip = function(_) {\n return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n };\n\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\n\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n\n projection.rotate = function(_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n };\n\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n };\n\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n };\n\n projection.precision = function(_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n function recenter() {\n var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n transform = scaleTranslateRotate(k, x - center[0], y - center[1], sx, sy, alpha);\n rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n projectTransform = compose(project, transform);\n projectRotateTransform = compose(rotate, projectTransform);\n projectResample = resample(projectTransform, delta2);\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math.js\";\nimport rotation from \"../rotation.js\";\nimport projection from \"./index.js\";\n\nexport function mercatorRaw(lambda, phi) {\n return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n return mercatorProjection(mercatorRaw)\n .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n var m = projection(project),\n center = m.center,\n scale = m.scale,\n translate = m.translate,\n clipExtent = m.clipExtent,\n x0 = null, y0, x1, y1; // clip extent\n\n m.scale = function(_) {\n return arguments.length ? (scale(_), reclip()) : scale();\n };\n\n m.translate = function(_) {\n return arguments.length ? (translate(_), reclip()) : translate();\n };\n\n m.center = function(_) {\n return arguments.length ? (center(_), reclip()) : center();\n };\n\n m.clipExtent = function(_) {\n return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n function reclip() {\n var k = pi * scale(),\n t = m(rotation(m.rotate()).invert([0, 0]));\n return clipExtent(x0 == null\n ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n }\n\n return reclip();\n}\n","import {Adder} from \"d3-array\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = new Adder(),\n areaRingSum = new Adder(),\n x00,\n y00,\n x0,\n y0;\n\nvar areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n areaSum.add(abs(areaRingSum));\n areaRingSum = new Adder();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum = new Adder();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0 * x - x0 * y);\n x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import { Theme } from \"../../core/Theme\";\r\nimport { p50 } from \"../../core/util/Percent\";\r\nimport { setColor } from \"../../themes/DefaultTheme\";\r\n\r\nimport { geoMercator } from \"d3-geo\";\r\n\r\nimport * as $ease from \"../../core/util/Ease\";\r\n\r\n\r\n/**\r\n * @ignore\r\n */\r\nexport class MapChartDefaultTheme extends Theme {\r\n\tprotected setupDefaultRules() {\r\n\t\tsuper.setupDefaultRules();\r\n\r\n\t\tconst ic = this._root.interfaceColors;\r\n\t\tconst r = this.rule.bind(this);\r\n\r\n\t\t/**\r\n\t\t * ========================================================================\r\n\t\t * charts/map\r\n\t\t * ========================================================================\r\n\t\t */\r\n\r\n\t\tr(\"MapChart\").setAll({\r\n\t\t\tprojection: geoMercator(),\r\n\t\t\tpanX: \"translateX\",\r\n\t\t\tpanY: \"translateY\",\r\n\t\t\tpinchZoom: true,\r\n\t\t\tzoomStep: 2,\r\n\t\t\tzoomLevel: 1,\r\n\t\t\trotationX: 0,\r\n\t\t\trotationY: 0,\r\n\t\t\trotationZ: 0,\r\n\t\t\tmaxZoomLevel: 32,\r\n\t\t\tminZoomLevel: 1,\r\n\t\t\twheelY: \"zoom\",\r\n\t\t\twheelX: \"none\",\r\n\t\t\tanimationEasing: $ease.out($ease.cubic),\r\n\t\t\twheelEasing: $ease.out($ease.cubic),\r\n\t\t\twheelDuration: 0,\r\n\t\t\twheelSensitivity: 1,\r\n\t\t\tmaxPanOut: 0.4\r\n\t\t});\r\n\r\n\t\t{\r\n\t\t\tconst rule = r(\"MapLine\");\r\n\r\n\t\t\trule.setAll({\r\n\t\t\t\tprecision: 0.5,\r\n\t\t\t\trole: \"figure\",\r\n\t\t\t});\r\n\r\n\t\t\tsetColor(rule, \"stroke\", ic, \"grid\");\r\n\t\t}\r\n\r\n\t\tr(\"MapPointSeries\").setAll({\r\n\t\t\tclipFront: false,\r\n\t\t\tclipBack: true\r\n\t\t})\r\n\r\n\t\t{\r\n\t\t\tconst rule = r(\"MapPolygon\");\r\n\r\n\t\t\trule.setAll({\r\n\t\t\t\tprecision: 0.5,\r\n\t\t\t\tisMeasured: false,\r\n\t\t\t\trole: \"figure\",\r\n\t\t\t\tfillOpacity: 1,\r\n\t\t\t\tposition: \"absolute\",\r\n\t\t\t\tstrokeWidth: 0.2,\r\n\t\t\t\tstrokeOpacity: 1,\r\n\t\t\t});\r\n\r\n\t\t\tsetColor(rule, \"fill\", ic, \"primaryButton\");\r\n\t\t\tsetColor(rule, \"stroke\", ic, \"background\");\r\n\t\t}\r\n\r\n\t\tr(\"Graphics\", [\"map\", \"button\", \"plus\", \"icon\"]).setAll({\r\n\t\t\tx: p50,\r\n\t\t\ty: p50,\r\n\t\t\tdraw: (display) => {\r\n\t\t\t\tdisplay.moveTo(-4, 0);\r\n\t\t\t\tdisplay.lineTo(4, 0);\r\n\t\t\t\tdisplay.moveTo(0, -4);\r\n\t\t\t\tdisplay.lineTo(0, 4);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tr(\"Graphics\", [\"map\", \"button\", \"minus\", \"icon\"]).setAll({\r\n\t\t\tx: p50,\r\n\t\t\ty: p50,\r\n\t\t\tdraw: (display) => {\r\n\t\t\t\tdisplay.moveTo(-4, 0);\r\n\t\t\t\tdisplay.lineTo(4, 0);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\t/**\r\n\t\t * ------------------------------------------------------------------------\r\n\t\t * charts/map: Series\r\n\t\t * ------------------------------------------------------------------------\r\n\t\t */\r\n\r\n\t\tr(\"GraticuleSeries\").setAll({\r\n\t\t\tstep: 10\r\n\t\t});\r\n\r\n\r\n\t}\r\n}\r\n","import {sqrt} from \"../math.js\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n Y0 = 0,\n Z0 = 0,\n X1 = 0,\n Y1 = 0,\n Z1 = 0,\n X2 = 0,\n Y2 = 0,\n Z2 = 0,\n x00,\n y00,\n x0,\n y0;\n\nvar centroidStream = {\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.point = centroidPoint;\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n },\n result: function() {\n var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n : Z1 ? [X1 / Z1, Y1 / Z1]\n : Z0 ? [X0 / Z0, Y0 / Z0]\n : [NaN, NaN];\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n return centroid;\n }\n};\n\nfunction centroidPoint(x, y) {\n X0 += x;\n Y0 += y;\n ++Z0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n centroidStream.point = centroidPointLine;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n centroidStream.point = centroidPointRing;\n centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n var dx = x - x0,\n dy = y - y0,\n z = sqrt(dx * dx + dy * dy);\n\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n\n z = y0 * x - x0 * y;\n X2 += z * (x0 + x);\n Y2 += z * (y0 + y);\n Z2 += z * 3;\n centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nexport default function PathContext(context) {\n this._context = context;\n}\n\nPathContext.prototype = {\n _radius: 4.5,\n pointRadius: function(_) {\n return this._radius = _, this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._context.closePath();\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._context.moveTo(x, y);\n this._point = 1;\n break;\n }\n case 1: {\n this._context.lineTo(x, y);\n break;\n }\n default: {\n this._context.moveTo(x + this._radius, y);\n this._context.arc(x, y, this._radius, 0, tau);\n break;\n }\n }\n },\n result: noop\n};\n","import {Adder} from \"d3-array\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = new Adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\n\nvar lengthStream = {\n point: noop,\n lineStart: function() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = noop;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum;\n lengthSum = new Adder();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","export default function PathString() {\n this._string = [];\n}\n\nPathString.prototype = {\n _radius: 4.5,\n _circle: circle(4.5),\n pointRadius: function(_) {\n if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n return this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._string.push(\"Z\");\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._string.push(\"M\", x, \",\", y);\n this._point = 1;\n break;\n }\n case 1: {\n this._string.push(\"L\", x, \",\", y);\n break;\n }\n default: {\n if (this._circle == null) this._circle = circle(this._radius);\n this._string.push(\"M\", x, \",\", y, this._circle);\n break;\n }\n }\n },\n result: function() {\n if (this._string.length) {\n var result = this._string.join(\"\");\n this._string = [];\n return result;\n } else {\n return null;\n }\n }\n};\n\nfunction circle(radius) {\n return \"m0,\" + radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n + \"z\";\n}\n","import {Adder} from \"d3-array\";\nimport {asin, atan2, cos, degrees, epsilon, epsilon2, hypot, radians, sin, sqrt} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nvar W0, W1,\n X0, Y0, Z0,\n X1, Y1, Z1,\n X2, Y2, Z2,\n lambda00, phi00, // first point\n x0, y0, z0; // previous point\n\nvar centroidStream = {\n sphere: noop,\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n }\n};\n\n// Arithmetic mean of Cartesian vectors.\nfunction centroidPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n ++W0;\n X0 += (x - X0) / W0;\n Y0 += (y - Y0) / W0;\n Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidStream.point = centroidLinePoint;\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart() {\n centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n centroidRingPoint(lambda00, phi00);\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n centroidStream.point = centroidRingPoint;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n cx = y0 * z - z0 * y,\n cy = z0 * x - x0 * z,\n cz = x0 * y - y0 * x,\n m = hypot(cx, cy, cz),\n w = asin(m), // line weight = angle\n v = m && -w / m; // area weight multiplier\n X2.add(v * cx);\n Y2.add(v * cy);\n Z2.add(v * cz);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nexport default function(object) {\n W0 = W1 =\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 = 0;\n X2 = new Adder();\n Y2 = new Adder();\n Z2 = new Adder();\n stream(object, centroidStream);\n\n var x = +X2,\n y = +Y2,\n z = +Z2,\n m = hypot(x, y, z);\n\n // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n if (m < epsilon2) {\n x = X1, y = Y1, z = Z1;\n // If the feature has zero length, fall back to arithmetic mean of point vectors.\n if (W1 < epsilon) x = X0, y = Y0, z = Z0;\n m = hypot(x, y, z);\n // If the feature still has an undefined ccentroid, then return.\n if (m < epsilon2) return [NaN, NaN];\n }\n\n return [atan2(y, x) * degrees, asin(z / m) * degrees];\n}\n","import {Adder} from \"d3-array\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nexport var areaRingSum = new Adder();\n\n// hello?\n\nvar areaSum = new Adder(),\n lambda00,\n phi00,\n lambda0,\n cosPhi0,\n sinPhi0;\n\nexport var areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaRingSum = new Adder();\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n var areaRing = +areaRingSum;\n areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n this.lineStart = this.lineEnd = this.point = noop;\n },\n sphere: function() {\n areaSum.add(tau);\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n areaStream.point = areaPoint;\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n // Spherical excess E for a spherical triangle with vertices: south pole,\n // previous point, current point. Uses a formula derived from Cagnoli’s\n // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n var dLambda = lambda - lambda0,\n sdLambda = dLambda >= 0 ? 1 : -1,\n adLambda = sdLambda * dLambda,\n cosPhi = cos(phi),\n sinPhi = sin(phi),\n k = sinPhi0 * sinPhi,\n u = cosPhi0 * cosPhi + k * cos(adLambda),\n v = k * sdLambda * sin(adLambda);\n areaRingSum.add(atan2(v, u));\n\n // Advance the previous points.\n lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function(object) {\n areaSum = new Adder();\n stream(object, areaStream);\n return areaSum * 2;\n}\n","import {Adder} from \"d3-array\";\nimport {areaStream, areaRingSum} from \"./area.js\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport {abs, degrees, epsilon, radians} from \"./math.js\";\nimport stream from \"./stream.js\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n lambda2, // previous lambda-coordinate\n lambda00, phi00, // first point\n p0, // previous 3D point\n deltaSum,\n ranges,\n range;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: boundsLineStart,\n lineEnd: boundsLineEnd,\n polygonStart: function() {\n boundsStream.point = boundsRingPoint;\n boundsStream.lineStart = boundsRingStart;\n boundsStream.lineEnd = boundsRingEnd;\n deltaSum = new Adder();\n areaStream.polygonStart();\n },\n polygonEnd: function() {\n areaStream.polygonEnd();\n boundsStream.point = boundsPoint;\n boundsStream.lineStart = boundsLineStart;\n boundsStream.lineEnd = boundsLineEnd;\n if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n else if (deltaSum > epsilon) phi1 = 90;\n else if (deltaSum < -epsilon) phi0 = -90;\n range[0] = lambda0, range[1] = lambda1;\n },\n sphere: function() {\n lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n }\n};\n\nfunction boundsPoint(lambda, phi) {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n var p = cartesian([lambda * radians, phi * radians]);\n if (p0) {\n var normal = cartesianCross(p0, p),\n equatorial = [normal[1], -normal[0], 0],\n inflection = cartesianCross(equatorial, normal);\n cartesianNormalizeInPlace(inflection);\n inflection = spherical(inflection);\n var delta = lambda - lambda2,\n sign = delta > 0 ? 1 : -1,\n lambdai = inflection[0] * degrees * sign,\n phii,\n antimeridian = abs(delta) > 180;\n if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = inflection[1] * degrees;\n if (phii > phi1) phi1 = phii;\n } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = -inflection[1] * degrees;\n if (phii < phi0) phi0 = phii;\n } else {\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n }\n if (antimeridian) {\n if (lambda < lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n } else {\n if (lambda1 >= lambda0) {\n if (lambda < lambda0) lambda0 = lambda;\n if (lambda > lambda1) lambda1 = lambda;\n } else {\n if (lambda > lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n }\n }\n } else {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n }\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n range[0] = lambda0, range[1] = lambda1;\n boundsStream.point = boundsPoint;\n p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n if (p0) {\n var delta = lambda - lambda2;\n deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n } else {\n lambda00 = lambda, phi00 = phi;\n }\n areaStream.point(lambda, phi);\n linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n boundsRingPoint(lambda00, phi00);\n areaStream.lineEnd();\n if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n range[0] = lambda0, range[1] = lambda1;\n p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function(feature) {\n var i, n, a, b, merged, deltaMax, delta;\n\n phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n ranges = [];\n stream(feature, boundsStream);\n\n // First, sort ranges by their minimum longitudes.\n if (n = ranges.length) {\n ranges.sort(rangeCompare);\n\n // Then, merge any ranges that overlap.\n for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n b = ranges[i];\n if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n }\n\n // Finally, find the largest gap between the merged ranges.\n // The final bounding box will be the inverse of this gap.\n for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n b = merged[i];\n if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n }\n }\n\n ranges = range = null;\n\n return lambda0 === Infinity || phi0 === Infinity\n ? [[NaN, NaN], [NaN, NaN]]\n : [[lambda0, phi0], [lambda1, phi1]];\n}\n","import type { IGeoPoint } from \"../../core/util/IGeoPoint\";\nimport * as $math from \"../../core/util/Math\";\nimport { geoCircle, geoCentroid, geoBounds } from \"d3-geo\";\n\n/**\n * Returns a GeoJSON representation of a circle, suitable for use as `geometry` value\n * in a [[MapPolygon]] in a [[MapPolygonSeries]].\n * \n * @param geoPoint Coordinates\n * @param radius Circle radius in degrees\n * @return Polygon geometry\n */\nexport function getGeoCircle(geoPoint: IGeoPoint, radius: number): GeoJSON.Polygon {\n\treturn geoCircle().center([geoPoint.longitude, geoPoint.latitude]).radius(radius)();\n}\n\n/**\n * @ignore\n */\nexport function getGeoCentroid(geometry: GeoJSON.GeometryObject): IGeoPoint {\n\tconst centroid = geoCentroid(geometry);\n\treturn { longitude: centroid[0], latitude: centroid[1] };\n}\n\n/**\n * @ignore\n */\nexport function getGeoBounds(geometry: GeoJSON.GeometryObject): { left: number, right: number, top: number, bottom: number } {\n\tconst bounds = geoBounds(geometry);\n\n\tif (bounds) {\n\t\tconst geoBounds = { left: bounds[0][0], right: bounds[1][0], top: bounds[1][1], bottom: bounds[0][1] };\n\t\tif(geoBounds.right < geoBounds.left){\n\t\t\tgeoBounds.right = 180;\n\t\t\tgeoBounds.left = -180;\n\t\t}\n\t\treturn geoBounds;\n\t}\n\treturn { left: 0, right: 0, top: 0, bottom: 0 };\n}\n\n/**\n * Returns a GeoJSON representation of a rectangle, suitable for use\n * as `geometry` value in a [[MapPolygon]] in a [[MapPolygonSeries]].\n * \n * @param north North latitude\n * @param east East longitude\n * @param south South latitude\n * @param west West longitude\n * @return polygon geometry\n */\nexport function getGeoRectangle(north: number, east: number, south: number, west: number): GeoJSON.MultiPolygon {\n\n\tlet multiPolygon: Array>> = [];\n\n\tif (west <= -180) {\n\t\twest = -179.9999;\n\t}\n\tif (south <= -90) {\n\t\tsouth = -89.9999;\n\t}\n\tif (north >= 90) {\n\t\tnorth = 89.9999;\n\t}\n\tif (east >= 180) {\n\t\teast = 179.9999;\n\t}\n\n\n\tlet stepLong = Math.min(90, (east - west) / Math.ceil((east - west) / 90));\n\tlet stepLat = (north - south) / Math.ceil((north - south) / 90);\n\n\tfor (let ln = west; ln < east; ln = ln + stepLong) {\n\t\tlet surface: Array<[number, number]> = [];\n\t\tmultiPolygon.push([surface]);\n\n\t\tif (ln + stepLong > east) {\n\t\t\tstepLong = east - ln;\n\t\t}\n\n\t\tfor (let ll = ln; ll <= ln + stepLong; ll = ll + 5) {\n\t\t\tsurface.push([ll, north]);\n\t\t}\n\n\t\tfor (let lt = north; lt >= south; lt = lt - stepLat) {\n\t\t\tsurface.push([ln + stepLong, lt]);\n\t\t}\n\n\t\tfor (let ll = ln + stepLong; ll >= ln; ll = ll - 5) {\n\t\t\tsurface.push([ll, south]);\n\t\t}\n\n\t\tfor (let lt = south; lt <= north; lt = lt + stepLat) {\n\t\t\tsurface.push([ln, lt]);\n\t\t}\n\t}\n\n\treturn { type: \"MultiPolygon\", coordinates: multiPolygon };\n}\n\n/**\n * Update longitudes and latitudes that wrap around -180/180 and -90/90 values.\n * \n * @param geoPoint Input coordinates\n * @return Updated coordinates\n */\nexport function normalizeGeoPoint(geoPoint: IGeoPoint): IGeoPoint {\n\tlet longitude = wrapAngleTo180(geoPoint.longitude);\n\tlet latitude = Math.asin(Math.sin((geoPoint.latitude * $math.RADIANS))) * $math.DEGREES;\n\n\tlet latitude180 = wrapAngleTo180(geoPoint.latitude);\n\n\tif (Math.abs(latitude180) > 90) {\n\t\tlongitude = wrapAngleTo180(longitude + 180);\n\t}\n\n\tgeoPoint.longitude = longitude;\n\tgeoPoint.latitude = latitude;\n\n\treturn geoPoint;\n}\n\n/**\n * @ignore\n */\nexport function wrapAngleTo180(angle: number): number {\n\tangle = angle % 360;\n\n\tif (angle > 180) {\n\t\tangle -= 360;\n\t}\n\tif (angle < -180) {\n\t\tangle += 360;\n\t}\n\n\treturn angle;\n}","import type { MapSeries } from \"./MapSeries\";\nimport type { GeoProjection, GeoPath } from \"d3-geo\";\nimport type { IPoint } from \"../../core/util/IPoint\";\nimport type { IGeoPoint } from \"../../core/util/IGeoPoint\";\nimport type { Time } from \"../../core/util/Animation\";\nimport type { ZoomControl } from \"./ZoomControl\";\nimport type { Animation } from \"../../core/util/Entity\";\n\nimport { MapChartDefaultTheme } from \"./MapChartDefaultTheme\";\nimport { SerialChart, ISerialChartPrivate, ISerialChartSettings, ISerialChartEvents } from \"../../core/render/SerialChart\";\nimport { Rectangle } from \"../../core/render/Rectangle\";\nimport { geoPath } from \"d3-geo\";\nimport { Color } from \"../../core/util/Color\";\nimport { registry } from \"../../core/Registry\";\n\nimport * as $math from \"../../core/util/Math\";\nimport * as $array from \"../../core/util/Array\";\nimport * as $type from \"../../core/util/Type\";\nimport * as $mapUtils from \"./MapUtils\";\nimport * as $object from \"../../core/util/Object\";\nimport * as $utils from \"../../core/util/Utils\";\n\nimport type { IDisposer } from \"../../core/util/Disposer\";\nimport type { ISpritePointerEvent } from \"../../core/render/Sprite\";\n\nexport interface IMapChartSettings extends ISerialChartSettings {\n\n\t/**\n\t * A projection to use when plotting the map.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/#Projections} for more info\n\t */\n\tprojection?: GeoProjection;\n\n\t/**\n\t * Current zoom level.\n\t */\n\tzoomLevel?: number;\n\n\t/**\n\t * @ignore\n\t */\n\ttranslateX?: number;\n\n\t/**\n\t * @ignore\n\t */\n\ttranslateY?: number;\n\n\t/**\n\t * Vertical centering of the map.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/#Centering_the_map} for more info\n\t */\n\trotationY?: number;\n\n\t/**\n\t * Horizontal centering of the map.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/#Centering_the_map} for more info\n\t */\n\trotationX?: number;\n\n\t/**\n\t * Depth centering of the map.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/#Centering_the_map} for more info\n\t */\n\trotationZ?: number;\n\n\t/**\n\t * Highest zoom level map is allowed to zoom in to.\n\t *\n\t * @deault 32\n\t */\n\tmaxZoomLevel?: number;\n\n\t/**\n\t * Lowest zoom level map is allowed to zoom in to.\n\t *\n\t * @deault 1\n\t */\n\tminZoomLevel?: number;\n\n\t/**\n\t * Increment zoom level by `zoomStep` when user zooms in via [[ZoomControl]] or\n\t * API.\n\t *\n\t * @default 2\n\t */\n\tzoomStep?: number;\n\n\t/**\n\t * Defines what happens when map is being dragged horizontally.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/map-pan-zoom/#Panning} for more info\n\t * @default \"translateX\"\n\t */\n\tpanX?: \"none\" | \"rotateX\" | \"translateX\";\n\n\t/**\n\t * Defines what happens when map is being dragged vertically.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/map-pan-zoom/#Panning} for more info\n\t * @default \"translateY\"\n\t */\n\tpanY?: \"none\" | \"rotateY\" | \"translateY\";\n\n\t/**\n\t * Enables pinch-zooming of the map on multi-touch devices.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/map-pan-zoom/#Pinch_zoom} for more info\n\t * @default true\n\t */\n\tpinchZoom?: boolean;\n\n\t/**\n\t * Defines what happens when mouse wheel is turned horizontally.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/map-pan-zoom/#Mouse_wheel_behavior} for more info\n\t * @default \"none\"\n\t */\n\twheelX?: \"none\" | \"zoom\" | \"rotateX\" | \"rotateY\";\n\n\t/**\n\t * Defines what happens when mouse wheel is turned vertically.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/map-pan-zoom/#Mouse_wheel_behavior} for more info\n\t * @default \"zoom\"\n\t */\n\twheelY?: \"none\" | \"zoom\" | \"rotateX\" | \"rotateY\";\n\n\t/**\n\t * Sensitivity of a mouse wheel.\n\t *\n\t * @default 1\n\t */\n\twheelSensitivity?: number;\n\n\t/**\n\t * Duration of mouse-wheel action animation, in milliseconds.\n\t */\n\twheelDuration?: number;\n\n\t/**\n\t * An easing function to use for mouse wheel action animations.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/animations/#Easing_functions} for more info\n\t * @default am5.ease.out($ease.cubic)\n\t */\n\twheelEasing?: (t: Time) => Time;\n\n\t/**\n\t * Duration of zoom/pan animations, in milliseconds.\n\t */\n\tanimationDuration?: number;\n\n\t/**\n\t * An easing function to use for zoom/pan animations.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/animations/#Easing_functions} for more info\n\t * @default am5.ease.out($ease.cubic)\n\t */\n\tanimationEasing?: (t: Time) => Time;\n\n\n\t/**\n\t * A [[ZoomControl]] instance.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/#Zoom_control} for more info\n\t */\n\tzoomControl?: ZoomControl;\n\n\t/**\n\t * Initial/home zoom level.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/map-pan-zoom/#Initial_position_and_zoom} for more info\n\t */\n\thomeZoomLevel?: number;\n\n\t/**\n\t * Initial coordinates to center map on load or `goHome()` call.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/map-pan-zoom/#Initial_position_and_zoom} for more info\n\t */\n\thomeGeoPoint?: IGeoPoint;\n\n\t/**\n\t * How much of a map can go outside the viewport.\n\t *\n\t * @default 0.4\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/map-pan-zoom/#Panning_outside_viewport} for more info\n\t */\n\tmaxPanOut?: number;\n\n}\n\nexport interface IMapChartPrivate extends ISerialChartPrivate {\n\n\t/**\n\t * @ignore\n\t */\n\tgeoPath: GeoPath;\n\n\t/**\n\t * @ignore\n\t */\n\tmapScale: number;\n\n}\n\n\nexport interface IMapChartEvents extends ISerialChartEvents {\n\n\t/**\n\t * Invoked when geo bounds of the map change, usually after map is iniitalized\n\t */\n\tgeoboundschanged: {};\n\n}\n\n\nexport class MapChart extends SerialChart {\n\tpublic static className: string = \"MapChart\";\n\tpublic static classNames: Array = SerialChart.classNames.concat([MapChart.className]);\n\n\tdeclare public _settings: IMapChartSettings;\n\tdeclare public _privateSettings: IMapChartPrivate;\n\tdeclare public _seriesType: MapSeries;\n\tdeclare public _events: IMapChartEvents;\n\n\tprotected _downTranslateX: number | undefined;\n\tprotected _downTranslateY: number | undefined;\n\tprotected _downRotationX: number | undefined;\n\tprotected _downRotationY: number | undefined;\n\tprotected _downRotationZ: number | undefined;\n\tprotected _pLat: number = 0;\n\tprotected _pLon: number = 0;\n\n\tprotected _movePoints: { [index: number]: IPoint } = {};\n\tprotected _downZoomLevel: number = 1;\n\tprotected _doubleDownDistance: number = 0;\n\n\tprotected _dirtyGeometries: boolean = false;\n\tprotected _geometryColection: GeoJSON.GeometryCollection = { type: \"GeometryCollection\", geometries: [] };\n\n\tprotected _centerLocation: [number, number] | null = null;\n\n\tprotected _za?: Animation;\n\tprotected _rxa?: Animation;\n\tprotected _rya?: Animation;\n\tprotected _txa?: Animation;\n\tprotected _tya?: Animation;\n\n\tprotected _mapBounds = [[0, 0], [0, 0]];\n\n\tprotected _geoCentroid: IGeoPoint = { longitude: 0, latitude: 0 };\n\tprotected _geoBounds: { left: number, right: number, top: number, bottom: number } = { left: 0, right: 0, top: 0, bottom: 0 };\n\tprotected _prevGeoBounds: { left: number, right: number, top: number, bottom: number } = { left: 0, right: 0, top: 0, bottom: 0 };\n\n\tprotected _dispatchBounds: boolean = false;\n\n\tprotected _wheelDp: IDisposer | undefined;\n\n\tprotected _pw?: number;\n\tprotected _ph?: number;\n\n\tprotected _mapFitted:boolean = false;\n\n\tprotected _makeGeoPath() {\n\t\tconst projection = this.get(\"projection\")!;\n\t\tconst path = geoPath();\n\t\tpath.projection(projection);\n\t\tthis.setPrivateRaw(\"geoPath\", path);\n\t}\n\n\t/**\n\t * Returns coordinates to geographical center of the map.\n\t */\n\tpublic geoCentroid() {\n\t\treturn this._geoCentroid;\n\t}\n\n\t/**\n\t * Returns geographical bounds of the map.\n\t */\n\tpublic geoBounds() {\n\t\treturn this._geoBounds;\n\t}\n\n\tprotected _handleSetWheel() {\n\n\t\tconst wheelX = this.get(\"wheelX\");\n\t\tconst wheelY = this.get(\"wheelY\");\n\t\tconst chartContainer = this.chartContainer;\n\n\t\tif (wheelX != \"none\" || wheelY != \"none\") {\n\n\t\t\tthis._wheelDp = chartContainer.events.on(\"wheel\", (event) => {\n\t\t\t\tconst wheelEasing = this.get(\"wheelEasing\")!;\n\t\t\t\tconst wheelSensitivity = this.get(\"wheelSensitivity\", 1);\n\t\t\t\tconst wheelDuration = this.get(\"wheelDuration\", 0);\n\n\t\t\t\tconst wheelEvent = event.originalEvent;\n\n\t\t\t\twheelEvent.preventDefault();\n\n\t\t\t\tconst chartContainer = this.chartContainer;\n\t\t\t\tconst point = chartContainer._display.toLocal(event.point);\n\n\t\t\t\tif ((wheelY == \"zoom\")) {\n\t\t\t\t\tthis._handleWheelZoom(wheelEvent.deltaY, point);\n\t\t\t\t}\n\t\t\t\telse if (wheelY == \"rotateY\") {\n\t\t\t\t\tthis._handleWheelRotateY(wheelEvent.deltaY / 5 * wheelSensitivity, wheelDuration, wheelEasing);\n\t\t\t\t}\n\t\t\t\telse if (wheelY == \"rotateX\") {\n\t\t\t\t\tthis._handleWheelRotateX(wheelEvent.deltaY / 5 * wheelSensitivity, wheelDuration, wheelEasing);\n\t\t\t\t}\n\n\t\t\t\tif ((wheelX == \"zoom\")) {\n\t\t\t\t\tthis._handleWheelZoom(wheelEvent.deltaX, point);\n\t\t\t\t}\n\t\t\t\telse if (wheelX == \"rotateY\") {\n\t\t\t\t\tthis._handleWheelRotateY(wheelEvent.deltaX / 5 * wheelSensitivity, wheelDuration, wheelEasing);\n\t\t\t\t}\n\t\t\t\telse if (wheelX == \"rotateX\") {\n\t\t\t\t\tthis._handleWheelRotateX(wheelEvent.deltaX / 5 * wheelSensitivity, wheelDuration, wheelEasing);\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t\tthis._disposers.push(this._wheelDp);\n\t\t}\n\t\telse {\n\t\t\tif (this._wheelDp) {\n\t\t\t\tthis._wheelDp.dispose();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic _prepareChildren() {\n\t\tsuper._prepareChildren();\n\n\t\tconst projection = this.get(\"projection\")!;\n\t\tconst w = this.innerWidth();\n\t\tconst h = this.innerHeight();\n\n\t\tif (this.isDirty(\"projection\")) {\n\t\t\tthis._makeGeoPath();\n\t\t\tthis.markDirtyProjection();\n\t\t\tthis._fitMap();\n\n\t\t\tprojection.scale(this.getPrivate(\"mapScale\") * this.get(\"zoomLevel\", 1));\n\t\t\tif (projection.rotate) {\n\t\t\t\tprojection.rotate([this.get(\"rotationX\", 0), this.get(\"rotationY\", 0), this.get(\"rotationZ\", 0)])\n\t\t\t}\n\n\t\t\tlet prev = this._prevSettings.projection;\n\t\t\tif (prev && prev != projection) {\n\t\t\t\tlet hw = w / 2;\n\t\t\t\tlet hh = h / 2;\n\t\t\t\tif (prev.invert) {\n\t\t\t\t\tlet centerLocation = prev.invert([hw, hh]);\n\n\t\t\t\t\tif (centerLocation) {\n\n\t\t\t\t\t\tlet xy = projection(centerLocation);\n\t\t\t\t\t\tif (xy) {\n\t\t\t\t\t\t\tlet translate = projection.translate();\n\n\t\t\t\t\t\t\tlet xx = hw - ((xy[0] - translate[0]));\n\t\t\t\t\t\t\tlet yy = hh - ((xy[1] - translate[1]));\n\n\t\t\t\t\t\t\tprojection.translate([xx, yy])\n\n\t\t\t\t\t\t\tthis.setRaw(\"translateX\", xx);\n\t\t\t\t\t\t\tthis.setRaw(\"translateY\", yy);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this.isDirty(\"wheelX\") || this.isDirty(\"wheelY\")) {\n\t\t\tthis._handleSetWheel();\n\t\t}\n\t\tvar previousGeometries = this._geometryColection.geometries;\n\t\tif (this._dirtyGeometries) {\n\t\t\tthis._geometryColection.geometries = [];\n\n\t\t\tthis.series.each((series) => {\n\t\t\t\t$array.pushAll(this._geometryColection.geometries, series._geometries);\n\t\t\t})\n\n\t\t\tthis._fitMap();\n\t\t}\n\n\t\tif (previousGeometries.length != 0 && (w != this._pw || h != this._ph || this._dirtyGeometries)) {\n\t\t\tif (w > 0 && h > 0) {\n\t\t\t\tlet hw = w / 2;\n\t\t\t\tlet hh = h / 2;\n\n\t\t\t\tprojection.fitSize([w, h], this._geometryColection);\n\t\t\t\tconst newScale = projection.scale();\n\n\t\t\t\tthis.setPrivateRaw(\"mapScale\", newScale);\n\t\t\t\tprojection.scale(newScale * this.get(\"zoomLevel\", 1));\n\n\t\t\t\tif (this._centerLocation) {\n\t\t\t\t\tlet xy = projection(this._centerLocation);\n\t\t\t\t\tif (xy) {\n\t\t\t\t\t\tlet translate = projection.translate();\n\n\t\t\t\t\t\tlet xx = hw - ((xy[0] - translate[0]));\n\t\t\t\t\t\tlet yy = hh - ((xy[1] - translate[1]));\n\n\t\t\t\t\t\tprojection.translate([xx, yy])\n\n\t\t\t\t\t\tthis.setRaw(\"translateX\", xx);\n\t\t\t\t\t\tthis.setRaw(\"translateY\", yy);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.markDirtyProjection();\n\t\t\t}\n\t\t}\n\n\t\tthis._pw = w;\n\t\tthis._ph = h;\n\n\t\tif (this.isDirty(\"zoomControl\")) {\n\t\t\tconst previous = this._prevSettings.zoomControl;\n\t\t\tconst zoomControl = this.get(\"zoomControl\")!;\n\t\t\tif (zoomControl !== previous) {\n\t\t\t\tthis._disposeProperty(\"zoomControl\");\n\t\t\t\tif (previous) {\n\t\t\t\t\tprevious.dispose();\n\t\t\t\t}\n\t\t\t\tif (zoomControl) {\n\t\t\t\t\tzoomControl.setPrivate(\"chart\", this);\n\t\t\t\t\tthis.children.push(zoomControl);\n\t\t\t\t}\n\n\t\t\t\tthis.setRaw(\"zoomControl\", zoomControl);\n\t\t\t}\n\t\t}\n\n\t\tif (this.isDirty(\"zoomLevel\")) {\n\t\t\tprojection.scale(this.getPrivate(\"mapScale\") * this.get(\"zoomLevel\", 1));\n\t\t\tthis.markDirtyProjection();\n\t\t}\n\n\t\tif (this.isDirty(\"translateX\") || this.isDirty(\"translateY\")) {\n\t\t\tprojection.translate([this.get(\"translateX\", this.width() / 2), this.get(\"translateY\", this.height() / 2)])\n\t\t\tthis.markDirtyProjection();\n\t\t}\n\n\t\tif (projection.rotate) {\n\t\t\tif (this.isDirty(\"rotationX\") || this.isDirty(\"rotationY\") || this.isDirty(\"rotationZ\")) {\n\t\t\t\tprojection.rotate([this.get(\"rotationX\", 0), this.get(\"rotationY\", 0), this.get(\"rotationZ\", 0)])\n\t\t\t\tthis.markDirtyProjection();\n\t\t\t}\n\t\t}\n\t}\n\n\n\tprotected _fitMap() {\n\t\tconst projection = this.get(\"projection\")!;\n\n\t\tlet w = this.innerWidth();\n\t\tlet h = this.innerHeight();\n\n\t\tif (w > 0 && h > 0) {\n\t\t\tprojection.fitSize([w, h], this._geometryColection);\n\t\t\tthis.setPrivateRaw(\"mapScale\", projection.scale());\n\n\t\t\tconst translate = projection.translate();\n\n\t\t\tthis.setRaw(\"translateX\", translate[0]);\n\t\t\tthis.setRaw(\"translateY\", translate[1]);\n\n\t\t\tconst geoPath = this.getPrivate(\"geoPath\");\n\t\t\tthis._mapBounds = geoPath.bounds(this._geometryColection);\n\n\t\t\tthis._geoCentroid = $mapUtils.getGeoCentroid(this._geometryColection);\n\n\t\t\tconst bounds = $mapUtils.getGeoBounds(this._geometryColection);\n\t\t\tthis._geoBounds = bounds;\n\n\t\t\tif (this._geometryColection.geometries.length > 0) {\n\n\t\t\t\tbounds.left = $math.round(this._geoBounds.left, 3);\n\t\t\t\tbounds.right = $math.round(this._geoBounds.right, 3);\n\t\t\t\tbounds.top = $math.round(this._geoBounds.top, 3);\n\t\t\t\tbounds.bottom = $math.round(this._geoBounds.bottom, 3);\n\n\t\t\t\tconst prevGeoBounds = this._prevGeoBounds;\n\n\t\t\t\tif (prevGeoBounds && !$utils.sameBounds(bounds, prevGeoBounds)) {\n\t\t\t\t\tthis._dispatchBounds = true;\n\t\t\t\t\tthis._prevGeoBounds = bounds;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._mapFitted = true;\n\t\t}\n\t}\n\n\n\t/**\n\t * Repositions the map to the \"home\" zoom level and center coordinates.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/map-pan-zoom/#Resetting_position_level} for more info\n\t * @param duration Animation duration in milliseconds\n\t */\n\tpublic goHome(duration?: number) {\n\t\tlet homeGeoPoint = this.get(\"homeGeoPoint\");\n\t\tconst homeZoomLevel = this.get(\"homeZoomLevel\", 1);\n\n\t\tif (!homeGeoPoint) {\n\t\t\tconst geoPath = this.getPrivate(\"geoPath\");\n\t\t\tconst bounds = geoPath.bounds(this._geometryColection);\n\n\t\t\tconst left = bounds[0][0];\n\t\t\tconst top = bounds[0][1];\n\n\t\t\tconst right = bounds[1][0];\n\t\t\tconst bottom = bounds[1][1];\n\n\t\t\thomeGeoPoint = this.invert({ x: left + (right - left) / 2, y: top + (bottom - top) / 2 });\n\t\t}\n\n\t\tthis.zoomToGeoPoint(homeGeoPoint, homeZoomLevel, true, duration);\n\t}\n\n\tpublic _updateChildren() {\n\t\tconst projection = this.get(\"projection\")!;\n\t\tif (projection.invert) {\n\t\t\tlet w = this.innerWidth();\n\t\t\tlet h = this.innerHeight();\n\t\t\tif (w > 0 && h > 0) {\n\t\t\t\tthis._centerLocation = projection.invert([this.innerWidth() / 2, this.innerHeight() / 2]);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic _afterChanged() {\n\t\tsuper._afterChanged();\n\t\tif (this._dispatchBounds) {\n\t\t\tthis._dispatchBounds = false;\n\t\t\tconst type = \"geoboundschanged\";\n\t\t\tif (this.events.isEnabled(type)) {\n\t\t\t\tthis.events.dispatch(type, { type: type, target: this });\n\t\t\t}\n\t\t}\n\t}\n\n\n\n\t/**\n\t * @ignore\n\t */\n\tpublic markDirtyGeometries() {\n\t\tthis._dirtyGeometries = true;\n\t\tthis.markDirty();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic markDirtyProjection() {\n\t\tthis.series.each((series) => {\n\t\t\tseries.markDirtyProjection();\n\t\t})\n\t}\n\n\tprotected _afterNew() {\n\t\tthis._defaultThemes.push(MapChartDefaultTheme.new(this._root));\n\t\tthis._settings.themeTags = $utils.mergeTags(this._settings.themeTags, [\"map\"]);\n\n\t\tsuper._afterNew();\n\n\t\tthis._makeGeoPath();\n\n\t\tthis.chartContainer.children.push(this.seriesContainer);\n\n\t\tif (this.get(\"translateX\") == null) {\n\t\t\tthis.set(\"translateX\", this.width() / 2);\n\t\t}\n\t\tif (this.get(\"translateY\") == null) {\n\t\t\tthis.set(\"translateY\", this.height() / 2);\n\t\t}\n\n\t\t// Setting trasnparent background so that full body of the plot container\n\t\t// is interactive\n\t\tthis.chartContainer.set(\"interactive\", true);\n\t\tthis.chartContainer.set(\"interactiveChildren\", false);\n\t\tthis.chartContainer.set(\"background\", Rectangle.new(this._root, {\n\t\t\tthemeTags: [\"map\", \"background\"],\n\t\t\tfill: Color.fromHex(0x000000),\n\t\t\tfillOpacity: 0\n\t\t}));\n\n\t\tthis._disposers.push(this.chartContainer.events.on(\"pointerdown\", (event) => {\n\t\t\tthis._handleChartDown(event);\n\t\t}));\n\n\t\tthis._disposers.push(this.chartContainer.events.on(\"globalpointerup\", (event) => {\n\t\t\tthis._handleChartUp(event);\n\t\t}));\n\n\t\tthis._disposers.push(this.chartContainer.events.on(\"globalpointermove\", (event) => {\n\t\t\tthis._handleChartMove(event);\n\t\t}));\n\n\t\tlet license = false;\n\t\tfor (let i = 0; i < registry.licenses.length; i++) {\n\t\t\tif (registry.licenses[i].match(/^AM5M.{5,}/i)) {\n\t\t\t\tlicense = true;\n\t\t\t}\n\t\t}\n\t\tif (!license) {\n\t\t\tthis._root._showBranding();\n\t\t}\n\n\t}\n\n\tprotected _handleChartDown(event: ISpritePointerEvent) {\n\n\t\tthis._downZoomLevel = this.get(\"zoomLevel\", 1);\n\n\n\t\tlet count = $object.keys(this.chartContainer._downPoints).length;\n\t\tif (count > 0) {\n\t\t\tthis._downTranslateX = this.get(\"translateX\");\n\t\t\tthis._downTranslateY = this.get(\"translateY\");\n\t\t\tthis._downRotationX = this.get(\"rotationX\");\n\t\t\tthis._downRotationY = this.get(\"rotationY\");\n\t\t\tthis._downRotationZ = this.get(\"rotationZ\");\n\n\t\t\tconst downId = this.chartContainer._getDownPointId();\n\t\t\tif (downId) {\n\t\t\t\tlet movePoint = this._movePoints[downId];\n\t\t\t\tif (movePoint) {\n\t\t\t\t\tthis.chartContainer._downPoints[downId] = movePoint;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (count == 0) {\n\n\t\t\tlet bg = this.chartContainer.get(\"background\");\n\t\t\tif (bg) {\n\t\t\t\tbg.events.enableType(\"click\");\n\t\t\t}\n\n\t\t\tif (this.get(\"panX\") || this.get(\"panY\")) {\n\n\t\t\t\tif (this._za) {\n\t\t\t\t\tthis._za.stop();\n\t\t\t\t}\n\t\t\t\tif (this._txa) {\n\t\t\t\t\tthis._txa.stop();\n\t\t\t\t}\n\t\t\t\tif (this._tya) {\n\t\t\t\t\tthis._tya.stop();\n\t\t\t\t}\n\t\t\t\tif (this._rxa) {\n\t\t\t\t\tthis._rxa.stop();\n\t\t\t\t}\n\t\t\t\tif (this._rya) {\n\t\t\t\t\tthis._rya.stop();\n\t\t\t\t}\n\n\t\t\t\tconst downPoint = this.chartContainer._display.toLocal(event.point);\n\t\t\t\tthis._downTranslateX = this.get(\"translateX\");\n\t\t\t\tthis._downTranslateY = this.get(\"translateY\");\n\t\t\t\tthis._downRotationX = this.get(\"rotationX\");\n\t\t\t\tthis._downRotationY = this.get(\"rotationY\");\n\t\t\t\tthis._downRotationZ = this.get(\"rotationZ\");\n\n\t\t\t\tlet projection = this.get(\"projection\")!;\n\n\t\t\t\tif (projection.invert) {\n\t\t\t\t\tlet l0 = projection.invert([downPoint.x, downPoint.y]);\n\t\t\t\t\tlet l1 = projection.invert([downPoint.x + 1, downPoint.y + 1]);\n\t\t\t\t\tif (l0 && l1) {\n\t\t\t\t\t\tthis._pLon = Math.abs(l1[0] - l0[0]);\n\t\t\t\t\t\tthis._pLat = Math.abs(l1[1] - l0[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Converts screen coordinates (X and Y) within chart to latitude and\n\t * longitude.\n\t * \n\t * @param point Screen coordinates\n\t * @return Geographical coordinates\n\t */\n\tpublic invert(point: IPoint): IGeoPoint {\n\t\tlet projection = this.get(\"projection\")!;\n\n\t\tif (projection.invert) {\n\t\t\tconst ll = projection.invert([point.x, point.y]);\n\t\t\tif (ll) {\n\t\t\t\treturn { longitude: ll[0], latitude: ll[1] };\n\t\t\t}\n\t\t}\n\n\t\treturn { longitude: 0, latitude: 0 };\n\t}\n\n\t/**\n\t * Converts latitude/longitude to screen coordinates (X and Y).\n\t * \n\t * @param point Geographical coordinates\n\t * @return Screen coordinates\n\t */\n\tpublic convert(point: IGeoPoint): IPoint {\n\t\tlet projection = this.get(\"projection\")!;\n\n\t\tconst xy = projection([point.longitude, point.latitude]);\n\n\t\tif (xy) {\n\t\t\treturn { x: xy[0], y: xy[1] };\n\t\t}\n\n\t\treturn { x: 0, y: 0 };\n\t}\n\n\tprotected _handleChartUp(_event: ISpritePointerEvent) {\n\t\tthis.chartContainer._downPoints = {}\n\t}\n\n\tprotected _handlePinch() {\n\t\tconst chartContainer = this.chartContainer;\n\t\tlet i = 0;\n\t\tlet downPoints: Array = [];\n\t\tlet movePoints: Array = [];\n\n\t\t$object.each(chartContainer._downPoints, (k, point) => {\n\t\t\tdownPoints[i] = point;\n\t\t\tlet movePoint = this._movePoints[k];\n\t\t\tif (movePoint) {\n\t\t\t\tmovePoints[i] = this._movePoints[k];\n\t\t\t}\n\t\t\ti++;\n\t\t});\n\n\t\tif (downPoints.length > 1 && movePoints.length > 1) {\n\t\t\tconst display = chartContainer._display;\n\n\t\t\tlet downPoint0 = downPoints[0];\n\t\t\tlet downPoint1 = downPoints[1];\n\n\t\t\tlet movePoint0 = movePoints[0];\n\t\t\tlet movePoint1 = movePoints[1];\n\n\t\t\tif (downPoint0 && downPoint1 && movePoint0 && movePoint1) {\n\n\t\t\t\tdownPoint0 = display.toLocal(downPoint0);\n\t\t\t\tdownPoint1 = display.toLocal(downPoint1);\n\n\t\t\t\tmovePoint0 = display.toLocal(movePoint0);\n\t\t\t\tmovePoint1 = display.toLocal(movePoint1);\n\n\t\t\t\tlet initialDistance = Math.hypot(downPoint1.x - downPoint0.x, downPoint1.y - downPoint0.y);\n\t\t\t\tlet currentDistance = Math.hypot(movePoint1.x - movePoint0.x, movePoint1.y - movePoint0.y);\n\n\t\t\t\tlet level = currentDistance / initialDistance * this._downZoomLevel;\n\n\t\t\t\tlet moveCenter = { x: movePoint0.x + (movePoint1.x - movePoint0.x) / 2, y: movePoint0.y + (movePoint1.y - movePoint0.y) / 2 };\n\t\t\t\tlet downCenter = { x: downPoint0.x + (downPoint1.x - downPoint0.x) / 2, y: downPoint0.y + (downPoint1.y - downPoint0.y) / 2 };\n\n\t\t\t\tlet tx = this._downTranslateX || 0;\n\t\t\t\tlet ty = this._downTranslateY || 0;\n\n\t\t\t\tlet zoomLevel = this._downZoomLevel;\n\n\t\t\t\tlet xx = moveCenter.x - (moveCenter.x - tx - moveCenter.x + downCenter.x) / zoomLevel * level;\n\t\t\t\tlet yy = moveCenter.y - (moveCenter.y - ty - moveCenter.y + downCenter.y) / zoomLevel * level;\n\n\t\t\t\tthis.set(\"zoomLevel\", level);\n\t\t\t\tthis.set(\"translateX\", xx);\n\t\t\t\tthis.set(\"translateY\", yy);\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected _handleChartMove(event: ISpritePointerEvent) {\n\t\tconst chartContainer = this.chartContainer;\n\t\tlet downPoint = chartContainer._getDownPoint();\n\t\tconst downPointId = chartContainer._getDownPointId();\n\t\tconst originalEvent = event.originalEvent as any;\n\n\t\tconst pointerId = originalEvent.pointerId;\n\n\t\tif (this.get(\"pinchZoom\")) {\n\t\t\tif (pointerId) {\n\t\t\t\tthis._movePoints[pointerId] = event.point;\n\n\t\t\t\tif ($object.keys(chartContainer._downPoints).length > 1) {\n\t\t\t\t\tthis._handlePinch();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (downPointId && pointerId && pointerId != downPointId) {\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tif (downPoint) {\n\t\t\t\tconst panX = this.get(\"panX\");\n\t\t\t\tconst panY = this.get(\"panY\");\n\t\t\t\tif (panX != \"none\" || panY != \"none\") {\n\t\t\t\t\tconst display = chartContainer._display;\n\t\t\t\t\tlet local = display.toLocal(event.point);\n\t\t\t\t\tdownPoint = display.toLocal(downPoint);\n\n\t\t\t\t\tlet x = this._downTranslateX;\n\t\t\t\t\tlet y = this._downTranslateY;\n\n\t\t\t\t\tif (Math.hypot(downPoint.x - local.x, downPoint.y - local.y) > 5) {\n\t\t\t\t\t\tlet bg = chartContainer.get(\"background\");\n\t\t\t\t\t\tif (bg) {\n\t\t\t\t\t\t\tbg.events.disableType(\"click\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ($type.isNumber(x) && $type.isNumber(y)) {\n\t\t\t\t\t\t\tlet projection = this.get(\"projection\")!;\n\n\t\t\t\t\t\t\tif (panX == \"translateX\") {\n\t\t\t\t\t\t\t\tx += local.x - downPoint.x;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (panY == \"translateY\") {\n\t\t\t\t\t\t\t\ty += local.y - downPoint.y;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.set(\"translateX\", x);\n\t\t\t\t\t\t\tthis.set(\"translateY\", y);\n\n\t\t\t\t\t\t\tif (projection.invert) {\n\t\t\t\t\t\t\t\tlet downLocation = projection.invert([downPoint.x, downPoint.y]);\n\t\t\t\t\t\t\t\tif (location && downLocation) {\n\t\t\t\t\t\t\t\t\tif (panX == \"rotateX\") {\n\t\t\t\t\t\t\t\t\t\tthis.set(\"rotationX\", this._downRotationX! - (downPoint.x - local.x) * this._pLon);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (panY == \"rotateY\") {\n\t\t\t\t\t\t\t\t\t\tthis.set(\"rotationY\", this._downRotationY! + (downPoint.y - local.y) * this._pLat);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected _handleWheelRotateY(delta: number, duration: number, easing: (t: Time) => Time) {\n\t\tthis._rya = this.animate({ key: \"rotationY\", to: this.get(\"rotationY\", 0) - delta, duration: duration, easing: easing });\n\t}\n\n\tprotected _handleWheelRotateX(delta: number, duration: number, easing: (t: Time) => Time) {\n\t\tthis._rxa = this.animate({ key: \"rotationX\", to: this.get(\"rotationX\", 0) - delta, duration: duration, easing: easing });\n\t}\n\n\tprotected _handleWheelZoom(delta: number, point: IPoint) {\n\t\tlet step = this.get(\"zoomStep\", 2);\n\t\tlet zoomLevel = this.get(\"zoomLevel\", 1);\n\t\tlet newZoomLevel = zoomLevel;\n\t\tif (delta > 0) {\n\t\t\tnewZoomLevel = zoomLevel / step;\n\t\t}\n\t\telse if (delta < 0) {\n\t\t\tnewZoomLevel = zoomLevel * step;\n\t\t}\n\n\t\tif (newZoomLevel != zoomLevel) {\n\t\t\tthis.zoomToPoint(point, newZoomLevel)\n\t\t}\n\t}\n\n\t/**\n\t * Zoom the map to geographical bounds.\n\t *\n\t * @param geoBounds Bounds\n\t * @param duration Animation duration in milliseconds\n\t */\n\tpublic zoomToGeoBounds(geoBounds: { left: number, right: number, top: number, bottom: number }, duration?: number): Animation | undefined {\n\t\tif (geoBounds.right < geoBounds.left) {\n\t\t\tgeoBounds.right = 180;\n\t\t\tgeoBounds.left = -180;\n\t\t}\n\n\t\tconst geoPath = this.getPrivate(\"geoPath\");\n\t\tconst mapBounds = geoPath.bounds(this._geometryColection);\n\n\t\tlet p0 = this.convert({ longitude: geoBounds.left, latitude: geoBounds.top });\n\t\tlet p1 = this.convert({ longitude: geoBounds.right, latitude: geoBounds.bottom });\n\n\t\tif (p0.y < mapBounds[0][1]) {\n\t\t\tp0.y = mapBounds[0][1];\n\t\t}\n\n\t\tif (p1.y > mapBounds[1][1]) {\n\t\t\tp1.y = mapBounds[1][1];\n\t\t}\n\n\t\tlet zl = this.get(\"zoomLevel\", 1);\n\n\t\tlet bounds = { left: p0.x, right: p1.x, top: p0.y, bottom: p1.y };\n\n\t\tlet seriesContainer = this.seriesContainer;\n\n\t\tlet zoomLevel = .9 * Math.min(seriesContainer.innerWidth() / (bounds.right - bounds.left) * zl, seriesContainer.innerHeight() / (bounds.bottom - bounds.top) * zl);\n\t\tlet x = bounds.left + (bounds.right - bounds.left) / 2;\n\t\tlet y = bounds.top + (bounds.bottom - bounds.top) / 2;\n\n\t\tlet geoPoint = this.invert({ x, y });\n\n\t\treturn this.zoomToGeoPoint(geoPoint, zoomLevel, true, duration);\n\t}\n\n\t/**\n\t * Zooms the map to specific screen point.\n\t *\n\t * @param point Point\n\t * @param level Zoom level\n\t * @param center Center the map\n\t * @param duration Duration of the animation in milliseconds\n\t */\n\tpublic zoomToPoint(point: IPoint, level: number, center?: boolean, duration?: number): Animation | undefined {\n\t\tif (level) {\n\t\t\tlevel = $math.fitToRange(level, this.get(\"minZoomLevel\", 1), this.get(\"maxZoomLevel\", 32));\n\t\t}\n\n\t\tif (!$type.isNumber(duration)) {\n\t\t\tduration = this.get(\"animationDuration\", 0);\n\t\t}\n\t\tconst easing = this.get(\"animationEasing\");\n\t\tconst zoomLevel = this.get(\"zoomLevel\", 1);\n\n\t\tlet x = point.x;\n\t\tlet y = point.y;\n\n\t\tlet tx = this.get(\"translateX\", 0);\n\t\tlet ty = this.get(\"translateY\", 0);\n\n\t\tlet cx = x;\n\t\tlet cy = y;\n\n\t\tif (center) {\n\t\t\tcx = this.width() / 2;\n\t\t\tcy = this.height() / 2;\n\t\t}\n\n\t\tlet xx = cx - ((x - tx) / zoomLevel * level);\n\t\tlet yy = cy - ((y - ty) / zoomLevel * level);\n\n\t\tthis._txa = this.animate({ key: \"translateX\", to: xx, duration: duration, easing: easing });\n\t\tthis._tya = this.animate({ key: \"translateY\", to: yy, duration: duration, easing: easing });\n\t\tthis._za = this.animate({ key: \"zoomLevel\", to: level, duration: duration, easing: easing });\n\n\t\tif (zoomLevel != level) {\n\t\t\tthis._root.readerAlert(this._t(\"Zoom level changed to %1\", this._root.locale, $type.numberToString(level)));\n\t\t}\n\n\t\treturn this._za;\n\t}\n\n\t/**\n\t * Zooms the map to specific geographical point.\n\t *\n\t * @param geoPoint Point\n\t * @param level Zoom level\n\t * @param center Center the map\n\t * @param duration Duration of the animation in milliseconds\n\t */\n\tpublic zoomToGeoPoint(geoPoint: IGeoPoint, level: number, center?: boolean, duration?: number): Animation | undefined {\n\t\tconst xy = this.convert(geoPoint);\n\t\tif (xy) {\n\t\t\treturn this.zoomToPoint(xy, level, center, duration);\n\t\t}\n\t}\n\n\t/**\n\t * Zooms the map in.\n\t */\n\tpublic zoomIn(): Animation | undefined {\n\t\treturn this.zoomToPoint({ x: this.width() / 2, y: this.height() / 2 }, this.get(\"zoomLevel\", 1) * this.get(\"zoomStep\", 2));\n\t}\n\n\t/**\n\t * Zooms the map out.\n\t */\n\tpublic zoomOut(): Animation | undefined {\n\t\treturn this.zoomToPoint({ x: this.width() / 2, y: this.height() / 2 }, this.get(\"zoomLevel\", 1) / this.get(\"zoomStep\", 2));\n\t}\n\n\tpublic _clearDirty() {\n\t\tsuper._clearDirty();\n\t\tthis._dirtyGeometries = false;\n\t\tthis._mapFitted = false;\n\t}\n}\n","import identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n var pointRadius = 4.5,\n projectionStream,\n contextStream;\n\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n stream(object, projectionStream(contextStream));\n }\n return contextStream.result();\n }\n\n path.area = function(object) {\n stream(object, projectionStream(pathArea));\n return pathArea.result();\n };\n\n path.measure = function(object) {\n stream(object, projectionStream(pathMeasure));\n return pathMeasure.result();\n };\n\n path.bounds = function(object) {\n stream(object, projectionStream(pathBounds));\n return pathBounds.result();\n };\n\n path.centroid = function(object) {\n stream(object, projectionStream(pathCentroid));\n return pathCentroid.result();\n };\n\n path.projection = function(_) {\n return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return path;\n };\n\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n\n return path.projection(projection).context(context);\n}\n","import type { IMapLineSeriesDataItem, MapLineSeries } from \"./MapLineSeries\";\nimport type { IMapPolygonSeriesDataItem, MapPolygonSeries } from \"./MapPolygonSeries\";\nimport type { Bullet } from \"../../core/render/Bullet\";\nimport type { DataItem } from \"../../core/render/Component\";\nimport type { MapLine } from \"./MapLine\";\nimport type { MapPolygon } from \"./MapPolygon\";\n\nimport { MapSeries, IMapSeriesSettings, IMapSeriesDataItem, IMapSeriesPrivate } from \"./MapSeries\";\n\nimport * as $array from \"../../core/util/Array\";\nimport * as $type from \"../../core/util/Type\";\nimport * as $math from \"../../core/util/Math\";\nimport type { Animation } from \"../../core/util/Entity\";\n\nexport interface IMapPointSeriesPrivate extends IMapSeriesPrivate {\n}\n\nexport interface IMapPointSeriesDataItem extends IMapSeriesDataItem {\n\n\t/**\n\t * GeoJSON geometry of the point.\n\t */\n\tgeometry?: GeoJSON.Point | GeoJSON.MultiPoint;\n\n\t/**\n\t * Longitude.\n\t */\n\tlongitude?: number;\n\n\t/**\n\t * Latitude.\n\t */\n\tlatitude?: number;\n\n\t/**\n\t * Relative position (0-1) on the [[MapLine]] to place point on.\n\t */\n\tpositionOnLine?: number;\n\n\t/**\n\t * Automatically rotate the point bullet to face the direction of the line\n\t * it is attached to.\n\t */\n\tautoRotate?: boolean;\n\n\t/**\n\t * The angle will be added to the automatically-calculated angle.\n\t *\n\t * Can be used to reverse the direction.\n\t */\n\tautoRotateAngle?: number;\n\n\t/**\n\t * A data item from a [[MapLineSeries]] the point is attached to.\n\t */\n\tlineDataItem?: DataItem;\n\n\t/**\n\t * An ID of a [[MapLine]] the point is attached to.\n\t */\n\tlineId?: string;\n\n\t/**\n\t * A data item from a [[MapPolygonSeries]] to use for positioning of the\n\t * point.\n\t */\n\tpolygonDataItem?: DataItem;\n\n\t/**\n\t * An ID of the [[MapPolygon]] to use for centering the point.\n\t */\n\tpolygonId?: string;\n}\n\nexport interface IMapPointSeriesSettings extends IMapSeriesSettings {\n\n\t/**\n\t * A field in data that holds an ID of the related polygon.\n\t *\n\t * If set, the point will be positioned in the visual center of the target\n\t * polygon.\n\t */\n\tpolygonIdField?: string;\n\n\t/**\n\t * If set to `true` will hide all points that are in the visible range of\n\t * the map.\n\t */\n\tclipFront?: boolean;\n\n\t/**\n\t * If set to `true` will hide all points that are in the invisible range of\n\t * the map.\n\t *\n\t * For example on the side of the globe facing away from the viewer when\n\t * used with Orthographic projection.\n\t *\n\t * NOTE: not all projections have invisible side.\n\t *\n\t * @default true\n\t */\n\tclipBack?: boolean;\n\n\n\tlatitudeField?: string;\n\n\tlongitudeField?: string;\n\n};\n\n/**\n * Creates a map series for displaying markers on the map.\n *\n * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/map-point-series/} for more info\n * @important\n */\nexport class MapPointSeries extends MapSeries {\n\n\tpublic static className: string = \"MapPointSeries\";\n\tpublic static classNames: Array = MapSeries.classNames.concat([MapPointSeries.className]);\n\n\tdeclare public _settings: IMapPointSeriesSettings;\n\tdeclare public _privateSettings: IMapPointSeriesPrivate;\n\tdeclare public _dataItemSettings: IMapPointSeriesDataItem;\n\n\tprotected _types: Array = [\"Point\", \"MultiPoint\"];\n\n\tprotected _afterNew() {\n\t\tthis.fields.push(\"polygonId\", \"lineId\", \"longitude\", \"latitude\");\n\t\tsuper._afterNew();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic markDirtyProjection() {\n\t\tthis.markDirty();\n\t}\n\n\t/**\n\t * Forces a repaint of the element which relies on data.\n\t *\n\t * @since 5.0.21\n\t */\n\tpublic markDirtyValues(dataItem: DataItem) {\n\t\tsuper.markDirtyValues();\n\n\t\tif (dataItem) {\n\t\t\tthis._positionBullets(dataItem);\n\t\t}\n\t}\n\n\tprotected processDataItem(dataItem: DataItem) {\n\t\tsuper.processDataItem(dataItem);\n\t\tconst geometry = dataItem.get(\"geometry\");\n\t\tif (!geometry) {\n\t\t\tdataItem.set(\"geometry\", { type: \"Point\", coordinates: [dataItem.get(\"longitude\", 0), dataItem.get(\"latitude\", 0)] });\n\t\t}\n\t\telse {\n\t\t\tif (geometry.type == \"Point\") {\n\t\t\t\tconst coordinates = geometry.coordinates;\n\t\t\t\tif (coordinates) {\n\t\t\t\t\tdataItem.set(\"longitude\", coordinates[0]);\n\t\t\t\t\tdataItem.set(\"latitude\", coordinates[1]);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (geometry.type == \"MultiPoint\") {\n\t\t\t\tconst coordinates = geometry.coordinates;\n\t\t\t\tif (coordinates && coordinates[0]) {\n\t\t\t\t\tdataItem.set(\"longitude\", coordinates[0][0]);\n\t\t\t\t\tdataItem.set(\"latitude\", coordinates[0][1]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected _makeBullets(dataItem: DataItem) {\n\t\tdataItem.bullets = [];\n\n\t\tthis.bullets.each((bulletFunction) => {\n\t\t\tconst geometry = dataItem.get(\"geometry\");\n\n\t\t\tif (geometry) {\n\t\t\t\tif (geometry.type == \"Point\") {\n\t\t\t\t\tthis._makeBullet(dataItem, bulletFunction);\n\t\t\t\t}\n\t\t\t\telse if (geometry.type = \"MultiPoint\") {\n\t\t\t\t\tlet i = 0;\n\t\t\t\t\t$array.each(geometry.coordinates, () => {\n\t\t\t\t\t\tthis._makeBullet(dataItem, bulletFunction, i);\n\t\t\t\t\t\ti++;\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\n\tpublic _positionBullet(bullet: Bullet) {\n\t\tconst sprite = bullet.get(\"sprite\");\n\t\tif (sprite) {\n\t\t\tconst dataItem = sprite.dataItem as DataItem;\n\n\t\t\tconst latitude = dataItem.get(\"latitude\");\n\t\t\tconst longitude = dataItem.get(\"longitude\");\n\t\t\tconst lineDataItem = dataItem.get(\"lineDataItem\");\n\t\t\tconst chart = this.chart;\n\t\t\tlet line: MapLine | undefined;\n\t\t\tif (lineDataItem) {\n\t\t\t\tline = lineDataItem.get(\"mapLine\");\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconst lineId = dataItem.get(\"lineId\");\n\n\t\t\t\tif (lineId && chart) {\n\t\t\t\t\tchart.series.each((series) => {\n\t\t\t\t\t\tif (series.isType(\"MapLineSeries\")) {\n\t\t\t\t\t\t\tlet lineDI = series.getDataItemById(lineId);\n\t\t\t\t\t\t\tif (lineDI) {\n\t\t\t\t\t\t\t\tdataItem.set(\"lineDataItem\", lineDI);\n\t\t\t\t\t\t\t\tline = lineDI.get(\"mapLine\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\tconst polygonDataItem = dataItem.get(\"polygonDataItem\");\n\t\t\tlet polygon: MapPolygon | undefined;\n\t\t\tif (polygonDataItem) {\n\t\t\t\tpolygon = polygonDataItem.get(\"mapPolygon\");\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconst polygonId = dataItem.get(\"polygonId\");\n\n\t\t\t\tif (polygonId && chart) {\n\t\t\t\t\tchart.series.each((series) => {\n\t\t\t\t\t\tif (series.isType(\"MapPolygonSeries\")) {\n\t\t\t\t\t\t\tlet polygonDI = series.getDataItemById(polygonId);\n\t\t\t\t\t\t\tif (polygonDI) {\n\t\t\t\t\t\t\t\tdataItem.set(\"polygonDataItem\", polygonDI);\n\t\t\t\t\t\t\t\tpolygon = polygonDI.get(\"mapPolygon\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst positionOnLine = dataItem.get(\"positionOnLine\");\n\t\t\tlet coordinates: [number, number] | undefined;\n\n\t\t\tlet angle: number | undefined;\n\n\t\t\tif (polygon) {\n\t\t\t\tlet geoPoint = polygon.visualCentroid();\n\t\t\t\tcoordinates = [geoPoint.longitude, geoPoint.latitude];\n\t\t\t}\n\t\t\telse if (line && $type.isNumber(positionOnLine)) {\n\t\t\t\tlet geoPoint = line.positionToGeoPoint(positionOnLine);\n\t\t\t\tcoordinates = [geoPoint.longitude, geoPoint.latitude];\n\n\t\t\t\tif (dataItem.get(\"autoRotate\", bullet.get(\"autoRotate\")) && chart) {\n\t\t\t\t\tconst geoPoint0 = line.positionToGeoPoint(positionOnLine - 0.002);\n\t\t\t\t\tconst geoPoint1 = line.positionToGeoPoint(positionOnLine + 0.002);\n\n\t\t\t\t\tconst point0 = chart.convert(geoPoint0);\n\t\t\t\t\tconst point1 = chart.convert(geoPoint1);\n\n\t\t\t\t\t//dataItem.set(\"autoRotateAngle\", $math.getAngle(point0, point1));\n\t\t\t\t\tangle = $math.getAngle(point0, point1);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ($type.isNumber(longitude) && $type.isNumber(latitude)) {\n\t\t\t\tcoordinates = [longitude, latitude];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconst geometry = dataItem.get(\"geometry\")!;\n\t\t\t\tif (geometry) {\n\t\t\t\t\tif (geometry.type == \"Point\") {\n\t\t\t\t\t\tthis._positionBulletReal(bullet, geometry, geometry.coordinates as [number, number], angle);\n\t\t\t\t\t}\n\t\t\t\t\telse if (geometry.type == \"MultiPoint\") {\n\t\t\t\t\t\tlet index = bullet._index || 0;\n\t\t\t\t\t\tcoordinates = geometry.coordinates[index] as [number, number];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (coordinates) {\n\t\t\t\tthis._positionBulletReal(bullet, { type: \"Point\", coordinates: coordinates }, coordinates, angle);\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected _positionBulletReal(bullet: Bullet, geometry: GeoJSON.Geometry, coordinates: [number, number], angle?: number) {\n\t\tconst sprite = bullet.get(\"sprite\");\n\t\tconst chart = this.chart;\n\t\tif (chart) {\n\t\t\tconst projection = chart.get(\"projection\")!;\n\t\t\tconst geoPath = chart.getPrivate(\"geoPath\");\n\t\t\tconst dataItem: DataItem = sprite.dataItem as DataItem;\n\n\t\t\tconst xy = projection(coordinates as any);\n\n\t\t\tif (xy) {\n\t\t\t\tsprite.setAll({ x: xy[0], y: xy[1] });\n\t\t\t}\n\n\t\t\tlet visible = true;\n\t\t\tif (geoPath(geometry)) {\n\t\t\t\tif (this.get(\"clipFront\")) {\n\t\t\t\t\tvisible = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (this.get(\"clipBack\")) {\n\t\t\t\t\tvisible = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tsprite.setPrivate(\"visible\", visible);\n\n\t\t\tif (dataItem && angle != null && dataItem.get(\"autoRotate\", bullet.get(\"autoRotate\"))) {\n\t\t\t\tsprite.set(\"rotation\", angle + dataItem.get(\"autoRotateAngle\", bullet.get(\"autoRotateAngle\", 0)));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Centers the map to specific series' data item and zooms to the level\n\t * specified in the parameters.\n\t *\n\t * @param dataItem Map point\n\t * @param zoomLevel Zoom level\n\t */\n\tpublic zoomToDataItem(dataItem: DataItem, zoomLevel: number): Animation | undefined {\n\t\tconst chart = this.chart;\n\t\tif (chart) {\n\t\t\treturn chart.zoomToGeoPoint({ longitude: dataItem.get(\"longitude\", 0), latitude: dataItem.get(\"latitude\", 0) }, zoomLevel, true);\n\t\t}\n\t}\n\n}\n","import { Graphics, IGraphicsSettings, IGraphicsPrivate } from \"../../core/render/Graphics\";\nimport type { MapPolygonSeries } from \"./MapPolygonSeries\";\nimport type { IGeoPoint } from \"../../core/util/IGeoPoint\";\nimport type { IPoint } from \"../../core/util/IPoint\";\nimport * as $mapUtils from \"./MapUtils\";\nimport $polylabel from \"polylabel\";\nimport { geoArea } from \"d3-geo\";\n\nexport interface IMapPolygonSettings extends IGraphicsSettings {\n\n\t/**\n\t * A GeoJSON representation of the polygons geometry.\n\t */\n\tgeometry?: GeoJSON.MultiPolygon | GeoJSON.Polygon;\n\n\t/**\n\t * @todo needs description\n\t * @default 0.5\n\t */\n\tprecision?: number;\n\n}\n\nexport interface IMapPolygonPrivate extends IGraphicsPrivate {\n}\n\n/**\n * A polygon in a [[MapPolygonSeries]].\n */\nexport class MapPolygon extends Graphics {\n\n\tdeclare public _settings: IMapPolygonSettings;\n\tdeclare public _privateSettings: IMapPolygonPrivate;\n\n\tpublic static className: string = \"MapPolygon\";\n\tpublic static classNames: Array = Graphics.classNames.concat([MapPolygon.className]);\n\tprotected _projectionDirty: boolean = false;\n\n\t/**\n\t * A [[MapPolygonSeries]] polygon belongs to.\n\t */\n\tpublic series: MapPolygonSeries | undefined;\n\n\tpublic _beforeChanged() {\n\t\tsuper._beforeChanged();\n\n\t\tif (this._projectionDirty || this.isDirty(\"geometry\") || this.isDirty(\"precision\")) {\n\t\t\tconst geometry = this.get(\"geometry\")!;\n\n\t\t\tif (geometry) {\n\t\t\t\tconst series = this.series;\n\t\t\t\tif (series) {\n\t\t\t\t\tconst projection = series.projection();\n\t\t\t\t\tif (projection) {\n\t\t\t\t\t\tprojection.precision(this.get(\"precision\", 0.5));\n\t\t\t\t\t}\n\n\t\t\t\t\tconst geoPath = series.geoPath();\n\n\t\t\t\t\tif (geoPath) {\n\t\t\t\t\t\tthis._clear = true;\n\n\t\t\t\t\t\tthis.set(\"draw\", (_display) => {\n\t\t\t\t\t\t\tgeoPath.context(this._display as any);\n\t\t\t\t\t\t\tgeoPath(geometry);\n\t\t\t\t\t\t\tgeoPath.context(null);\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tif (this.isHover()) {\n\t\t\t\t\t\t\tthis.showTooltip();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic markDirtyProjection() {\n\t\tthis.markDirty();\n\t\tthis._projectionDirty = true;\n\t}\n\n\tpublic _clearDirty() {\n\t\tsuper._clearDirty();\n\t\tthis._projectionDirty = false;\n\t}\n\n\t/**\n\t * Returns latitude/longitude of the geometrical center of the polygon.\n\t *\n\t * @return Center\n\t */\n\tpublic geoCentroid(): IGeoPoint {\n\t\tconst geometry = this.get(\"geometry\")!;\n\t\tif (geometry) {\n\t\t\treturn $mapUtils.getGeoCentroid(geometry);\n\t\t}\n\t\telse {\n\t\t\treturn { latitude: 0, longitude: 0 };\n\t\t}\n\t}\n\n\t/**\n\t * Returns latitude/longitude of the visual center of the polygon.\n\t *\n\t * @return Center\n\t */\n\tpublic visualCentroid(): IGeoPoint {\n\n\t\tlet biggestArea = 0;\n\t\tlet coordinates: number[][][] = [];\n\t\tconst geometry = this.get(\"geometry\")!;\n\n\t\tif (geometry) {\n\t\t\tif (geometry.type == \"Polygon\") {\n\t\t\t\tcoordinates = geometry.coordinates as number[][][];\n\t\t\t}\n\t\t\telse if (geometry.type == \"MultiPolygon\") {\n\t\t\t\tif (geometry.coordinates.length > 1) {\n\t\t\t\t\tfor (let i = 0; i < geometry.coordinates.length; i++) {\n\t\t\t\t\t\tlet coords = geometry.coordinates[i] as number[][][];\n\t\t\t\t\t\tlet area = geoArea({ type: \"Polygon\", coordinates: coords });\n\n\t\t\t\t\t\tif (area > biggestArea) {\n\t\t\t\t\t\t\tcoordinates = coords;\n\t\t\t\t\t\t\tbiggestArea = area;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet center = $polylabel(coordinates as number[][][]);\n\t\t\treturn { longitude: center[0], latitude: center[1] };\n\n\t\t}\n\t\treturn { longitude: 0, latitude: 0 };\n\t}\n\n\n\tpublic _getTooltipPoint(): IPoint {\n\t\tconst series = this.series;\n\n\t\tif (series) {\n\t\t\tconst projection = series.projection();\n\t\t\tif (projection) {\n\t\t\t\tconst geoPoint = this.visualCentroid();\n\t\t\t\tconst xy = projection([geoPoint.longitude, geoPoint.latitude]);\n\n\t\t\t\tif (xy) {\n\t\t\t\t\treturn { x: xy[0], y: xy[1] }\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn { x: 0, y: 0 };\n\t}\n}\n","import type { DataItem } from \"../../core/render/Component\";\n\nimport { MapSeries, IMapSeriesSettings, IMapSeriesDataItem, IMapSeriesPrivate } from \"./MapSeries\";\nimport { MapPolygon } from \"./MapPolygon\";\nimport { Template } from \"../../core/util/Template\";\nimport { ListTemplate } from \"../../core/util/List\";\n\nimport * as $array from \"../../core/util/Array\";\nimport * as $mapUtils from \"./MapUtils\";\nimport type { Animation } from \"../../core/util/Entity\";\n\nexport interface IMapPolygonSeriesPrivate extends IMapSeriesPrivate {\n}\n\nexport interface IMapPolygonSeriesDataItem extends IMapSeriesDataItem {\n\n\t/**\n\t * Related [[MapPolygon]] object.\n\t */\n\tmapPolygon: MapPolygon;\n\n\t/**\n\t * GeoJSON geometry of the polygon.\n\t */\n\tgeometry?: GeoJSON.Polygon | GeoJSON.MultiPolygon;\n\n}\n\nexport interface IMapPolygonSeriesSettings extends IMapSeriesSettings {\n\n}\n\n/**\n * Creates a map series for displaying polygons.\n *\n * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/map-polygon-series/} for more info\n * @important\n */\nexport class MapPolygonSeries extends MapSeries {\n\n\t/**\n\t * @ignore\n\t */\n\tpublic makeMapPolygon(dataItem: DataItem): MapPolygon {\n\t\tconst mapPolygon = this.children.push(this.mapPolygons.make());\n\t\tmapPolygon._setDataItem(dataItem);\n\t\tthis.mapPolygons.push(mapPolygon);\n\t\treturn mapPolygon;\n\t}\n\n\t/**\n\t * A [[ListTemplate]] of all polygons in series.\n\t *\n\t * `mapPolygons.template` can also be used to configure polygons.\n\t *\n\t * @default new ListTemplate\n\t */\n\tpublic readonly mapPolygons: ListTemplate = new ListTemplate(\n\t\tTemplate.new({}),\n\t\t() => MapPolygon._new(this._root, {}, [this.mapPolygons.template])\n\t);\n\n\tpublic static className: string = \"MapPolygonSeries\";\n\tpublic static classNames: Array = MapSeries.classNames.concat([MapPolygonSeries.className]);\n\n\tdeclare public _settings: IMapPolygonSeriesSettings;\n\tdeclare public _privateSettings: IMapPolygonSeriesPrivate;\n\tdeclare public _dataItemSettings: IMapPolygonSeriesDataItem;\n\n\tprotected _types: Array = [\"Polygon\", \"MultiPolygon\"];\n\n\t/**\n\t * @ignore\n\t */\n\tpublic markDirtyProjection() {\n\t\t$array.each(this.dataItems, (dataItem) => {\n\t\t\tlet mapPolygon = dataItem.get(\"mapPolygon\");\n\t\t\tif (mapPolygon) {\n\t\t\t\tmapPolygon.markDirtyProjection();\n\t\t\t}\n\t\t})\n\t}\n\n\tpublic _prepareChildren() {\n\t\tsuper._prepareChildren();\n\n\t\tif (this.isDirty(\"fill\")) {\n\t\t\tthis.mapPolygons.template.set(\"fill\", this.get(\"fill\"));\n\t\t}\n\t\tif (this.isDirty(\"stroke\")) {\n\t\t\tthis.mapPolygons.template.set(\"stroke\", this.get(\"stroke\"));\n\t\t}\n\t}\n\n\tprotected processDataItem(dataItem: DataItem) {\n\t\tsuper.processDataItem(dataItem);\n\n\t\tlet mapPolygon = dataItem.get(\"mapPolygon\");\n\t\tif (!mapPolygon) {\n\t\t\tmapPolygon = this.makeMapPolygon(dataItem);\n\t\t}\n\n\t\tdataItem.set(\"mapPolygon\", mapPolygon);\n\t\tconst geometry = dataItem.get(\"geometry\")!;\n\n\t\tif (geometry) {\n\t\t\tmapPolygon.set(\"geometry\", geometry);\n\t\t}\n\n\t\tmapPolygon.series = this;\n\n\t\tthis._addGeometry(dataItem.get(\"geometry\"));\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic disposeDataItem(dataItem: DataItem) {\n\t\tsuper.disposeDataItem(dataItem);\n\t\tconst mapPolygon = dataItem.get(\"mapPolygon\");\n\t\tif (mapPolygon) {\n\t\t\tthis.mapPolygons.removeValue(mapPolygon);\n\t\t\tmapPolygon.dispose();\n\t\t}\n\t\tthis._removeGeometry(dataItem.get(\"geometry\"));\n\t}\n\n\n\t/**\n\t * Forces a repaint of the element which relies on data.\n\t *\n\t * @since 5.0.21\n\t */\n\tpublic markDirtyValues(dataItem: DataItem) {\n\t\tsuper.markDirtyValues();\n\t\tif (dataItem) {\n\t\t\tconst mapPolygon = dataItem.get(\"mapPolygon\");\n\t\t\tif (mapPolygon) {\n\t\t\t\tmapPolygon.set(\"geometry\", dataItem.get(\"geometry\"));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Centers and zooms in on the specific polygon.\n\t *\n\t * @param dataItem Target data item\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/map-pan-zoom/#Zooming_to_clicked_object} for more info\n\t */\n\tpublic zoomToDataItem(dataItem: DataItem):Animation | undefined {\n\t\tconst polygon = dataItem.get(\"mapPolygon\");\n\t\tif (polygon) {\n\t\t\tconst geometry = polygon.get(\"geometry\");\n\t\t\tconst chart = this.chart;\n\t\t\tif (geometry && chart) {\n\t\t\t\treturn chart.zoomToGeoBounds($mapUtils.getGeoBounds(geometry));\n\t\t\t}\n\t\t}\n\t}\n}\n","import type { MapChart } from \"./MapChart\";\n\nimport { Container, IContainerPrivate, IContainerSettings } from \"../../core/render/Container\";\nimport { Button } from \"../../core/render/Button\";\nimport { Graphics } from \"../../core/render/Graphics\";\nimport { p100 } from \"../../core/util/Percent\";\nimport { MultiDisposer } from \"../../core/util/Disposer\";\n\nexport interface IZoomControlSettings extends IContainerSettings {\n\n}\n\nexport interface IZoomControlPrivate extends IContainerPrivate {\n\n\t/**\n\t * @ignore\n\t */\n\tchart?: MapChart;\n\n}\n\n/**\n * A control that displays button for zooming [[MapChart]] in and out.\n *\n * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/map-pan-zoom/#Zoom_control} for more information\n * @important\n */\nexport class ZoomControl extends Container {\n\n\t/**\n\t * A [[Button]] for zoom in.\n\t *\n\t * @default Button.new()\n\t */\n\tpublic readonly plusButton: Button = this.children.push(Button.new(this._root, { width: 36, height: 36, themeTags: [\"plus\"] }));\n\n\t/**\n\t * A [[Button]] for zoom out.\n\t *\n\t * @default Button.new()\n\t */\n\tpublic readonly minusButton: Button = this.children.push(Button.new(this._root, { width: 36, height: 36, themeTags: [\"minus\"] }));\n\n\tdeclare public _settings: IZoomControlSettings;\n\tdeclare public _privateSettings: IZoomControlPrivate;\n\n\tpublic static className: string = \"ZoomControl\";\n\tpublic static classNames: Array = Container.classNames.concat([ZoomControl.className]);\n\n\tprotected _disposer: MultiDisposer | undefined;\n\n\tprotected _afterNew() {\n\t\tsuper._afterNew();\n\n\t\tthis.set(\"position\", \"absolute\");\n\n\t\tthis.set(\"layout\", this._root.verticalLayout);\n\t\tthis.set(\"x\", p100);\n\t\tthis.set(\"centerX\", p100);\n\n\t\tthis.set(\"y\", p100);\n\t\tthis.set(\"centerY\", p100);\n\n\t\tthis.set(\"paddingRight\", 10);\n\t\tthis.set(\"paddingBottom\", 10);\n\n\t\tthis.plusButton.setAll({\n\t\t\ticon: Graphics.new(this._root, { themeTags: [\"icon\"] }),\n\t\t\tlayout: undefined\n\t\t});\n\n\t\tthis.minusButton.setAll({\n\t\t\ticon: Graphics.new(this._root, { themeTags: [\"icon\"] }),\n\t\t\tlayout: undefined\n\t\t});\n\n\t}\n\n\tpublic _prepareChildren() {\n\t\tsuper._prepareChildren();\n\n\t\tif (this.isPrivateDirty(\"chart\")) {\n\t\t\tconst chart = this.getPrivate(\"chart\");\n\t\t\tconst previous = this._prevPrivateSettings.chart;\n\t\t\tif (chart) {\n\t\t\t\tthis._disposer = new MultiDisposer([\n\t\t\t\t\tthis.plusButton.events.on(\"click\", () => {\n\t\t\t\t\t\tchart.zoomIn()\n\t\t\t\t\t}),\n\t\t\t\t\tthis.minusButton.events.on(\"click\", () => {\n\t\t\t\t\t\tchart.zoomOut()\n\t\t\t\t\t})])\n\t\t\t}\n\n\t\t\tif (previous && this._disposer) {\n\t\t\t\tthis._disposer.dispose();\n\t\t\t}\n\t\t}\n\t}\n}\n","import {asin, cos, epsilon, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function orthographicRaw(x, y) {\n return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n return projection(orthographicRaw)\n .scale(249.5)\n .clipAngle(90 + epsilon);\n}\n","import projection from \"./index.js\";\n\nexport function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n return projection(equirectangularRaw)\n .scale(152.63);\n}\n","import {abs, asin, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea.js\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n // Are the parallels symmetrical around the Equator?\n if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n function project(x, y) {\n var r = sqrt(c - 2 * n * sin(y)) / n;\n return [r * sin(x *= n), r0 - r * cos(x)];\n }\n\n project.invert = function(x, y) {\n var r0y = r0 - y,\n l = atan2(x, abs(r0y)) * sign(r0y);\n if (r0y * n < 0)\n l -= pi * sign(x) * sign(r0y);\n return [l / n, asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEqualAreaRaw)\n .scale(155.424)\n .center([0, 33.6442]);\n}\n","import {asin, cos, sin} from \"../math.js\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos(phi0);\n\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin(phi) / cosPhi0];\n }\n\n forward.invert = function(x, y) {\n return [x / cosPhi0, asin(y * cosPhi0)];\n };\n\n return forward;\n}\n","import {degrees, pi, radians} from \"../math.js\";\nimport {projectionMutator} from \"./index.js\";\n\nexport function conicProjection(projectAt) {\n var phi0 = 0,\n phi1 = pi / 3,\n m = projectionMutator(projectAt),\n p = m(phi0, phi1);\n\n p.parallels = function(_) {\n return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n };\n\n return p;\n}\n","import {epsilon} from \"../math.js\";\nimport albers from \"./albers.js\";\nimport conicEqualArea from \"./conicEqualArea.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n var n = streams.length;\n return {\n point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nexport default function() {\n var cache,\n cacheStream,\n lower48 = albers(), lower48Point,\n alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (lower48Point.point(x, y), point)\n || (alaskaPoint.point(x, y), point)\n || (hawaiiPoint.point(x, y), point);\n }\n\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(),\n t = lower48.translate(),\n x = (coordinates[0] - t[0]) / k,\n y = (coordinates[1] - t[1]) / k;\n return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n : lower48).invert(coordinates);\n };\n\n albersUsa.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n };\n\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n return reset();\n };\n\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n\n lower48Point = lower48\n .translate(_)\n .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n .stream(pointStream);\n\n alaskaPoint = alaska\n .translate([x - 0.307 * k, y + 0.201 * k])\n .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n hawaiiPoint = hawaii\n .translate([x - 0.205 * k, y + 0.212 * k])\n .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n return reset();\n };\n\n albersUsa.fitExtent = function(extent, object) {\n return fitExtent(albersUsa, extent, object);\n };\n\n albersUsa.fitSize = function(size, object) {\n return fitSize(albersUsa, size, object);\n };\n\n albersUsa.fitWidth = function(width, object) {\n return fitWidth(albersUsa, width, object);\n };\n\n albersUsa.fitHeight = function(height, object) {\n return fitHeight(albersUsa, height, object);\n };\n\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n\n return albersUsa.scale(1070);\n}\n","import conicEqualArea from \"./conicEqualArea.js\";\n\nexport default function() {\n return conicEqualArea()\n .parallels([29.5, 45.5])\n .scale(1070)\n .translate([480, 250])\n .rotate([96, 0])\n .center([-0.6, 38.7]);\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math.js\";\n\nexport function azimuthalRaw(scale) {\n return function(x, y) {\n var cx = cos(x),\n cy = cos(y),\n k = scale(cx * cy);\n if (k === Infinity) return [2, 0];\n return [\n k * cy * sin(x),\n k * sin(y)\n ];\n }\n}\n\nexport function azimuthalInvert(angle) {\n return function(x, y) {\n var z = sqrt(x * x + y * y),\n c = angle(z),\n sc = sin(c),\n cc = cos(c);\n return [\n atan2(x * sc, z * cc),\n asin(z && y * sc / z)\n ];\n }\n}\n","import projection from \"./index.js\";\nimport {abs, asin, cos, epsilon2, sin, sqrt} from \"../math.js\";\n\nvar A1 = 1.340264,\n A2 = -0.081106,\n A3 = 0.000893,\n A4 = 0.003796,\n M = sqrt(3) / 2,\n iterations = 12;\n\nexport function equalEarthRaw(lambda, phi) {\n var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n return [\n lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n if (abs(delta) < epsilon2) break;\n }\n return [\n M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\n asin(sin(l) / M)\n ];\n};\n\nexport default function() {\n return projection(equalEarthRaw)\n .scale(177.158);\n}\n","import projection from \"./index.js\";\nimport {abs, epsilon} from \"../math.js\";\n\nexport function naturalEarth1Raw(lambda, phi) {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n return [\n lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n var phi = y, i = 25, delta;\n do {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n } while (abs(delta) > epsilon && --i > 0);\n return [\n x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n phi\n ];\n};\n\nexport default function() {\n return projection(naturalEarth1Raw)\n .scale(175.295);\n}\n","import * as m from \"./../../dist/es2015/map.js\";\nexport const am5map = m;"],"sourceRoot":""}