{"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/rectangle.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/clip/circle.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/clip/line.js","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/projection/mercator.js","webpack://@amcharts/amcharts5/./src/.internal/charts/map/MapChartDefaultTheme.ts","webpack://@amcharts/amcharts5/./node_modules/d3-geo/src/path/area.js","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/ClusteredPointSeries.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\";\nimport type { DataItem } from \"../../core/render/Component\";\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 * All map series will determine the actual bounds shown in the [[MapChart]].\n\t *\n\t * If we need a series to be ignored while calculating the bounds, we can set\n\t * this to `false`.\n\t *\n\t * Especially useful for background series.\n\t *\n\t * @default true\n\t * @since 5.2.36\n\t */\n\taffectsBounds?: boolean;\n\n\t/**\n\t * Map data in GeoJSON format.\n\t */\n\tgeoJSON?: GeoJSON.GeoJSON;\n\n\t/**\n\t * An array of map object ids from geodata to include in the map.\n\t *\n\t * If set, only those objects listed in `include` will be shown.\n\t */\n\tinclude?: Array;\n\n\t/**\n\t * An array of map object ids from geodata to omit when showing the map.\n\t */\n\texclude?: Array;\n\n\t/**\n\t * A field in series `data` that will hold map object's numeric value.\n\t *\n\t * It can be used in a number of places, e.g. tooltips, heat rules, etc.\n\t */\n\tvalueField?: string;\n\n\t/**\n\t * @ignore\n\t */\n\tgeometryField?: string;\n\n\t/**\n\t * @ignore\n\t */\n\tgeometryTypeField?: string;\n\n\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 _excluded: Array> = [];\n\tprotected _notIncluded: Array> = [];\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\tprotected _handleDirties() {\n\t\tconst geoJSON = this.get(\"geoJSON\");\n\t\tlet previous = this._prevSettings.geoJSON;\n\n\t\tif (previous && previous != geoJSON) {\n\t\t\tthis._prevSettings.geoJSON = undefined;\n\t\t\tthis._geoJSONparsed = false;\n\t\t}\n\n\t\tif (!this._geoJSONparsed) {\n\t\t\tthis._parseGeoJSON();\n\t\t\tthis._geoJSONparsed = true;\n\t\t}\n\t}\n\n\tpublic _prepareChildren() {\n\t\tsuper._prepareChildren();\n\n\t\tif (this._valuesDirty) {\n\t\t\tthis._handleDirties();\n\t\t}\n\n\t\tif (this.get(\"geoJSON\") && (this.isDirty(\"geoJSON\") || this.isDirty(\"include\") || this.isDirty(\"exclude\"))) {\n\n\t\t\tthis._handleDirties();\n\n\t\t\tconst chart = this.chart;\n\n\t\t\tconst exclude = this.get(\"exclude\");\n\n\t\t\tif (exclude) {\n\t\t\t\tif (chart) {\n\t\t\t\t\tchart._centerLocation = null;\n\t\t\t\t}\n\t\t\t\t$array.each(exclude, (id) => {\n\t\t\t\t\tconst dataItem = this.getDataItemById(id);\n\t\t\t\t\tif (dataItem) {\n\t\t\t\t\t\tthis._excludeDataItem(dataItem)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (!exclude || exclude.length == 0) {\n\t\t\t\t$array.each(this._excluded, (dataItem) => {\n\t\t\t\t\tthis._unexcludeDataItem(dataItem)\n\t\t\t\t})\n\t\t\t\tthis._excluded = [];\n\t\t\t}\n\n\t\t\tconst include = this.get(\"include\");\n\t\t\tif (include) {\n\t\t\t\tif (chart) {\n\t\t\t\t\tchart._centerLocation = null;\n\t\t\t\t}\n\t\t\t\t$array.each(this.dataItems, (dataItem) => {\n\t\t\t\t\tconst id = dataItem.get(\"id\");\n\t\t\t\t\tif (id && include.indexOf(id) == -1) {\n\t\t\t\t\t\tthis._notIncludeDataItem(dataItem);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis._unNotIncludeDataItem(dataItem);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (!include) {\n\t\t\t\t$array.each(this._notIncluded, (dataItem) => {\n\t\t\t\t\tthis._unNotIncludeDataItem(dataItem);\n\t\t\t\t})\n\t\t\t\tthis._notIncluded = [];\n\t\t\t}\n\n\t\t}\n\t}\n\n\tprotected _excludeDataItem(dataItem: DataItem) {\n\t\tthis._removeGeometry(dataItem.get(\"geometry\"));\n\t\t$array.move(this._excluded, dataItem);\n\t}\n\n\tprotected _unexcludeDataItem(dataItem: DataItem) {\n\t\tthis._addGeometry(dataItem.get(\"geometry\"), this);\n\t}\n\n\tprotected _notIncludeDataItem(dataItem: DataItem) {\n\t\tthis._removeGeometry(dataItem.get(\"geometry\"));\n\t\t$array.move(this._notIncluded, dataItem);\n\t}\n\n\tprotected _unNotIncludeDataItem(dataItem: DataItem) {\n\t\tthis._addGeometry(dataItem.get(\"geometry\"), this);\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\tconst idField = this.get(\"idField\", \"id\");\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[idField];\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\t//if (!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, madeFromGeoData: true };\n\t\t\t\t\t\t\t\tdataObject[idField] = id;\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, series: MapSeries) {\n\t\tif (geometry && series.get(\"affectsBounds\", true)) {\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\tthis._markDirtyKey(\"exclude\");\n\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, IMapLineSeriesDataItem } from \"./MapLineSeries\";\nimport type { IGeoPoint } from \"../../core/util/IGeoPoint\";\nimport type { DataItem } from \"../../core/render/Component\";\nimport type { IPoint } from \"../../core/util/IPoint\";\nimport * as $type from \"../../core/util/Type\";\nimport { Percent } from \"../../core/util/Percent\";\n\nimport { Graphics, IGraphicsSettings, IGraphicsPrivate, IGraphicsEvents } 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\nexport interface IMapLinePrivate extends IGraphicsPrivate {\n\n\t/**\n\t * @ignore\n\t */\n\tseries: MapLineSeries;\n}\n\nexport interface IMapLineEvents extends IGraphicsEvents {\n\n\t/**\n\t * Invoked when line is redrawn\n\t */\n\tlinechanged: {};\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\tdeclare public _events: IMapLineEvents;\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 && projection.clipAngle) {\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\t\t\t\t\t\tconst dataItem = this.dataItem as DataItem;\n\t\t\t\t\t\tconst geoPath = chart.getPrivate(\"geoPath\");\n\t\t\t\t\t\tif (geoPath && dataItem) {\n\t\t\t\t\t\t\tthis._clear = true;\n\t\t\t\t\t\t\tif (dataItem.get(\"lineType\", 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\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 && projection.clipAngle) {\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\tconst type = \"linechanged\";\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 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\tpublic _getTooltipPoint(): IPoint {\n\t\tlet tooltipX = this.get(\"tooltipX\");\n\t\tlet tooltipY = this.get(\"tooltipY\");\n\n\t\tlet x = 0;\n\t\tlet y = 0;\n\n\t\tif ($type.isNumber(tooltipX)) {\n\t\t\tx = tooltipX;\n\t\t}\n\n\t\tif ($type.isNumber(tooltipY)) {\n\t\t\ty = tooltipY;\n\t\t}\n\n\t\tif (tooltipX instanceof Percent) {\n\t\t\tconst geoPoint = this.positionToGeoPoint(tooltipX.value)\n\t\t\tconst series = this.getPrivate(\"series\");\n\t\t\tif (series) {\n\t\t\t\tconst chart = series.chart;\n\t\t\t\tif (chart) {\n\t\t\t\t\tconst point = chart.convert(geoPoint);\n\t\t\t\t\tx = point.x;\n\t\t\t\t\ty = point.y;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn { x, y };\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\t\tconst dataItem = this.dataItem as DataItem;\n\n\t\tif (geometry && series && chart && dataItem) {\n\t\t\tconst lineType = dataItem.get(\"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 {\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. Note, fixed points can not be used here.\n\t */\n\tpointsToConnect?: Array>;\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.32\n\t */\n\tlineType?: \"curved\" | \"straight\"\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\t/**\n\t * @ignore\n\t */\n\tlineTypeField?: string;\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\tprotected _afterNew() {\n\t\tthis.fields.push(\"lineType\");\n\t\tthis._setRawDefault(\"lineTypeField\", \"lineType\");\n\t\tsuper._afterNew();\n\t}\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 = this.addDisposer(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\t\tthis._addGeometry(dataItem.get(\"geometry\"), this);\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\t/**\n\t * @ignore\n\t */\n\tprotected _excludeDataItem(dataItem: DataItem) {\n\t\tsuper._excludeDataItem(dataItem);\n\t\tconst mapLine = dataItem.get(\"mapLine\");\n\t\tif (mapLine) {\n\t\t\tmapLine.setPrivate(\"visible\", false);\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tprotected _unexcludeDataItem(dataItem: DataItem) {\n\t\tsuper._unexcludeDataItem(dataItem);\n\t\tconst mapLine = dataItem.get(\"mapLine\");\n\t\tif (mapLine) {\n\t\t\tmapLine.setPrivate(\"visible\", true);\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tprotected _notIncludeDataItem(dataItem: DataItem) {\n\t\tsuper._notIncludeDataItem(dataItem);\n\t\tconst mapLine = dataItem.get(\"mapLine\");\n\t\tif (mapLine) {\n\t\t\tmapLine.setPrivate(\"visible\", false);\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tprotected _unNotIncludeDataItem(dataItem: DataItem) {\n\t\tsuper._unNotIncludeDataItem(dataItem);\n\t\tconst mapLine = dataItem.get(\"mapLine\");\n\t\tif (mapLine) {\n\t\t\tmapLine.setPrivate(\"visible\", true);\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\nexport interface IGraticuleSeriesDataItem extends IMapLineSeriesDataItem {\n}\n\nexport interface IGraticuleSeriesPrivate extends IMapLineSeriesPrivate {\n}\n\nexport interface IGraticuleSeriesSettings extends IMapLineSeriesSettings {\n\tclipExtent?: boolean;\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\n\t\tif (this.isDirty(\"clipExtent\")) {\n\n\t\t\tif (this.get(\"clipExtent\")) {\n\t\t\t\tconst chart = this.chart;\n\t\t\t\tif (chart) {\n\t\t\t\t\tchart.events.on(\"geoboundschanged\", () => {\n\t\t\t\t\t\tthis._generate();\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tthis._generate();\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected _generate() {\n\t\tlet graticule = geoGraticule();\n\n\t\tif (graticule) {\n\t\t\tif (this.get(\"clipExtent\")) {\n\t\t\t\tconst chart = this.chart;\n\t\t\t\tif (chart) {\n\t\t\t\t\tconst geoBounds = chart.geoBounds();\n\t\t\t\t\tif (geoBounds) {\n\t\t\t\t\t\tgraticule.extent([[geoBounds.left, geoBounds.bottom], [geoBounds.right, geoBounds.top]]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst step = this.get(\"step\", 10);\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 if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n return [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 lambda += deltaLambda;\n if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n return [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 {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 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 {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","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","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 { Theme } from \"../../core/Theme\";\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(\"MapPolygonSeries\").setAll({\r\n\t\t\taffectsBounds: true\r\n\t\t})\r\n\r\n\r\n\t\tr(\"MapPointSeries\").setAll({\r\n\t\t\taffectsBounds: false,\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\tr(\"ClusteredPointSeries\").setAll({\r\n\t\t\tminDistance: 20,\r\n\t\t\tscatterDistance: 3,\r\n\t\t\tscatterRadius: 8,\r\n\t\t\tstopClusterZoom: 0.95\r\n\t\t})\r\n\r\n\t\tr(\"MapLineSeries\").setAll({\r\n\t\t\taffectsBounds: 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\r\n\t\tr(\"Button\", [\"zoomtools\", \"home\"]).setAll({\r\n\t\t\tvisible: false\r\n\t\t});\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\t}\r\n}\r\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 {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","// Simple caching for constant-radius points.\nlet cacheDigits, cacheAppend, cacheRadius, cacheCircle;\n\nexport default class PathString {\n constructor(digits) {\n this._append = digits == null ? append : appendRound(digits);\n this._radius = 4.5;\n this._ = \"\";\n }\n pointRadius(_) {\n this._radius = +_;\n return this;\n }\n polygonStart() {\n this._line = 0;\n }\n polygonEnd() {\n this._line = NaN;\n }\n lineStart() {\n this._point = 0;\n }\n lineEnd() {\n if (this._line === 0) this._ += \"Z\";\n this._point = NaN;\n }\n point(x, y) {\n switch (this._point) {\n case 0: {\n this._append`M${x},${y}`;\n this._point = 1;\n break;\n }\n case 1: {\n this._append`L${x},${y}`;\n break;\n }\n default: {\n this._append`M${x},${y}`;\n if (this._radius !== cacheRadius || this._append !== cacheAppend) {\n const r = this._radius;\n const s = this._;\n this._ = \"\"; // stash the old string so we can cache the circle path fragment\n this._append`m0,${r}a${r},${r} 0 1,1 0,${-2 * r}a${r},${r} 0 1,1 0,${2 * r}z`;\n cacheRadius = r;\n cacheAppend = this._append;\n cacheCircle = this._;\n this._ = s;\n }\n this._ += cacheCircle;\n break;\n }\n }\n }\n result() {\n const result = this._;\n this._ = \"\";\n return result.length ? result : null;\n }\n}\n\nfunction append(strings) {\n let i = 1;\n this._ += strings[0];\n for (const j = strings.length; i < j; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n const d = Math.floor(digits);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${digits}`);\n if (d > 15) return append;\n if (d !== cacheDigits) {\n const k = 10 ** d;\n cacheDigits = d;\n cacheAppend = function append(strings) {\n let i = 1;\n this._ += strings[0];\n for (const j = strings.length; i < j; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n }\n return cacheAppend;\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, geoArea } 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 * Returns geo centroid of a geometry\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 * Returns geo area of a geometry\n */\nexport function getGeoArea(geometry: GeoJSON.GeometryObject): number {\n\treturn geoArea(geometry);\n}\n\n/**\n * Returns bounds of a geometry\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\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 * current x position of a map\n\t */\n\ttranslateX?: number;\n\n\t/**\n\t * current y position of a map\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 horizontal mouse wheel (only some mouses do have such a wheel)\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.\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 * NOTE: this setting is ignored when `wheelX` or `wheelY` is set to `\"zoom\"`.\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\t * NOTE: this setting is ignored when `wheelX` or `wheelY` is set to `\"zoom\"`.\n\t */\n\twheelDuration?: number;\n\n\t/**\n\t * An easing function to use for mouse wheel action animations.\n\t *\n\t * NOTE: this setting is ignored when `wheelX` or `wheelY` is set to `\"zoom\"`.\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/home rotationX.\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\thomeRotationX?: number;\n\n\t/**\n\t * Initial/home rotationY.\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\thomeRotationY?: 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\tpublic _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(this.seriesContainer.toGlobal({ 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\t\t\tif (this._wheelDp) {\n\t\t\t\tthis._wheelDp.dispose();\n\t\t\t}\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 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\tconst previousGeometries = this._geometryColection.geometries;\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\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\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\n\t\t\tconst zoomControl = this.get(\"zoomControl\");\n\t\t\tif (zoomControl) {\n\t\t\t\tconst zoomLevel = this.get(\"zoomLevel\", 1);\n\n\t\t\t\tif (zoomLevel == this.get(\"minZoomLevel\", 1)) {\n\t\t\t\t\tthis.root.events.once(\"frameended\", () =>{\n\t\t\t\t\t\tzoomControl.minusButton.set(\"disabled\", true);\n\t\t\t\t\t})\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tzoomControl.minusButton.set(\"disabled\", false);\n\t\t\t\t}\n\n\t\t\t\tif (zoomLevel == this.get(\"maxZoomLevel\", 32)) {\n\t\t\t\t\tzoomControl.plusButton.set(\"disabled\", true);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tzoomControl.plusButton.set(\"disabled\", false);\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, this.get(\"homeRotationX\"), this.get(\"homeRotationY\"));\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\tsuper._updateChildren();\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\tthis.children.push(this.bulletsContainer);\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\t\telse {\n\t\t\tthis._root._licenseApplied();\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\t\tconst downPoints = this.chartContainer._downPoints;\n\n\t\tlet count = $object.keys(downPoints).length;\n\t\tif (count == 1) {\n\t\t\t// workaround to solve a problem when events are added to some children of chart container (rotation stops working)\n\t\t\tlet downPoint = downPoints[1];\n\t\t\tif (!downPoint) {\n\t\t\t\tdownPoint = downPoints[0];\n\t\t\t}\n\n\t\t\tif (downPoint && (downPoint.x == event.point.x && downPoint.y == event.point.y)) {\n\t\t\t\tcount = 0;\n\t\t\t}\n\t\t}\n\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\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 * @param rotationX X rotation of a map if different from current\n\t * @param rotationY Y rotation of a map if different from current\n\t * \n\t * @return Screen coordinates\n\t */\n\tpublic convert(point: IGeoPoint, rotationX?: number, rotationY?: number): IPoint {\n\t\tlet projection = this.get(\"projection\")!;\n\t\tlet xy;\n\n\t\tif (!projection.rotate) {\n\t\t\trotationX = undefined;\n\t\t\trotationY = undefined;\n\t\t}\n\n\t\tif (rotationX != null || rotationY != null) {\n\t\t\tif (rotationX == null) {\n\t\t\t\trotationX = 0;\n\t\t\t}\n\t\t\tif (rotationY == null) {\n\t\t\t\trotationY = 0;\n\t\t\t}\n\t\t\tlet rotation = projection.rotate();\n\t\t\tprojection.rotate([rotationX, rotationY, 0]);\n\t\t\txy = projection([point.longitude, point.latitude]);\n\t\t\tprojection.rotate(rotation);\n\t\t}\n\t\telse {\n\t\t\txy = projection([point.longitude, point.latitude]);\n\t\t}\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 * @param rotationX X rotation of a map at the end of zoom\n\t * @param rotationY Y rotation of a map at the end of zoom\n\t */\n\tpublic zoomToGeoBounds(geoBounds: { left: number, right: number, top: number, bottom: number }, duration?: number, rotationX?: number, rotationY?: 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 }, rotationX, rotationY);\n\t\tlet p1 = this.convert({ longitude: geoBounds.right, latitude: geoBounds.bottom }, rotationX, rotationY);\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\tif (rotationX != null || rotationY != null) {\n\t\t\tthis.rotate(rotationX, rotationY);\n\t\t}\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(), this.get(\"homeRotationX\"), this.get(\"homeRotationY\"));\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 * @param rotationX X rotation of a map at the end of zoom\n\t * @param rotationY Y rotation of a map at the end of zoom\n\t * \n\t */\n\tpublic zoomToGeoPoint(geoPoint: IGeoPoint, level: number, center?: boolean, duration?: number, rotationX?: number, rotationY?: number): Animation | undefined {\n\n\t\tlet xy = this.convert(geoPoint, rotationX, rotationY);\n\n\t\tif (rotationX != null || rotationY != null) {\n\t\t\tthis.rotate(rotationX, rotationY, duration);\n\t\t}\n\n\t\tif (xy) {\n\t\t\treturn this.zoomToPoint(xy, level, center, duration);\n\t\t}\n\t}\n\n\tpublic rotate(rotationX?: number, rotationY?: number, duration?: number) {\n\t\tconst projection = this.get(\"projection\")!;\n\t\tif (!projection.rotate) {\n\t\t}\n\t\telse {\n\t\t\tif (!$type.isNumber(duration)) {\n\t\t\t\tduration = this.get(\"animationDuration\", 0);\n\t\t\t}\n\n\t\t\tconst easing = this.get(\"animationEasing\");\n\t\t\tif (rotationX != null) {\n\t\t\t\tthis.animate({ key: \"rotationX\", to: rotationX, duration: duration, easing: easing });\n\t\t\t}\n\t\t\tif (rotationY != null) {\n\t\t\t\tthis.animate({ key: \"rotationY\", to: rotationY, duration: duration, easing: easing });\n\t\t\t}\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 let digits = 3,\n 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 if (!arguments.length) return projection;\n projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream;\n return path;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString(digits)) : 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 path.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) digits = null;\n else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n if (context === null) contextStream = new PathString(digits);\n return path;\n };\n\n return path.projection(projection).digits(digits).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 { IPoint } from \"../../core/util/IPoint\";\nimport type { Animation } from \"../../core/util/Entity\";\nimport type { IDisposer } from \"../../core/util/Disposer\";\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\t/**\n\t * If set to `true`, the point will be drawn according to its `x` and `y`\n\t * coordinates, not its latitude and longitude.\n\t * \n\t * Fixed points will not move together with map, and can not be used to\n\t * connect points on a `MapLineSeries`.\n\t * \n\t * @default false\n\t * @since 5.2.34\n\t */\n\tfixed?: boolean;\n\n\t/**\n\t * Point (in pixels) of a data item\n\t */\n\tpoint?: IPoint;\n\n\t/**\n\t * @ignore\n\t */\n\tclipped?: boolean;\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 * A field in data that holds information if this point is fixed or moves with a map.\n\t */\n\tfixedField?: 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 _lineChangedDp?: IDisposer;\n\n\tprotected _afterNew() {\n\t\tthis.fields.push(\"polygonId\", \"lineId\", \"longitude\", \"latitude\", \"fixed\");\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\tlet geometry = dataItem.get(\"geometry\");\n\t\tif (!geometry) {\n\t\t\tgeometry = { type: \"Point\", coordinates: [dataItem.get(\"longitude\", 0), dataItem.get(\"latitude\", 0)] };\n\t\t\tdataItem.set(\"geometry\", geometry);\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\n\t\tthis._addGeometry(geometry, this);\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._setBulletParent(this._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._setBulletParent(this._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\tprotected _setBulletParent(bullet?: Bullet) {\n\t\tif (bullet) {\n\t\t\tconst sprite = bullet.get(\"sprite\");\n\t\t\tconst chart = this.chart;\n\t\t\tif (sprite && chart) {\n\t\t\t\tconst dataItem = sprite.dataItem as DataItem;\n\t\t\t\tif (dataItem) {\n\t\t\t\t\tif (dataItem.get(\"fixed\")) {\n\t\t\t\t\t\tif (sprite.parent != chart.bulletsContainer) {\n\t\t\t\t\t\t\tchart.bulletsContainer.children.moveValue(sprite);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (sprite.parent != this.bulletsContainer) {\n\t\t\t\t\t\t\tthis.bulletsContainer.children.moveValue(sprite);\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\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\t\t\tif (dataItem && dataItem.get(\"fixed\")) {\n\t\t\t\treturn;\n\t\t\t}\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 fixed = dataItem.get(\"fixed\");\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\t\t\tif (this._lineChangedDp) {\n\t\t\t\tthis._lineChangedDp.dispose();\n\t\t\t}\n\n\t\t\tif (line) {\n\t\t\t\tthis._lineChangedDp = line.events.on(\"linechanged\", () => {\n\t\t\t\t\tthis._positionBullets(dataItem);\n\t\t\t\t})\n\t\t\t}\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 (!fixed && 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\tconst point = { x: xy[0], y: xy[1] };\n\t\t\t\tsprite.setAll(point);\n\t\t\t\tdataItem.setRaw(\"point\", point);\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\t\t\tdataItem.set(\"clipped\", !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 * @param rotate If it's true, the map will rotate so that this point would be in the center. Mostly usefull with geoOrthographic projection.\n\t */\n\tpublic zoomToDataItem(dataItem: DataItem, zoomLevel: number, rotate?: boolean): Animation | undefined {\n\t\tconst chart = this.chart;\n\t\tif (chart) {\n\t\t\tconst longitude = dataItem.get(\"longitude\", 0);\n\t\t\tconst latitude = dataItem.get(\"latitude\", 0);\n\t\t\tif (rotate) {\n\t\t\t\treturn chart.zoomToGeoPoint({ longitude: longitude, latitude: latitude }, zoomLevel, true, undefined, -longitude, -latitude);\n\t\t\t}\n\t\t\treturn chart.zoomToGeoPoint({ longitude: longitude, latitude: latitude }, zoomLevel, true);\n\t\t}\n\t}\n\n\n\t/**\n\t * Zooms the map in so that all points in the array are visible.\n\t *\n\t * @param dataItems An array of data items of points to zoom to\n\t * @param rotate Rotate the map so it is centered on the selected items\n\t * @return Animation\n\t * @since 5.5.6\n\t */\n\tpublic zoomToDataItems(dataItems: Array>, rotate?: boolean): Animation | undefined {\n\n\t\tlet left: number | null = null;\n\t\tlet right: number | null = null;\n\t\tlet top: number | null = null;\n\t\tlet bottom: number | null = null;\n\n\t\t$array.each(dataItems, (dataItem) => {\n\t\t\tconst longitude = dataItem.get(\"longitude\", 0);\n\t\t\tconst latitude = dataItem.get(\"latitude\", 0);\n\n\t\t\tif (left == null || left > longitude) {\n\t\t\t\tleft = longitude;\n\t\t\t}\n\t\t\tif (right == null || right < longitude) {\n\t\t\t\tright = longitude;\n\t\t\t}\n\t\t\tif (top == null || top < latitude) {\n\t\t\t\ttop = latitude;\n\t\t\t}\n\t\t\tif (bottom == null || bottom > latitude) {\n\t\t\t\tbottom = latitude;\n\t\t\t}\n\t\t})\n\t\tif (left != null && right != null && top != null && bottom != null) {\n\t\t\tconst chart = this.chart;\n\t\t\tif (chart) {\n\t\t\t\tif (rotate) {\n\t\t\t\t\treturn chart.zoomToGeoBounds({ left, right, top, bottom }, undefined, -(left + (right - left) / 2), -(top + (top - bottom) / 2));\n\t\t\t\t}\n\t\t\t\treturn chart.zoomToGeoBounds({ left, right, top, bottom });\n\t\t\t}\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\t/**\n\t * @ignore\n\t */\n\tprotected _excludeDataItem(dataItem: DataItem) {\n\t\tsuper._excludeDataItem(dataItem);\n\t\tconst bullets = dataItem.bullets;\n\t\tif (bullets) {\n\t\t\t$array.each(bullets, (bullet) => {\n\t\t\t\tconst sprite = bullet.get(\"sprite\");\n\t\t\t\tif (sprite) {\n\t\t\t\t\tsprite.setPrivate(\"visible\", false);\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\n\t/**\n\t * @ignore\n\t */\n\tprotected _unexcludeDataItem(dataItem: DataItem) {\n\t\tsuper._unexcludeDataItem(dataItem);\n\t\tconst bullets = dataItem.bullets;\n\t\tif (bullets) {\n\t\t\t$array.each(bullets, (bullet) => {\n\t\t\t\tconst sprite = bullet.get(\"sprite\");\n\t\t\t\tif (sprite) {\n\t\t\t\t\tsprite.setPrivate(\"visible\", true);\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tprotected _notIncludeDataItem(dataItem: DataItem) {\n\t\tsuper._notIncludeDataItem(dataItem);\n\t\tconst bullets = dataItem.bullets;\n\t\tif (bullets) {\n\t\t\t$array.each(bullets, (bullet) => {\n\t\t\t\tconst sprite = bullet.get(\"sprite\");\n\t\t\t\tif (sprite) {\n\t\t\t\t\tsprite.setPrivate(\"visible\", false);\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tprotected _unNotIncludeDataItem(dataItem: DataItem) {\n\t\tsuper._unNotIncludeDataItem(dataItem);\n\t\tconst bullets = dataItem.bullets;\n\t\tif (bullets) {\n\t\t\t$array.each(bullets, (bullet) => {\n\t\t\t\tconst sprite = bullet.get(\"sprite\");\n\t\t\t\tif (sprite) {\n\t\t\t\t\tsprite.setPrivate(\"visible\", true);\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\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\tprotected _afterNew(): void {\n\t\tsuper._afterNew();\n\t\tthis.setPrivate(\"trustBounds\", true);\n\t}\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\t\t\tif (coordinates) {\n\t\t\t\tlet center = $polylabel(coordinates as number[][][]);\n\t\t\t\treturn { longitude: center[0], latitude: center[1] };\n\t\t\t}\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\";\nimport type { Animation } from \"../../core/util/Entity\";\nimport type { IPoint } from \"../../core/util/IPoint\";\nimport type { IGeoPoint } from \"../../core/util/IGeoPoint\";\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\";\n\n\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\nexport interface IMapPolygonSeriesSettings extends IMapSeriesSettings {\n\n\t/**\n\t * If set to `true`, the order of coordinates in GeoJSON will be flipped.\n\t *\n\t * Some GeoJSON software produces those in reverse order, so if your custom\n\t * map appears garbled, try this setting.\n\t *\n\t * @default false\n\t * @since 5.2.42\n\t */\n\treverseGeodata?: boolean;\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 = this.addDisposer(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\tlet geometry = dataItem.get(\"geometry\")!;\n\n\t\tif (geometry) {\n\t\t\tif (this.get(\"reverseGeodata\")) {\n\t\t\t\tconst coordinates = geometry.coordinates;\n\t\t\t\tif (coordinates) {\n\t\t\t\t\tfor (let x = 0; x < geometry.coordinates.length; x++) {\n\t\t\t\t\t\tif (geometry.type == \"MultiPolygon\") {\n\t\t\t\t\t\t\tfor (let y = 0; y < geometry.coordinates[x].length; y++) {\n\t\t\t\t\t\t\t\tgeometry.coordinates[x][y].reverse()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tgeometry.coordinates[x].reverse()\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\tmapPolygon.set(\"geometry\", geometry);\n\t\t}\n\n\t\tmapPolygon.series = this;\n\n\t\tthis._addGeometry(dataItem.get(\"geometry\"), this);\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\t/**\n\t * @ignore\n\t */\n\tprotected _excludeDataItem(dataItem: DataItem) {\n\t\tsuper._excludeDataItem(dataItem);\n\t\tconst mapPolygon = dataItem.get(\"mapPolygon\");\n\t\tif (mapPolygon) {\n\t\t\tmapPolygon.setPrivate(\"visible\", false);\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tprotected _unexcludeDataItem(dataItem: DataItem) {\n\t\tsuper._unexcludeDataItem(dataItem);\n\t\tconst mapPolygon = dataItem.get(\"mapPolygon\");\n\t\tif (mapPolygon) {\n\t\t\tmapPolygon.setPrivate(\"visible\", true);\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tprotected _notIncludeDataItem(dataItem: DataItem) {\n\t\tsuper._notIncludeDataItem(dataItem);\n\t\tconst mapPolygon = dataItem.get(\"mapPolygon\");\n\t\tif (mapPolygon) {\n\t\t\tmapPolygon.setPrivate(\"visible\", false);\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tprotected _unNotIncludeDataItem(dataItem: DataItem) {\n\t\tsuper._unNotIncludeDataItem(dataItem);\n\t\tconst mapPolygon = dataItem.get(\"mapPolygon\");\n\t\tif (mapPolygon) {\n\t\t\tmapPolygon.setPrivate(\"visible\", true);\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 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 * @param rotate If it's true, the map will rotate so that this polygon would be in the center. Mostly usefull with geoOrthographic projection.\n\t */\n\tpublic zoomToDataItem(dataItem: DataItem, rotate?: boolean): 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\n\t\t\tif (geometry && chart) {\n\n\t\t\t\tif (rotate) {\n\t\t\t\t\tconst centroid = $mapUtils.getGeoCentroid(geometry);\n\t\t\t\t\tchart.rotate(-centroid.longitude, -centroid.latitude);\n\t\t\t\t\treturn chart.zoomToGeoBounds($mapUtils.getGeoBounds(geometry), undefined, -centroid.longitude, -centroid.latitude);\n\t\t\t\t}\n\n\t\t\t\treturn chart.zoomToGeoBounds($mapUtils.getGeoBounds(geometry),);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Zooms the map in so that all polygons in the array are visible.\n\t *\n\t * @param dataItems An array of data items to zoom to\n\t * @param rotate Rotate the map so it is centered on the selected items\n\t * @return Animation\n\t * @since 5.9.0\n\t */\n\tpublic zoomToDataItems(dataItems: Array>, rotate?: boolean): Animation | undefined {\n\t\tlet left!: number;\n\t\tlet right!: number;\n\t\tlet top!: number;\n\t\tlet bottom!: number;\n\n\t\t$array.each(dataItems, (dataItem) => {\n\n\t\t\tconst polygon = dataItem.get(\"mapPolygon\");\n\t\t\tif (polygon) {\n\t\t\t\tconst geometry = polygon.get(\"geometry\");\n\t\t\t\tif (geometry) {\n\t\t\t\t\tlet bounds = $mapUtils.getGeoBounds(geometry);\n\n\t\t\t\t\tif (left == null) {\n\t\t\t\t\t\tleft = bounds.left;\n\t\t\t\t\t}\n\t\t\t\t\tif (right == null) {\n\t\t\t\t\t\tright = bounds.right;\n\t\t\t\t\t}\n\t\t\t\t\tif (top == null) {\n\t\t\t\t\t\ttop = bounds.top;\n\t\t\t\t\t}\n\t\t\t\t\tif (bottom == null) {\n\t\t\t\t\t\tbottom = bounds.bottom;\n\t\t\t\t\t}\n\n\t\t\t\t\tleft = Math.min(bounds.left, left);\n\t\t\t\t\tright = Math.max(bounds.right, right);\n\t\t\t\t\ttop = Math.max(bounds.top, top);\n\t\t\t\t\tbottom = Math.min(bounds.bottom, bottom);\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tif (left != null && right != null && top != null && bottom != null) {\n\t\t\tconst chart = this.chart;\n\t\t\tif (chart) {\n\t\t\t\tif (rotate) {\n\t\t\t\t\tconst rx = left + (right - left) / 2;\n\t\t\t\t\tconst ry = bottom + (top - bottom) / 2;\n\n\t\t\t\t\tchart.rotate(-rx, -ry);\n\t\t\t\t\treturn chart.zoomToGeoBounds({ left, right, top, bottom }, undefined, -rx, -ry);\n\t\t\t\t}\n\n\t\t\t\treturn chart.zoomToGeoBounds({ left, right, top, bottom });\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Returns a [[MapPolygon]] that is under specific X/Y point.\n\t *\n\t * @since 5.9.8\n\t * @param point X/Y\n\t * @return Polygon\n\t */\n\tpublic getPolygonByPoint(point: IPoint): MapPolygon | undefined {\n\t\tlet found: MapPolygon | undefined;\n\t\tconst renderer = this._display._renderer;\n\t\tconst displayObject = (renderer as any).getObjectAtPoint(point);\n\t\tif (displayObject) {\n\t\t\tthis.mapPolygons.each(function(polygon) {\n\t\t\t\tif (polygon._display == displayObject) {\n\t\t\t\t\tfound = polygon;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn found;\n\t\t}\n\t}\n\n\tpublic getPolygonByGeoPoint(point: IGeoPoint): MapPolygon | undefined {\n\t\treturn this.getPolygonByPoint(this.chart!.convert(point));\n\t}\n}\n","import { MapPointSeries, IMapPointSeriesSettings, IMapPointSeriesPrivate, IMapPointSeriesDataItem } from \"./MapPointSeries\";\r\nimport { Component, DataItem, IComponentDataItem } from \"../../core/render/Component\";\r\nimport type { Root } from \"../../core/Root\";\r\nimport type { Bullet } from \"../../core/render/Bullet\";\r\nimport { Container } from \"../../core/render/Container\";\r\nimport { Label } from \"../../core/render/Label\";\r\nimport type { IDisposer } from \"../../core/util/Disposer\";\r\n\r\nimport * as $array from \"../../core/util/Array\";\r\nimport * as $object from \"../../core/util/Object\";\r\nimport * as d3hierarchy from \"d3-hierarchy\";\r\nimport * as $math from \"../../core/util/Math\";\r\n\r\n\r\nexport interface IClusteredDataItem extends IComponentDataItem {\r\n\t/**\r\n\t * All the data items of this cluster\r\n\t */\r\n\tchildren?: Array>;\r\n\r\n\t/**\r\n\t * Bullet of clustered data item\r\n\t */\r\n\tbullet?: Bullet;\r\n\r\n\t/**\r\n\t * An ID of a group.\r\n\t */\r\n\tgroupId?: string\r\n\r\n\t/**\r\n\t * Longitude.\r\n\t */\r\n\tlongitude?: number;\r\n\r\n\t/**\r\n\t * Latitude.\r\n\t */\r\n\tlatitude?: number;\r\n}\r\n\r\nexport interface IClusteredPointSeriesDataItem extends IMapPointSeriesDataItem {\r\n\t/**\r\n\t * An ID of a bullet's group.\r\n\t */\r\n\tgroupId?: string\r\n\r\n\t/**\r\n\t * Clustered data item (if available)\r\n\t * @readonly\r\n\t */\r\n\tcluster?: DataItem;\r\n\r\n\t/**\r\n\t * How much bullet was moved from its original position\r\n\t */\r\n\tdx?: number;\r\n\r\n\t/**\r\n\t * How much bullet was moved from its original position\r\n\t */\r\n\tdy?: number;\r\n}\r\n\r\nexport interface IClusteredPointSeriesPrivate extends IMapPointSeriesPrivate {\r\n\r\n}\r\n\r\nexport interface IClusteredPointSeriesSettings extends IMapPointSeriesSettings {\r\n\t/**\r\n\t * Series data can contain a field with an ID of a virtual group the bullet\r\n\t * belongs to.\r\n\t *\r\n\t * For example, we migth want bullets to group with other bullets from the\r\n\t * same continent.\r\n\t *\r\n\t * `groupIdField` specifies which field in source data holds group IDs.\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/clustered-point-series/#Group_segregation} for more info\r\n\t * @default groupID\r\n\t */\r\n\tgroupIdField?: string;\r\n\r\n\t/**\r\n\t * Bullets that are closer than X pixels apart, will be automatically grouped.\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/clustered-point-series/#Minimal_distance} for more info\r\n\t * @default 20\r\n\t */\r\n\tminDistance?: number;\r\n\r\n\t/**\r\n\t * Set this to a [[Bullet]] instance which will be used to show groups.\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/clustered-point-series/#Group_bullet} for more info\r\n\t */\r\n\tclusteredBullet?: (root: Root, series: ClusteredPointSeries, dataItem: DataItem) => Bullet | undefined;\r\n\r\n\t/**\r\n\t * If bullets are closer to each other than `scatterDistance`, they will be\r\n\t * scattered so that all are visible.\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/clustered-point-series/#Scatter_settings} for more info\r\n\t * @default 5\r\n\t * @since 5.5.7\r\n\t */\r\n\tscatterDistance?: number;\r\n\r\n\t/**\r\n\t * Presumed radius of a each bullet when scattering them.\r\n\t * \r\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/clustered-point-series/#Scatter_settings} for more info\r\n\t * @default 8\r\n\t * @since 5.5.7\r\n\t */\r\n\tscatterRadius?: number;\r\n\r\n\t/**\r\n\t * If a map is zoomed to a maxZoomLevel * stopClusterZoom, clusters will be\r\n\t * disabled.\r\n\t * \r\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/clustered-point-series/#Scatter_settings} for more info\r\n\t * @default 0.95\r\n\t * @since 5.5.7\r\n\t */\r\n\tstopClusterZoom?: number\r\n\r\n\r\n\t/**\r\n\t * Delay in milliseconds before clustering is made.\r\n\t * \r\n\t * This is useful if you have many data items and want to avoid re-clustering\r\n\t * on every zoom/position change.\r\n\t * \r\n\t * @default 0\r\n\t * @since 5.9.11\r\n\t */\r\n\tclusterDelay?: number;\r\n}\r\n\r\n/**\r\n * A version of [[MapPointSeries]] which can automatically group closely located\r\n * bullets into groups.\r\n * \r\n * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/clustered-point-series/} for more info\r\n * @since 5.5.6\r\n * @important\r\n */\r\nexport class ClusteredPointSeries extends MapPointSeries {\r\n\r\n\tpublic static className: string = \"ClusteredPointSeries\";\r\n\tpublic static classNames: Array = MapPointSeries.classNames.concat([ClusteredPointSeries.className]);\r\n\r\n\tdeclare public _settings: IClusteredPointSeriesSettings;\r\n\tdeclare public _privateSettings: IClusteredPointSeriesPrivate;\r\n\tdeclare public _dataItemSettings: IClusteredPointSeriesDataItem;\r\n\r\n\tprotected _dataItem: DataItem = this.makeDataItem({});\r\n\tprotected _clusterIndex: number = 0;\r\n\tprotected _clusters: Array>> = [];\r\n\tpublic clusteredDataItems: Array> = [];\r\n\r\n\tprotected _scatterIndex: number = 0;\r\n\tprotected _scatters: Array>> = [];\r\n\r\n\tpublic _packLayout = d3hierarchy.pack();\r\n\r\n\tprotected _spiral: Array<{ x: number, y: number }> = [];\r\n\r\n\tprotected _clusterDP?: IDisposer;\r\n\r\n\tprotected _previousZL: number = 0;\r\n\r\n\tprotected _afterNew() {\r\n\t\tthis.fields.push(\"groupId\");\r\n\t\tthis._setRawDefault(\"groupIdField\", \"groupId\");\r\n\r\n\t\tsuper._afterNew();\r\n\t}\r\n\r\n\tpublic _updateChildren() {\r\n\t\tsuper._updateChildren();\r\n\r\n\t\tif (this.isDirty(\"scatterRadius\")) {\r\n\t\t\tthis._spiral = $math.spiralPoints(0, 0, 300, 300, 0, 3, 3, 0, 0)\r\n\t\t}\r\n\r\n\t\tconst chart = this.chart;\r\n\r\n\t\tif (chart) {\r\n\r\n\t\t\tconst zoomLevel = chart.get(\"zoomLevel\", 1);\r\n\r\n\t\t\tif (zoomLevel != this._previousZL) {\r\n\t\t\t\tconst clusterDelay = this.get(\"clusterDelay\", 0);\r\n\t\t\t\tif (clusterDelay) {\r\n\t\t\t\t\tif (this._clusterDP) {\r\n\t\t\t\t\t\tthis._clusterDP.dispose();\r\n\r\n\t\t\t\t\t\tthis._clusterDP = this.setTimeout(() => {\r\n\t\t\t\t\t\t\tthis._doTheCluster();\r\n\t\t\t\t\t\t}, clusterDelay)\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\t// first time without delay\r\n\t\t\t\t\t\tthis._doTheCluster();\r\n\t\t\t\t\t\tthis._clusterDP = this.setTimeout(() => { }, 0);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis._doTheCluster();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._previousZL = zoomLevel;\r\n\t\t\t}\r\n\r\n\t\t\t$array.each(this.clusteredDataItems, (dataItem) => {\r\n\t\t\t\tconst bullet = dataItem.get(\"bullet\" as any);\r\n\t\t\t\tconst longitude = dataItem.get(\"longitude\", 0);\r\n\t\t\t\tconst latitude = dataItem.get(\"latitude\", 0);\r\n\t\t\t\tthis._positionBulletReal(bullet, { type: \"Point\", coordinates: [longitude, latitude] }, [longitude, latitude]);\r\n\t\t\t})\t\t\t\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tprotected _doTheCluster() {\r\n\t\tconst groups: { [index: string]: Array> } = {};\r\n\t\t// distribute to groups\r\n\t\t$array.each(this.dataItems, (dataItem) => {\r\n\t\t\tconst groupId = dataItem.get(\"groupId\", \"_default\");\r\n\r\n\t\t\tif (!groups[groupId]) {\r\n\t\t\t\tgroups[groupId] = [];\r\n\t\t\t}\r\n\t\t\tgroups[groupId].push(dataItem);\r\n\t\t})\r\n\r\n\t\tthis._scatterIndex = -1;\r\n\t\tthis._scatters = [];\r\n\t\tthis._clusterIndex = -1;\r\n\t\tthis._clusters = [];\r\n\r\n\t\t$array.each(this.clusteredDataItems, (dataItem) => {\r\n\t\t\tdataItem.setRaw(\"children\", undefined);\r\n\t\t})\r\n\r\n\t\t$array.each(this.dataItems, (dataItem) => {\r\n\t\t\tdataItem.setRaw(\"cluster\", undefined);\r\n\t\t})\r\n\r\n\t\t$object.each(groups, (_key, group) => {\r\n\t\t\tthis._scatterGroup(group);\r\n\t\t})\r\n\r\n\r\n\t\t$object.each(groups, (_key, group) => {\r\n\t\t\tthis._clusterGroup(group);\r\n\t\t})\r\n\r\n\t\t$array.each(this.dataItems, (dataItem) => {\r\n\t\t\tif (!dataItem.get(\"cluster\")) {\r\n\t\t\t\tconst bullets = dataItem.bullets;\r\n\t\t\t\tif (bullets) {\r\n\t\t\t\t\t$array.each(bullets, (bullet) => {\r\n\t\t\t\t\t\tconst sprite = bullet.get(\"sprite\");\r\n\t\t\t\t\t\tif (sprite) {\r\n\t\t\t\t\t\t\tsprite.set(\"forceHidden\", false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms to the area so that all clustered data items of a cluster would be\r\n\t * visible.\r\n\t *\r\n\t * Pass in `true` as a second parameter to rotate that map so that the group\r\n\t * is in the center. This is especially useful in the maps that use\r\n\t * Orthographic (globe) projection.\r\n\t *\r\n\t * @param dataItem Group data item\r\n\t * @param rotate Rotate the map so that group is in the center?\r\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/clustered-point-series/#Drill_down} for more info\r\n\t */\r\n\tpublic zoomToCluster(dataItem: DataItem, rotate?: boolean) {\r\n\t\tthis.zoomToDataItems(dataItem.get(\"children\", []), rotate);\r\n\t}\r\n\r\n\tprotected _clusterGroup(dataItems: Array>) {\r\n\t\tconst chart = this.chart;\r\n\t\tif (chart && chart.get(\"zoomLevel\", 1) >= chart.get(\"maxZoomLevel\", 100) * this.get(\"stopClusterZoom\", 0.95)) {\r\n\t\t\t// void\r\n\t\t}\r\n\t\telse {\r\n\r\n\t\t\tdataItems.sort((a, b) => {\r\n\t\t\t\tconst pointA = a.get(\"point\");\r\n\t\t\t\tconst pointB = b.get(\"point\");\r\n\t\t\t\tif (pointA && pointB) {\r\n\t\t\t\t\treturn Math.hypot(pointA.x - pointB.x, pointA.y - pointB.y);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn 0;\r\n\t\t\t})\r\n\r\n\t\t\twhile (dataItems.length > 0) {\r\n\t\t\t\tthis._clusterIndex++;\r\n\t\t\t\tthis._clusters[this._clusterIndex] = [];\r\n\t\t\t\tconst cluster = this._clusters[this._clusterIndex];\r\n\t\t\t\tconst dataItem = dataItems[0];\r\n\r\n\t\t\t\tcluster.push(dataItem);\r\n\t\t\t\t$array.removeFirst(dataItems, dataItem);\r\n\r\n\t\t\t\tthis._clusterDataItem(dataItem, dataItems);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet i = 0;\r\n\r\n\t\tconst bulletMethod = this.get(\"clusteredBullet\");\r\n\t\tif (bulletMethod) {\r\n\t\t\t$array.each(this._clusters, (cluster) => {\r\n\t\t\t\tlet sumX = 0;\r\n\t\t\t\tlet sumY = 0;\r\n\r\n\t\t\t\tlet len = cluster.length;\r\n\r\n\t\t\t\tif (len > 1) {\r\n\r\n\t\t\t\t\tlet clusteredDataItem = this.clusteredDataItems[i];\r\n\t\t\t\t\tif (!clusteredDataItem) {\r\n\t\t\t\t\t\tclusteredDataItem = new DataItem(this, undefined, {});\r\n\r\n\t\t\t\t\t\tconst bullet = clusteredDataItem.set(\"bullet\" as any, bulletMethod(this._root, this, clusteredDataItem));\r\n\r\n\t\t\t\t\t\tif (bullet) {\r\n\t\t\t\t\t\t\tconst sprite = bullet.get(\"sprite\");\r\n\t\t\t\t\t\t\tif (sprite) {\r\n\t\t\t\t\t\t\t\tthis.bulletsContainer.children.push(sprite);\r\n\t\t\t\t\t\t\t\tsprite._setDataItem(clusteredDataItem);\r\n\r\n\t\t\t\t\t\t\t\tthis.root.events.once(\"frameended\", () => {\r\n\t\t\t\t\t\t\t\t\tif (sprite instanceof Container) {\r\n\t\t\t\t\t\t\t\t\t\tsprite.walkChildren((child) => {\r\n\t\t\t\t\t\t\t\t\t\t\tif (child instanceof Component) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tchild.markDirtyValues();\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.clusteredDataItems.push(clusteredDataItem)\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tlet groupId;\r\n\r\n\t\t\t\t\t$array.each(cluster, (dataItem) => {\r\n\t\t\t\t\t\tdataItem.setRaw(\"cluster\", clusteredDataItem);\r\n\r\n\t\t\t\t\t\tconst point = dataItem.get(\"point\");\r\n\t\t\t\t\t\tif (point) {\r\n\t\t\t\t\t\t\tsumX += point.x;\r\n\t\t\t\t\t\t\tsumY += point.y;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tconst bullets = dataItem.bullets;\r\n\t\t\t\t\t\tif (bullets) {\r\n\t\t\t\t\t\t\t$array.each(bullets, (bullet) => {\r\n\t\t\t\t\t\t\t\tconst sprite = bullet.get(\"sprite\");\r\n\t\t\t\t\t\t\t\tif (sprite) {\r\n\t\t\t\t\t\t\t\t\tsprite.set(\"forceHidden\", true);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tgroupId = dataItem.get(\"groupId\");\r\n\t\t\t\t\t})\r\n\r\n\t\t\t\t\tlet averageX = sumX / len;\r\n\t\t\t\t\tlet averageY = sumY / len;\r\n\r\n\t\t\t\t\tclusteredDataItem.setRaw(\"children\" as any, cluster);\r\n\t\t\t\t\tclusteredDataItem.setRaw(\"groupId\", groupId);\r\n\r\n\t\t\t\t\tconst prevLen = clusteredDataItem.get(\"value\" as any);\r\n\t\t\t\t\tclusteredDataItem.setRaw(\"value\" as any, len);\r\n\r\n\t\t\t\t\tconst bullet = clusteredDataItem.get(\"bullet\" as any);\r\n\t\t\t\t\tif (bullet) {\r\n\r\n\t\t\t\t\t\tlet geoPoint = this.chart!.invert({ x: averageX, y: averageY });\r\n\t\t\t\t\t\tif (geoPoint) {\r\n\t\t\t\t\t\t\tclusteredDataItem.setAll({\r\n\t\t\t\t\t\t\t\tlongitude: geoPoint.longitude,\r\n\t\t\t\t\t\t\t\tlatitude: geoPoint.latitude,\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis._positionBullets(clusteredDataItem)\r\n\r\n\t\t\t\t\t\tconst sprite = bullet.get(\"sprite\");\r\n\t\t\t\t\t\tif (sprite) {\r\n\t\t\t\t\t\t\tsprite.set(\"forceHidden\", false);\r\n\t\t\t\t\t\t\t//sprite.setAll({ x: averageX, y: averageY });\r\n\r\n\t\t\t\t\t\t\tif (prevLen != len) {\r\n\t\t\t\t\t\t\t\tif (sprite instanceof Container) {\r\n\t\t\t\t\t\t\t\t\tsprite.walkChildren((child) => {\r\n\t\t\t\t\t\t\t\t\t\tif (child instanceof Label) {\r\n\t\t\t\t\t\t\t\t\t\t\tchild.text.markDirtyText();\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\t$array.each(this.clusteredDataItems, (dataItem) => {\r\n\t\t\tlet children = dataItem.get(\"children\");\r\n\t\t\tif (!children || children.length == 0) {\r\n\t\t\t\tconst bullet = dataItem.get(\"bullet\" as any);\r\n\t\t\t\tif (bullet) {\r\n\t\t\t\t\tconst sprite = bullet.get(\"sprite\");\r\n\t\t\t\t\tif (sprite) {\r\n\t\t\t\t\t\tsprite.set(\"forceHidden\", true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tprotected _onDataClear() {\r\n\t\tsuper._onDataClear();\r\n\r\n\t\t$array.each(this.clusteredDataItems, (dataItem) => {\r\n\t\t\tconst bullet = dataItem.get(\"bullet\" as any);\r\n\t\t\tif (bullet) {\r\n\t\t\t\tconst sprite = bullet.get(\"sprite\");\r\n\t\t\t\tif (sprite) {\r\n\t\t\t\t\tsprite.dispose();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t\tthis.clusteredDataItems = [];\r\n\r\n\t}\r\n\r\n\tprotected _clusterDataItem(dataItem: DataItem, dataItems: Array>) {\r\n\t\tconst point = dataItem.get(\"point\");\r\n\t\tif (point) {\r\n\t\t\tlet minDistance = this.get(\"minDistance\", 20);\r\n\t\t\tconst cluster = this._clusters[this._clusterIndex];\r\n\r\n\t\t\tfor (let i = dataItems.length - 1; i >= 0; i--) {\r\n\t\t\t\tconst di = dataItems[i];\r\n\t\t\t\tif (di && !di.get(\"clipped\")) {\r\n\t\t\t\t\tconst diPoint = di.get(\"point\");\r\n\t\t\t\t\tif (diPoint) {\r\n\t\t\t\t\t\tif (Math.hypot(diPoint.x - point.x, diPoint.y - point.y) < minDistance) {\r\n\t\t\t\t\t\t\tcluster.push(di);\r\n\t\t\t\t\t\t\t$array.removeFirst(dataItems, di);\r\n\t\t\t\t\t\t\tthis._clusterDataItem(di, dataItems);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprotected _scatterGroup(dataItems: Array>) {\r\n\t\tconst chart = this.chart;\r\n\t\tif (chart && chart.get(\"zoomLevel\", 1) >= chart.get(\"maxZoomLevel\", 100) * this.get(\"stopClusterZoom\", 0.95)) {\r\n\t\t\twhile (dataItems.length > 0) {\r\n\t\t\t\tthis._scatterIndex++;\r\n\t\t\t\tthis._scatters[this._scatterIndex] = [];\r\n\t\t\t\tconst scatter = this._scatters[this._scatterIndex];\r\n\t\t\t\tconst dataItem = dataItems[0];\r\n\r\n\t\t\t\tscatter.push(dataItem);\r\n\t\t\t\t$array.remove(dataItems, dataItem);\r\n\r\n\t\t\t\tthis._scatterDataItem(dataItem, dataItems);\r\n\t\t\t}\r\n\r\n\t\t\t$array.each(this._scatters, (scatter) => {\r\n\t\t\t\tlet len = scatter.length;\r\n\r\n\t\t\t\tif (len > 1) {\r\n\t\t\t\t\tlet previousCircles: Array<{ x: number, y: number, radius: number }> = [];\r\n\t\t\t\t\tlet s = 0;\r\n\t\t\t\t\tlet radius = this.get(\"scatterRadius\", 8);\r\n\t\t\t\t\t$array.each(scatter, (dataItem) => {\r\n\t\t\t\t\t\tlet spiralPoint = this._spiral[s];\r\n\t\t\t\t\t\tlet intersects = true;\r\n\r\n\t\t\t\t\t\tif (previousCircles.length > 0) {\r\n\t\t\t\t\t\t\twhile (intersects) {\r\n\t\t\t\t\t\t\t\t$array.each(previousCircles, (previousCircle) => {\r\n\t\t\t\t\t\t\t\t\tintersects = false;\r\n\t\t\t\t\t\t\t\t\twhile ($math.circlesOverlap({ x: spiralPoint.x, y: spiralPoint.y, radius: radius }, previousCircle)) {\r\n\t\t\t\t\t\t\t\t\t\ts++;\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (this._spiral[s] == undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\tintersects = false;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\tintersects = true;\r\n\t\t\t\t\t\t\t\t\t\t\tspiralPoint = this._spiral[s];\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tconst dx = spiralPoint.x;\r\n\t\t\t\t\t\tconst dy = spiralPoint.y;\r\n\r\n\t\t\t\t\t\tpreviousCircles.push({ x: dx, y: dy, radius: radius });\r\n\r\n\t\t\t\t\t\tdataItem.set(\"dx\", dx);\r\n\t\t\t\t\t\tdataItem.set(\"dy\", dy);\r\n\r\n\t\t\t\t\t\tconst bullets = dataItem.bullets;\r\n\t\t\t\t\t\tif (bullets) {\r\n\t\t\t\t\t\t\t$array.each(bullets, (bullet) => {\r\n\t\t\t\t\t\t\t\tconst sprite = bullet.get(\"sprite\");\r\n\t\t\t\t\t\t\t\tif (sprite) {\r\n\t\t\t\t\t\t\t\t\tsprite.setAll({ dx: dx, dy: dy });\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\tprotected _scatterDataItem(dataItem: DataItem, dataItems: Array>) {\r\n\t\tconst point = dataItem.get(\"point\");\r\n\t\tif (point) {\r\n\t\t\tconst scatterDistance = this.get(\"scatterDistance\", 5)\r\n\t\t\tconst scatter = this._scatters[this._scatterIndex];\r\n\t\t\t$array.each(dataItems, (di) => {\r\n\t\t\t\tif (di && !di.get(\"clipped\")) {\r\n\t\t\t\t\tconst diPoint = di.get(\"point\");\r\n\r\n\t\t\t\t\tif (diPoint) {\r\n\t\t\t\t\t\tif (Math.hypot(diPoint.x - point.x, diPoint.y - point.y) < scatterDistance) {\r\n\t\t\t\t\t\t\tscatter.push(di);\r\n\t\t\t\t\t\t\t$array.removeFirst(dataItems, di);\r\n\t\t\t\t\t\t\tthis._scatterDataItem(di, dataItems);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n}\r\n","import type { MapChart } from \"./MapChart\";\n\nimport { ZoomTools, IZoomToolsPrivate, IZoomToolsSettings } from \"../../core/render/ZoomTools\";\n\nexport interface IZoomControlSettings extends IZoomToolsSettings {\n}\n\nexport interface IZoomControlPrivate extends IZoomToolsPrivate {\n\t/**\n\t * @ignore\n\t */\n\tchart?: MapChart;\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 ZoomTools {\n\tpublic static className: string = \"ZoomControl\";\n\tpublic static classNames: Array = ZoomTools.classNames.concat([ZoomControl.className]);\n\n\tdeclare public _settings: IZoomControlSettings;\n\tdeclare public _privateSettings: IZoomControlPrivate;\n\n\tprotected _afterNew() {\n\t\tsuper._afterNew();\n\t\tthis.addTag(\"zoomtools\");\n\t}\n\n\tpublic _prepareChildren() {\n\t\tsuper._prepareChildren();\n\n\t\tif (this.isPrivateDirty(\"chart\")) {\n\t\t\tthis.set(\"target\", this.getPrivate(\"chart\"));\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":["MapSeries","Series","_afterNew","this","fields","push","_setRawDefault","on","geoJSON","previous","_prevSettings","data","clear","super","_handleDirties","get","undefined","_geoJSONparsed","_parseGeoJSON","_prepareChildren","_valuesDirty","isDirty","chart","exclude","_centerLocation","id","dataItem","getDataItemById","_excludeDataItem","length","_excluded","_unexcludeDataItem","include","dataItems","indexOf","_notIncludeDataItem","_unNotIncludeDataItem","_notIncluded","_removeGeometry","_addGeometry","checkInclude","includes","excludes","features","type","geometry","console","log","geodataNames","idField","i","len","feature","properties","name","_types","dataObject","value","dataContext","geometryType","set","processDataItem","madeFromGeoData","events","isEnabled","dispatch","target","_placeBulletsContainer","_chart","children","moveValue","bulletsContainer","_removeBulletsContainer","projection","geoPath","getPrivate","series","_geometries","markDirtyGeometries","_dispose","removeValue","_onDataClear","_markDirtyKey","classNames","concat","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","MapLine","Graphics","_beforeChanged","_projectionDirty","clipAngle","precision","_clear","segments","display","s","segment","gp0","p0","convert","longitude","latitude","lineTo","gp","pn","_display","context","markDirtyProjection","markDirty","_clearDirty","_getTooltipPoint","tooltipX","tooltipY","Percent","geoPoint","positionToGeoPoint","position","lineType","distanceAB","pointA","pointB","totalDistance","currentDistance","positionA","positionB","location","positionAB","p1","invert","x0","y0","x1","y1","cy0","sy0","cy1","sy1","kx0","ky0","kx1","ky1","d","k","interpolate","t","B","A","distance","MapLineSeries","addDisposer","List","Template","new","_new","_root","mapLines","template","makeMapLine","mapLine","make","_setDataItem","_handlePointsToConnect","setPrivate","pointsToConnect","markDirtyValues","coords","setRaw","disposeDataItem","dispose","range","start","stop","step","arguments","max","Array","graticuleX","dy","map","graticuleY","dx","GraticuleSeries","makeDataItem","_dataItem","_generate","_updateChildren","graticule","X1","X0","Y1","Y0","X","Y","DX","DY","lines","filter","outline","slice","reverse","extent","_","extentMajor","extentMinor","stepMajor","stepMinor","geoBounds","left","bottom","right","top","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","clipMax","clipMin","transformer","methods","TransformStream","key","prototype","Infinity","boundsStream","bounds","fit","fitBounds","clipExtent","scale","translate","fitExtent","w","h","min","fitSize","size","fitWidth","width","fitHeight","height","maxDepth","cosMinDistance","project","delta2","resampleLineTo","a0","b0","c0","a1","b1","c1","depth","d2","c","phi2","lambda2","x2","y2","dx2","dy2","dz","lambda00","x00","y00","a00","b00","c00","resampleStream","linePoint","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","r","transformRotate","cr","smallRadius","notHemisphere","visible","intersect","two","n1","n2","n2n2","n1n2","determinant","c2","n1xn2","u","uu","t2","q","polar","q1","code","v0","v00","point2","corner","comparePoint","ca","cb","x__","y__","v__","x_","y_","v_","first","activeStream","bufferStream","clipStream","polygonInside","cleanInside","ax","ay","clipRectangle","reflectX","reflectY","mercatorRaw","reclip","forward","mercatorProjection","MapChartDefaultTheme","Theme","setupDefaultRules","ic","interfaceColors","rule","bind","setAll","panX","panY","pinchZoom","zoomStep","zoomLevel","rotationX","rotationY","rotationZ","maxZoomLevel","minZoomLevel","wheelY","wheelX","animationEasing","wheelEasing","wheelDuration","wheelSensitivity","maxPanOut","centerMapOnZoomOut","role","affectsBounds","clipFront","clipBack","autoScale","minDistance","scatterDistance","scatterRadius","stopClusterZoom","isMeasured","fillOpacity","strokeWidth","strokeOpacity","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","moveTo","lengthRing","cacheDigits","cacheAppend","cacheRadius","cacheCircle","PathString","digits","_append","append","RangeError","strings","appendRound","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","constant","circle","getGeoCentroid","getGeoArea","getGeoBounds","merged","deltaMax","getGeoRectangle","north","east","south","west","multiPolygon","stepLong","stepLat","ln","surface","ll","lt","normalizeGeoPoint","wrapAngleTo180","latitude180","MapChart","SerialChart","_makeGeoPath","path","projectionStream","contextStream","measure","setPrivateRaw","seriesContainer","toGlobal","geoCentroid","_geoCentroid","_geoBounds","_handleSetWheel","chartContainer","_wheelDp","event","wheelEvent","originalEvent","preventDefault","toLocal","_handleWheelZoom","deltaY","_handleWheelRotateY","_handleWheelRotateX","deltaX","_disposers","innerWidth","innerHeight","previousGeometries","_geometryColection","_fitMap","prev","hw","hh","centerLocation","xy","xx","yy","_dirtyGeometries","each","_pw","_ph","newScale","_centerX","_centerY","_mapBounds","zoomControl","_disposeProperty","isType","bullets","bullet","sprite","root","once","minusButton","plusButton","_setUpTouch","prevGeoBounds","_prevGeoBounds","_dispatchBounds","_mapFitted","homeGeoPoint","goHome","duration","zoomToGeoPoint","_afterChanged","cancelTouch","_defaultThemes","_settings","themeTags","Rectangle","fill","Color","fromHex","_handleChartDown","_handleChartUp","_handleChartMove","license","licenses","match","_licenseApplied","_showBranding","_downZoomLevel","downPoints","_downPoints","count","downPoint","_downTranslateX","_downTranslateY","_downRotationX","_downRotationY","_downRotationZ","downId","_getDownPointId","movePoint","_movePoints","bg","enableType","_za","_txa","_tya","_rxa","_rya","l0","l1","_pLon","_pLat","_event","_handlePinch","movePoints","downPoint0","downPoint1","movePoint0","movePoint1","initialDistance","level","moveCenter","downCenter","tx","ty","_getDownPoint","downPointId","pointerId","local","disableType","ww","downLocation","easing","animate","newZoomLevel","zoomToPoint","zoomToGeoBounds","mapBounds","zl","readerAlert","_t","locale","zoomIn","zoomOut","getArea","MapPointSeries","_positionBullets","_makeBullets","bulletFunction","_setBulletParent","_makeBullet","parent","_positionBullet","lineDataItem","fixed","lineId","lineDI","_lineChangedDp","polygonDataItem","polygonId","polygonDI","positionOnLine","visualCentroid","geoPoint0","geoPoint1","_positionBulletReal","index","_index","zoomToDataItem","zoomToDataItems","di","MapPolygon","isHover","showTooltip","biggestArea","MapPolygonSeries","mapPolygons","makeMapPolygon","mapPolygon","rx","ry","getPolygonByPoint","found","displayObject","_renderer","getObjectAtPoint","getPolygonByGeoPoint","ClusteredPointSeries","_spiral","_previousZL","clusterDelay","_clusterDP","setTimeout","_doTheCluster","clusteredDataItems","groups","groupId","_scatterIndex","_scatters","_clusterIndex","_clusters","_key","group","_scatterGroup","_clusterGroup","zoomToCluster","cluster","_clusterDataItem","bulletMethod","sumX","sumY","clusteredDataItem","Container","walkChildren","child","Component","averageX","averageY","prevLen","Label","text","markDirtyText","diPoint","scatter","_scatterDataItem","previousCircles","spiralPoint","intersects","previousCircle","ZoomControl","ZoomTools","addTag","isPrivateDirty","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","halfLength","best","am5map"],"sourceRoot":""}