{"version":3,"file":"map.js","mappings":"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","sources":["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/./node_modules/polylabel/polylabel.js","webpack://@amcharts/amcharts5/./node_modules/tinyqueue/index.js","webpack://@amcharts/amcharts5/./tmp/webpack/map.js"],"sourcesContent":["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 * If you want to change this after the map is initialized, you should call series.data.clear() before setting `include`\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 * If you want to change this after the map is initialized, you should call series.data.clear() before setting `exclude`\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\t/**\n\t * Names of geodata items, such as countries, to replace by from loaded\n\t * geodata.\n\t *\n\t * Can be used to override built-in English names for countries.\n\t *\n\t * ```TypeScript\n\t * import am5geodata_lang_ES from '@amcharts5-geodata/lang/es';\n\t * // ...\n\t * map.geodataNames = am5geodata_lang_ES;\n\t * ```\n\t * ```JavaScript\n\t * map.geodataNames = am5geodata_lang_ES;\n\t * ```\n\t *\n\t * @since 5.1.13\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/map-translations/} for more info\n\t */\n\tgeodataNames?: { [index: string]: string };\n\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\tconst geodataNames = this.get(\"geodataNames\");\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\tif (geodataNames && geodataNames[id]) {\n\t\t\t\t\t\t\tfeature.properties.name = 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\tprotected _onDataClear() {\n\t\tsuper._onDataClear();\n\t\tthis._geoJSONparsed = false;\n\t}\t\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\t\t\t\t\t\t\tif (series.get(\"lineType\") == \"straight\") {\n\n\t\t\t\t\t\t\t\tconst geometry = this.get(\"geometry\")!;\n\n\t\t\t\t\t\t\t\tif (geometry) {\n\t\t\t\t\t\t\t\t\tlet coordinates = geometry.coordinates;\n\t\t\t\t\t\t\t\t\tif (coordinates) {\n\n\t\t\t\t\t\t\t\t\t\tlet segments!: number[][][];\n\n\t\t\t\t\t\t\t\t\t\tif (geometry.type == \"LineString\") {\n\t\t\t\t\t\t\t\t\t\t\tsegments = [coordinates] as number[][][];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (geometry.type == \"MultiLineString\") {\n\t\t\t\t\t\t\t\t\t\t\tsegments = coordinates as number[][][];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tthis.set(\"draw\", (display) => {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log(\"draw\")\n\t\t\t\t\t\t\t\t\t\t\tfor (let s = 0; s < segments.length; s++) {\n\t\t\t\t\t\t\t\t\t\t\t\tlet segment = segments[s];\n\t\t\t\t\t\t\t\t\t\t\t\tif (segment.length > 0) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst gp0 = segment[0];\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst p0 = chart.convert({ longitude: gp0[0], latitude: gp0[1] })\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay.lineTo(p0.x, p0.y);\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor (let p = 0; p < segment.length; p++) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst gp = segment[p];\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst pn = chart.convert({ longitude: gp[0], latitude: gp[1] })\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay.lineTo(pn.x, pn.y);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t})\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\telse {\n\t\t\t\t\t\t\t\tthis.set(\"draw\", (_display) => {\n\t\t\t\t\t\t\t\t\tif (projection && series.get(\"clipBack\") === false) {\n\t\t\t\t\t\t\t\t\t\tprojection.clipAngle(180);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tgeoPath.context(this._display as any);\n\t\t\t\t\t\t\t\t\tgeoPath(geometry);\n\t\t\t\t\t\t\t\t\tgeoPath.context(null);\n\n\t\t\t\t\t\t\t\t\tif (projection) {\n\t\t\t\t\t\t\t\t\t\tprojection.clipAngle(clipAngle as any);\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\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\t\tconst series = this.getPrivate(\"series\");\n\t\tconst chart = series.chart;\n\n\t\tif (geometry && series && chart) {\n\t\t\tconst lineType = series.get(\"lineType\");\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\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: number[];\n\n\t\t\t\t\tif (lineType == \"straight\") {\n\t\t\t\t\t\tlet p0 = chart.convert({ longitude: pointA[0], latitude: pointA[1] });\n\t\t\t\t\t\tlet p1 = chart.convert({ longitude: pointB[0], latitude: pointB[1] });\n\n\t\t\t\t\t\tlet x = p0.x + (p1.x - p0.x) * positionAB;\n\t\t\t\t\t\tlet y = p0.y + (p1.y - p0.y) * positionAB;\n\n\t\t\t\t\t\treturn chart.invert({ x: x, y: y });\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tlocation = geoInterpolate(pointA, pointB)(positionAB);\n\t\t\t\t\t\treturn { longitude: location[0], latitude: location[1] }\n\t\t\t\t\t}\n\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 {\t\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\t/**\n\t * A line type.\n\t *\n\t * * `\"curved\"` (default) - connects points using shortest distance, which will result in curved lines based on map projection.\n\t * * `\"straight\"` - connects points using visually straight lines, and will not cross the -180/180 longitude.\n\t * \n\t * @default \"curved\"\n\t * @since 5.2.24\n\t */\n\tlineType?: \"curved\" | \"straight\"\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\tthis._handlePointsToConnect(dataItem);\n\t\tdataItem.on(\"pointsToConnect\", () => {\n\t\t\tthis._handlePointsToConnect(dataItem);\n\t\t})\n\n\t\tdataItem.set(\"mapLine\", mapLine);\n\n\n\t\tmapLine.setPrivate(\"series\", this);\n\t}\n\n\tprotected _handlePointsToConnect(dataItem: DataItem) {\n\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\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 range(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 return abs(point[0]) <= pi ? point[0] : 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\tcenterMapOnZoomOut: true\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\tautoScale: false\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 { MapPointSeries } from \"./MapPointSeries\";\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\";\nimport type { DataItem } from \"../../core/render/Component\";\nimport type { IMapPolygonSeriesDataItem } from \"./MapPolygonSeries\";\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\t/**\n\t * Setting `true` means that the map will automatically center itself (or go\n\t * to `homeGeoPoint` if set) when fully zoomed out.\n\t *\n\t * `false` would mean that zoom out will be centered around the mouse\n\t * cursor (when zooming using wheel), or current map position.\n\t * \n\t * @default true\n\t * @since 5.2.1\n\t */\n\tcenterMapOnZoomOut?: boolean;\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\n\t * initialized.\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 _centerX: number = 0;\n\tprotected _centerY: number = 0;\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 a geoPoint of the current zoom position.\n\t * \n\t * You can later use it to restore zoom position, e.g.: `chart.zoomToGeoPoint(geoPoint, zoomLevel, true)`.\n\t *\n\t * @since 5.2.19\n\t */\n\tpublic geoPoint() {\n\t\treturn this.invert({ x: this.width() / 2, y: this.height() / 2 });\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\t// Ignore wheel event if it is happening on a non-chart element, e.g. if\n\t\t\t\t// some page element is over the chart.\n\t\t\t\tif ($utils.isLocalEvent(wheelEvent, this)) {\n\t\t\t\t\twheelEvent.preventDefault();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn;\n\t\t\t\t}\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\n\t\t\t\t\t\tthis._centerX = translate[0];\n\t\t\t\t\t\tthis._centerY = translate[1];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.markDirtyProjection();\n\n\t\t\t\tconst geoPath = this.getPrivate(\"geoPath\");\n\t\t\t\tthis._mapBounds = geoPath.bounds(this._geometryColection);\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\n\t\t\tthis.series.each((series) => {\n\t\t\t\tif (series.isType(\"MapPointSeries\")) {\n\t\t\t\t\tif (series.get(\"autoScale\")) {\n\t\t\t\t\t\t$array.each(series.dataItems, (dataItem) => {\n\t\t\t\t\t\t\tconst bullets = dataItem.bullets;\n\t\t\t\t\t\t\tif (bullets) {\n\t\t\t\t\t\t\t\t$array.each(bullets, (bullet) => {\n\t\t\t\t\t\t\t\t\tconst sprite = bullet.get(\"sprite\");\n\t\t\t\t\t\t\t\t\tif (sprite) {\n\t\t\t\t\t\t\t\t\t\tsprite.set(\"scale\", this.get(\"zoomLevel\"));\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\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\n\t\tif (this.isDirty(\"pinchZoom\") || this.get(\"panX\") || this.get(\"panY\")) {\n\t\t\tthis._setUpTouch();\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\tthis._centerX = translate[0];\n\t\t\tthis._centerY = 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\t/**\n\t * Returns geographical coordinates for calculated or manual center of the\n\t * map.\n\t */\n\tpublic homeGeoPoint(): IGeoPoint {\n\t\tlet homeGeoPoint = this.get(\"homeGeoPoint\");\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\t\treturn homeGeoPoint;\n\t}\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\tthis.zoomToGeoPoint(this.homeGeoPoint(), this.get(\"homeZoomLevel\", 1), 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\tprotected _setUpTouch(): void {\n\t\tif (!this.chartContainer._display.cancelTouch) {\n\t\t\tthis.chartContainer._display.cancelTouch = (this.get(\"pinchZoom\") || this.get(\"panX\") || this.get(\"panY\")) ? true : false;\n\t\t}\n\t}\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\tthis._setUpTouch();\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] = movePoint;\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\t\t\t\tlevel = $math.fitToRange(level, this.get(\"minZoomLevel\", 1), this.get(\"maxZoomLevel\", 32));\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 - (- tx + downCenter.x) / zoomLevel * level;\n\t\t\t\tlet yy = moveCenter.y - (- ty + 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\t\t\t\t\t\t\tconst zoomLevel = this.get(\"zoomLevel\", 1);\n\n\t\t\t\t\t\t\tconst maxPanOut = this.get(\"maxPanOut\", 0.4);\n\t\t\t\t\t\t\tconst bounds = this._mapBounds;\n\n\t\t\t\t\t\t\tconst w = this.width();\n\t\t\t\t\t\t\tconst h = this.height();\n\n\t\t\t\t\t\t\tconst ww = bounds[1][0] - bounds[0][0];\n\t\t\t\t\t\t\tconst hh = bounds[1][1] - bounds[0][1];\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\n\t\t\t\t\t\t\t\tconst cx = w / 2 - (w / 2 - this._centerX) * zoomLevel;\n\t\t\t\t\t\t\t\tx = Math.min(x, cx + ww * maxPanOut * zoomLevel);\n\t\t\t\t\t\t\t\tx = Math.max(x, cx - ww * maxPanOut * zoomLevel);\n\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\tconst cy = h / 2 - (h / 2 - this._centerY) * zoomLevel;\n\t\t\t\t\t\t\t\ty = Math.min(y, cy + hh * maxPanOut * zoomLevel);\n\t\t\t\t\t\t\t\ty = Math.max(y, cy - hh * maxPanOut * zoomLevel);\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\tif (this.get(\"centerMapOnZoomOut\") && level == this.get(\"homeZoomLevel\", 1)) {\n\t\t\tpoint = this.convert(this.homeGeoPoint());\n\t\t\tcenter = true;\n\t\t}\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\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\tlet xy = this.convert(geoPoint);\n\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\t/**\n\t * Returns area of a mapPolygon in square pixels.\n\t */\n\tpublic getArea(dataItem: DataItem): number {\n\t\tconst geoPath = this.getPrivate(\"geoPath\");\n\t\tconst geometry = dataItem.get(\"geometry\");\n\t\tif (geometry) {\n\t\t\treturn geoPath.area(geometry);\n\t\t}\n\t\treturn 0;\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\t/**\n\t * A field in data that holds point's longitude.\n\t */\n\tlatitudeField?: string;\n\n\t/**\n\t * A field in data that holds point's longitude.\n\t */\n\tlongitudeField?: string;\n\n\t/**\n\t * If set to `true`, bullets will resize when zooming the [[MapChart]].\n\t * \n\t * @since 5.2.8\n\t * @default false\n\t */\n\tautoScale?: boolean\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\tdataItem.setRaw(\"longitude\", geoPoint.longitude);\n\t\t\t\tdataItem.setRaw(\"latitude\", 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\n\t\t\t\tdataItem.setRaw(\"longitude\", geoPoint.longitude);\n\t\t\t\tdataItem.setRaw(\"latitude\", geoPoint.latitude);\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\t/**\n\t * @ignore\n\t */\n\tpublic disposeDataItem(dataItem: DataItem) {\n\t\tconst chart = this.chart;\n\t\tif (chart) {\n\t\t\tchart.series.each((series) => {\n\t\t\t\tif (series.isType(\"MapLineSeries\")) {\n\t\t\t\t\t$array.each(series.dataItems, (di) => {\n\t\t\t\t\t\tconst pointsToConnect = di.get(\"pointsToConnect\");\n\t\t\t\t\t\tif (pointsToConnect) {\n\t\t\t\t\t\t\t$array.each(pointsToConnect, (point) => {\n\t\t\t\t\t\t\t\tif (point == dataItem) {\n\t\t\t\t\t\t\t\t\t$array.remove(pointsToConnect, point);\n\t\t\t\t\t\t\t\t\tseries.markDirtyValues(di);\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\n\t\tsuper.disposeDataItem(dataItem);\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\tfor (let i = 0; i < geometry.coordinates.length; i++) {\n\t\t\t\t\tlet coords = geometry.coordinates[i] as number[][][];\n\t\t\t\t\tlet area = geoArea({ type: \"Polygon\", coordinates: coords });\n\t\t\t\t\tif (area > biggestArea) {\n\t\t\t\t\t\tcoordinates = coords;\n\t\t\t\t\t\tbiggestArea = area;\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","'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 * as m from \"./../../dist/es2015/map.js\";\nexport const am5map = m;"],"names":["this","fields","push","_setRawDefault","on","geoJSON","previous","_prevSettings","data","clear","_afterNew","_prepareChildren","_valuesDirty","isDirty","get","undefined","_geoJSONparsed","_parseGeoJSON","id","includes","excludes","length","indexOf","features","type","geometry","console","log","geodataNames","i","len","feature","properties","name","_types","checkInclude","dataItem","dataItems","value","dataObject","dataContext","geometryType","set","processDataItem","madeFromGeoData","events","isEnabled","dispatch","target","_chart","children","moveValue","bulletsContainer","chart","getPrivate","_geometries","markDirtyGeometries","_dispose","series","removeValue","_onDataClear","Series","MapSeries","className","Adder","constructor","_partials","Float64Array","_n","add","x","p","j","y","hi","lo","Math","abs","valueOf","n","epsilon","epsilon2","pi","PI","halfPi","quarterPi","tau","degrees","radians","atan","atan2","cos","ceil","exp","hypot","floor","pow","sin","sign","sqrt","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","a","b","_beforeChanged","_projectionDirty","clipAngle","precision","_clear","display","s","segment","gp0","p0","convert","longitude","latitude","lineTo","gp","pn","_display","context","markDirty","_clearDirty","position","lineType","totalDistance","currentDistance","positionA","positionB","pointA","pointB","segments","positionAB","p1","invert","x0","y0","x1","y1","cy0","sy0","cy1","sy1","kx0","ky0","kx1","ky1","d","k","interpolate","t","B","A","distance","Graphics","MapLine","List","Template","_root","mapLines","template","mapLine","make","_setDataItem","markDirtyProjection","makeMapLine","_handlePointsToConnect","setPrivate","pointsToConnect","markDirtyValues","coords","setRaw","disposeDataItem","dispose","classNames","concat","MapLineSeries","range","start","stop","step","arguments","max","Array","graticuleX","dy","map","graticuleY","dx","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","rotationIdentity","round","rotateRadians","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","rotation","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","line","m","rejoin","pop","shift","result","Intersection","points","other","entry","o","e","v","compareIntersection","startInside","subject","clip","forEach","pointEqual","sort","current","isSubject","array","spherical","cartesian","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","vector","cartesianNormalizeInPlace","l","merge","arrays","from","flatten","pointVisible","clipLine","sink","polygon","ring","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","min","ax","ay","transformer","methods","TransformStream","key","prototype","Infinity","boundsStream","bounds","fit","projection","fitBounds","clipExtent","scale","translate","fitExtent","h","fitSize","size","fitWidth","width","fitHeight","height","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","centerMapOnZoomOut","role","clipFront","clipBack","autoScale","isMeasured","fillOpacity","strokeWidth","strokeOpacity","draw","moveTo","Theme","areaSum","areaRingSum","areaStream","areaRingStart","areaRingEnd","area","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","left","right","top","bottom","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","_centerX","_centerY","_mapBounds","zoomControl","_disposeProperty","isType","bullets","bullet","sprite","_setUpTouch","prevGeoBounds","_prevGeoBounds","_dispatchBounds","_mapFitted","homeGeoPoint","duration","zoomToGeoPoint","_afterChanged","cancelTouch","_defaultThemes","MapChartDefaultTheme","_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","ww","downLocation","location","easing","animate","newZoomLevel","zoomToPoint","geoBounds","mapBounds","zl","readerAlert","_t","locale","geoPath","SerialChart","MapChart","_positionBullets","bulletFunction","_makeBullet","lineDataItem","lineDI","getDataItemById","polygonDataItem","polygonDI","positionOnLine","visualCentroid","positionToGeoPoint","geoPoint0","geoPoint1","_positionBulletReal","index","_index","di","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","Queue","polylabel","debug","minX","minY","maxX","maxY","cellSize","degeneratePoleOfInaccessibility","cellQueue","compareMax","Cell","bestCell","f","getCentroidCell","bboxCell","numProbes","cell","poleOfInaccessibility","inside","minDistSq","getSegDistSq","pointToPolygonDist","SQRT2","px","py","default","module","exports","TinyQueue","compare","defaultCompare","_down","item","_up","peek","pos","parent","halfLength","best","am5map"],"sourceRoot":""}