{"version":3,"sources":["webpack:///../../../../../src/.internal/charts/map/ZoomControl.ts","webpack:///../../../../../src/.internal/charts/map/MapObject.ts","webpack:///../../../../../src/.internal/charts/map/MapImage.ts","webpack:///../../../../../src/.internal/charts/map/MapPolygon.ts","webpack:///../../../../../src/.internal/charts/map/Geo.ts","webpack:///../../../../../../src/.internal/charts/map/projections/Projection.ts","webpack:///../../../../../src/.internal/charts/types/MapChart.ts","webpack:///../../../../../src/.internal/charts/map/MapLineObject.ts","webpack:///../../../../../src/.internal/charts/map/MapLine.ts","webpack:///../../../../../src/.internal/charts/map/MapSpline.ts","webpack:///../../../../../src/.internal/charts/map/MapArc.ts","webpack:///../../../../../src/.internal/charts/map/MapUtils.ts","webpack:///../../../../../src/.internal/charts/map/MapPolygonSeries.ts","webpack:///../../../../../src/.internal/charts/map/MapLineSeries.ts","webpack:///../../../../../src/.internal/charts/map/MapSplineSeries.ts","webpack:///../../../../../src/.internal/charts/map/MapImageSeries.ts","webpack:///../../../../../src/.internal/charts/map/MapArcSeries.ts","webpack:///../../../../../../src/.internal/charts/map/projections/Mercator.ts","webpack:///../../../../../../src/.internal/charts/map/projections/Miller.ts","webpack:///../../../../../../src/.internal/charts/map/projections/Eckert6.ts","webpack:///../../../../../../src/.internal/charts/map/projections/Orthographic.ts","webpack:///./maps.js","webpack:///../../../../../src/.internal/charts/map/SmallMap.ts"],"names":["__webpack_require__","d","__webpack_exports__","ZoomControl","__WEBPACK_IMPORTED_MODULE_0_tslib__","__WEBPACK_IMPORTED_MODULE_1__core_Container__","__WEBPACK_IMPORTED_MODULE_2__core_elements_Button__","__WEBPACK_IMPORTED_MODULE_3__core_elements_RoundedRectangle__","__WEBPACK_IMPORTED_MODULE_4__core_utils_Disposer__","__WEBPACK_IMPORTED_MODULE_5__core_utils_Keyboard__","__WEBPACK_IMPORTED_MODULE_6__core_interaction_Interaction__","__WEBPACK_IMPORTED_MODULE_7__core_utils_Percent__","__WEBPACK_IMPORTED_MODULE_8__core_Registry__","__WEBPACK_IMPORTED_MODULE_9__core_utils_InterfaceColorSet__","_super","_this","call","this","_chart","className","align","valign","layout","padding","interfaceColors","plusButton","createChild","shouldClone","label","text","width","Object","slider","background","fill","getFor","fillOpacity","events","on","handleBackgroundClick","updateThumbSize","thumb","draggable","handleThumbDrag","minusButton","role","readerLive","readerTitle","language","translate","applyTheme","event","property","fixLayout","undefined","_disposers","push","prototype","height","marginTop","marginBottom","toFront","toBack","minX","maxX","minY","maxY","marginLeft","marginRight","sprite","target","y","spritePoint","chart","maxPower","Math","log","maxZoomLevel","LN2","minPower","minZoomLevel","power","pixelHeight","zoomLevel","pow","zoomToGeoPoint","zoomGeoPoint","defineProperty","get","set","updateThumb","zoomOut","body","ev","topParent","hasFocused","isKey","isFocused","zoomIn","minHeight","min","stepCount","visible","minWidth","pixelWidth","isDown","step","x","pixelY","pixelX","createBackground","registeredClasses","MapObject_MapObject","MapObject","isMeasured","clickable","tslib_es6","validate","series","itemReaderText","Container","Registry","MapImage_MapImage","MapImage","getPropertyValue","value","setPropertyValue","validatePosition","Type","latitude","longitude","moveTo","projection","convert","MapPolygon_MapPolygon","MapPolygon","polygon","Polygon","InterfaceColorSet","stroke","strokeOpacity","tooltipPosition","multiGeoPolygon","points","projectGeoArea","measureElement","dataItem","north","south","east","west","normalizePoint","geoPoint","wrapAngleTo180","asin","sin","utils_Math","latitude180","abs","normalizeMultiline","multiline","multiline_1","multiline_1_1","next","done","segment","segment_1","segment_1_1","point","angle","geoToPoint","Projection_Projection","Projection","deltaLongitude","deltaLatitude","deltaGama","centerPoint","scale","geoArea","clippedGeoArea","clipGeoArea","convertGeoArea","projectGeoLine","geoLine","convertGeoLine","clipGeoLine","getClipRectangle1","getClipRectangle2","getRect1","getRect2","clippedLine","clipRectangle1","clipRectangle2","i","len","length","clippedSegments","clipLine","concat","clippedSegments2","clippedArea","rect1","rect2","surface","hole","clippedAreas","surfaceRect","getExtremes","isInside","isOutside","clippedSurface1","clip","clippedHole1","clippedSurface2","clippedHole2","clippedAreas_1","clippedAreas_1_1","area","convertedPoints","convertedAreaPoints","convertedSurface","s","slen","convertedHole","hlen","convertedSegmentPoints","rotate","pointInRadians","project","invert","unproject","unrotate","lambda","phi","deltaGamma","deltaLambda","deltaPhi","cosDeltaPhi","cos","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","cosPhi","z","k","atan2","subjectPolyline","clipPolygon","cp1","cp2","e","inside","p","intersection","dc","dp","n1","n2","n3","j","inputList","subjectPolygon","outputList","geoPoints","r1","r2","intermediatePoint","pointA","pointB","position","phi1","lambda1","phi2","lambda2","sinPhi1","cosPhi1","sinLambda1","cosLambda1","sinPhi2","cosPhi2","sinLambda2","cosLambda2","a","delta","sqrt","A","B","phi3","lambda3","MapChart_MapChartDataItem","MapChartDataItem","SerialChart","MapChart_MapChart","MapChart","scaleRatio","zoomDuration","zoomEasing","Ease","_prevZoomGeoPoint","maxPanOut","homeZoomLevel","zoomStep","once","handleAllInited","seriesContainer","inert","resizable","handleMapTransform","handleDoubleHit","handleDrag","zIndex","updateExtremes","chartContainer","parent","inited","_mapAnimation","stop","updateScaleRatio","_zoomGeoPointReal","each","updateTooltipBounds","chartContainerBg","dragStart","interactions","downPointers","getIndex","dragStop","focusable","handleMapDown","Interaction","_zoomControl","Keyboard","getEventKey","pan","mouseWheelBehavior","goHome","ww","seriesWidth","hh","seriesHeight","maxWidth","max","maxHeight","applyInternalDefaults","svgPoint","Utils","htmlContainer","svgContainer","cssScale","svgPointToGeo","handleWheel","shift","_mouseWheelDisposer","dispose","wheelable","invalidateProjection","pWest","pEast","pNorth","pSouth","Iterator","iterator","northPoint","southPoint","westPoint","eastPoint","vScale","innerWidth","hScale","innerHeight","Infinity","projectionScaleChanged","northPoint2","westPoint2","_centerGeoPoint","definedBBox","invalidate","dispatch","seriesPoint","seriesPointToGeo","geoPointToSVG","geoPointToSeries","_geodata","geodata","invalidateData","_dataUsers","center","duration","mapPoint","animate","to","pixelPaddingLeft","pixelPaddingTop","zoomToMapObject","mapObject","dataItem_1","bbox","polygonPoint","zoomToRectangle","level","_prevZoomLevel","_smallMap","smallMap","SmallMap","removeDispose","zoomControl","createSeries","MapSeries","_dataSources","getDataSource","component","loadData","setDataSourceEvents","processConfig","config","createClassInstance","type","configOrder","b","asIs","field","homeGeoPoint","centerGeoPoint","setPaper","paper","hideOverflow","setLegend","legend","MapLineObject_MapLineObject","MapLineObject","adjustRotation","mapLine","positionToPoint","rotation","MapLine_MapLine","MapLine","createLine","line","Color","shortestDistance","Polyline","multiGeoLine","images","image","map","hasKey","getKey","imagesToConnect","_a","_b","newMultiGeoLine","newGeoLine","plen","geoPointA","geoPointB","previousPoint","segments","_arrow","lineObjects","_lineObjects","List","handleLineObjectAdded","template","mapLineObject","newValue","arrow","triangle","Triangle","Percent","horizontalCenter","verticalCenter","copyFrom","source","clone","getTooltipX","getTooltipY","MapSpline_MapSpline","MapSpline","Polyspline","tensionX","tensionY","MapArc_MapArc","MapArc","Polyarc","multiPolygonToGeo","multiPolygon","multiGeoArea","multiPointToGeo","multiLineToGeo","multiLine","pointToGeo","MapPolygonSeries_MapPolygonSeriesDataItem","MapPolygonSeriesDataItem","_mapPolygon","mapPolygon_1","mapPolygons","create","addSprite","Disposer","removeValue","_polygon","_multiPolygon","_geoPolygon","geoPolygon","_multiGeoPolygon","updateAreaExtremes","mapPolygon","MapPolygonSeries_MapPolygonSeries","MapPolygonSeries","parsingStepDuration","dataFields","createDataItem","processIncExc","clear","validateData","data","_parseDataFrom","useGeodata","geoJSON","features","indexOf","geometry","console","feature","id_1","id","this_1","checkInclude","include","exclude","coordinates","dataObject","utils_Array","properties","dataItems","moveValue","_mapPolygons","polygonTemplate","handleObjectAdded","getPolygonById","dataContext","MapLineSeries_MapLineSeriesDataItem","MapLineSeriesDataItem","_mapLine","mapLine_1","mapLines","_line","_multiLine","_geoLine","_multiGeoLine","updateLineExtremes","MapLineSeries_MapLineSeries","MapLineSeries","_mapLines","lineTemplate","MapSplineSeries_MapSplineSeriesDataItem","MapSplineSeriesDataItem","MapSplineSeries_MapSplineSeries","MapSplineSeries","MapImageSeries_MapImageSeriesDataItem","MapImageSeriesDataItem","_mapImage","mapImage_1","mapImages","_point","_geoPoint","mapImage","MapImageSeries_MapImageSeries","MapImageSeries","multiPoint","multiGeoPoint","_mapImages","validateDataElement","MapArcSeries_MapArcSeriesDataItem","MapArcSeriesDataItem","MapArcSeries_MapArcSeries","MapArcSeries","Mercator_Mercator","Mercator","atan","exp","PI","tan","Miller_Miller","Miller","Eckert6_Eckert6","Eckert6","Orthographic_Orthographic","Orthographic","len_1","prevPoint","i_1","extraPoints","splice","apply","window","am4maps","maps_namespaceObject","__WEBPACK_IMPORTED_MODULE_2__core_elements_Rectangle__","__WEBPACK_IMPORTED_MODULE_3__core_utils_List__","__WEBPACK_IMPORTED_MODULE_5__core_Registry__","__WEBPACK_IMPORTED_MODULE_6__core_utils_Color__","__WEBPACK_IMPORTED_MODULE_7__core_utils_InterfaceColorSet__","__WEBPACK_IMPORTED_MODULE_8__core_utils_Utils__","__WEBPACK_IMPORTED_MODULE_9__core_utils_Type__","percentHeight","percentWidth","margin","moveToPosition","updateMapSize","rectangle","strokeWidth","_series","handleSeriesAdded","handleSeriesRemoved","contains","newSeries","dataUsers","interactionsEnabled","rectPoint","updateRectangle","ceil","afterDraw","maskRectangle"],"mappings":"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","file":"maps.js","sourcesContent":["/**\r\n * Zoom control module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container, IContainerProperties, IContainerAdapters, IContainerEvents } from \"../../core/Container\";\r\nimport { Sprite, ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Button } from \"../../core/elements/Button\";\r\nimport { MapChart } from \"../types/MapChart\";\r\nimport { RoundedRectangle } from \"../../core/elements/RoundedRectangle\";\r\nimport { MutableValueDisposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { keyboard } from \"../../core/utils/Keyboard\";\r\nimport { getInteraction } from \"../../core/interaction/Interaction\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[ZoomControl]].\r\n */\r\nexport interface IZoomControlProperties extends IContainerProperties { }\r\n\r\n/**\r\n * Defines events for [[ZoomControl]].\r\n */\r\nexport interface IZoomControlEvents extends IContainerEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ZoomControl]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IZoomControlAdapters extends IContainerAdapters, IZoomControlProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a control for zooming the map.\r\n *\r\n * @see {@link IZoomControlEvents} for a list of available events\r\n * @see {@link IZoomControlAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class ZoomControl extends Container {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IZoomControlProperties}\r\n\t */\r\n\tpublic _properties!: IZoomControlProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IZoomControlAdapters}\r\n\t */\r\n\tpublic _adapter!: IZoomControlAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IZoomControlEvents}\r\n\t */\r\n\tpublic _events!: IZoomControlEvents;\r\n\r\n\t/**\r\n\t * Zoom in button element.\r\n\t *\r\n\t * @type {Button}\r\n\t */\r\n\tpublic plusButton: Button;\r\n\r\n\t/**\r\n\t * Zoom out button element.\r\n\t *\r\n\t * @type {Button}\r\n\t */\r\n\tpublic minusButton: Button;\r\n\r\n\t/**\r\n\t * A zoom slider background element.\r\n\t *\r\n\t * @type {Container}\r\n\t */\r\n\tpublic slider: Container;\r\n\r\n\t/**\r\n\t * A zoom slider thumb element.\r\n\t * @type {Button}\r\n\t */\r\n\tpublic thumb: Button;\r\n\r\n\t/**\r\n\t * A target map.\r\n\t *\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _chart: MutableValueDisposer = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * A type to use for the background element for zoom control.\r\n\t *\r\n\t * @type {RoundedRectangle}\r\n\t */\r\n\tpublic _background: RoundedRectangle;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"ZoomControl\";\r\n\r\n\t\tthis.align = \"right\";\r\n\t\tthis.valign = \"bottom\";\r\n\r\n\t\tthis.layout = \"vertical\";\r\n\t\tthis.padding(5, 5, 5, 5);\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tlet plusButton: Button = this.createChild(Button);\r\n\t\tplusButton.shouldClone = false;\r\n\t\tplusButton.label.text = \"+\";\r\n\t\tplusButton.width = percent(100);\r\n\t\tplusButton.padding(5, 5, 5, 5);\r\n\t\t//plusButton.fontFamily = \"Verdana\";\r\n\t\tthis.plusButton = plusButton;\r\n\r\n\t\tlet slider: Container = this.createChild(Container);\r\n\t\tslider.shouldClone = false;\r\n\t\tslider.width = percent(100);\r\n\t\tslider.background.fill = interfaceColors.getFor(\"alternativeBackground\");\r\n\t\tslider.background.fillOpacity = 0.05;\r\n\t\tslider.background.events.on(\"hit\", this.handleBackgroundClick, this, false);\r\n\t\tslider.events.on(\"sizechanged\", this.updateThumbSize, this, false);\r\n\t\tthis.slider = slider;\r\n\r\n\t\tlet thumb: Button = slider.createChild(Button);\r\n\t\tthumb.shouldClone = false;\r\n\t\tthumb.padding(0, 0, 0, 0);\r\n\t\tthumb.draggable = true;\r\n\t\tthumb.events.on(\"drag\", this.handleThumbDrag, this, false);\r\n\t\tthis.thumb = thumb;\r\n\r\n\t\tlet minusButton: Button = this.createChild(Button);\r\n\t\tminusButton.shouldClone = false;\r\n\t\tminusButton.label.text = \"-\";\r\n\t\tminusButton.padding(5, 5, 5, 5);\r\n\t\t//minusButton.fontFamily = \"Verdana\";\r\n\t\tthis.minusButton = minusButton;\r\n\r\n\t\t// Set roles\r\n\t\tthis.thumb.role = \"slider\";\r\n\t\tthis.thumb.readerLive = \"polite\";\r\n\r\n\t\t// Set reader text\r\n\t\tthis.thumb.readerTitle = this.language.translate(\"Use arrow keys to zoom in and out\");\r\n\t\tthis.minusButton.readerTitle = this.language.translate(\"Press ENTER to zoom in\");\r\n\t\tthis.plusButton.readerTitle = this.language.translate(\"Press ENTER to zoom out\");\r\n\r\n\t\tthis.applyTheme();\r\n\r\n\t\tthis.events.on(\"propertychanged\", (event) => {\r\n\t\t\tif (event.property == \"layout\") {\r\n\t\t\t\tthis.fixLayout();\r\n\t\t\t}\r\n\t\t}, undefined, false);\r\n\r\n\t\tthis._disposers.push(this._chart);\r\n\r\n\t\tthis.fixLayout();\r\n\t}\r\n\r\n\tprotected fixLayout() {\r\n\t\tif (this.layout == \"vertical\") {\r\n\t\t\tthis.width = 40;\r\n\t\t\tthis.height = undefined;\r\n\t\t\tthis.minusButton.width = percent(100);\r\n\t\t\tthis.thumb.width = percent(100);\r\n\t\t\tthis.plusButton.width = percent(100);\r\n\t\t\tthis.slider.width = percent(100);\r\n\t\t\tthis.minusButton.marginTop = 1;\r\n\t\t\tthis.plusButton.marginBottom = 2;\r\n\t\t\tthis.slider.height = 0;\r\n\t\t\tthis.minusButton.toFront();\r\n\t\t\tthis.plusButton.toBack();\r\n\t\t\tthis.thumb.minX = 0;\r\n\t\t\tthis.thumb.maxX = 0;\r\n\t\t\tthis.thumb.minY = 0;\r\n\t\t}\r\n\t\telse if (this.layout == \"horizontal\") {\r\n\t\t\tthis.thumb.minX = 0;\r\n\t\t\tthis.thumb.minY = 0;\r\n\t\t\tthis.thumb.maxY = 0;\r\n\t\t\tthis.height = 40;\r\n\t\t\tthis.width = undefined;\r\n\t\t\tthis.minusButton.height = percent(100);\r\n\t\t\tthis.minusButton.width = 30;\r\n\t\t\tthis.thumb.height = percent(100);\r\n\t\t\tthis.thumb.width = undefined;\r\n\t\t\tthis.plusButton.height = percent(100);\r\n\t\t\tthis.plusButton.width = 30;\r\n\t\t\tthis.slider.height = percent(100);\r\n\t\t\tthis.slider.width = 0;\r\n\t\t\tthis.minusButton.marginLeft = 2;\r\n\t\t\tthis.plusButton.marginRight = 2;\r\n\t\t\tthis.minusButton.toBack();\r\n\t\t\tthis.plusButton.toFront();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Handles zoom operation after clicking on the slider background.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {AMEvent[\"hit\"]} event Event\r\n\t */\r\n\tpublic handleBackgroundClick(event: AMEvent[\"hit\"]): void {\r\n\t\tlet sprite: Sprite = event.target;\r\n\t\tlet y: number = event.spritePoint.y;\r\n\t\tlet chart: MapChart = this.chart;\r\n\r\n\t\tlet maxPower: number = Math.log(chart.maxZoomLevel) / Math.LN2;\r\n\t\tlet minPower: number = Math.log(chart.minZoomLevel) / Math.LN2;\r\n\r\n\t\tlet power: number = (sprite.pixelHeight - y) / sprite.pixelHeight * (minPower + (maxPower - minPower));\r\n\t\tlet zoomLevel: number = Math.pow(2, power);\r\n\t\tchart.zoomToGeoPoint(chart.zoomGeoPoint, zoomLevel);\r\n\t}\r\n\r\n\t/**\r\n\t * A main chart/map that this zoom control is for.\r\n\t *\r\n\t * @param {MapChart} chart Map/chart\r\n\t */\r\n\tpublic set chart(chart: MapChart) {\r\n\t\tthis._chart.set(chart, new MultiDisposer([\r\n\t\t\tchart.events.on(\"maxsizechanged\", this.updateThumbSize, this, false),\r\n\t\t\tchart.events.on(\"zoomlevelchanged\", this.updateThumb, this, false),\r\n\t\t\t\r\n\t\t\tthis.minusButton.events.on(\"hit\", () => { chart.zoomOut(chart.zoomGeoPoint) }, chart, false),\r\n\r\n\t\t\tgetInteraction().body.events.on(\"keyup\", (ev) => {\r\n\t\t\t\tif (this.topParent.hasFocused) {\r\n\t\t\t\t\tif (keyboard.isKey(ev.event, \"enter\")) {\r\n\t\t\t\t\t\tif (this.minusButton.isFocused) {\r\n\t\t\t\t\t\t\tchart.zoomOut()\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if (this.plusButton.isFocused) {\r\n\t\t\t\t\t\t\tchart.zoomIn()\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (keyboard.isKey(ev.event, \"plus\")) {\r\n\t\t\t\t\t\tchart.zoomIn();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (keyboard.isKey(ev.event, \"minus\")) {\r\n\t\t\t\t\t\tchart.zoomOut();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}, chart),\r\n\t\t\tthis.plusButton.events.on(\"hit\", () => { chart.zoomIn(chart.zoomGeoPoint) }, chart, false)\r\n\t\t]));\r\n\t}\r\n\r\n\t/**\r\n\t * @return {MapChart} Map/chart\r\n\t */\r\n\tpublic get chart(): MapChart {\r\n\t\treturn this._chart.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the slider's thumb size based on the available zoom space.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateThumbSize(): void {\r\n\t\tlet chart = this.chart;\r\n\t\tif (chart) {\r\n\t\t\tlet slider: Container = this.slider;\r\n\t\t\tlet thumb: Button = this.thumb;\r\n\t\t\tif (this.layout == \"vertical\") {\r\n\t\t\t\tthumb.minHeight = Math.min(this.slider.pixelHeight, 20);\r\n\r\n\t\t\t\tthumb.height = slider.pixelHeight / this.stepCount;\r\n\t\t\t\tthumb.maxY = slider.pixelHeight - thumb.pixelHeight;\r\n\r\n\t\t\t\tif (thumb.pixelHeight <= 1) {\r\n\t\t\t\t\tthumb.visible = false;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthumb.visible = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthumb.minWidth = Math.min(this.slider.pixelWidth, 20);\r\n\t\t\t\tthumb.width = slider.pixelWidth / this.stepCount;\r\n\t\t\t\tthumb.maxX = slider.pixelWidth - thumb.pixelWidth;\r\n\r\n\t\t\t\tif (thumb.pixelWidth <= 1) {\r\n\t\t\t\t\tthumb.visible = false;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthumb.visible = true;\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 * Updates thumb according to current zoom position from map.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateThumb(): void {\r\n\t\tlet slider: Container = this.slider;\r\n\t\tlet chart: MapChart = this.chart;\r\n\t\tlet thumb: Button = this.thumb;\r\n\r\n\t\tif (!thumb.isDown) {\r\n\t\t\tlet step: number = (Math.log(chart.zoomLevel) - Math.log(this.chart.minZoomLevel)) / Math.LN2;\r\n\r\n\t\t\tif (this.layout == \"vertical\") {\r\n\t\t\t\tthumb.y = slider.pixelHeight - (slider.pixelHeight - thumb.pixelHeight) * step / this.stepCount - thumb.pixelHeight;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthumb.x = slider.pixelWidth * step / this.stepCount;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms the actual map when slider position changes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleThumbDrag(): void {\r\n\t\tlet slider: Container = this.slider;\r\n\t\tlet chart: MapChart = this.chart;\r\n\t\tlet thumb: Button = this.thumb;\r\n\t\tlet step: number;\r\n\r\n\t\tlet minStep = Math.log(this.chart.minZoomLevel) / Math.LN2;\r\n\r\n\t\tif (this.layout == \"vertical\") {\r\n\t\t\tstep = this.stepCount * (slider.pixelHeight - thumb.pixelY - thumb.pixelHeight) / (slider.pixelHeight - thumb.pixelHeight);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tstep = this.stepCount * thumb.pixelX / slider.pixelWidth;\r\n\t\t}\r\n\t\tstep = minStep + step;\r\n\r\n\t\tlet zoomLevel: number = Math.pow(2, step);\r\n\t\tchart.zoomToGeoPoint(undefined, zoomLevel, false, 0);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the step countfor the slider grid according to map's min and max\r\n\t * zoom level settings.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return {number} Step count\r\n\t */\r\n\tpublic get stepCount(): number {\r\n\t\treturn Math.log(this.chart.maxZoomLevel) / Math.LN2 - Math.log(this.chart.minZoomLevel) / Math.LN2;\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a background element for slider control.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return {this} Background\r\n\t */\r\n\tpublic createBackground(): this[\"_background\"] {\r\n\t\treturn new RoundedRectangle();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ZoomControl\"] = ZoomControl;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/map/ZoomControl.ts","/**\r\n * Map object module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container, IContainerProperties, IContainerAdapters, IContainerEvents } from \"../../core/Container\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { MapSeries, MapSeriesDataItem } from \"./MapSeries\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { IGeoPoint } from \"../../core/defs/IGeoPoint\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines propeties for [[MapObject]].\r\n */\r\nexport interface IMapObjectProperties extends IContainerProperties {\r\n\r\n\t/**\r\n\t * A custom zoom level to use when `zoomToMapObject()` is called on this\r\n\t * map object.\r\n\t * \r\n\t * @type {number}\r\n\t */\r\n\tzoomLevel?: number;\r\n\r\n\t/**\r\n\t * A custom point to use when `zoomToMapObject()` is called on this map\r\n\t * object.\r\n\t * \r\n\t * @type {IGeoPoint}\r\n\t */\r\n\tzoomGeoPoint?: IGeoPoint;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[MapObject]].\r\n */\r\nexport interface IMapObjectEvents extends IContainerEvents { }\r\n\r\n/**\r\n * Defines adapters for [[MapObject]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IMapObjectAdapters extends IContainerAdapters, IMapObjectProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A base class for all map objects: lines, images, etc.\r\n *\r\n * @see {@link IMapObjectEvents} for a list of available events\r\n * @see {@link IMapObjectAdapters} for a list of available Adapters\r\n */\r\nexport class MapObject extends Container {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IMapObjectProperties}\r\n\t */\r\n\tpublic _properties!: IMapObjectProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IMapObjectAdapters}\r\n\t */\r\n\tpublic _adapter!: IMapObjectAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IMapObjectEvents}\r\n\t */\r\n\tpublic _events!: IMapObjectEvents;\r\n\r\n\t/**\r\n\t * A map series this object belongs to.\r\n\t *\r\n\t * @type {MapSeries}\r\n\t */\r\n\tpublic series: MapSeries;\r\n\r\n\tpublic _dataItem: MapSeriesDataItem;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"MapObject\";\r\n\r\n\t\t// Set defaults\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.layout = \"none\";\r\n\t\tthis.clickable = true;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates this object, forcing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tif (this.series) {\r\n\t\t\tthis.readerTitle = this.series.itemReaderText;\r\n\t\t}\r\n\t\tsuper.validate();\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"MapObject\"] = MapObject;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/map/MapObject.ts","/**\r\n *\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { MapObject, IMapObjectProperties, IMapObjectAdapters, IMapObjectEvents } from \"./MapObject\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { MapImageSeriesDataItem, MapImageSeries } from \"./MapImageSeries\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[MapImage]].\r\n */\r\nexport interface IMapImageProperties extends IMapObjectProperties {\r\n\r\n\t/**\r\n\t * Latitude of the image location.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tlatitude?: number;\r\n\r\n\t/**\r\n\t * Longitude of the mage location.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tlongitude?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[MapImage]].\r\n */\r\nexport interface IMapImageEvents extends IMapObjectEvents { }\r\n\r\n/**\r\n * Defines adapters for [[MapImage]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IMapImageAdapters extends IMapObjectAdapters, IMapImageProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Used to place an image on the map.\r\n *\r\n * @see {@link IMapImageEvents} for a list of available events\r\n * @see {@link IMapImageAdapters} for a list of available Adapters\r\n */\r\nexport class MapImage extends MapObject {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IMapImageProperties}\r\n\t */\r\n\tpublic _properties!: IMapImageProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IMapImageAdapters}\r\n\t */\r\n\tpublic _adapter!: IMapImageAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IMapImageEvents}\r\n\t */\r\n\tpublic _events!: IMapImageEvents;\r\n\r\n\t/**\r\n\t * A related data item.\r\n\t *\r\n\t * @type {MapImageSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: MapImageSeriesDataItem;\r\n\r\n\t/**\r\n\t * A map series this object belongs to.\r\n\t *\r\n\t * @type {MapImageSeries}\r\n\t */\r\n\tpublic series: MapImageSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"MapImage\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Latitude image is placed at.\r\n\t *\r\n\t * @param {number} value Latitude\r\n\t */\r\n\tpublic set latitude(value: number) {\r\n\t\tthis.setPropertyValue(\"latitude\", value, false, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Latitude\r\n\t */\r\n\tpublic get latitude(): number {\r\n\t\treturn this.getPropertyValue(\"latitude\");\r\n\t}\r\n\r\n\t/**\r\n\t * Longitude image is placed on.\r\n\t *\r\n\t * @param {number} value Longitude\r\n\t */\r\n\tpublic set longitude(value: number) {\r\n\t\tthis.setPropertyValue(\"longitude\", value, false, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Longitude\r\n\t */\r\n\tpublic get longitude(): number {\r\n\t\treturn this.getPropertyValue(\"longitude\");\r\n\t}\r\n\r\n\t/**\r\n\t * Repositions the image to it's current position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validatePosition(): void {\r\n\t\tif ($type.isNumber(this.latitude) && $type.isNumber(this.longitude)) {\r\n\t\t\tthis.moveTo(this.series.chart.projection.convert({ latitude: this.latitude, longitude: this.longitude }));\r\n\t\t}\r\n\t\tsuper.validatePosition();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"MapImage\"] = MapImage;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/map/MapImage.ts","/**\r\n * Map polygon module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { MapObject, IMapObjectProperties, IMapObjectAdapters, IMapObjectEvents } from \"./MapObject\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { MapPolygonSeriesDataItem, MapPolygonSeries } from \"./MapPolygonSeries\";\r\nimport { IGeoPoint } from \"../../core/defs/IGeoPoint\";\r\nimport { Polygon } from \"../../core/elements/Polygon\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\n\r\n\r\n/**\r\n * ============================f================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[MapPolygon]].\r\n */\r\nexport interface IMapPolygonProperties extends IMapObjectProperties {\r\n\r\n\t/**\r\n\t * Set of coordinates for the polygon.\r\n\t */\r\n\tmultiGeoPolygon?: IGeoPoint[][][];\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[MapPolygon]].\r\n */\r\nexport interface IMapPolygonEvents extends IMapObjectEvents { }\r\n\r\n/**\r\n * Defines adapters for [[MapPolygon]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IMapPolygonAdapters extends IMapObjectAdapters, IMapPolygonProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Used to draw a polygon on the map.\r\n *\r\n * @see {@link IMapPolygonEvents} for a list of available events\r\n * @see {@link IMapPolygonAdapters} for a list of available Adapters\r\n */\r\nexport class MapPolygon extends MapObject {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IMapPolygonProperties}\r\n\t */\r\n\tpublic _properties!: IMapPolygonProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IMapPolygonAdapters}\r\n\t */\r\n\tpublic _adapter!: IMapPolygonAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IMapPolygonEvents}\r\n\t */\r\n\tpublic _events!: IMapPolygonEvents;\r\n\r\n\t/**\r\n\t * A visual polygon element.\r\n\t *\r\n\t * @type {Polygon}\r\n\t */\r\n\tpublic polygon: Polygon;\r\n\r\n\t/**\r\n\t * A related data item.\r\n\t *\r\n\t * @type {MapPolygonSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: MapPolygonSeriesDataItem;\r\n\r\n\r\n\t/**\r\n\t * A map series this object belongs to.\r\n\t *\r\n\t * @type {MapPolygonSeries}\r\n\t */\r\n\tpublic series: MapPolygonSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"MapPolygon\";\r\n\r\n\t\tthis.polygon = this.createChild(Polygon);\r\n\t\tthis.polygon.shouldClone = false;\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tthis.fill = interfaceColors.getFor(\"secondaryButton\");\r\n\t\tthis.stroke = interfaceColors.getFor(\"secondaryButtonStroke\");\r\n\t\tthis.strokeOpacity = 1;\r\n\r\n\t\tthis.tooltipPosition = \"pointer\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Set of coordinates for the polygon.\r\n\t *\r\n\t * @param {IGeoPoint[][][]} multiGeoPolygon Polygon coordinates\r\n\t */\r\n\tpublic set multiGeoPolygon(multiGeoPolygon: IGeoPoint[][][]) {\r\n\t\tthis.setPropertyValue(\"multiGeoPolygon\", multiGeoPolygon, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {IGeoPoint[]} Polygon coordinates\r\n\t */\r\n\tpublic get multiGeoPolygon(): IGeoPoint[][][] {\r\n\t\treturn this.getPropertyValue(\"multiGeoPolygon\");\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the polygon, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tif (this.series) {\r\n\t\t\tthis.polygon.points = this.series.chart.projection.projectGeoArea(this.multiGeoPolygon);\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic measureElement(): void {\r\n\t\t// Overriding, just to avoid extra measure\r\n\t}\r\n\r\n\t/**\r\n\t * Calculated polygon center latitude.\r\n\t *\r\n\t * @readonly\r\n\t * @return {number} Center latitude\r\n\t */\r\n\tpublic get latitude(): number {\r\n\t\tlet dataItem = this.dataItem;\r\n\t\treturn dataItem.north + (dataItem.south - dataItem.north) / 2;\r\n\t}\r\n\r\n\t/**\r\n\t * Calculated polygon center longitude.\r\n\t *\r\n\t * @readonly\r\n\t * @return {number} Center longitude\r\n\t */\r\n\tpublic get longitude(): number {\r\n\t\tlet dataItem = this.dataItem;\r\n\t\treturn dataItem.east + (dataItem.west - dataItem.east) / 2;\r\n\t}\r\n\r\n\t/**\r\n\t * Not 100% sure about this, as if we add something to MapPolygon this\r\n\t * won't be true, but otherwise we will get all 0 and the tooltip won't\r\n\t * be positioned properly\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Element's width in pixels.\r\n\t *\r\n\t * @readonly\r\n\t * @return {number} Width (px)\r\n\t */\r\n\tpublic get pixelWidth(): number {\r\n\t\treturn this.polygon.pixelWidth;\r\n\t}\r\n\r\n\t/**\r\n\t * Element's height in pixels.\r\n\t *\r\n\t * @readonly\r\n\t * @return {number} Width (px)\r\n\t */\r\n\tpublic get pixelHeight(): number {\r\n\t\treturn this.polygon.pixelHeight;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"MapPolygon\"] = MapPolygon;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/map/MapPolygon.ts","/**\r\n * A collection of GeoJSON format-related utility functions.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { IGeoPoint } from \"../../core/defs/IGeoPoint\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport * as $math from \"../../core/utils/Math\";\r\n\r\n\r\n/**\r\n * Normalizes a geo-point.\r\n *\r\n * @ignore Exclude from docs\r\n * @param {IGeoPoint} geoPoint Source geo-point\r\n * @return {IGeoPoint} Normalized geo-point\r\n */\r\nexport function normalizePoint(geoPoint: IGeoPoint): IGeoPoint {\r\n\tlet longitude = wrapAngleTo180(geoPoint.longitude);\r\n\tlet latitude = Math.asin(Math.sin((geoPoint.latitude * $math.RADIANS))) * $math.DEGREES;\r\n\r\n\tlet latitude180 = wrapAngleTo180(geoPoint.latitude);\r\n\r\n\tif (Math.abs(latitude180) > 90) {\r\n\t\tlongitude = wrapAngleTo180(longitude + 180);\r\n\t}\r\n\r\n\tgeoPoint.longitude = longitude;\r\n\tgeoPoint.latitude = latitude;\r\n\r\n\treturn geoPoint;\r\n}\r\n\r\n/**\r\n * Normalizes all points of a geo-line.\r\n *\r\n * @ignore Exclude from docs\r\n * @param {IGeoPoint[][]} multiline Source geo-line\r\n * @return {IGeoPoint[]} Normalized geo-line\r\n */\r\nexport function normalizeMultiline(multiline: IGeoPoint[][]): IGeoPoint[][] {\r\n\tfor (let segment of multiline) {\r\n\t\tfor (let point of segment) {\r\n\t\t\tpoint = normalizePoint(point);\r\n\t\t}\r\n\t}\r\n\treturn multiline;\r\n}\r\n\r\n/**\r\n * [wrapAngleTo180 description]\r\n *\r\n * @todo Description\r\n * @ignore Exclude from docs\r\n * @param {number} angle Angle\r\n * @return {number} Angle\r\n */\r\nexport function wrapAngleTo180(angle: number): number {\r\n\tangle = angle % 360;\r\n\r\n\tif (angle > 180) {\r\n\t\tangle -= 360;\r\n\t}\r\n\tif (angle < -180) {\r\n\t\tangle += 360;\r\n\t}\r\n\r\n\treturn angle;\r\n}\r\n\r\n/**\r\n * Converts a geo point to a regular point object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param {IGeoPoint} geoPoint Source geo point\r\n * @return {IPoint} Point\r\n */\r\nexport function geoToPoint(geoPoint: IGeoPoint): IPoint {\r\n\treturn { x: geoPoint.longitude, y: geoPoint.latitude };\r\n}\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/map/Geo.ts","/**\r\n * This module contains funcitonality related to geographical projections\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { IGeoPoint } from \"../../../core/defs/IGeoPoint\";\r\nimport { IGeoRectangle } from \"../../../core/defs/IGeoRectangle\";\r\nimport { IPoint } from \"../../../core/defs/IPoint\";\r\nimport { registry } from \"../../../core/Registry\";\r\nimport * as $math from \"../../../core/utils/Math\";\r\nimport * as $geo from \"../Geo\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * This is a base class for a geographical projection.\r\n */\r\nexport class Projection {\r\n\r\n\tpublic deltaLongitude: number = 0;\r\n\r\n\tpublic deltaLatitude: number = 0;\r\n\r\n\tpublic deltaGama: number = 0;\r\n\r\n\tpublic centerPoint: IPoint = { x: 0, y: 0 };\r\n\r\n\tpublic scale: number = 1;\r\n\r\n\tpublic projectGeoArea(geoArea: IGeoPoint[][][]): IPoint[][][] {\r\n\r\n\t\tlet clippedGeoArea: IGeoPoint[][][] = this.clipGeoArea(geoArea);\r\n\t\tlet convertedPoints: IPoint[][][] = this.convertGeoArea(clippedGeoArea);\r\n\r\n\t\treturn convertedPoints;\r\n\t}\r\n\r\n\tpublic projectGeoLine(geoLine: IGeoPoint[][]): IPoint[][] {\r\n\t\treturn this.convertGeoLine(this.clipGeoLine(geoLine));\r\n\t}\r\n\r\n\tpublic getClipRectangle1(): IGeoPoint[] {\r\n\t\tlet longitude = $geo.wrapAngleTo180(180 - this.deltaLongitude);\r\n\t\tlet latitude = $geo.wrapAngleTo180(this.deltaLatitude);\r\n\r\n\t\tlet smallNum = 0.00001;\r\n\t\treturn [{ longitude: -180, latitude: latitude - 90 }, { longitude: longitude - smallNum, latitude: latitude - 90 }, { longitude: longitude - smallNum, latitude: latitude + 90 }, { longitude: -180, latitude: latitude + 90 }];\r\n\t}\r\n\r\n\tpublic getClipRectangle2(): IGeoPoint[] {\r\n\t\tlet longitude = $geo.wrapAngleTo180(180 - this.deltaLongitude);\r\n\t\t//let latitude = $geo.wrapAngleTo180(this.deltaLatitude);\r\n\r\n\t\tlet smallNum = 0.00001;\r\n\t\treturn [{ longitude: longitude + smallNum, latitude: -90 }, { longitude: 180, latitude: -90 }, { longitude: 180, latitude: 90 }, { longitude: longitude + smallNum, latitude: 90 }];\r\n\t}\r\n\r\n\tpublic getRect1(): IGeoRectangle {\r\n\t\tlet longitude = $geo.wrapAngleTo180(180 - this.deltaLongitude);\r\n\t\tlet latitude = $geo.wrapAngleTo180(this.deltaLatitude);\r\n\r\n\t\treturn { north: latitude + 90, south: latitude - 90, west: longitude - 180, east: longitude };\r\n\t}\r\n\r\n\tpublic getRect2(): IGeoRectangle {\r\n\t\tlet longitude = $geo.wrapAngleTo180(180 - this.deltaLongitude);\r\n\t\tlet latitude = $geo.wrapAngleTo180(this.deltaLatitude);\r\n\r\n\t\treturn { north: latitude + 90, south: latitude - 90, west: longitude, east: (longitude + 180) };\r\n\t}\r\n\r\n\r\n\r\n\tprotected clipGeoLine(geoLine: IGeoPoint[][]): IGeoPoint[][] {\r\n\t\tif (!geoLine) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet clippedLine: IGeoPoint[][] = [];\r\n\r\n\t\tlet clipRectangle1 = this.getClipRectangle1();\r\n\t\tlet clipRectangle2 = this.getClipRectangle2();\r\n\r\n\t\tfor (let i = 0, len = geoLine.length; i < len; i++) {\r\n\t\t\tlet segment: IGeoPoint[] = geoLine[i];\r\n\r\n\t\t\tif (segment) {\r\n\t\t\t\tlet clippedSegments: IGeoPoint[][] = this.clipLine(segment, clipRectangle1);\r\n\t\t\t\tclippedLine = clippedLine.concat(clippedSegments);\r\n\r\n\t\t\t\tif (this.deltaLongitude != 0) {\r\n\t\t\t\t\tlet clippedSegments2: IGeoPoint[][] = this.clipLine(segment, clipRectangle2);\r\n\t\t\t\t\tclippedLine = clippedLine.concat(clippedSegments2);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn clippedLine;\r\n\t}\r\n\r\n\r\n\tprotected clipGeoArea(geoArea: IGeoPoint[][][]): IGeoPoint[][][] {\r\n\r\n\t\tif (!geoArea) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet clippedArea: IGeoPoint[][][] = [];\r\n\r\n\t\tlet clipRectangle1 = this.getClipRectangle1();\r\n\t\tlet clipRectangle2 = this.getClipRectangle2();\r\n\r\n\t\tlet rect1 = this.getRect1();\r\n\t\tlet rect2 = this.getRect2();\r\n\r\n\t\tfor (let i = 0, len = geoArea.length; i < len; i++) {\r\n\r\n\t\t\tlet surface: IGeoPoint[] = geoArea[i][0];\r\n\t\t\tlet hole: IGeoPoint[] = geoArea[i][1];\r\n\r\n\t\t\tlet clippedAreas: IGeoPoint[][][] = [];\r\n\r\n\t\t\tif (surface) {\r\n\r\n\t\t\t\tlet surfaceRect = this.getExtremes(surface);\r\n\r\n\t\t\t\tif (!this.isInside(surfaceRect, rect1) && !this.isOutside(surfaceRect, rect1)) {\r\n\t\t\t\t\tlet clippedSurface1: IGeoPoint[] = this.clip(surface, clipRectangle1);\r\n\t\t\t\t\tlet clippedHole1: IGeoPoint[] = this.clip(hole, clipRectangle1);\r\n\t\t\t\t\tclippedAreas.push([clippedSurface1, clippedHole1]);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tclippedAreas.push([surface, hole]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!this.isInside(surfaceRect, rect2) && !this.isOutside(surfaceRect, rect2)) {\r\n\t\t\t\t\tlet clippedSurface2: IGeoPoint[] = this.clip(surface, clipRectangle2);\r\n\t\t\t\t\tlet clippedHole2: IGeoPoint[] = this.clip(hole, clipRectangle2);\r\n\t\t\t\t\tclippedAreas.push([clippedSurface2, clippedHole2]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfor (let area of clippedAreas) {\r\n\t\t\t\tclippedArea.push(area);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn clippedArea;\r\n\t}\r\n\r\n\tprotected convertGeoArea(geoArea: IGeoPoint[][][]): IPoint[][][] {\r\n\r\n\t\tif (!geoArea) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet convertedPoints: IPoint[][][] = [];\r\n\r\n\t\tfor (let i = 0, len = geoArea.length; i < len; i++) {\r\n\r\n\t\t\tlet surface: IGeoPoint[] = geoArea[i][0];\r\n\t\t\tlet hole: IGeoPoint[] = geoArea[i][1];\r\n\r\n\t\t\tlet convertedAreaPoints: IPoint[][] = [];\r\n\r\n\t\t\tif (surface) {\r\n\t\t\t\tlet convertedSurface: IPoint[] = [];\r\n\r\n\t\t\t\tfor (let s = 0, slen = surface.length; s < slen; s++) {\r\n\t\t\t\t\tlet point: IPoint = this.convert(surface[s]);\r\n\r\n\t\t\t\t\tconvertedSurface.push(point);\r\n\t\t\t\t}\r\n\t\t\t\tconvertedAreaPoints.push(convertedSurface);\r\n\t\t\t}\r\n\r\n\t\t\tif (hole) {\r\n\t\t\t\tlet convertedHole: IPoint[] = [];\r\n\t\t\t\tfor (let s = 0, hlen = hole.length; s < hlen; s++) {\r\n\t\t\t\t\tlet point: IPoint = this.convert(hole[s]);\r\n\r\n\t\t\t\t\tconvertedHole.push(point);\r\n\t\t\t\t}\r\n\t\t\t\tconvertedAreaPoints.push(convertedHole);\r\n\t\t\t}\r\n\t\t\tconvertedPoints.push(convertedAreaPoints);\r\n\t\t}\r\n\t\treturn convertedPoints;\r\n\t}\r\n\r\n\tprotected convertGeoLine(geoLine: IGeoPoint[][]): IPoint[][] {\r\n\t\tif (!geoLine) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tlet convertedPoints: IPoint[][] = [];\r\n\r\n\t\tfor (let i = 0, len = geoLine.length; i < len; i++) {\r\n\r\n\t\t\tlet segment: IGeoPoint[] = geoLine[i];\r\n\r\n\t\t\tlet convertedSegmentPoints: IPoint[] = [];\r\n\r\n\t\t\tfor (let s = 0, slen = segment.length; s < slen; s++) {\r\n\t\t\t\tlet geoPoint: IGeoPoint = segment[s];\r\n\r\n\t\t\t\tlet point: IPoint = this.convert(geoPoint);\r\n\t\t\t\tconvertedSegmentPoints.push(point);\r\n\t\t\t}\r\n\r\n\t\t\tconvertedPoints.push(convertedSegmentPoints);\r\n\t\t}\r\n\t\treturn convertedPoints;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Converts a geographical point (lat/long) to a screen point (x/y)\r\n\t * @param {IGeoPoint} geoPoint Geo point (lat/long)\r\n\t * @return {IPoint} Screen point (x/y)\r\n\t */\r\n\tpublic convert(geoPoint: IGeoPoint): IPoint {\r\n\t\tgeoPoint = $geo.normalizePoint(geoPoint);\r\n\t\tgeoPoint = this.rotate(geoPoint, this.deltaLongitude, this.deltaLatitude, this.deltaGama);\r\n\t\tlet pointInRadians: IPoint = this.project(geoPoint.longitude * $math.RADIANS, geoPoint.latitude * $math.RADIANS);\r\n\t\treturn {\r\n\t\t\tx: $math.round(pointInRadians.x * $math.DEGREES - this.centerPoint.x, 4) * this.scale,\r\n\t\t\ty: $math.round(-pointInRadians.y * $math.DEGREES - this.centerPoint.y, 4) * this.scale\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a screen point (x/y) to a geographical point (lat/long)\r\n\t * @param {IPoint} point Screen point (x/y)\r\n\t * @return {IGeoPoint} Geo point (lat/long)\r\n\t */\r\n\tpublic invert(point: IPoint): IGeoPoint {\r\n\t\tlet pointInRadians: IGeoPoint = this.unproject((point.x / this.scale + this.centerPoint.x) * $math.RADIANS, (-point.y / this.scale - this.centerPoint.y) * $math.RADIANS);\r\n\r\n\t\tlet geoPoint = { longitude: pointInRadians.longitude * $math.DEGREES, latitude: pointInRadians.latitude * $math.DEGREES };\r\n\r\n\t\tgeoPoint = this.unrotate(geoPoint, this.deltaLongitude, this.deltaLatitude, this.deltaGama);\r\n\r\n\t\treturn geoPoint;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns X/Y coordinates.\r\n\t * Individual projections will override this method to apply their own\r\n\t * projection logic.\r\n\t * @param {number} lambda [description]\r\n\t * @param {number} phi [description]\r\n\t * @return {IPoint} X/Y coordinates\r\n\t * @todo Needs description\r\n\t */\r\n\tpublic project(lambda: number, phi: number): IPoint {\r\n\t\treturn { x: lambda, y: phi };\r\n\t}\r\n\r\n\t/**\r\n\t * Returns geographical coordinates (lat/long).\r\n\t * Individual projections will override this method to apply their own\r\n\t * projection logic.\r\n\t * @param {number} x X coordinate\r\n\t * @param {number} y Y coordinate\r\n\t * @return {IGeoPoint} Geographical point\r\n\t * @todo Needs description\r\n\t */\r\n\tpublic unproject(x: number, y: number): IGeoPoint {\r\n\t\treturn { longitude: x, latitude: y };\r\n\t}\r\n\r\n\r\n\trotate(geoPoint: IGeoPoint, deltaLongitude: number, deltaLatitude: number, deltaGamma?: number): IGeoPoint {\r\n\r\n\t\tlet deltaLambda = deltaLongitude * $math.RADIANS;\r\n\t\tlet deltaPhi = deltaLatitude * $math.RADIANS;\r\n\t\tdeltaGamma = deltaGamma * $math.RADIANS;\r\n\r\n\t\tlet lambda = geoPoint.longitude * $math.RADIANS + deltaLambda;\r\n\t\tlet phi = geoPoint.latitude * $math.RADIANS;\r\n\r\n\t\tlet cosDeltaPhi = Math.cos(deltaPhi);\r\n\t\tlet sinDeltaPhi = Math.sin(deltaPhi);\r\n\t\tlet cosDeltaGamma = Math.cos(deltaGamma);\r\n\t\tlet sinDeltaGamma = Math.sin(deltaGamma);\r\n\r\n\t\tlet cosPhi = Math.cos(phi);\r\n\r\n\t\tlet x = Math.cos(lambda) * cosPhi;\r\n\t\tlet y = Math.sin(lambda) * cosPhi;\r\n\t\tlet z = Math.sin(phi);\r\n\t\tlet k = z * cosDeltaPhi + x * sinDeltaPhi;\r\n\r\n\t\treturn { longitude: $math.DEGREES * Math.atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi), latitude: $math.DEGREES * Math.asin(k * cosDeltaGamma + y * sinDeltaGamma) };\r\n\t}\r\n\r\n\tunrotate(geoPoint: IGeoPoint, deltaLongitude: number, deltaLatitude: number, deltaGamma?: number): IGeoPoint {\r\n\r\n\t\tlet deltaLambda = deltaLongitude * $math.RADIANS;\r\n\t\tlet deltaPhi = deltaLatitude * $math.RADIANS;\r\n\t\tdeltaGamma = deltaGamma * $math.RADIANS;\r\n\r\n\t\tlet lambda = geoPoint.longitude * $math.RADIANS - deltaLambda;\r\n\t\tlet phi = geoPoint.latitude * $math.RADIANS;\r\n\r\n\t\tlet cosDeltaPhi = Math.cos(deltaPhi);\r\n\t\tlet sinDeltaPhi = Math.sin(deltaPhi);\r\n\t\tlet cosDeltaGamma = Math.cos(deltaGamma);\r\n\t\tlet sinDeltaGamma = Math.sin(deltaGamma);\r\n\r\n\t\tlet cosPhi = Math.cos(phi);\r\n\r\n\t\tlet x = Math.cos(lambda) * cosPhi;\r\n\t\tlet y = Math.sin(lambda) * cosPhi;\r\n\t\tlet z = Math.sin(phi);\r\n\t\tlet k = z * cosDeltaGamma - y * sinDeltaGamma;\r\n\r\n\t\treturn { longitude: $math.DEGREES * Math.atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi), latitude: $math.DEGREES * Math.asin(k * cosDeltaPhi - x * sinDeltaPhi) };\r\n\t}\r\n\r\n\r\n\r\n\tclipLine(subjectPolyline: IGeoPoint[], clipPolygon: IGeoPoint[]): IGeoPoint[][] {\r\n\r\n\t\tif (!subjectPolyline || subjectPolyline.length == 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet cp1: IGeoPoint;\r\n\t\tlet cp2: IGeoPoint;\r\n\r\n\t\tvar inside = function(p: IGeoPoint) {\r\n\t\t\treturn (cp2.longitude - cp1.longitude) * (p.latitude - cp1.latitude) > (cp2.latitude - cp1.latitude) * (p.longitude - cp1.longitude);\r\n\t\t};\r\n\r\n\t\tlet s: IGeoPoint;\r\n\t\tlet e: IGeoPoint;\r\n\r\n\t\t//@todo: make a separate function\r\n\t\tvar intersection = function() {\r\n\t\t\tlet dc = { longitude: cp1.longitude - cp2.longitude, latitude: cp1.latitude - cp2.latitude };\r\n\t\t\tlet dp = { longitude: s.longitude - e.longitude, latitude: s.latitude - e.latitude };\r\n\t\t\tlet n1 = cp1.longitude * cp2.latitude - cp1.latitude * cp2.longitude;\r\n\t\t\tlet n2 = s.longitude * e.latitude - s.latitude * e.longitude;\r\n\t\t\tlet n3 = 1.0 / (dc.longitude * dp.latitude - dc.latitude * dp.longitude);\r\n\r\n\t\t\treturn { longitude: (n1 * dp.longitude - n2 * dc.longitude) * n3, latitude: (n1 * dp.latitude - n2 * dc.latitude) * n3 };\r\n\t\t};\r\n\r\n\t\tvar segment: IGeoPoint[] = subjectPolyline;\r\n\r\n\t\tcp1 = clipPolygon[clipPolygon.length - 1];\r\n\r\n\t\tfor (let j = 0; j < clipPolygon.length; ++j) {\r\n\t\t\tcp2 = clipPolygon[j];\r\n\t\t\tlet inputList = segment;\r\n\t\t\tsegment = [];\r\n\t\t\ts = inputList[0];\r\n\t\t\tfor (let i = 0, len = inputList.length; i < len; i++) {\r\n\t\t\t\te = inputList[i];\r\n\r\n\t\t\t\tif (inside(e)) {\r\n\t\t\t\t\tif (!inside(s)) {\r\n\t\t\t\t\t\tsegment.push(intersection());\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsegment.push(e);\r\n\t\t\t\t}\r\n\t\t\t\telse if (inside(s)) {\r\n\t\t\t\t\tsegment.push(intersection());\r\n\t\t\t\t}\r\n\r\n\t\t\t\ts = e;\r\n\t\t\t}\r\n\t\t\tcp1 = cp2;\r\n\t\t}\r\n\r\n\t\treturn [segment];\r\n\t}\r\n\r\n\r\n\r\n\r\n\t//@todo add credits to roseta code\r\n\t//@todo: someday make it better\r\n\tclip(subjectPolygon: IGeoPoint[], clipPolygon: IGeoPoint[]) {\r\n\r\n\t\tif (!subjectPolygon || subjectPolygon.length == 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet cp1: IGeoPoint;\r\n\t\tlet cp2: IGeoPoint;\r\n\r\n\t\tvar inside = function(p: IGeoPoint) {\r\n\t\t\treturn (cp2.longitude - cp1.longitude) * (p.latitude - cp1.latitude) > (cp2.latitude - cp1.latitude) * (p.longitude - cp1.longitude);\r\n\t\t};\r\n\r\n\t\tlet s: IGeoPoint;\r\n\t\tlet e: IGeoPoint;\r\n\t\t//@todo: make a separate function\r\n\t\tvar intersection = function() {\r\n\t\t\tlet dc = { longitude: cp1.longitude - cp2.longitude, latitude: cp1.latitude - cp2.latitude };\r\n\t\t\tlet dp = { longitude: s.longitude - e.longitude, latitude: s.latitude - e.latitude };\r\n\t\t\tlet n1 = cp1.longitude * cp2.latitude - cp1.latitude * cp2.longitude;\r\n\t\t\tlet n2 = s.longitude * e.latitude - s.latitude * e.longitude;\r\n\t\t\tlet n3 = 1.0 / (dc.longitude * dp.latitude - dc.latitude * dp.longitude);\r\n\r\n\t\t\treturn { longitude: (n1 * dp.longitude - n2 * dc.longitude) * n3, latitude: (n1 * dp.latitude - n2 * dc.latitude) * n3 };\r\n\t\t};\r\n\r\n\t\tvar outputList = subjectPolygon;\r\n\r\n\t\tcp1 = clipPolygon[clipPolygon.length - 1];\r\n\r\n\t\tfor (let j = 0; j < clipPolygon.length; ++j) {\r\n\t\t\tcp2 = clipPolygon[j];\r\n\t\t\tlet inputList = outputList;\r\n\t\t\toutputList = [];\r\n\t\t\ts = inputList[inputList.length - 1]; //last on the input list\r\n\r\n\t\t\tfor (let i = 0, len = inputList.length; i < len; ++i) {\r\n\t\t\t\te = inputList[i];\r\n\r\n\t\t\t\tif (inside(e)) {\r\n\t\t\t\t\tif (!inside(s)) {\r\n\t\t\t\t\t\toutputList.push(intersection());\r\n\t\t\t\t\t}\r\n\t\t\t\t\toutputList.push(e);\r\n\t\t\t\t}\r\n\t\t\t\telse if (inside(s)) {\r\n\t\t\t\t\toutputList.push(intersection());\r\n\t\t\t\t}\r\n\t\t\t\ts = e;\r\n\t\t\t}\r\n\r\n\t\t\tcp1 = cp2;\r\n\t\t}\r\n\t\treturn outputList;\r\n\t}\r\n\r\n\t//@todo: move to some utils?\r\n\tpublic getExtremes(geoPoints: IGeoPoint[]): IGeoRectangle {\r\n\r\n\t\tlet west: number = geoPoints[0].longitude;\r\n\t\tlet east: number = geoPoints[0].longitude;\r\n\t\tlet north: number = geoPoints[0].latitude;\r\n\t\tlet south: number = geoPoints[0].latitude;\r\n\r\n\t\tfor (let s: number = 0; s < geoPoints.length; s++) {\r\n\t\t\tlet longitude: number = geoPoints[s].longitude;\r\n\t\t\tlet latitude: number = geoPoints[s].latitude;\r\n\r\n\t\t\tif ((west > longitude)) {\r\n\t\t\t\twest = longitude;\r\n\t\t\t}\r\n\t\t\tif ((east < longitude)) {\r\n\t\t\t\teast = longitude;\r\n\t\t\t}\r\n\r\n\t\t\tif ((north < latitude)) {\r\n\t\t\t\tnorth = latitude;\r\n\t\t\t}\r\n\t\t\tif ((south > latitude)) {\r\n\t\t\t\tsouth = latitude;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn { north: north, east: east, south: south, west: west };\r\n\t}\r\n\r\n\t//@todo: move to some utils?\r\n\tpublic isInside(r1: IGeoRectangle, r2: IGeoRectangle) {\r\n\t\tif (r1.north < r2.north && r1.south > r2.south && r1.west > r2.west && r1.east < r2.east) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t//@todo: move to some utils?\r\n\tpublic isOutside(r1: IGeoRectangle, r2: IGeoRectangle) {\r\n\t\tif (r1.south > r2.north || r1.north < r2.south || r1.west > r2.east || r1.east < r2.west) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\r\n\t//@todo: move to some utils?\r\n\t//@todo: add credits to: https://www.movable-type.co.uk/scripts/latlong.html\r\n\tpublic intermediatePoint(pointA: IGeoPoint, pointB: IGeoPoint, position: number) {\r\n\t\tvar phi1 = pointA.latitude * $math.RADIANS;\r\n\t\tlet lambda1 = pointA.longitude * $math.RADIANS;\r\n\r\n\t\tlet phi2 = pointB.latitude * $math.RADIANS;\r\n\t\tlet lambda2 = pointB.longitude * $math.RADIANS;\r\n\r\n\t\tvar sinPhi1 = Math.sin(phi1);\r\n\t\tlet cosPhi1 = Math.cos(phi1);\r\n\t\tlet sinLambda1 = Math.sin(lambda1);\r\n\t\tlet cosLambda1 = Math.cos(lambda1);\r\n\t\tvar sinPhi2 = Math.sin(phi2);\r\n\t\tlet cosPhi2 = Math.cos(phi2);\r\n\t\tlet sinLambda2 = Math.sin(lambda2);\r\n\t\tlet cosLambda2 = Math.cos(lambda2);\r\n\r\n\t\t// distance between points\r\n\t\tvar deltaPhi = phi2 - phi1;\r\n\t\tvar deltaLambda = lambda2 - lambda1;\r\n\t\tvar a = Math.sin(deltaPhi / 2) * Math.sin(deltaPhi / 2) + Math.cos(phi1) * Math.cos(phi2) * Math.sin(deltaLambda / 2) * Math.sin(deltaLambda / 2);\r\n\t\tvar delta = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\r\n\r\n\t\tvar A = Math.sin((1 - position) * delta) / Math.sin(delta);\r\n\t\tvar B = Math.sin(position * delta) / Math.sin(delta);\r\n\r\n\t\tvar x = A * cosPhi1 * cosLambda1 + B * cosPhi2 * cosLambda2;\r\n\t\tvar y = A * cosPhi1 * sinLambda1 + B * cosPhi2 * sinLambda2;\r\n\t\tvar z = A * sinPhi1 + B * sinPhi2;\r\n\r\n\t\tvar phi3 = Math.atan2(z, Math.sqrt(x * x + y * y));\r\n\t\tvar lambda3 = Math.atan2(y, x);\r\n\r\n\t\treturn { latitude: phi3 * $math.DEGREES, longitude: lambda3 * $math.DEGREES };\r\n\t};\r\n}\r\n\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Projection\"] = Projection;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../../src/.internal/charts/map/projections/Projection.ts","/**\r\n * Map module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { SerialChart, ISerialChartProperties, ISerialChartDataFields, ISerialChartAdapters, ISerialChartEvents, SerialChartDataItem } from \"./SerialChart\";\r\nimport { Sprite, ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { IDisposer, MultiDisposer, MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { ListTemplate } from \"../../core/utils/List\";\r\nimport { Legend } from \"../Legend\";\r\nimport { MapSeries } from \"../map/MapSeries\";\r\nimport { MapObject } from \"../map/MapObject\";\r\nimport { MapImage } from \"../map/MapImage\";\r\nimport { MapPolygon } from \"../map/MapPolygon\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { IGeoPoint } from \"../../core/defs/IGeoPoint\";\r\nimport { DataSource } from \"../../core/data/DataSource\";\r\nimport { Projection } from \"../map/projections/Projection\";\r\nimport { ZoomControl } from \"../map/ZoomControl\";\r\nimport { Ordering } from \"../../core/utils/Order\";\r\nimport { SmallMap } from \"../map/SmallMap\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\nimport { keyboard } from \"../../core/utils/Keyboard\";\r\nimport { getInteraction } from \"../../core/interaction/Interaction\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $ease from \"../../core/utils/Ease\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $geo from \"../map/Geo\";\r\nimport { Paper } from \"../../core/rendering/Paper\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[MapChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class MapChartDataItem extends SerialChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {MapChart}\r\n\t */\r\n\tpublic _component!: MapChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"MapChartDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines interface for a map polygon object.\r\n */\r\nexport interface IMapPolygonDataObject {\r\n\r\n\t/**\r\n\t * A unique id of the object.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tid?: string;\r\n\r\n\t/**\r\n\t * Numeric value for heat-map scenarios.\r\n\t *\r\n\t * @type {[type]}\r\n\t */\r\n\tvalue?: number;\r\n\r\n\t/**\r\n\t * Single polygon information in X/Y coordinates.\r\n\t */\r\n\tpolygon?: number[][][];\r\n\r\n\t/**\r\n\t * Multi-part polygon information in X/Y coordinates.\r\n\t */\r\n\tmultiPolygon?: number[][][][];\r\n\r\n\t/**\r\n\t * Single polygon information in lat/long geo-coordinates.\r\n\t */\r\n\tgeoPolygon?: IGeoPoint[][];\r\n\r\n\t/**\r\n\t * Multi-part polygon information in lat/long geo-coordinates.\r\n\t */\r\n\tmultiGeoPolygon?: IGeoPoint[][][];\r\n\r\n}\r\n\r\n/**\r\n * Defines types of map line.\r\n *\r\n * @type {string}\r\n */\r\nexport type MapLineType = \"line\" | \"arc\" | \"spline\" | \"realTrajectory\";\r\n\r\n/**\r\n * Defines interface for the map line object.\r\n */\r\nexport interface IMapLineDataObject {\r\n\r\n\t/**\r\n\t * A unique id of the object.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tid?: string;\r\n\r\n\t/**\r\n\t * Numeric value for heat-map scenarios.\r\n\t *\r\n\t * @type {[type]}\r\n\t */\r\n\tvalue?: number;\r\n\r\n\t/**\r\n\t * Single line information in X/Y coordinates.\r\n\t */\r\n\tline?: number[][];\r\n\r\n\t/**\r\n\t * Multi-part line information in X/Y coordinates.\r\n\t */\r\n\tmultiLine?: number[][][];\r\n\r\n\t/**\r\n\t * Single line information in lat/long geo-coordinates.\r\n\t */\r\n\tgeoLine?: IGeoPoint[];\r\n\r\n\t/**\r\n\t * Multi-part line information in lat/long geo-coordinates.\r\n\t */\r\n\tmultiGeoLine?: IGeoPoint[][];\r\n\r\n}\r\n\r\n/**\r\n * Defines interface for a map image (market) object.\r\n */\r\nexport interface IMapImageDataObject {\r\n\r\n\t/**\r\n\t * A unique id of the object.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tid?: string;\r\n\r\n\t/**\r\n\t * Numeric value for heat-map scenarios.\r\n\t *\r\n\t * @type {[type]}\r\n\t */\r\n\tvalue?: number;\r\n\r\n\t/**\r\n\t * Image position information in X/Y coordinates.\r\n\t */\r\n\tpoint?: number[];\r\n\r\n\t/**\r\n\t * Multi-image position information in X/Y coordinates.\r\n\t */\r\n\tmultiPoint?: number[][];\r\n\r\n\t/**\r\n\t * Image position information in lat/long geo-coordinates.\r\n\t */\r\n\tgeoPoint?: IGeoPoint;\r\n\r\n\t/**\r\n\t * Multi-image position information in lat/long geo-coordinates.\r\n\t */\r\n\tmultiGeoPoint?: IGeoPoint[];\r\n\r\n}\r\n\r\n/**\r\n * Defines type suitable for all map objects.\r\n *\r\n * @type {IMapPolygonDataObject | IMapLineDataObject}\r\n */\r\nexport type IMapDataObject = IMapPolygonDataObject | IMapLineDataObject;\r\n\r\n/**\r\n * Defines data fields for [[MapChart]].\r\n */\r\nexport interface IMapChartDataFields extends ISerialChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[MapChart]].\r\n */\r\nexport interface IMapChartProperties extends ISerialChartProperties {\r\n\r\n\t/**\r\n\t * Projection to be used when drawing the map.\r\n\t *\r\n\t * @type {Projection}\r\n\t */\r\n\tprojection?: Projection;\r\n\r\n\t/**\r\n\t * Degrees to shift map center by.\r\n\t *\r\n\t * E.g. if set to -160, the longitude 20 will become a new center, creating\r\n\t * a Pacific-centered map.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tdeltaLongitude?: number;\r\n\r\n\t/**\r\n\t * Maximum portion of the map's width/height to allow panning \"off screen\".\r\n\t *\r\n\t * A value of 0 (zero) will prevent any portion of the the map to be panned\r\n\t * outside the viewport.\r\n\t *\r\n\t * 0.5 will allow half of the map to be outside viewable area.\r\n\t * \r\n\t * @default 0.7\r\n\t * @type {number}\r\n\t */\r\n\tmaxPanOut?: number;\r\n\r\n\t/**\r\n\t * A map will start centered on this geographical point.\r\n\t * \r\n\t * @type {IGeoPoint}\r\n\t */\r\n\thomeGeoPoint?: IGeoPoint;\r\n\r\n\t/**\r\n\t * A map will start zoomed to this level.\r\n\t * \r\n\t * @type {number}\r\n\t */\r\n\thomeZoomLevel?: number;\r\n\r\n\t/**\r\n\t * When user zooms in or out current zoom level is multiplied or divided\r\n\t * by value of this setting.\r\n\t *\r\n\t * @default 2\r\n\t * @type {number}\r\n\t */\r\n\tzoomStep?: number;\r\n\r\n\t/**\r\n\t * Specifies what should chart do if when mouse wheel is rotated.\r\n\t */\r\n\tmouseWheelBehavior?: \"zoom\" | \"none\";\r\n}\r\n\r\n/**\r\n * Defines events for [[MapChart]].\r\n */\r\nexport interface IMapChartEvents extends ISerialChartEvents {\r\n\r\n\t/**\r\n\t * Invoked when map is zoomed in or out.\r\n\t */\r\n\tzoomlevelchanged: {};\r\n\r\n\t/**\r\n\t * Invoked when map is panned. (moved)\r\n\t */\r\n\tmappositionchanged: {};\r\n\r\n\t/**\r\n\t * Invoked when scale ratio is changed, e.g when the whole map area is\r\n\t * resized and the map needs to be resized to fit it, without changing\r\n\t * zoom level.\r\n\t */\r\n\tscaleratiochanged: {};\r\n\r\n}\r\n\r\n/**\r\n * Defines adapters for [[MapChart]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IMapChartAdapters extends ISerialChartAdapters, IMapChartProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a map.\r\n *\r\n * @see {@link IMapChartEvents} for a list of available Events\r\n * @see {@link IMapChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/map/} for documentation\r\n */\r\nexport class MapChart extends SerialChart {\r\n\r\n\t/**\r\n\t * Available data fields.\r\n\t *\r\n\t * @type {IMapChartDataFields}\r\n\t */\r\n\tpublic _dataFields: IMapChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IMapChartProperties}\r\n\t */\r\n\tpublic _properties!: IMapChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IMapChartAdapters}\r\n\t */\r\n\tpublic _adapter!: IMapChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IMapChartEvents}\r\n\t */\r\n\tpublic _events!: IMapChartEvents;\r\n\r\n\t/**\r\n\t * The East-most longitude point of the map.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tpublic east: number;\r\n\r\n\t/**\r\n\t * The West-most longitude point of the map.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tpublic west: number;\r\n\r\n\t/**\r\n\t * The South-most latitude point of the map.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tpublic south: number;\r\n\r\n\t/**\r\n\t * The North-most latitude point of the map.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tpublic north: number;\r\n\r\n\t/**\r\n\t * A ratio to be used when scaling the map shapes.\r\n\t *\r\n\t * @readonly\r\n\t * @type {number}\r\n\t */\r\n\tpublic scaleRatio: number = 1;\r\n\r\n\t/**\r\n\t * A screen point of the map's center.\r\n\t *\r\n\t * @readonly\r\n\t * @type {IPoint}\r\n\t */\r\n\tpublic centerPoint: IPoint;\r\n\r\n\t/**\r\n\t * A screen point of the map's left.\r\n\t *\r\n\t * @readonly\r\n\t * @type {IPoint}\r\n\t */\r\n\tpublic westPoint: IPoint;\r\n\r\n\t/**\r\n\t * A screen point of the map's right.\r\n\t *\r\n\t * @readonly\r\n\t * @type {IPoint}\r\n\t */\r\n\tpublic eastPoint: IPoint;\r\n\r\n\t/**\r\n\t * A screen point of the map's top.\r\n\t *\r\n\t * @readonly\r\n\t * @type {IPoint}\r\n\t */\r\n\tpublic northPoint: IPoint;\r\n\r\n\t/**\r\n\t * A screen point of the map's bottom.\r\n\t *\r\n\t * @readonly\r\n\t * @type {IPoint}\r\n\t */\r\n\tpublic southPoint: IPoint;\r\n\r\n\t/**\r\n\t * Width of the actual map objects (px).\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tpublic seriesWidth: number;\r\n\r\n\t/**\r\n\t * Height of the actual map objects (px).\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tpublic seriesHeight: number;\r\n\r\n\t/**\r\n\t * Map data in GeoJSON format.\r\n\t *\r\n\t * @see {@link http://geojson.org/} GeoJSON official specification\r\n\t * @type {Object}\r\n\t */\r\n\tprotected _geodata: Object;\r\n\r\n\t/**\r\n\t * A reference to a [[ZoomControl]] instance.\r\n\t *\r\n\t * @type {ZoomControl}\r\n\t */\r\n\tprotected _zoomControl: ZoomControl;\r\n\r\n\t/**\r\n\t * A reference to a [[SmallMap]] control instance.\r\n\t *\r\n\t * @type {SmallMap}\r\n\t */\r\n\tprotected _smallMap: SmallMap;\r\n\r\n\t/**\r\n\t * [_zoomGeoPoint description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {IGeoPoint}\r\n\t */\r\n\tprotected _zoomGeoPoint: IGeoPoint;\r\n\r\n\t/**\r\n\t * Default duration of zoom animations (ms).\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tpublic zoomDuration: number = 1000;\r\n\r\n\t/**\r\n\t * Default zooming animation easing function.\r\n\t *\r\n\t * @type {function}\r\n\t */\r\n\tpublic zoomEasing: (value: number) => number = $ease.cubicOut;\r\n\r\n\t/**\r\n\t * Smallest available zoom level. The map will not allow to zoom out past\r\n\t * this setting.\r\n\t *\r\n\t * NOTE: Should be power of 2.\r\n\t *\r\n\t * @default 1\r\n\t * @type {number}\r\n\t */\r\n\tpublic minZoomLevel: number = 1;\r\n\r\n\t/**\r\n\t * Biggest available zoom level. The map will not allow to zoom in past\r\n\t * this setting.\r\n\t *\r\n\t * NOTE: Should be power of 2.\r\n\t *\r\n\t * @default 32\r\n\t * @type {number}\r\n\t */\r\n\tpublic maxZoomLevel: number = 32;\r\n\r\n\t/**\r\n\t * [_prevZoomLevel description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {number}\r\n\t */\r\n\tprotected _prevZoomLevel: number;\r\n\r\n\t/**\r\n\t * [_prevZoomGeoPoint description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {IGeoPoint}\r\n\t */\r\n\tprotected _prevZoomGeoPoint: IGeoPoint = { latitude: 0, longitude: 0 };\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t *\r\n\t * @type {MapSeries}\r\n\t */\r\n\tpublic _seriesType: MapSeries;\r\n\r\n\t/**\r\n\t * A reference to currently playing animation, e.g. zooming.\r\n\t *\r\n\t * @type {Animation}\r\n\t */\r\n\tprotected _mapAnimation: Animation;\r\n\r\n\tprotected _mouseWheelDisposer: IDisposer;\r\n\r\n\tprotected _zoomGeoPointReal: IGeoPoint;\r\n\r\n\tprotected _centerGeoPoint: IGeoPoint;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"MapChart\";\r\n\r\n\t\t// Set default projection\r\n\t\tthis.projection = new Projection();\r\n\r\n\t\tthis.deltaLongitude = 0;\r\n\t\tthis.maxPanOut = 0.7;\r\n\t\tthis.homeZoomLevel = 1;\r\n\t\tthis.zoomStep = 2;\r\n\r\n\t\t// Set padding\r\n\t\tthis.padding(0, 0, 0, 0);\r\n\r\n\t\t// so that the map would render in a hidden div too\r\n\t\tthis.minWidth = 10;\r\n\t\tthis.minHeight = 10;\r\n\r\n\t\tthis.events.once(\"inited\", this.handleAllInited, this, false);\r\n\r\n\t\t// Create a container for map series\r\n\t\tlet seriesContainer = this.seriesContainer;\r\n\t\tseriesContainer.draggable = true;\r\n\t\tseriesContainer.visible = false;\r\n\t\tseriesContainer.inert = true;\r\n\t\tseriesContainer.resizable = true;\r\n\t\tseriesContainer.events.on(\"transformed\", this.handleMapTransform, this, false);\r\n\t\tseriesContainer.events.on(\"doublehit\", this.handleDoubleHit, this, false);\r\n\t\tseriesContainer.events.on(\"drag\", this.handleDrag, this, false);\r\n\t\tseriesContainer.zIndex = 0;\r\n\t\tseriesContainer.background.fillOpacity = 0;\r\n\r\n\t\t// Set up events\r\n\t\t//this.events.on(\"validated\", this.updateExtremes, this);\r\n\t\tthis.events.on(\"datavalidated\", this.updateExtremes, this, false);\r\n\r\n\t\t// Set up main chart container, e.g. set backgrounds and events to monitor\r\n\t\t// size changes, etc.\r\n\t\tlet chartContainer = this.chartContainer;\r\n\t\tchartContainer.parent = this;\r\n\t\tchartContainer.isMeasured = false;\r\n\t\tchartContainer.zIndex = -1;\r\n\r\n\t\tthis._disposers.push(seriesContainer.events.on(\"maxsizechanged\", () => {\r\n\t\t\tif (this.inited) {\r\n\t\t\t\tif (this._mapAnimation) {\r\n\t\t\t\t\tthis._mapAnimation.stop();\r\n\t\t\t\t}\r\n\t\t\t\tthis.updateScaleRatio();\r\n\t\t\t\tthis.zoomToGeoPoint(this._zoomGeoPointReal, this.zoomLevel, true, 0);\r\n\r\n\t\t\t\tthis.series.each((series) => {\r\n\t\t\t\t\tseries.updateTooltipBounds();\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t}, undefined, false));\r\n\r\n\t\tlet chartContainerBg = chartContainer.background;\r\n\t\tchartContainerBg.fillOpacity = 0;\r\n\t\tchartContainerBg.events.on(\"down\", (e) => { this.seriesContainer.dragStart(e.target.interactions.downPointers.getIndex(0)); }, this);\r\n\t\tchartContainerBg.events.on(\"up\", (e) => { this.seriesContainer.dragStop() }, this);\r\n\t\tchartContainerBg.events.on(\"doublehit\", this.handleDoubleHit, this);\r\n\t\tchartContainerBg.focusable = true;\r\n\r\n\t\tchartContainer.events.on(\"down\", this.handleMapDown, this, false);\r\n\r\n\t\t// Add description to background\r\n\t\tthis.background.fillOpacity = 0;\r\n\t\tthis.background.readerTitle = this.language.translate(\"Use plus and minus keys on your keyboard to zoom in and out\");\r\n\r\n\t\t// Add keyboard events for panning\r\n\t\tthis._disposers.push(getInteraction().body.events.on(\"keyup\", (ev) => {\r\n\t\t\tif (this.topParent.hasFocused && (!this._zoomControl || !this._zoomControl.thumb.isFocused)) {\r\n\t\t\t\tswitch (keyboard.getEventKey(ev.event)) {\r\n\t\t\t\t\tcase \"up\":\r\n\t\t\t\t\t\tthis.pan({ x: 0, y: 0.1 });\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"down\":\r\n\t\t\t\t\t\tthis.pan({ x: 0, y: -0.1 });\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"left\":\r\n\t\t\t\t\t\tthis.pan({ x: 0.1, y: 0 });\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"right\":\r\n\t\t\t\t\t\tthis.pan({ x: -0.1, y: 0 });\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, this));\r\n\r\n\t\tthis.mouseWheelBehavior = \"zoom\";\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\r\n\tprotected handleAllInited() {\r\n\t\tlet inited = true;\r\n\t\tthis.seriesContainer.visible = true;\r\n\t\tthis.series.each((series) => {\r\n\t\t\tif (!series.inited) {\r\n\t\t\t\tinited = false;\r\n\t\t\t}\r\n\t\t})\r\n\t\tif (inited) {\r\n\t\t\tthis.updateExtremes();\r\n\t\t\tthis.goHome(0);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tregistry.events.once(\"exitframe\", this.handleAllInited, this, false);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Prevents map to be dragged out of the container area\r\n\t * @ignore\r\n\t */\r\n\tprotected handleDrag() {\r\n\t\t// not good doing it with adapters.\r\n\t\tlet ww = this.seriesWidth * this.zoomLevel * this.scaleRatio;\r\n\t\tlet hh = this.seriesHeight * this.zoomLevel * this.scaleRatio;\r\n\t\tlet x = this.seriesContainer.pixelX;\r\n\t\tlet y = this.seriesContainer.pixelY;\r\n\r\n\t\tlet maxPanOut = this.maxPanOut;\r\n\r\n\t\tlet minX = Math.min(this.maxWidth * (1 - maxPanOut) - ww / 2, -ww * (maxPanOut - 0.5));\r\n\t\tif (x < minX) {\r\n\t\t\tx = minX;\r\n\t\t}\r\n\r\n\t\tlet maxX = Math.max(this.maxWidth * maxPanOut + ww / 2, this.maxWidth + ww * (maxPanOut - 0.5));\r\n\t\tif (x > maxX) {\r\n\t\t\tx = maxX;\r\n\t\t}\r\n\r\n\r\n\t\tlet minY = Math.min(this.maxHeight * (1 - maxPanOut) - hh / 2, -hh * (maxPanOut - 0.5));\r\n\t\tif (y < minY) {\r\n\t\t\ty = minY;\r\n\t\t}\r\n\r\n\t\tlet maxY = Math.max(this.maxHeight * maxPanOut + hh / 2, this.maxHeight + hh * (maxPanOut - 0.5));\r\n\t\tif (y > maxY) {\r\n\t\t\ty = maxY;\r\n\t\t}\r\n\r\n\t\tthis.seriesContainer.moveTo({ x: x, y: y }, undefined, undefined, true);\r\n\r\n\t\tthis._zoomGeoPointReal = this.zoomGeoPoint;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Map\");\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Handles event when a pointer presses down on the map, e.g. user presses\r\n\t * down mouse or touches the map on a screen.\r\n\t *\r\n\t * Stops all animations currently going on.\r\n\t */\r\n\tprotected handleMapDown(): void {\r\n\t\tif (this._mapAnimation) {\r\n\t\t\tthis._mapAnimation.stop();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles the event when user doubleclicks or dooubletaps the map: zooms\r\n\t * in on the reference point.\r\n\t *\r\n\t * @param {AMEvent[\"doublehit\"]} event Original event\r\n\t */\r\n\tprotected handleDoubleHit(event: AMEvent[\"doublehit\"]) {\r\n\t\tlet svgPoint: IPoint = $utils.documentPointToSvg(event.point, this.htmlContainer, this.svgContainer.cssScale);\r\n\t\tlet geoPoint: IGeoPoint = this.svgPointToGeo(svgPoint);\r\n\t\tthis.zoomIn(geoPoint);\r\n\t}\r\n\r\n\t/**\r\n\t * Handles mouse wheel event, e.g. user rotates mouse wheel while over the\r\n\t * map: zooms in or out depending on the direction of the wheel turn.\r\n\t *\r\n\t * @param {AMEvent[\"wheel\"]} event Original event\r\n\t */\r\n\tprotected handleWheel(event: AMEvent[\"wheel\"]) {\r\n\r\n\t\tlet svgPoint: IPoint = $utils.documentPointToSvg(event.point, this.htmlContainer, this.svgContainer.cssScale);\r\n\t\tlet geoPoint: IGeoPoint = this.svgPointToGeo(svgPoint);\r\n\r\n\t\tif (event.shift.y < 0) {\r\n\t\t\tthis.zoomIn(geoPoint);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.zoomOut(geoPoint);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Specifies what should chart do if when mouse wheel is rotated.\r\n\t *\r\n\t * @param {\"zoom\" | \"none\"} mouse wheel behavior\r\n\t * @default zoomX\r\n\t */\r\n\tpublic set mouseWheelBehavior(value: \"zoom\" | \"none\") {\r\n\r\n\t\tif (this.setPropertyValue(\"mouseWheelBehavior\", value)) {\r\n\t\t\tif (value != \"none\") {\r\n\t\t\t\tthis._mouseWheelDisposer = this.chartContainer.events.on(\"wheel\", this.handleWheel, this, false);\r\n\t\t\t\tthis._disposers.push(this._mouseWheelDisposer);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (this._mouseWheelDisposer) {\r\n\t\t\t\t\tthis._mouseWheelDisposer.dispose();\r\n\t\t\t\t}\r\n\t\t\t\tthis.chartContainer.wheelable = false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return { \"zoom\" | \"none\"} mouse wheel behavior\r\n\t */\r\n\tpublic get mouseWheelBehavior(): \"zoom\" | \"none\" {\r\n\t\treturn this.getPropertyValue(\"mouseWheelBehavior\");\r\n\t}\r\n\r\n\t/**\r\n\t * Projection to use for the map.\r\n\t *\r\n\t * Available projections:\r\n\t * * Eckert6\r\n\t * * Mercator\r\n\t * * Miller\r\n\t * * Orthographic\r\n\t *\r\n\t * ```TypeScript\r\n\t * map.projection = new am4maps.projections.Mercator();\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * map.projection = new am4maps.projections.Mercator();\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t * // ...\r\n\t * \"projection\": \"Mercator\"\r\n\t * // ...\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @param {Projection} projection Projection\r\n\t */\r\n\tpublic set projection(projection: Projection) {\r\n\t\tprojection.deltaLongitude = this.deltaLongitude;\r\n\t\tif (this.setPropertyValue(\"projection\", projection)) {\r\n\t\t\tthis.invalidateProjection();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Projection} Projection\r\n\t */\r\n\tpublic get projection(): Projection {\r\n\t\treturn this.getPropertyValue(\"projection\");\r\n\t}\r\n\r\n\t/**\r\n\t * Calculates the longitudes and latitudes of the most distant points from\r\n\t * the center in all four directions: West, East, North, and South.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateExtremes(): void {\r\n\r\n\t\tlet pWest = this.west;\r\n\t\tlet pEast = this.east;\r\n\t\tlet pNorth = this.north;\r\n\t\tlet pSouth = this.south;\r\n\r\n\t\tthis.west = null;\r\n\t\tthis.east = null;\r\n\t\tthis.north = null;\r\n\t\tthis.south = null;\r\n\r\n\t\tlet chartContainer: Container = this.chartContainer;\r\n\r\n\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif ((this.west > series.west) || !$type.isNumber(this.west)) {\r\n\t\t\t\tthis.west = series.west;\r\n\t\t\t}\r\n\t\t\tif ((this.east < series.east) || !$type.isNumber(this.east)) {\r\n\t\t\t\tthis.east = series.east;\r\n\t\t\t}\r\n\r\n\t\t\tif ((this.north < series.north) || !$type.isNumber(this.north)) {\r\n\t\t\t\tthis.north = series.north;\r\n\t\t\t}\r\n\t\t\tif ((this.south > series.south) || !$type.isNumber(this.south)) {\r\n\t\t\t\tthis.south = series.south;\r\n\t\t\t}\r\n\t\t});\r\n\t\tif ($type.isNumber(this.east) && $type.isNumber(this.north)) {\r\n\t\t\t// must reset\r\n\t\t\tthis.projection.centerPoint = { x: 0, y: 0 };\r\n\t\t\tthis.projection.scale = 1;\r\n\r\n\t\t\t// temporary setting deltaLongitude to 0 in order to measure w/h correctly\r\n\t\t\tlet deltaLongitude = this.projection.deltaLongitude;\r\n\t\t\tthis.projection.deltaLongitude = 0;\r\n\r\n\t\t\tlet northPoint: IPoint = this.projection.convert({ longitude: (this.east - this.west) / 2, latitude: this.north });\r\n\t\t\tlet southPoint: IPoint = this.projection.convert({ longitude: (this.east - this.west) / 2, latitude: this.south });\r\n\r\n\t\t\tlet westPoint: IPoint = this.projection.convert({ longitude: this.west, latitude: 0 });\r\n\t\t\tlet eastPoint: IPoint = this.projection.convert({ longitude: this.east, latitude: 0 });\r\n\r\n\t\t\tthis.projection.deltaLongitude = deltaLongitude;\r\n\r\n\t\t\tthis.projection.centerPoint = { x: westPoint.x + (eastPoint.x - westPoint.x) / 2, y: northPoint.y + (southPoint.y - northPoint.y) / 2 };\r\n\r\n\t\t\tlet scaleRatio: number;\r\n\r\n\t\t\tlet seriesWidth = eastPoint.x - westPoint.x;\r\n\t\t\tlet seriesHeight = southPoint.y - northPoint.y;\r\n\r\n\t\t\tlet vScale: number = chartContainer.innerWidth / seriesWidth;\r\n\t\t\tlet hScale: number = chartContainer.innerHeight / seriesHeight;\r\n\r\n\t\t\tif (vScale > hScale) {\r\n\t\t\t\tscaleRatio = hScale;\r\n\t\t\t} else {\r\n\t\t\t\tscaleRatio = vScale;\r\n\t\t\t}\r\n\t\t\tif ($type.isNaN(scaleRatio) || scaleRatio == Infinity) {\r\n\t\t\t\tscaleRatio = 1;\r\n\t\t\t}\r\n\r\n\t\t\tlet projectionScaleChanged = false;\r\n\t\t\tif (this.projection.scale != scaleRatio) {\r\n\t\t\t\tthis.projection.scale = scaleRatio;\r\n\t\t\t\tprojectionScaleChanged = true;\r\n\t\t\t}\r\n\r\n\t\t\tthis.seriesWidth = seriesWidth * scaleRatio;\r\n\t\t\tthis.seriesHeight = seriesHeight * scaleRatio;\r\n\r\n\t\t\tlet northPoint2: IPoint = this.projection.convert({ longitude: (this.east - this.west) / 2, latitude: this.north });\r\n\t\t\tlet westPoint2: IPoint = this.projection.convert({ longitude: this.west - this.deltaLongitude, latitude: 0 });\r\n\r\n\t\t\tthis._centerGeoPoint = this.projection.invert({ x: westPoint2.x + this.seriesWidth / 2, y: northPoint2.y + this.seriesHeight / 2 });\r\n\r\n\t\t\t//this.seriesContainer.width = this.seriesWidth; // not good, doesn't resize\r\n\t\t\t//this.seriesContainer.height = this.seriesHeight; // not good, doesn't resize\r\n\t\t\tthis.seriesContainer.definedBBox = { x: westPoint2.x, y: northPoint2.y, width: this.seriesWidth, height: this.seriesHeight };\r\n\r\n\t\t\tthis.updateScaleRatio();\r\n\r\n\t\t\tlet seriesContainer: Container = this.seriesContainer;\r\n\r\n\t\t\tseriesContainer.x = chartContainer.pixelWidth / 2;\r\n\t\t\tseriesContainer.y = chartContainer.pixelHeight / 2;\r\n\r\n\t\t\tif (projectionScaleChanged || pWest != this.west || pEast != this.east || pNorth != this.north || pSouth != this.south) {\r\n\t\t\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\t\t\tseries.invalidate();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * (Re)calculates a ratio which should be used to scale the actual map so\r\n\t * that it fits perfectly into available space. Helps to avoid redrawing of all the map if container size changes\r\n\t * @ignore\r\n\t */\r\n\tprotected updateScaleRatio(): void {\r\n\t\tlet scaleRatio: number;\r\n\r\n\t\tlet vScale: number = this.chartContainer.innerWidth / this.seriesWidth;\r\n\t\tlet hScale: number = this.chartContainer.innerHeight / this.seriesHeight;\r\n\r\n\t\tif (vScale > hScale) {\r\n\t\t\tscaleRatio = hScale;\r\n\t\t} else {\r\n\t\t\tscaleRatio = vScale;\r\n\t\t}\r\n\r\n\t\tif ($type.isNaN(scaleRatio) || scaleRatio == Infinity) {\r\n\t\t\tscaleRatio = 1;\r\n\t\t}\r\n\r\n\t\tif (scaleRatio != this.scaleRatio) {\r\n\t\t\tthis.scaleRatio = scaleRatio;\r\n\r\n\t\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\t\tseries.scale = scaleRatio;\r\n\t\t\t\tseries.updateTooltipBounds();\r\n\t\t\t});\r\n\r\n\t\t\tthis.dispatch(\"scaleratiochanged\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a point within map container to geographical (lat/long)\r\n\t * coordinates.\r\n\t *\r\n\t * @param {IPoint} point Source point\r\n\t * @return {IGeoPoint} Geo-point\r\n\t */\r\n\tpublic svgPointToGeo(point: IPoint): IGeoPoint {\r\n\t\tlet series: MapSeries = this.series.getIndex(0);\r\n\t\tif (series) {\r\n\t\t\tlet seriesPoint: IPoint = $utils.svgPointToSprite(point, series);\r\n\t\t\treturn this.seriesPointToGeo(seriesPoint);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Converts geographical (lat/long) coordinates to an X/Y point within map's\r\n\t * container.\r\n\t *\r\n\t * @param {IGeoPoint} point Source geo-point\r\n\t * @return {IPoint} Point\r\n\t */\r\n\tpublic geoPointToSVG(point: IGeoPoint): IPoint {\r\n\t\tlet series: MapSeries = this.series.getIndex(0);\r\n\t\tif (series) {\r\n\t\t\tlet seriesPoint: IPoint = this.geoPointToSeries(point);\r\n\t\t\treturn $utils.spritePointToSvg(seriesPoint, series);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a point (X/Y) within actual objects of the map to geographical\r\n\t * (lat/long) coordinates.\r\n\t *\r\n\t * @param {IPoint} point Source point\r\n\t * @return {IGeoPoint} Geo-point\r\n\t */\r\n\tpublic seriesPointToGeo(point: IPoint): IGeoPoint {\r\n\t\treturn this.projection.invert(point);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts geographical (lat/long) coordinates to an X/Y point within\r\n\t * actual elements/objects of the maps.\r\n\t *\r\n\t * @param {IGeoPoint} point Source geo-point\r\n\t * @return {IPoint} Point\r\n\t */\r\n\tpublic geoPointToSeries(point: IGeoPoint): IPoint {\r\n\t\treturn this.projection.convert(point);\r\n\t}\r\n\r\n\t/**\r\n\t * Map data in GeoJSON format.\r\n\t *\r\n\t * The Map supports the following GeoJSON objects: `Point`, `LineString`,\r\n\t * `Polygon`, `MultiPoint`, `MultiLineString`, and `MultiPolygon`.\r\n\t *\r\n\t * @see {@link http://geojson.org/} Official GeoJSON format specification\r\n\t * @param {Object} geoJSON GeoJSON data\r\n\t */\r\n\tpublic set geodata(geodata: Object) {\r\n\t\tif (geodata != this._geodata) {\r\n\t\t\tthis._geodata = geodata;\r\n\t\t\tthis.invalidateData();\r\n\r\n\t\t\t$iter.each(this._dataUsers.iterator(), (x) => {\r\n\t\t\t\tx.invalidateData();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Object} GeoJSON data\r\n\t */\r\n\tpublic get geodata(): Object {\r\n\t\treturn this._geodata;\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms the map to particular zoom level and centers on a latitude/longitude\r\n\t * coordinate.\r\n\t *\r\n\t * @param {IGeoPoint} point Center coordinate\r\n\t * @param {number} zoomLevel Zoom level\r\n\t * @param {boolean} center Center on the given coordinate?\r\n\t * @param {number} duration Duration for zoom animation (ms)\r\n\t * @return {Animation} Zoom animation\r\n\t */\r\n\tpublic zoomToGeoPoint(point: IGeoPoint, zoomLevel: number, center?: boolean, duration?: number): Animation {\r\n\r\n\t\tif (!point) {\r\n\t\t\tpoint = this.zoomGeoPoint;\r\n\t\t}\r\n\r\n\t\tif (!point) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._zoomGeoPointReal = point;\r\n\r\n\t\tzoomLevel = $math.fitToRange(zoomLevel, this.minZoomLevel, this.maxZoomLevel);\r\n\r\n\t\tlet seriesPoint: IPoint = this.projection.convert(point);\r\n\r\n\t\tlet svgPoint: IPoint = this.geoPointToSVG(point);\r\n\t\tlet mapPoint = $utils.svgPointToSprite(svgPoint, this);\r\n\r\n\t\tif (center) {\r\n\t\t\tmapPoint = {\r\n\t\t\t\tx: this.maxWidth / 2,\r\n\t\t\t\ty: this.maxHeight / 2\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tif (!$type.isNumber(duration)) {\r\n\t\t\tduration = this.zoomDuration;\r\n\t\t}\r\n\r\n\t\tthis._mapAnimation = this.seriesContainer.animate(\r\n\t\t\t[{\r\n\t\t\t\tproperty: \"scale\",\r\n\t\t\t\tto: zoomLevel\r\n\t\t\t}, {\r\n\t\t\t\tproperty: \"x\",\r\n\t\t\t\tto: mapPoint.x - seriesPoint.x * zoomLevel * this.scaleRatio - this.pixelPaddingLeft\r\n\t\t\t}, {\r\n\t\t\t\tproperty: \"y\",\r\n\t\t\t\tto: mapPoint.y - seriesPoint.y * zoomLevel * this.scaleRatio - this.pixelPaddingTop\r\n\t\t\t}], duration, this.zoomEasing);\r\n\r\n\t\tthis._disposers.push(this._mapAnimation.events.on(\"animationended\", () => {\r\n\t\t\tthis._zoomGeoPointReal = this.zoomGeoPoint;\r\n\t\t}))\r\n\r\n\t\tthis.seriesContainer.validatePosition();\r\n\r\n\t\treturn this._mapAnimation;\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms the map to a particular map object.\r\n\t *\r\n\t * @param {MapObject} mapObject Target map object\r\n\t * @param {number} zoomLevel Zoom level\r\n\t * @param {boolean} center Center on the given coordinate?\r\n\t * @param {number} duration Duration for zoom animation (ms)\r\n\t * @return {Animation} Zoom animation\r\n\t */\r\n\tpublic zoomToMapObject(mapObject: MapObject, zoomLevel?: number, center?: boolean, duration?: number): Animation {\r\n\r\n\t\tif (center == undefined) {\r\n\t\t\tcenter = true;\r\n\t\t}\r\n\r\n\t\tif (mapObject instanceof MapImage) {\r\n\t\t\tif ($type.isNaN(zoomLevel)) {\r\n\t\t\t\tzoomLevel = 5;\r\n\t\t\t}\r\n\t\t\treturn this.zoomToGeoPoint({ latitude: mapObject.latitude, longitude: mapObject.longitude }, zoomLevel, center, duration);\r\n\t\t}\r\n\r\n\t\tlet dataItem = mapObject.dataItem;\r\n\r\n\t\tif (dataItem && $type.isNumber(dataItem.zoomLevel)) {\r\n\t\t\tzoomLevel = dataItem.zoomLevel;\r\n\t\t}\r\n\r\n\t\tif (mapObject instanceof MapPolygon) {\r\n\t\t\tlet dataItem = mapObject.dataItem;\r\n\t\t\tlet bbox = mapObject.polygon.bbox;\r\n\r\n\t\t\tif (!$type.isNumber(zoomLevel)) {\r\n\t\t\t\tzoomLevel = Math.min(this.seriesWidth / bbox.width, this.seriesHeight / bbox.height);\r\n\t\t\t}\r\n\r\n\t\t\tlet geoPoint: IGeoPoint;\r\n\r\n\t\t\tif (dataItem && $type.hasValue(dataItem.zoomGeoPoint)) {\r\n\t\t\t\tgeoPoint = dataItem.zoomGeoPoint;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// this is more accurate\r\n\t\t\t\tlet polygonPoint = { x: bbox.x + bbox.width / 2, y: bbox.y + bbox.height / 2 };\r\n\t\t\t\tlet seriesPoint = $utils.spritePointToSprite(polygonPoint, mapObject.polygon, mapObject.series);\r\n\r\n\t\t\t\tgeoPoint = this.seriesPointToGeo(seriesPoint);\r\n\t\t\t}\r\n\t\t\treturn this.zoomToGeoPoint(geoPoint, zoomLevel, true, duration);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms the map to a particular viewport.\r\n\t *\r\n\t * The `north`, `east`, `south`, and `west` define boundaries of the\r\n\t * imaginary viewort we want to zoom the map to.\r\n\t *\r\n\t * `level` is not actual zoom level. The map will determine the zoom level\r\n\t * required to accommodated such zoom, and will adjust it by `level` if set.\r\n\t *\r\n\t * @param {number} north Latitude of the North-most boundary\r\n\t * @param {number} east Longitude of the East-most boundary\r\n\t * @param {number} south Latitude of the South-most boundary\r\n\t * @param {number} west Longitude of the West-most boundary\r\n\t * @param {number} level Adjust zoom level\r\n\t * @param {boolean} center Center on the given coordinate?\r\n\t * @param {number} duration Duration for zoom animation (ms)\r\n\t * @return {Animation} Zoom animation\r\n\t */\r\n\tpublic zoomToRectangle(north: number, east: number, south: number, west: number, level?: number, center?: boolean, duration?: number): Animation {\r\n\t\tif ($type.isNaN(level)) {\r\n\t\t\tlevel = 1;\r\n\t\t}\r\n\t\tlet zoomLevel = level * Math.min((this.south - this.north) / (south - north), (this.west - this.east) / (west - east));\r\n\r\n\t\treturn this.zoomToGeoPoint({ latitude: north + (south - north) / 2, longitude: west + (east - west) / 2 }, zoomLevel, center, duration);\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms in the map, optionally centering on particular latitude/longitude\r\n\t * point.\r\n\t *\r\n\t * @param {IGeoPoint} geoPoint Optional center point\r\n\t * @param {number} duration Duration for zoom animation (ms)\r\n\t * @return {Animation} Zoom animation\r\n\t */\r\n\tpublic zoomIn(geoPoint?: IGeoPoint, duration?: number): Animation {\r\n\t\treturn this.zoomToGeoPoint(geoPoint, this.zoomLevel * this.zoomStep, false, duration);\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms out the map, optionally centering on particular latitude/longitude\r\n\t * point.\r\n\t *\r\n\t * @param {IGeoPoint} geoPoint Optional center point\r\n\t * @param {number} duration Duration for zoom animation (ms)\r\n\t * @return {Animation} Zoom animation\r\n\t */\r\n\tpublic zoomOut(geoPoint?: IGeoPoint, duration?: number): Animation {\r\n\t\treturn this.zoomToGeoPoint(geoPoint, this.zoomLevel / this.zoomStep, false, duration);\r\n\t}\r\n\r\n\t/**\r\n\t * Pans the maps using relative coordinates. E.g.:\r\n\t *\r\n\t * ```JSON\r\n\t * {\r\n\t * x: 0.1,\r\n\t * y: -0.1\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * The above will move the map by 10% to the right, and by 10% upwards.\r\n\t *\r\n\t * @param {IPoint} shift Vertical and horizontal shift\r\n\t * @param {number} duration Pan animation duration (ms)\r\n\t */\r\n\tpublic pan(shift: IPoint, duration?: number): void {\r\n\t\tlet point = this.geoPointToSVG(this.zoomGeoPoint);\r\n\t\tpoint.x += this.pixelWidth * shift.x;\r\n\t\tpoint.y += this.pixelHeight * shift.y;\r\n\t\tthis.zoomToGeoPoint(this.svgPointToGeo(point), this.zoomLevel, true, duration);\r\n\t}\r\n\r\n\t/**\r\n\t * Current lat/long coordinates for the center of the viewport. (default\r\n\t * zoom reference point)\r\n\t *\r\n\t * @readonly\r\n\t * @return {IGeoPoint} Coordinates\r\n\t */\r\n\tpublic get zoomGeoPoint(): IGeoPoint {\r\n\t\tvar point = $utils.spritePointToSvg({ x: this.pixelWidth / 2, y: this.pixelHeight / 2 }, this);\r\n\t\treturn this.svgPointToGeo(point);\r\n\t}\r\n\r\n\t/**\r\n\t * Current zoom level.\r\n\t *\r\n\t * @readonly\r\n\t * @return {number} Zoom level\r\n\t */\r\n\tpublic get zoomLevel(): number {\r\n\t\treturn this.seriesContainer.scale;\r\n\t}\r\n\r\n\tpublic set zoomLevel(value: number) {\r\n\t\tthis.seriesContainer.scale = value;\r\n\t}\r\n\r\n\t/**\r\n\t * Dispatches events after some map transformation, like pan or zoom.\r\n\t */\r\n\tprotected handleMapTransform(): void {\r\n\t\tif (this.zoomLevel != this._prevZoomLevel) {\r\n\t\t\tthis.dispatch(\"zoomlevelchanged\");\r\n\t\t\tthis._prevZoomLevel = this.zoomLevel;\r\n\t\t}\r\n\r\n\t\tif (this.zoomGeoPoint && (this._prevZoomGeoPoint.latitude != this.zoomGeoPoint.latitude || this._prevZoomGeoPoint.longitude != this.zoomGeoPoint.longitude)) {\r\n\t\t\tthis.dispatch(\"mappositionchanged\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A [[SmallMap]] to be used on the map.\r\n\t *\r\n\t * Please note, that accessing this property will NOT create a small map\r\n\t * if it has not yet been created. (except in JSON)\r\n\t *\r\n\t * ```TypeScript\r\n\t * // Create a small map\r\n\t * map.smallMap = new am4maps.SmallMap();\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * // Create a small map\r\n\t * map.smallMap = new am4maps.SmallMap();\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t * // ...\r\n\t * \"smallMap\": {}\r\n\t * // ...\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @param {SmallMap} smallMap Small map\r\n\t */\r\n\tpublic set smallMap(smallMap: SmallMap) {\r\n\t\tif (this._smallMap) {\r\n\t\t\tthis.removeDispose(this._smallMap);\r\n\t\t}\r\n\t\tthis._smallMap = smallMap;\r\n\t\tthis._smallMap.chart = this;\r\n\t\tsmallMap.parent = this.chartContainer;\r\n\t}\r\n\r\n\t/**\r\n\t * @return {SmallMap} Small map\r\n\t */\r\n\tpublic get smallMap(): SmallMap {\r\n\t\tif (!this._smallMap) {\r\n\t\t\tlet smallMap: SmallMap = new SmallMap();\r\n\t\t\tthis.smallMap = smallMap;\r\n\t\t}\r\n\t\treturn this._smallMap;\r\n\t}\r\n\r\n\t/**\r\n\t * A [[ZoomControl]] to be used on the map.\r\n\t *\r\n\t * Please note, that accessing this property will NOT create a zoom control\r\n\t * if it has not yet been created. (except in JSON)\r\n\t *\r\n\t * ```TypeScript\r\n\t * // Create a zoom control\r\n\t * map.zoomControl = new am4maps.ZoomControl();\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * // Create a zoom control\r\n\t * map.zoomControl = new am4maps.ZoomControl();\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t * // ...\r\n\t * \"zoomControl\": {}\r\n\t * // ...\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @param {ZoomControl} zoomControl Zoom control\r\n\t */\r\n\tpublic set zoomControl(zoomControl: ZoomControl) {\r\n\t\tif (this._zoomControl) {\r\n\t\t\tthis.removeDispose(this._zoomControl);\r\n\t\t}\r\n\t\tthis._zoomControl = zoomControl;\r\n\t\tzoomControl.chart = this;\r\n\t\tzoomControl.parent = this.chartContainer;\r\n\t}\r\n\r\n\t/**\r\n\t * @return {ZoomControl} Zoom control\r\n\t */\r\n\tpublic get zoomControl(): ZoomControl {\r\n\t\treturn this._zoomControl;\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a map series of appropriate type.\r\n\t *\r\n\t * @return {MapSeries} Map series\r\n\t */\r\n\tprotected createSeries(): this[\"_seriesType\"] {\r\n\t\treturn new MapSeries();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Degrees to shift map center by.\r\n\t *\r\n\t * E.g. if set to -160, the longitude 20 will become a new center, creating\r\n\t * a Pacific-centered map.\r\n\t *\r\n\t * @param {number} value Map center shift\r\n\t */\r\n\tpublic set deltaLongitude(value: number) {\r\n\t\tif (this.setPropertyValue(\"deltaLongitude\", $geo.wrapAngleTo180(value))) {\r\n\t\t\tthis.invalidateProjection();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Map center shift\r\n\t */\r\n\tpublic get deltaLongitude(): number {\r\n\t\treturn this.getPropertyValue(\"deltaLongitude\");\r\n\t}\r\n\r\n\t/**\r\n\t * Maximum portion of the map's width/height to allow panning \"off screen\".\r\n\t *\r\n\t * A value of 0 (zero) will prevent any portion of the the map to be panned\r\n\t * outside the viewport.\r\n\t *\r\n\t * 0.5 will allow half of the map to be outside viewable area.\r\n\t * \r\n\t * @default 0.7\r\n\t * @param {number} value Max pan out\r\n\t */\r\n\tpublic set maxPanOut(value: number) {\r\n\t\tthis.setPropertyValue(\"maxPanOut\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Max pan out\r\n\t */\r\n\tpublic get maxPanOut(): number {\r\n\t\treturn this.getPropertyValue(\"maxPanOut\");\r\n\t}\r\n\r\n\t/**\r\n\t * The geographical point to center map on when it is first loaded.\r\n\t *\r\n\t * The map will also be centered to this point when you call `goHome()`\r\n\t * method.\r\n\t *\r\n\t * @param {IGeoPoint} value Home geo point\r\n\t */\r\n\tpublic set homeGeoPoint(value: IGeoPoint) {\r\n\t\tthis.setPropertyValue(\"homeGeoPoint\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {IGeoPoint} Home geo point\r\n\t */\r\n\tpublic get homeGeoPoint(): IGeoPoint {\r\n\t\treturn this.getPropertyValue(\"homeGeoPoint\");\r\n\t}\r\n\r\n\t/**\r\n\t * The zoom level to put the map in when it is first loaded.\r\n\t *\r\n\t * The map will also be set to this zoom level when you call `goHome()`\r\n\t * method.\r\n\t *\r\n\t * @param {number} value Home zoom level\r\n\t */\r\n\tpublic set homeZoomLevel(value: number) {\r\n\t\tthis.setPropertyValue(\"homeZoomLevel\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Home zoom level\r\n\t */\r\n\tpublic get homeZoomLevel(): number {\r\n\t\treturn this.getPropertyValue(\"homeZoomLevel\");\r\n\t}\r\n\r\n\t/**\r\n\t * When user zooms in or out current zoom level is multiplied or divided\r\n\t * by value of this setting.\r\n\t *\r\n\t * @default 2\r\n\t * @param {number} value Zoom factor\r\n\t */\r\n\tpublic set zoomStep(value: number) {\r\n\t\tthis.setPropertyValue(\"zoomStep\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Zoom factor\r\n\t */\r\n\tpublic get zoomStep(): number {\r\n\t\treturn this.getPropertyValue(\"zoomStep\");\r\n\t}\r\n\r\n\t/**\r\n\t * Invalidates projection, causing all series to be redrawn.\r\n\t */\r\n\tprotected invalidateProjection() {\r\n\t\tthis.updateExtremes();\r\n\t\t//\t\tthis.projection.deltaLatitude = this.deltaLatitude;\r\n\t\tthis.projection.deltaLongitude = this.deltaLongitude;\r\n\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tseries.invalidate();\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * Sets a [[DataSource]] to be used for loading Component's data.\r\n\t *\r\n\t * @param {DataSource} value Data source\r\n\t */\r\n\tpublic set geodataSource(value: DataSource) {\r\n\t\tif (this._dataSources[\"geodata\"]) {\r\n\t\t\tthis.removeDispose(this._dataSources[\"geodata\"]);\r\n\t\t}\r\n\t\tthis._dataSources[\"geodata\"] = value;\r\n\t\tthis._dataSources[\"geodata\"].component = this;\r\n\t\tthis.events.on(\"inited\", () => {\r\n\t\t\tthis.loadData(\"geodata\")\r\n\t\t}, this, false);\r\n\t\tthis.setDataSourceEvents(value, \"geodata\");\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a [[DataSource]] specifically for loading Component's data.\r\n\t *\r\n\t * @return {DataSource} Data source\r\n\t */\r\n\tpublic get geodataSource(): DataSource {\r\n\t\tif (!this._dataSources[\"geodata\"]) {\r\n\t\t\tthis.getDataSource(\"geodata\");\r\n\t\t}\r\n\t\treturn this._dataSources[\"geodata\"];\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {object} config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\t// Instantiate projection\r\n\t\tif ($type.hasValue(config[\"projection\"]) && $type.isString(config[\"projection\"])) {\r\n\t\t\tconfig[\"projection\"] = this.createClassInstance(config[\"projection\"]);\r\n\t\t}\r\n\r\n\t\t// Set up small map\r\n\t\tif ($type.hasValue(config.smallMap) && !$type.hasValue(config.smallMap.type)) {\r\n\t\t\tconfig.smallMap.type = \"SmallMap\";\r\n\t\t}\r\n\r\n\t\t// Set up zoom control\r\n\t\tif ($type.hasValue(config.zoomControl) && !$type.hasValue(config.zoomControl.type)) {\r\n\t\t\tconfig.zoomControl.type = \"ZoomControl\";\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\r\n\t}\r\n\r\n\t/**\r\n * This function is used to sort element's JSON config properties, so that\r\n * some properties that absolutely need to be processed last, can be put at\r\n * the end.\r\n *\r\n * @ignore Exclude from docs\r\n * @param {string} a Element 1\r\n * @param {string} b Element 2\r\n * @return {number} Sorting number\r\n */\r\n\tprotected configOrder(a: string, b: string): Ordering {\r\n\t\tif (a == b) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\t// Must come last\r\n\t\telse if (a == \"smallMap\") {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\telse if (b == \"smallMap\") {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t\telse if (a == \"series\") {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\telse if (b == \"series\") {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn super.configOrder(a, b);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Adds `projection` to \"as is\" fields.\r\n\t *\r\n\t * @param {string} field Field name\r\n\t * @return {boolean} Assign as is?\r\n\t */\r\n\tprotected asIs(field: string): boolean {\r\n\t\treturn field == \"projection\" || super.asIs(field);\r\n\t}\r\n\r\n\t/**\r\n\t * Geo point of map center\r\n\t *\r\n\t * @readonly\r\n\t * @type {IPoint}\r\n\t */\r\n\tpublic get centerGeoPoint(): IGeoPoint {\r\n\t\treturn this._centerGeoPoint;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Resets the map to its original position and zoom level.\r\n\t */\r\n\tpublic goHome(duration?: number) {\r\n\t\tlet homeGeoPoint = this.homeGeoPoint;\r\n\t\tif (!homeGeoPoint) {\r\n\t\t\thomeGeoPoint = this.centerGeoPoint;\r\n\t\t}\r\n\t\tif (homeGeoPoint) {\r\n\t\t\tthis.zoomToGeoPoint(homeGeoPoint, this.homeZoomLevel, true, duration);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Sets [[Paper]] instance to use to draw elements.\r\n\t * @ignore\r\n\t * @param {Paper} paper Paper\r\n\t * @return {boolean} true if paper was changed, false, if it's the same\r\n\t */\r\n\tpublic setPaper(paper: Paper): boolean {\r\n\t\tif (this.svgContainer) {\r\n\t\t\tthis.svgContainer.hideOverflow = true;\r\n\t\t}\r\n\r\n\t\treturn super.setPaper(paper);\r\n\t}\r\n\r\n\t/**\r\n\t * Prepares the legend instance for use in this chart.\r\n\t *\r\n\t * @param {Legend} legend Legend\r\n\t */\r\n\tprotected setLegend(legend: Legend) {\r\n\t\tsuper.setLegend(legend);\r\n\t\tif (legend) {\r\n\t\t\tlegend.parent = this.chartContainer;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"MapChart\"] = MapChart;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/MapChart.ts","/**\r\n * Map line module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container, IContainerProperties, IContainerAdapters, IContainerEvents } from \"../../core/Container\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { MapLine } from \"./MapLine\";\r\nimport { IOrientationPoint } from \"../../core/defs/IPoint\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[MapLineObject]].\r\n */\r\nexport interface IMapLineObjectProperties extends IContainerProperties {\r\n\r\n\t/**\r\n\t * Sets object's relative position (0-1) within the line.\r\n\t *\r\n\t * `0` will place the object at the beginning of the line. `1` - at the end.\r\n\t *\r\n\t * Any intermediate number will place the object at some point within the\r\n\t * line.\r\n\t * \r\n\t * @type {number}\r\n\t */\r\n\tposition?: number;\r\n\r\n\t/**\r\n\t * If set to `true`, the object will be automatically rotated to face the\r\n\t * direction of the line at the specific position.\r\n\t *\r\n\t * This allows creating images that has its \"front\" always facing the logical\r\n\t * direction of the line.\r\n\t *\r\n\t * @default false\r\n\t * @type {boolean}\r\n\t */\r\n\tadjustRotation?: boolean;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[MapLineObject]].\r\n */\r\nexport interface IMapLineObjectEvents extends IContainerEvents { }\r\n\r\n/**\r\n * Defines adapters for [[MapLineObject]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IMapLineObjectAdapters extends IContainerAdapters, IMapLineObjectProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Draws a line on the map.\r\n *\r\n * @see {@link IMapLineObjectEvents} for a list of available events\r\n * @see {@link IMapLineObjectAdapters} for a list of available Adapters\r\n */\r\nexport class MapLineObject extends Container {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IMapLineObjectProperties}\r\n\t */\r\n\tpublic _properties!: IMapLineObjectProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IMapLineObjectAdapters}\r\n\t */\r\n\tpublic _adapter!: IMapLineObjectAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IMapLineObjectEvents}\r\n\t */\r\n\tpublic _events!: IMapLineObjectEvents;\r\n\r\n\t/**\r\n\t * A reference to the [[MapLine]] object this object is attached to.\r\n\t *\r\n\t * @todo Review if necessary (same as parent)\r\n\t * @type {MapLine}\r\n\t */\r\n\tpublic mapLine: MapLine;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.adjustRotation = true;\r\n\t\tthis.className = \"MapLineObject\";\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.layout = \"none\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates element's position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validatePosition() {\r\n\t\tif (this.mapLine) {\r\n\t\t\tlet point: IOrientationPoint = this.mapLine.positionToPoint(this.position);\r\n\t\t\tthis.x = point.x;\r\n\t\t\tthis.y = point.y;\r\n\r\n\t\t\tif (this.adjustRotation) {\r\n\t\t\t\tthis.rotation = point.angle;\r\n\t\t\t}\r\n\r\n\t\t\tlet dataItem = this.mapLine.dataItem;\r\n\t\t\tif (dataItem) {\r\n\t\t\t\tlet series = this.mapLine.dataItem.component;\r\n\t\t\t\tthis.scale = 1 / series.scale;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsuper.validatePosition();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets object's relative position (0-1) within the line.\r\n\t *\r\n\t * `0` will place the object at the beginning of the line. `1` - at the end.\r\n\t *\r\n\t * Any intermediate number will place the object at some point within the\r\n\t * line.\r\n\t *\r\n\t * @param {number} value Position within the line (0-1)\r\n\t */\r\n\tpublic set position(value: number) {\r\n\t\tthis.setPropertyValue(\"position\", value, false, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Position within the line\r\n\t */\r\n\tpublic get position(): number {\r\n\t\treturn this.getPropertyValue(\"position\");\r\n\t}\r\n\r\n\t/**\r\n\t * If set to `true`, the object will be automatically rotated to face the\r\n\t * direction of the line at the specific position.\r\n\t *\r\n\t * This allows creating images that has its \"front\" always facing the logical\r\n\t * direction of the line.\r\n\t *\r\n\t * @default false\r\n\t * @param {boolean} value Auto-rotate\r\n\t */\r\n\tpublic set adjustRotation(value: boolean) {\r\n\t\tthis.setPropertyValue(\"adjustRotation\", value, false, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Auto-rotate\r\n\t */\r\n\tpublic get adjustRotation(): boolean {\r\n\t\treturn this.getPropertyValue(\"adjustRotation\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"MapLineObject\"] = MapLineObject;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/map/MapLineObject.ts","/**\r\n * Map line module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { MapObject, IMapObjectProperties, IMapObjectAdapters, IMapObjectEvents } from \"./MapObject\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { MapLineObject } from \"./MapLineObject\";\r\nimport { MapLineSeriesDataItem, MapLineSeries } from \"./MapLineSeries\";\r\nimport { MapChart } from \"../types/MapChart\";\r\nimport { MapImage } from \"./MapImage\";\r\nimport { IOrientationPoint } from \"../../core/defs/IPoint\";\r\nimport { IGeoPoint } from \"../../core/defs/IGeoPoint\";\r\nimport { Triangle } from \"../../core/elements/Triangle\";\r\nimport { ListTemplate, IListEvents, ListDisposer } from \"../../core/utils/List\";\r\nimport { Polyline } from \"../../core/elements/Polyline\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { color } from \"../../core/utils/Color\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $geo from \"./Geo\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[MapLine]].\r\n */\r\nexport interface IMapLineProperties extends IMapObjectProperties {\r\n\r\n\t/**\r\n\t * Lat/long coordinates of all line ends and intermediate elbows.\r\n\t */\r\n\tmultiGeoLine?: IGeoPoint[][];\r\n\r\n\t/**\r\n\t * If `true` it line will be arched in the way to simulate shortest path\r\n\t * over curvature of Earth's surface, based on currently used on projection.\r\n\t *\r\n\t * @type {boolean}\r\n\t */\r\n\tshortestDistance?: boolean;\r\n\r\n\t/**\r\n\t * Instead of setting longitudes/latitudes you can set an array of images which will be connected by the line\r\n\t */\r\n\timagesToConnect?: MapImage[];\r\n}\r\n\r\n/**\r\n * Defines events for [[MapLine]].\r\n */\r\nexport interface IMapLineEvents extends IMapObjectEvents { }\r\n\r\n/**\r\n * Defines adapters for [[MapLine]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IMapLineAdapters extends IMapObjectAdapters, IMapLineProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Used to draw a line on the map.\r\n *\r\n * @see {@link IMapLineEvents} for a list of available events\r\n * @see {@link IMapLineAdapters} for a list of available Adapters\r\n */\r\nexport class MapLine extends MapObject {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IMapLineProperties}\r\n\t */\r\n\tpublic _properties!: IMapLineProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IMapLineAdapters}\r\n\t */\r\n\tpublic _adapter!: IMapLineAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IMapLineEvents}\r\n\t */\r\n\tpublic _events!: IMapLineEvents;\r\n\r\n\t/**\r\n\t * A line visual element.\r\n\t *\r\n\t * @type {Polyline}\r\n\t */\r\n\tpublic line: Polyline;\r\n\r\n\t/**\r\n\t * [_lineObjects description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {ListTemplate}\r\n\t */\r\n\tprotected _lineObjects: ListTemplate;\r\n\r\n\t/**\r\n\t * [_arrow description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {MapLineObject}\r\n\t */\r\n\tprotected _arrow: MapLineObject;\r\n\r\n\t/**\r\n\t * [_distance description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {number}\r\n\t */\r\n\tprotected _distance: number;\r\n\r\n\t/**\r\n\t * Related data item.\r\n\t *\r\n\t * @type {MapLineSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: MapLineSeriesDataItem;\r\n\r\n\t/**\r\n\t * A map series this object belongs to.\r\n\t *\r\n\t * @type {MapLineSeries}\r\n\t */\r\n\tpublic series: MapLineSeries;\r\n\r\n\t/**\r\n\t * Instead of setting longitudes/latitudes you can set an array of images which will be connected by the line\r\n\t * @ignore\r\n\t */\r\n\tprotected _imagesToConnect: MapImage[];\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"MapLine\";\r\n\r\n\t\tthis.createLine();\r\n\t\tthis.line.stroke = color();\t\r\n\t\tthis.line.parent = this;\r\n\t\tthis.strokeOpacity = 1;\r\n\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tthis.stroke = interfaceColors.getFor(\"grid\");\r\n\t\tthis.shortestDistance = true;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createLine(){\r\n\t\tthis.line = new Polyline();\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a position within the line (0-1) to a physical point\r\n\t * coordinates.\r\n\t *\r\n\t * 0 indicates start of the line, 0.5 - middle, while 1 indicates the end.\r\n\t *\r\n\t * @param {number} position Position (0-1)\r\n\t * @return {IOrientationPoint} Coordinates\r\n\t */\r\n\tpublic positionToPoint(position: number): IOrientationPoint {\r\n\t\tif (this.line) {\r\n\t\t\treturn this.line.positionToPoint(position);\r\n\t\t}\r\n\t\treturn { x: 0, y: 0, angle: 0 };\r\n\t}\r\n\r\n\t/**\r\n\t * [multiGeoLine description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {IGeoPoint[][]} multiGeoLine [description]\r\n\t */\r\n\tpublic set multiGeoLine(multiGeoLine: IGeoPoint[][]) {\r\n\t\tthis.setPropertyValue(\"multiGeoLine\", $geo.normalizeMultiline(multiGeoLine), true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {IGeoPoint[]} [description]\r\n\t */\r\n\tpublic get multiGeoLine(): IGeoPoint[][] {\r\n\t\treturn this.getPropertyValue(\"multiGeoLine\");\r\n\t}\r\n\r\n\t/**\r\n\t * Instead of setting longitudes/latitudes you can set an array of images\r\n\t * which will be connected by the line.\r\n\t *\r\n\t * Parameter is an array that can hold string `id`'s to of the images, or\r\n\t * references to actual [[MapImage]] objects.\r\n\t *\r\n\t * @param {MapImages[]} images Images\r\n\t */\r\n\tpublic set imagesToConnect(images: MapImage[] | string[]) {\r\n\t\t//@todo dispose listeners if previous imagesToConnect exists\r\n\t\tfor (let i = 0, len = images.length; i < len; i++) {\r\n\t\t\tlet image = images[i];\r\n\t\t\tif ($type.isString(image)) {\r\n\t\t\t\tif (this.map.hasKey(image)) {\r\n\t\t\t\t\timage = this.map.getKey(image);\r\n\t\t\t\t\timages[i] = image;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\timage.events.on(\"propertychanged\", (event) => {\r\n\t\t\t\tif (event.property == \"longitude\" || event.property == \"latitude\") {\r\n\t\t\t\t\tthis.invalidate();\r\n\t\t\t\t}\r\n\t\t\t}, this, false);\r\n\t\t}\r\n\t\tthis.setPropertyValue(\"imagesToConnect\", images);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {MapImages[]}\r\n\t */\r\n\tpublic get imagesToConnect(): MapImage[] | string[] {\r\n\t\treturn this.getPropertyValue(\"imagesToConnect\");\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the line, effectively forcing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tlet chart: MapChart = this.series.chart;\r\n\t\t//let multiPoints: IPoint[][] = [];\r\n\t\tlet multiGeoLine: IGeoPoint[][] = this.multiGeoLine || [];\r\n\r\n\t\tif (this.imagesToConnect) {\r\n\t\t\tlet segment: IGeoPoint[] = [];\r\n\t\t\tmultiGeoLine = [segment];\r\n\r\n\t\t\tfor (let image of this.imagesToConnect) {\r\n\t\t\t\tsegment.push({ longitude: (image).longitude, latitude: (image).latitude });\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.shortestDistance) {\r\n\t\t\tlet newMultiGeoLine: IGeoPoint[][] = [];\r\n\r\n\t\t\tfor (let i = 0, len = multiGeoLine.length; i < len; i++) {\r\n\t\t\t\tlet geoLine: IGeoPoint[] = multiGeoLine[i];\r\n\t\t\t\tlet newGeoLine: IGeoPoint[] = [];\r\n\r\n\t\t\t\tfor (let p = 1, plen = geoLine.length; p < plen; p++) {\r\n\t\t\t\t\tlet geoPointA: IGeoPoint = geoLine[p - 1];\r\n\t\t\t\t\tlet geoPointB: IGeoPoint = geoLine[p];\r\n\r\n\t\t\t\t\tlet stepCount: number = Math.max(Math.abs(geoPointA.latitude - geoPointB.latitude), Math.abs(geoPointA.longitude - geoPointB.longitude)) * 4;\r\n\t\t\t\t\t//let latitudeStep: number = (geoPointB.latitude - geoPointA.latitude) / stepCount;\r\n\t\t\t\t\t//let longitudeStep: number = (geoPointB.longitude - geoPointA.longitude) / stepCount;\r\n\r\n\t\t\t\t\tfor (let d = 0; d < stepCount; d++) {\r\n\t\t\t\t\t\tlet intermediatePoint = chart.projection.intermediatePoint(geoPointA, geoPointB, d / stepCount);\r\n\r\n\t\t\t\t\t\tif (newGeoLine.length > 0) {\r\n\t\t\t\t\t\t\tlet previousPoint = newGeoLine[newGeoLine.length - 1];\r\n\t\t\t\t\t\t\tif (Math.abs(previousPoint.longitude - intermediatePoint.longitude) > 359) {\r\n\t\t\t\t\t\t\t\tnewMultiGeoLine.push(newGeoLine);\r\n\t\t\t\t\t\t\t\tnewGeoLine = [];\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\tnewGeoLine.push(intermediatePoint);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// add last point to avoid gap\r\n\t\t\t\t\tnewGeoLine.push(geoPointB);\r\n\t\t\t\t}\r\n\t\t\t\tnewMultiGeoLine.push(newGeoLine);\r\n\t\t\t}\r\n\t\t\tmultiGeoLine = newMultiGeoLine;\r\n\t\t}\r\n\r\n\t\tthis.line.segments = chart.projection.projectGeoLine(multiGeoLine);\r\n\r\n\t\tif (this._arrow) {\r\n\t\t\tthis._arrow.validatePosition();\r\n\t\t}\r\n\r\n\t\t$iter.each(this.lineObjects.iterator(), (x) => {\r\n\t\t\tx.validatePosition();\r\n\t\t});\r\n\t\t\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic measureElement(): void {\r\n\t\t// Overriding, just to avoid extra measure\r\n\t}\r\n\r\n\t/**\r\n\t * The line should take the shortest path over the globe.\r\n\t *\r\n\t * Enabling this will make the line look differently in different\r\n\t * projections. Only `MapLine` supports this setting, `MapArc` and\r\n\t * `MapSplice` don't.\r\n\t *\r\n\t * @default false\r\n\t * @param {boolean} value Real path?\r\n\t */\r\n\tpublic set shortestDistance(value: boolean) {\r\n\t\tthis.setPropertyValue(\"shortestDistance\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Real path?\r\n\t */\r\n\tpublic get shortestDistance(): boolean {\r\n\t\treturn this.getPropertyValue(\"shortestDistance\");\r\n\t}\r\n\r\n\t/**\r\n\t * List of separate line objects, the line consists of.\r\n\t *\r\n\t * @todo Description (review)\r\n\t * @readonly\r\n\t * @return {ListTemplate} List of line objects\r\n\t */\r\n\tpublic get lineObjects(): ListTemplate {\r\n\t\tif (!this._lineObjects) {\r\n\t\t\tthis._lineObjects = new ListTemplate(new MapLineObject());\r\n\t\t\tthis._lineObjects.events.on(\"inserted\", this.handleLineObjectAdded, this, false);\r\n\t\t\tthis._disposers.push(new ListDisposer(this._lineObjects));\r\n\t\t\tthis._disposers.push(this._lineObjects.template);\r\n\t\t}\r\n\r\n\t\treturn this._lineObjects;\r\n\t}\r\n\r\n\t/**\r\n\t * Decorate a [[LineObject]] when it is added to the line.\r\n\t *\r\n\t * @param {IListEvents[\"inserted\"]} event Event\r\n\t */\r\n\tprotected handleLineObjectAdded(event: IListEvents[\"inserted\"]) {\r\n\t\tlet mapLineObject: MapLineObject = event.newValue;\r\n\t\tmapLineObject.mapLine = this;\t\t\r\n\t\tmapLineObject.shouldClone = false;\r\n\t\tmapLineObject.parent = this;\r\n\t}\r\n\r\n\t/**\r\n\t * A [[MapLineObject]] to use as an option arrowhead on the line.\r\n\t *\r\n\t * Just accessing this property will create a default arrowhead on the line\r\n\t * automatically.\r\n\t *\r\n\t * @param {MapLineObject} arrow Arrow element\r\n\t */\r\n\tpublic set arrow(arrow: MapLineObject) {\r\n\t\tthis._arrow = arrow;\r\n\t\tarrow.mapLine = this;\r\n\t\tarrow.parent = this;\r\n\t}\r\n\r\n\t/**\r\n\t * @return {MapLineObject} Arrow element\r\n\t */\r\n\tpublic get arrow(): MapLineObject {\r\n\t\tif (!this._arrow) {\r\n\t\t\tlet arrow: MapLineObject = this.createChild(MapLineObject);\r\n\t\t\tarrow.shouldClone = false;\r\n\t\t\tarrow.width = 8;\r\n\t\t\tarrow.height = 10;\r\n\t\t\tarrow.mapLine = this;\r\n\t\t\tarrow.position = 0.5;\r\n\r\n\t\t\tlet triangle = arrow.createChild(Triangle);\r\n\t\t\t//triangle.shouldClone = false;\r\n\t\t\ttriangle.fillOpacity = 1;\r\n\t\t\ttriangle.width = percent(100);\r\n\t\t\ttriangle.height = percent(100);\r\n\t\t\ttriangle.rotation = 90;\r\n\t\t\ttriangle.horizontalCenter = \"middle\";\r\n\t\t\ttriangle.verticalCenter = \"middle\";\r\n\t\t\tthis._arrow = arrow;\r\n\t\t}\r\n\t\treturn this._arrow;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies line properties and other attributes, like arrow, from another\r\n\t * instance of [[MapLine]].\r\n\t *\r\n\t * @param {MapLineObject} source Source map line\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.line.copyFrom(source.line);\r\n\t\tthis.lineObjects.copyFrom(source.lineObjects);\r\n\t\tif (source._arrow) {\r\n\t\t\tthis.arrow = source.arrow.clone();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Latitude of the line center.\r\n\t *\r\n\t * @readonly\r\n\t * @return {number} Latitude\r\n\t */\r\n\tpublic get latitude(): number {\r\n\t\tlet dataItem = this.dataItem;\r\n\t\treturn dataItem.north + (dataItem.south - dataItem.north) / 2;\r\n\t}\r\n\r\n\t/**\r\n\t * Longitude of the line center.\r\n\t *\r\n\t * @readonly\r\n\t * @return {number} Latitude\r\n\t */\r\n\tpublic get longitude(): number {\r\n\t\tlet dataItem = this.dataItem;\r\n\t\treturn dataItem.east + (dataItem.west - dataItem.east) / 2;\r\n\t}\r\n\r\n\t/**\r\n\t * X coordinate for the slice tooltip.\r\n\t *\r\n\t * @return {number} X\r\n\t */\r\n\tprotected getTooltipX(): number {\r\n\t\treturn this.line.positionToPoint(0.5).x;\r\n\t}\r\n\r\n\t/**\r\n\t * Y coordinate for the slice tooltip.\r\n\t *\r\n\t * @return {number} Y\r\n\t */\r\n\tprotected getTooltipY(): number {\r\n\t\treturn this.line.positionToPoint(0.5).y;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"MapLine\"] = MapLine;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/map/MapLine.ts","/**\r\n * Map spline module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { MapLine, IMapLineProperties, IMapLineAdapters, IMapLineEvents } from \"./MapLine\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Polyspline } from \"../../core/elements/Polyspline\";\r\nimport { MapSplineSeriesDataItem, MapSplineSeries } from \"./MapSplineSeries\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[MapSpline]].\r\n */\r\nexport interface IMapSplineProperties extends IMapLineProperties { }\r\n\r\n/**\r\n * Defines events for [[MapSpline]].\r\n */\r\nexport interface IMapSplineEvents extends IMapLineEvents { }\r\n\r\n/**\r\n * Defines adapters for [[MapSpline]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IMapSplineAdapters extends IMapLineAdapters, IMapSplineProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Used to draw a spline on the map.\r\n *\r\n * @see {@link IMapSplineEvents} for a list of available events\r\n * @see {@link IMapSplineAdapters} for a list of available Adapters\r\n */\r\nexport class MapSpline extends MapLine {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IMapSplineProperties}\r\n\t */\r\n\tpublic _properties!: IMapSplineProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IMapSplineAdapters}\r\n\t */\r\n\tpublic _adapter!: IMapSplineAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IMapSplineEvents}\r\n\t */\r\n\tpublic _events!: IMapSplineEvents;\r\n\r\n\t/**\r\n\t * A visual element for the spline.\r\n\t *\r\n\t * @type {Polyspline}\r\n\t */\r\n\tpublic line: Polyspline;\r\n\r\n\t/**\r\n\t * A related data item.\r\n\t *\r\n\t * @type {MapSplineSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: MapSplineSeriesDataItem;\r\n\r\n\t/**\r\n\t * A map series this object belongs to.\r\n\t *\r\n\t * @type {MapSplineSeries}\r\n\t */\r\n\tpublic series: MapSplineSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"MapSpline\";\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createLine(){\r\n\t\tthis.line = new Polyspline();\r\n\t\tthis.line.tensionX = 0.8;\r\n\t\tthis.line.tensionY = 0.8;\t\t\r\n\t}\t\r\n\r\n\r\n\t/**\r\n\t * ShortestDistance = true is not supported by MapSpline, only MapLine does support it\r\n\t * @default false\r\n\t * @param {boolean} value\r\n\t * @todo: review description\r\n\t */\r\n\tpublic get shortestDistance(): boolean {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tpublic set shortestDistance(value: boolean) {\r\n\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"MapSpline\"] = MapSpline;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/map/MapSpline.ts","/**\r\n * Map arched line module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { MapLine, IMapLineProperties, IMapLineAdapters, IMapLineEvents } from \"./MapLine\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Polyarc } from \"../../core/elements/Polyarc\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { MapArcSeries } from \"./MapArcSeries\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[MapArc]].\r\n */\r\nexport interface IMapArcProperties extends IMapLineProperties { }\r\n\r\n/**\r\n * Defines events for [[MapArc]].\r\n */\r\nexport interface IMapArcEvents extends IMapLineEvents { }\r\n\r\n/**\r\n * Defines adapters for [[MapArc]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IMapArcAdapters extends IMapLineAdapters, IMapArcProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Used to draw an arched line on the map.\r\n *\r\n * @see {@link IMapArcEvents} for a list of available events\r\n * @see {@link IMapArcAdapters} for a list of available Adapters\r\n */\r\nexport class MapArc extends MapLine {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IMapArcProperties}\r\n\t */\r\n\tpublic _properties!: IMapArcProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IMapArcAdapters}\r\n\t */\r\n\tpublic _adapter!: IMapArcAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IMapArcEvents}\r\n\t */\r\n\tpublic _events!: IMapArcEvents;\r\n\r\n\t/**\r\n\t * A visual element.\r\n\t *\r\n\t * @type {Polyarc}\r\n\t */\r\n\tpublic line: Polyarc;\r\n\r\n\t/**\r\n\t * A map series this object belongs to.\r\n\t *\r\n\t * @type {MapArcSeries}\r\n\t */\r\n\tpublic series: MapArcSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"MapArc\";\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\t\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createLine(){\r\n\t\tthis.line = new Polyarc();\r\n\t}\t\r\n\r\n\r\n\t/**\r\n\t * ShortestDistance = true is not supported by MapArc, only MapLine does support it\r\n\t * @default false\r\n\t * @param {boolean} value\r\n\t * @todo: review description\r\n\t */\r\n\tpublic get shortestDistance(): boolean {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tpublic set shortestDistance(value: boolean) {\r\n\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"MapArc\"] = MapArc;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/map/MapArc.ts","/**\r\n * A collection of Map-related utility functions.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { IGeoPoint } from \"../../core/defs/IGeoPoint\";\r\n\r\n/**\r\n * Converts a multi-part polygon in X/Y coordinates to a geo-multipolygon in\r\n * geo-points (lat/long).\r\n * \r\n * @param {number[][][][]} multiPolygon Source multi-polygon\r\n * @return {IGeoPoint[]} Geo-multipolygon\r\n */\r\n\r\nexport function multiPolygonToGeo(multiPolygon: number[][][][]): IGeoPoint[][][] {\r\n\tlet multiGeoArea: IGeoPoint[][][] = [];\r\n\r\n\tfor (let i = 0, len = multiPolygon.length; i < len; i++) {\r\n\r\n\t\tlet surface: number[][] = multiPolygon[i][0];\r\n\t\tlet hole: number[][] = multiPolygon[i][1];\r\n\r\n\t\t//let holePoints: IGeoPoint[] = [];\r\n\r\n\t\tmultiGeoArea[i] = [];\r\n\r\n\t\tif (surface) {\r\n\t\t\tmultiGeoArea[i].push(multiPointToGeo(surface));\r\n\t\t}\r\n\r\n\t\tif (hole) {\r\n\t\t\tmultiGeoArea[i].push(multiPointToGeo(hole));\r\n\t\t}\r\n\t}\r\n\treturn multiGeoArea;\r\n}\r\n\r\n/**\r\n * Converts a multiline in X/Y coordinates to a geo-multiline in geo-points\r\n * (lat/long).\r\n * \r\n * @param {number[][][]} multiLine Source multiline\r\n * @return {IGeoPoint[]} Geo-multiline\r\n */\r\nexport function multiLineToGeo(multiLine: number[][][]): IGeoPoint[][] {\r\n\tlet multiGeoLine: IGeoPoint[][] = [];\r\n\r\n\tfor (let i = 0, len = multiLine.length; i < len; i++) {\r\n\t\tmultiGeoLine.push(multiPointToGeo(multiLine[i]));\r\n\t}\r\n\treturn multiGeoLine;\r\n}\r\n\r\n/**\r\n * Converts multiple X/Y points into a lat/long geo-points.\r\n * \r\n * @param {number[][]} points Source points\r\n * @return {IGeoPoint[]} Geo-points\r\n */\r\nexport function multiPointToGeo(points: number[][]): IGeoPoint[] {\r\n\tlet geoPoints: IGeoPoint[] = [];\r\n\tfor (let i = 0, len = points.length; i < len; i++) {\r\n\t\tgeoPoints.push(pointToGeo(points[i]));\r\n\t}\r\n\treturn geoPoints;\r\n}\r\n\r\n/**\r\n * Converts X/Y point into a lat/long geo-point.\r\n * \r\n * @param {number[]} point Source point\r\n * @return {IGeoPoint} Geo-point\r\n */\r\nexport function pointToGeo(point: number[]): IGeoPoint {\r\n\treturn { longitude: point[0], latitude: point[1] }\r\n}\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/map/MapUtils.ts","/**\r\n * Map polygon series module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { MapSeries, MapSeriesDataItem, GEOJSONGeometry, IMapSeriesProperties, IMapSeriesDataFields, IMapSeriesAdapters, IMapSeriesEvents } from \"./MapSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { MapChart } from \"../types/MapChart\";\r\nimport { MapPolygon } from \"./MapPolygon\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { IMapPolygonDataObject } from \"../types/MapChart\";\r\nimport { IGeoPoint } from \"../../core/defs/IGeoPoint\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $mapUtils from \"./MapUtils\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[MapPolygonSeries]]\r\n * @see {@link DataItem}\r\n */\r\nexport class MapPolygonSeriesDataItem extends MapSeriesDataItem {\r\n\r\n\t/**\r\n\t * A [[MapPolygon]] element related to this data item.\r\n\t *\r\n\t * @type {MapPolygon}\r\n\t */\r\n\tprotected _mapPolygon: MapPolygon;\r\n\r\n\t/**\r\n\t * A collection of X/Y coordinates for a single polygon.\r\n\t *\r\n\t * @type {number[][][]}\r\n\t */\r\n\tprotected _polygon: number[][][];\r\n\r\n\t/**\r\n\t * A collection of X/Y coordinates for a multi-part polygon.\r\n\t *\r\n\t * @type {number[][][][]}\r\n\t */\r\n\tprotected _multiPolygon: number[][][][];\r\n\r\n\t/**\r\n\t * A collection of lat/long coordinates for a single polygon.\r\n\t *\r\n\t * @type {IGeoPoint[][]}\r\n\t */\r\n\tprotected _geoPolygon: IGeoPoint[][];\r\n\r\n\t/**\r\n\t * A collection of lat/long coordinates for a multi-part polygon.\r\n\t *\r\n\t * @type {IGeoPoint[][][]}\r\n\t */\r\n\tprotected _multiGeoPolygon: IGeoPoint[][][];\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for\r\n\t * @type {MapPolygonSeries}\r\n\t */\r\n\tpublic _component!: MapPolygonSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"MapPolygonSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * A [[MapPolygon]] element related to this data item.\r\n\t *\r\n\t * @readonly\r\n\t * @return {MapPolygon} Element\r\n\t */\r\n\tpublic get mapPolygon(): MapPolygon {\r\n\t\tif (!this._mapPolygon) {\r\n\t\t\tlet mapPolygon = this.component.mapPolygons.create();\r\n\t\t\tthis._mapPolygon = mapPolygon;\r\n\t\t\tthis.addSprite(mapPolygon);\r\n\r\n\t\t\tthis._disposers.push(mapPolygon);\r\n\t\t\tthis._disposers.push(new Disposer(() => {\r\n\t\t\t\tif (this.component) {\r\n\t\t\t\t\tthis.component.mapPolygons.removeValue(mapPolygon);\r\n\t\t\t\t}\r\n\t\t\t}));\r\n\t\t}\r\n\t\treturn this._mapPolygon;\r\n\t}\r\n\r\n\t/**\r\n\t * A collection of X/Y coordinates for a single polygon. E.g.:\r\n\t *\r\n\t * ```JSON\r\n\t * [\r\n\t * [\r\n\t * [ 100, 150 ],\r\n\t * [ 120, 200 ],\r\n\t * [ 150, 200 ],\r\n\t * [ 170, 240 ],\r\n\t * [ 100, 150 ]\r\n\t * ]\r\n\t * ]\r\n\t * ```\r\n\t *\r\n\t * @param {number[][][]} polygon Coordinates\r\n\t */\r\n\tpublic set polygon(polygon: number[][][]) {\r\n\t\tthis._polygon = polygon;\r\n\t\tthis.multiGeoPolygon = $mapUtils.multiPolygonToGeo([polygon]);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number[]} Coordinates\r\n\t */\r\n\tpublic get polygon(): number[][][] {\r\n\t\treturn this._polygon;\r\n\t}\r\n\r\n\t/**\r\n\t * A collection of X/Y coordinates for a multi-part polygon. E.g.:\r\n\t *\r\n\t * ```JSON\r\n\t * [\r\n\t * // Part 1\r\n\t * [\r\n\t * [\r\n\t * [ 100, 150 ],\r\n\t * [ 120, 200 ],\r\n\t * [ 150, 220 ],\r\n\t * [ 170, 240 ],\r\n\t * [ 100, 150 ]\r\n\t * ]\r\n\t * ],\r\n\t *\r\n\t * // Part 2\r\n\t * [\r\n\t * [\r\n\t * [ 300, 350 ],\r\n\t * [ 320, 400 ],\r\n\t * [ 350, 420 ],\r\n\t * [ 370, 440 ],\r\n\t * [ 300, 350 ]\r\n\t * ]\r\n\t * ]\r\n\t * ]\r\n\t * ```\r\n\t *\r\n\t * @param {number[][][]} multiPolygon Coordinates\r\n\t */\r\n\tpublic set multiPolygon(multiPolygon: number[][][][]) {\r\n\t\tthis._multiPolygon = multiPolygon;\r\n\t\tthis.multiGeoPolygon = $mapUtils.multiPolygonToGeo(multiPolygon);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number[]} Coordinates\r\n\t */\r\n\tpublic get multiPolygon(): number[][][][] {\r\n\t\treturn this._multiPolygon;\r\n\t}\r\n\r\n\t/**\r\n\t * A collection of lat/long coordinates for a single polygon. E.g.:\r\n\t *\r\n\t * ```JSON\r\n\t * [\r\n\t * [\r\n\t * { latitude: -10.0, longitude: -10.0 },\r\n\t * { latitude: 10.0, longitude: -10.0 },\r\n\t * { latitude: 10.0, longitude: 10.0 },\r\n\t * { latitude: -10.0, longitude: -10.0 }\r\n\t * ]\r\n\t * ]\r\n\t * ```\r\n\t *\r\n\t * @see {@link https://tools.ietf.org/html/rfc7946#section-3.1.6} GeoJSON Polygon reference\r\n\t * @param {IGeoPoint[][]} geoPolygon Coordinates\r\n\t */\r\n\tpublic set geoPolygon(geoPolygon: IGeoPoint[][]) {\r\n\t\tthis._geoPolygon = geoPolygon;\r\n\t\tthis.multiGeoPolygon = [geoPolygon];\r\n\t}\r\n\r\n\t/**\r\n\t * @return {IGeoPoint[]} Coordinates\r\n\t */\r\n\tpublic get geoPolygon(): IGeoPoint[][] {\r\n\t\treturn this._geoPolygon;\r\n\t}\r\n\r\n\t/**\r\n\t * A collection of lat/long coordinates for a multi-part polygon. E.g.:\r\n\t *\r\n\t * ```JSON\r\n\t * [\r\n\t * [\r\n\t * [\r\n\t * { longitude: 180.0, latitude: 40.0 },\r\n\t * { longitude: 180.0, latitude: 50.0 },\r\n\t * { longitude: 170.0, latitude: 50.0 },\r\n\t * { longitude: 170.0, latitude: 40.0 },\r\n\t * { longitude: 180.0, latitude: 40.0 }\r\n\t * ]\r\n\t * ],\r\n\t * [\r\n\t * [\r\n\t * { longitude: -170.0, latitude: 40.0 },\r\n\t * { longitude: -170.0, latitude: 50.0 },\r\n\t * { longitude: -180.0, latitude: 50.0 },\r\n\t * { longitude: -180.0, latitude: 40.0 },\r\n\t * { longitude: -170.0, latitude: 40.0 }\r\n\t * ]\r\n\t * ]\r\n\t * ]\r\n\t * ```\r\n\t *\r\n\t * @see {@link https://tools.ietf.org/html/rfc7946#section-3.1.7} GeoJSON MultiPolygon reference\r\n\t * @param {IGeoPoint[][][]} multiGeoPolygon Coordinates\r\n\t */\r\n\tpublic set multiGeoPolygon(multiGeoPolygon: IGeoPoint[][][]) {\r\n\t\tthis._multiGeoPolygon = multiGeoPolygon;\r\n\t\tthis.updateAreaExtremes(multiGeoPolygon);\r\n\t\tthis.mapPolygon.multiGeoPolygon = this._multiGeoPolygon;\r\n\t}\r\n\r\n\t/**\r\n\t * @return {IGeoPoint[]} Coordinates\r\n\t */\r\n\tpublic get multiGeoPolygon(): IGeoPoint[][][] {\r\n\t\treturn this._multiGeoPolygon;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the item's bounding coordinates: coordinates of the East, West,\r\n\t * North, and South-most points.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {IGeoPoint[]} geoPoints Points of the element\r\n\t */\r\n\tpublic updateAreaExtremes(multiGeoPolygon: IGeoPoint[][][]): void {\r\n\t\tfor (let i = 0, len = multiGeoPolygon.length; i < len; i++) {\r\n\t\t\tlet geoPolygon: IGeoPoint[][] = multiGeoPolygon[i];\r\n\t\t\tlet surface: IGeoPoint[] = geoPolygon[0];\r\n\t\t\tthis.updateExtremes(surface);\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[MapPolygonSeries]].\r\n */\r\nexport interface IMapPolygonSeriesDataFields extends IMapSeriesDataFields {\r\n\r\n\t/**\r\n\t * Field name that holds polygon pixels.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tpolygon?: string;\r\n\r\n\t/**\r\n\t * Field name that holds multi-polygon pixels.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tmultiPolygon?: string;\r\n\r\n\t/**\r\n\t * Field name that holds polygon data in Geo coordinates.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tgeoPolygon?: string;\r\n\r\n\t/**\r\n\t * Field name that holds poly-polygon data in Geo coordinates.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tmultiGeoPolygon?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[MapPolygonSeries]].\r\n */\r\nexport interface IMapPolygonSeriesProperties extends IMapSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[MapPolygonSeries]].\r\n */\r\nexport interface IMapPolygonSeriesEvents extends IMapSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[MapPolygonSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IMapPolygonSeriesAdapters extends IMapSeriesAdapters, IMapPolygonSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A series of map polygon elements.\r\n *\r\n * @see {@link IMapPolygonSeriesEvents} for a list of available Events\r\n * @see {@link IMapPolygonSeriesAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class MapPolygonSeries extends MapSeries {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {IMapPolygonSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IMapPolygonSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IMapPolygonSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IMapPolygonSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IMapPolygonSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IMapPolygonSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IMapPolygonSeriesEvents}\r\n\t */\r\n\tpublic _events!: IMapPolygonSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {MapPolygonSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: MapPolygonSeriesDataItem;\r\n\r\n\t/**\r\n\t * A related chart/map object, this element is drawn on.\r\n\t *\r\n\t * @type {MapChart}\r\n\t */\r\n\tpublic chart: MapChart;\r\n\r\n\t/**\r\n\t * A list of map polygons in the series.\r\n\t *\r\n\t * @type {ListTemplate}\r\n\t */\r\n\tprotected _mapPolygons: ListTemplate;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\r\n\t\tthis.parsingStepDuration = 250; // to avoid some extra redrawing\r\n\r\n\t\tthis.className = \"MapPolygonSeries\";\r\n\r\n\t\t// Set data fields\r\n\t\tthis.dataFields.multiPolygon = \"multiPolygon\";\r\n\t\tthis.dataFields.polygon = \"polygon\";\r\n\r\n\t\tthis.dataFields.geoPolygon = \"geoPolygon\";\r\n\t\tthis.dataFields.multiGeoPolygon = \"multiGeoPolygon\";\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {MapPolygonSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new MapPolygonSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected processIncExc(){\r\n\t\tthis.mapPolygons.clear();\r\n\t\tsuper.processIncExc();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates series data, effectively causing the whole series to be\r\n\t * redrawn.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\t\tif (this.data.length > 0 && this._parseDataFrom == 0) {\r\n\t\t\tthis.mapPolygons.clear();\r\n\t\t}\r\n\r\n\t\tthis.west = null;\r\n\t\tthis.east = null;\r\n\t\tthis.north = null;\r\n\t\tthis.south = null;\r\n\r\n\t\t// process geoJSON and created map objects\r\n\t\tif (this.useGeodata || this.geodata) {\r\n\t\t\tlet geoJSON: any = !this._dataSources[\"geodata\"] ? this.chart.geodata : undefined;\r\n\r\n\t\t\tif(this.geodata){\r\n\t\t\t\tgeoJSON = this.geodata;\r\n\t\t\t}\r\n\r\n\t\t\tif (geoJSON) {\r\n\r\n\t\t\t\tlet features: any[];\r\n\r\n\t\t\t\tif (geoJSON.type == \"FeatureCollection\") {\r\n\t\t\t\t\tfeatures = geoJSON.features;\r\n\t\t\t\t}\r\n\t\t\t\telse if (geoJSON.type == \"Feature\") {\r\n\t\t\t\t\tfeatures = [geoJSON];\r\n\t\t\t\t}\r\n\t\t\t\telse if ([\"Point\", \"LineString\", \"Polygon\", \"MultiPoint\", \"MultiLineString\", \"MultiPolygon\"].indexOf(geoJSON.type) != -1) {\r\n\t\t\t\t\tfeatures = [{ geometry: geoJSON }];\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tconsole.log(\"nothing found in geoJSON\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (features) {\r\n\t\t\t\t\tfor (let i = 0, len = features.length; i < len; i++) {\r\n\r\n\t\t\t\t\t\tlet feature: any = features[i];\r\n\t\t\t\t\t\tlet geometry: any = feature.geometry;\r\n\t\t\t\t\t\tif (geometry) {\r\n\t\t\t\t\t\t\tlet type: GEOJSONGeometry = geometry.type;\r\n\t\t\t\t\t\t\tlet id: string = feature.id;\r\n\r\n\t\t\t\t\t\t\tif (type == \"Polygon\" || type == \"MultiPolygon\") {\r\n\r\n\t\t\t\t\t\t\t\tif (!this.checkInclude(this.include, this.exclude, id)) {\r\n\t\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tlet coordinates: any[] = geometry.coordinates;\r\n\r\n\t\t\t\t\t\t\t\tif (coordinates) {\r\n\t\t\t\t\t\t\t\t\t// make the same as MultiPolygon\r\n\t\t\t\t\t\t\t\t\tif (type == \"Polygon\") {\r\n\t\t\t\t\t\t\t\t\t\tcoordinates = [coordinates];\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t// find data object in user-provided data\r\n\t\t\t\t\t\t\t\tlet dataObject: IMapPolygonDataObject = $array.find(this.data, (value, i) => {\r\n\t\t\t\t\t\t\t\t\treturn value.id == id;\r\n\t\t\t\t\t\t\t\t});\r\n\r\n\r\n\t\t\t\t\t\t\t\t// create one if not found\r\n\t\t\t\t\t\t\t\tif (!dataObject) {\r\n\t\t\t\t\t\t\t\t\tdataObject = { multiPolygon: coordinates, id: id };\r\n\t\t\t\t\t\t\t\t\tthis.data.push(dataObject);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t// in case found\r\n\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t// if user-provided object doesn't have points data provided in any way:\r\n\t\t\t\t\t\t\t\t\tif (!dataObject.multiPolygon) {\r\n\t\t\t\t\t\t\t\t\t\tdataObject.multiPolygon = coordinates;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t// copy properties data to datacontext\r\n\t\t\t\t\t\t\t\t$utils.softCopyProperties(feature.properties, dataObject);\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\r\n\t\tsuper.validateData();\r\n\r\n\t\t// if data is parsed in chunks, polygon list is corrupted, fix it here\r\n\t\t// !important this should go after super!\r\n\t\t$iter.each(this.dataItems.iterator(), (dataItem) => {\r\n\t\t\tthis.mapPolygons.moveValue(dataItem.mapPolygon);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the series\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\tsuper.validate();\r\n\t\t$iter.each(this.mapPolygons.iterator(), (mapPolygon) => {\t\t\t\r\n\t\t\tmapPolygon.validate();\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * List of polygon elements in the series.\r\n\t *\r\n\t * @return {ListTemplate} Polygon list\r\n\t */\r\n\tpublic get mapPolygons(): ListTemplate {\r\n\r\n\t\tif (!this._mapPolygons) {\r\n\t\t\tlet polygonTemplate: MapPolygon = new MapPolygon();\r\n\r\n\t\t\tlet mapPolygons: ListTemplate = new ListTemplate(polygonTemplate);\r\n\t\t\tthis._disposers.push(new ListDisposer(mapPolygons));\r\n\t\t\tthis._disposers.push(mapPolygons.template);\r\n\t\t\tmapPolygons.template.focusable = true;\r\n\t\t\tmapPolygons.events.on(\"inserted\", this.handleObjectAdded, this, false);\r\n\t\t\tthis._mapPolygons = mapPolygons;\r\n\t\t}\r\n\r\n\t\treturn this._mapPolygons;\r\n\t}\r\n\r\n\t/**\r\n\t * returns MapPolygon by id in geoJSON file\r\n\t * @param {string} polygon id\r\n\t * @return {MapPolygon}\r\n\t */\r\n\tpublic getPolygonById(id: string): MapPolygon {\r\n\t\treturn $iter.find(this.mapPolygons.iterator(), (mapPolygon) => {\r\n\t\t\tlet dataContext: any = mapPolygon.dataItem.dataContext;\r\n\t\t\treturn dataContext.id == id;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all properties from another instance of [[Series]].\r\n\t *\r\n\t * @param {Series} source Source series\r\n\t */\r\n\tpublic copyFrom(source: this) {\r\n\t\tthis.mapPolygons.template.copyFrom(source.mapPolygons.template);\r\n\t\tsuper.copyFrom(source);\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"MapPolygonSeries\"] = MapPolygonSeries;\r\nregistry.registeredClasses[\"MapPolygonSeriesDataItem\"] = MapPolygonSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/map/MapPolygonSeries.ts","/**\r\n * Map line series module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { MapSeries, MapSeriesDataItem, GEOJSONGeometry, IMapSeriesProperties, IMapSeriesDataFields, IMapSeriesAdapters, IMapSeriesEvents } from \"./MapSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { MapChart } from \"../types/MapChart\";\r\nimport { MapLine } from \"./MapLine\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { IMapLineDataObject } from \"../types/MapChart\";\r\nimport { IGeoPoint } from \"../../core/defs/IGeoPoint\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $mapUtils from \"./MapUtils\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[MapLineSeries]]\r\n * @see {@link DataItem}\r\n */\r\nexport class MapLineSeriesDataItem extends MapSeriesDataItem {\r\n\r\n\t/**\r\n\t * A [[MapLine]] element related to this data item.\r\n\t *\r\n\t * @type {MapLine}\r\n\t */\r\n\tpublic _mapLine: MapLine;\r\n\r\n\t/**\r\n\t * A collection of X/Y coordinates for a single-segment line.\r\n\t *\r\n\t * @type {number[][]}\r\n\t */\r\n\tprotected _line: number[][];\r\n\r\n\t/**\r\n\t * A collection of X/Y coordinates for a multi-segment line.\r\n\t *\r\n\t * @type {number[][][]}\r\n\t */\r\n\tprotected _multiLine: number[][][];\r\n\r\n\t/**\r\n\t * A collection of lat/long coordinates for a single-segment line.\r\n\t *\r\n\t * @type {IGeoPoint[]}\r\n\t */\r\n\tprotected _geoLine: IGeoPoint[];\r\n\r\n\t/**\r\n\t * A collection of lat/long coordinates for a multi-segment line.\r\n\t *\r\n\t * @type {IGeoPoint[][]}\r\n\t */\r\n\tprotected _multiGeoLine: IGeoPoint[][];\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for\r\n\t * @type {MapLineSeries}\r\n\t */\r\n\tpublic _component!: MapLineSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"MapLineSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * A [[MapLine]] element related to this data item.\r\n\t *\r\n\t * @readonly\r\n\t * @return {MapLine} Element\r\n\t */\r\n\tpublic get mapLine(): this[\"_mapLine\"] {\r\n\t\tif (!this._mapLine) {\r\n\t\t\tlet mapLine = this.component.mapLines.create();\r\n\r\n\t\t\tthis._mapLine = mapLine;\r\n\t\t\tthis.addSprite(mapLine);\r\n\r\n\t\t\tthis._disposers.push(mapLine);\r\n\t\t\tthis._disposers.push(new Disposer(() => {\r\n\t\t\t\tif (this.component) {\r\n\t\t\t\t\tthis.component.mapLines.removeValue(mapLine);\r\n\t\t\t\t}\r\n\t\t\t}));\r\n\t\t}\r\n\t\treturn this._mapLine;\r\n\t}\r\n\r\n\t/**\r\n\t * A collection of X/Y coordinates for a single-segment line. E.g.:\r\n\t *\r\n\t * ```JSON\r\n\t * [\r\n\t * [ 100, 150 ],\r\n\t * [ 120, 200 ]\r\n\t * ]\r\n\t * ```\r\n\t *\r\n\t * @param {number[][]} line Coordinates\r\n\t */\r\n\tpublic set line(line: number[][]) {\r\n\t\tthis._line = line;\r\n\t\tthis.multiGeoLine = $mapUtils.multiLineToGeo([line]);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number[]} Coordinates\r\n\t */\r\n\tpublic get line(): number[][] {\r\n\t\treturn this._line;\r\n\t}\r\n\r\n\t/**\r\n\t * A collection of X/Y coordinates for a multi-segment line. E.g.:\r\n\t *\r\n\t * ```JSON\r\n\t * [\r\n\t * // Segment 1\r\n\t * [\r\n\t * [ 100, 150 ],\r\n\t * [ 120, 200 ]\r\n\t * ],\r\n\t *\r\n\t * // Segment 2\r\n\t * [\r\n\t * [ 120, 200 ],\r\n\t * [ 150, 100 ]\r\n\t * ]\r\n\t * ]\r\n\t * ```\r\n\t *\r\n\t * @param {number[][]} multiLine Coordinates\r\n\t */\r\n\tpublic set multiLine(multiLine: number[][][]) {\r\n\t\tthis._multiLine = multiLine;\r\n\t\tthis.multiGeoLine = $mapUtils.multiLineToGeo(multiLine);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number[]} Coordinates\r\n\t */\r\n\tpublic get multiLine(): number[][][] {\r\n\t\treturn this._multiLine;\r\n\t}\r\n\r\n\t/**\r\n\t * A collection of lat/long coordinates for a single-segment line. E.g.:\r\n\t *\r\n\t * ```JSON\r\n\t * [\r\n\t * { longitude: 3.121, latitude: 0.58 },\r\n\t * { longitude: -5.199, latitude: 21.223 }\r\n\t * ]\r\n\t * ```\r\n\t *\r\n\t * @see {@link https://tools.ietf.org/html/rfc7946#section-3.1.4} GeoJSON LineString reference\r\n\t * @param {IGeoPoint[][]} geoLine Coordinates\r\n\t */\r\n\tpublic set geoLine(geoLine: IGeoPoint[]) {\r\n\t\tthis._geoLine = geoLine;\r\n\t\tthis.multiGeoLine = [geoLine];\r\n\t}\r\n\r\n\t/**\r\n\t * @return {IGeoPoint[]} Coordinates\r\n\t */\r\n\tpublic get geoLine(): IGeoPoint[] {\r\n\t\treturn this._geoLine;\r\n\t}\r\n\r\n\t/**\r\n\t * A collection of X/Y coordinates for a multi-segment line. E.g.:\r\n\t *\r\n\t * ```JSON\r\n\t * [\r\n\t * // Segment 1\r\n\t * [\r\n\t * { longitude: 3.121, latitude: 0.58 },\r\n\t * { longitude: -5.199, latitude: 21.223 }\r\n\t * ],\r\n\t *\r\n\t * // Segment 2\r\n\t * [\r\n\t * { longitude: -5.199, latitude: 21.223 },\r\n\t * { longitude: -12.9, latitude: 25.85 }\r\n\t * ]\r\n\t * ]\r\n\t * ```\r\n\t *\r\n\t * @see {@link https://tools.ietf.org/html/rfc7946#section-3.1.5} GeoJSON MultiLineString reference\r\n\t * @param {IGeoPoint[][]} multiGeoLine Coordinates\r\n\t */\r\n\tpublic set multiGeoLine(multiGeoLine: IGeoPoint[][]) {\r\n\t\tthis._multiGeoLine = multiGeoLine;\r\n\t\tthis.updateLineExtremes(multiGeoLine);\r\n\t\tthis.mapLine.multiGeoLine = this._multiGeoLine;\r\n\t}\r\n\r\n\t/**\r\n\t * @return {IGeoPoint[]} Coordinates\r\n\t */\r\n\tpublic get multiGeoLine(): IGeoPoint[][] {\r\n\t\treturn this._multiGeoLine;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the item's bounding coordinates: coordinates of the East, West,\r\n\t * North, and South-most points.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {IGeoPoint[]} geoPoints Points of the element\r\n\t */\r\n\tpublic updateLineExtremes(multiGeoLine: IGeoPoint[][]): void {\r\n\t\tfor (let i = 0, len = multiGeoLine.length; i < len; i++) {\r\n\t\t\tlet geoLine: IGeoPoint[] = multiGeoLine[i];\r\n\t\t\tthis.updateExtremes(geoLine);\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[MapLineSeries]].\r\n */\r\nexport interface IMapLineSeriesDataFields extends IMapSeriesDataFields {\r\n\r\n\t/**\r\n\t * Field name that holds line data in pixels.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tline?: string;\r\n\r\n\t/**\r\n\t * Field name that holds multi-line data in pixels.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tmultiLine?: string;\r\n\r\n\t/**\r\n\t * Field name that holds line data in Geo coordinates.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tgeoLine?: string;\r\n\r\n\t/**\r\n\t * Field name that holds multi-line data in Geo coordinates.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tmultiGeoLine?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[MapLineSeries]].\r\n */\r\nexport interface IMapLineSeriesProperties extends IMapSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[MapLineSeries]].\r\n */\r\nexport interface IMapLineSeriesEvents extends IMapSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[MapLineSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IMapLineSeriesAdapters extends IMapSeriesAdapters, IMapLineSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A series of map line series.\r\n *\r\n * @see {@link IMapLineSeriesEvents} for a list of available Events\r\n * @see {@link IMapLineSeriesAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class MapLineSeries extends MapSeries {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {IMapLineSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IMapLineSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IMapLineSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IMapLineSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IMapLineSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IMapLineSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IMapLineSeriesEvents}\r\n\t */\r\n\tpublic _events!: IMapLineSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {MapLineSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: MapLineSeriesDataItem;\r\n\r\n\r\n\t/**\r\n\t * A related chart/map object, this element is drawn on.\r\n\t *\r\n\t * @type {MapChart}\r\n\t */\r\n\tpublic chart: MapChart;\r\n\r\n\t/**\r\n\t * Defines the type of the line items in this series.\r\n\t *\r\n\t * @type {MapLine}\r\n\t */\r\n\tpublic _mapLine: MapLine;\r\n\r\n\t/**\r\n\t * A list of map lins in the series.\r\n\t *\r\n\t * @type {ListTemplate}\r\n\t */\r\n\tprotected _mapLines: ListTemplate;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"MapLineSeries\";\r\n\r\n\t\t// Set data fields\r\n\t\tthis.dataFields.multiLine = \"multiLine\";\r\n\t\tthis.dataFields.line = \"line\";\r\n\r\n\t\tthis.dataFields.geoLine = \"geoLine\";\r\n\t\tthis.dataFields.multiGeoLine = \"multiGeoLine\";\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {MapLineSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new MapLineSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates series data, effectively causing the whole series to be\r\n\t * redrawn.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\t\tif (this.data.length > 0 && this._parseDataFrom == 0) {\r\n\t\t\tthis.mapLines.clear();\r\n\t\t}\r\n\r\n\t\t// process geoJSON and created map objects\r\n\t\tif (this.useGeodata || this.geodata) {\r\n\t\t\tlet geoJSON: any = this.chart.geodata;\r\n\t\t\tif (geoJSON) {\r\n\r\n\t\t\t\tlet features: any[];\r\n\r\n\t\t\t\tif (geoJSON.type == \"FeatureCollection\") {\r\n\t\t\t\t\tfeatures = geoJSON.features;\r\n\t\t\t\t}\r\n\t\t\t\telse if (geoJSON.type == \"Feature\") {\r\n\t\t\t\t\tfeatures = [geoJSON];\r\n\t\t\t\t}\r\n\t\t\t\telse if ([\"Point\", \"LineString\", \"Polygon\", \"MultiPoint\", \"MultiLineString\", \"MultiPolygon\"].indexOf(geoJSON.type) != -1) {\r\n\t\t\t\t\tfeatures = [{ geometry: geoJSON }];\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tconsole.log(\"nothing found in geoJSON\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (features) {\r\n\t\t\t\t\tfor (let i = 0, len = features.length; i < len; i++) {\r\n\r\n\t\t\t\t\t\tlet feature: any = features[i];\r\n\t\t\t\t\t\tlet geometry: any = feature.geometry;\r\n\t\t\t\t\t\tif (geometry) {\r\n\t\t\t\t\t\t\tlet type: GEOJSONGeometry = geometry.type;\r\n\t\t\t\t\t\t\tlet id: string = feature.id;\r\n\t\t\t\t\t\t\tif (type == \"LineString\" || type == \"MultiLineString\") {\r\n\r\n\t\t\t\t\t\t\t\tif (!this.checkInclude(this.include, this.exclude, id)) {\r\n\t\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tlet coordinates: any[] = geometry.coordinates;\r\n\t\t\t\t\t\t\t\tlet dataObject: IMapLineDataObject = $array.find(this.data, (value, i) => {\r\n\t\t\t\t\t\t\t\t\treturn value.id == id;\r\n\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\tif (type == \"LineString\") {\r\n\t\t\t\t\t\t\t\t\tcoordinates = [coordinates];\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tif (!dataObject) {\r\n\t\t\t\t\t\t\t\t\tdataObject = { multiLine: coordinates, id: id };\r\n\t\t\t\t\t\t\t\t\tthis.data.push(dataObject);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\tif (!dataObject.multiLine) {\r\n\t\t\t\t\t\t\t\t\t\tdataObject.multiLine = coordinates;\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\t// copy properties data to datacontext\r\n\t\t\t\t\t\t\t\t$utils.softCopyProperties(feature.properties, dataObject);\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\r\n\t\tsuper.validateData();\r\n\t\t// important! this should go after super\r\n\t\t// if data is parsed in chunks, lines list is corrupted, fix it here\r\n\t\t$iter.each(this.dataItems.iterator(), (dataItem) => {\r\n\t\t\tthis.mapLines.moveValue(dataItem.mapLine);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * A list of lines in the series.\r\n\t *\r\n\t * @return {ListTemplate} Lines\r\n\t */\r\n\tpublic get mapLines(): ListTemplate {\r\n\r\n\t\tif (!this._mapLines) {\r\n\t\t\tlet lineTemplate: MapLine = this.createLine();\r\n\t\t\tlet mapLines = new ListTemplate(lineTemplate);\r\n\t\t\tthis._disposers.push(new ListDisposer(mapLines));\r\n\t\t\tthis._disposers.push(mapLines.template);\r\n\t\t\tmapLines.events.on(\"inserted\", this.handleObjectAdded, this, false);\r\n\t\t\tthis._mapLines = mapLines;\r\n\t\t}\r\n\r\n\t\treturn this._mapLines;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new line instance of suitable type.\r\n\t *\r\n\t * @return {MapLine} New line\r\n\t */\r\n\tprotected createLine(): this[\"_mapLine\"] {\r\n\t\treturn new MapLine();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the series\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\tsuper.validate();\r\n\t\t$iter.each(this.mapLines.iterator(), (mapLine) => {\r\n\t\t\tmapLine.validate();\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all properties from another instance of [[Series]].\r\n\t *\r\n\t * @param {Series} source Source series\r\n\t */\r\n\tpublic copyFrom(source: this) {\r\n\t\tthis.mapLines.template.copyFrom(source.mapLines.template);\r\n\t\tsuper.copyFrom(source);\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"MapLineSeries\"] = MapLineSeries;\r\nregistry.registeredClasses[\"MapLineSeriesDataItem\"] = MapLineSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/map/MapLineSeries.ts","/**\r\n * Map spline series module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { MapLineSeries, MapLineSeriesDataItem, IMapLineSeriesProperties, IMapLineSeriesDataFields, IMapLineSeriesAdapters, IMapLineSeriesEvents } from \"./MapLineSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { MapChart, MapLineType } from \"../types/MapChart\";\r\nimport { MapSpline } from \"./MapSpline\";\r\nimport { ListTemplate, IListEvents } from \"../../core/utils/List\";\r\nimport { IMapDataObject, IMapPolygonDataObject, IMapLineDataObject } from \"../types/MapChart\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[MapSplineSeries]]\r\n * @see {@link DataItem}\r\n */\r\nexport class MapSplineSeriesDataItem extends MapLineSeriesDataItem {\r\n\r\n\t/**\r\n\t * A [[MapSpline]] element related to this data item.\r\n\t *\r\n\t * @type {MapSpline}\r\n\t */\r\n\tpublic _mapLine: MapSpline;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for\r\n\t * @type {Component}\r\n\t */\r\n\tpublic _component!: MapSplineSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"MapSplineSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[MapSplineSeries]].\r\n */\r\nexport interface IMapSplineSeriesDataFields extends IMapLineSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[MapSplineSeries]].\r\n */\r\nexport interface IMapSplineSeriesProperties extends IMapLineSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[MapSplineSeries]].\r\n */\r\nexport interface IMapSplineSeriesEvents extends IMapLineSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[MapSplineSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IMapSplineSeriesAdapters extends IMapLineSeriesAdapters, IMapSplineSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A series of map spline elements.\r\n *\r\n * @see {@link IMapSplineSeriesEvents} for a list of available Events\r\n * @see {@link IMapSplineSeriesAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class MapSplineSeries extends MapLineSeries {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {IMapSplineSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IMapSplineSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IMapSplineSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IMapSplineSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IMapSplineSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IMapSplineSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IMapSplineSeriesEvents}\r\n\t */\r\n\tpublic _events!: IMapSplineSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {MapSplineSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: MapSplineSeriesDataItem;\r\n\r\n\t/**\r\n\t * Defines the type of the line items in this series.\r\n\t *\r\n\t * @type {MapSpline}\r\n\t */\r\n\tpublic _mapLine: MapSpline;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"MapSplineSeries\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {MapSplineSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new MapSplineSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new line instance of suitable type.\r\n\t *\r\n\t * @return {MapSpline} New line\r\n\t */\r\n\tprotected createLine(): this[\"_mapLine\"] {\r\n\t\treturn new MapSpline();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"MapSplineSeries\"] = MapSplineSeries;\r\nregistry.registeredClasses[\"MapSplineSeriesDataItem\"] = MapSplineSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/map/MapSplineSeries.ts","/**\r\n * Map image series module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { MapSeries, MapSeriesDataItem, GEOJSONGeometry, IMapSeriesProperties, IMapSeriesDataFields, IMapSeriesAdapters, IMapSeriesEvents } from \"./MapSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { MapChart } from \"../types/MapChart\";\r\nimport { MapImage } from \"./MapImage\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { IMapImageDataObject } from \"../types/MapChart\";\r\nimport { IGeoPoint } from \"../../core/defs/IGeoPoint\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport * as $mapUtils from \"./MapUtils\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[MapImageSeries]]\r\n * @see {@link DataItem}\r\n */\r\nexport class MapImageSeriesDataItem extends MapSeriesDataItem {\r\n\r\n\t/**\r\n\t * A [[MapImage]] element related to this data item.\r\n\t *\r\n\t * @type {MapImage}\r\n\t */\r\n\tprotected _mapImage: MapImage;\r\n\r\n\t/**\r\n\t * [_point description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {number[]}\r\n\t */\r\n\tprotected _point: number[];\r\n\r\n\t/**\r\n\t * Geographical coordinates image is placed at.\r\n\t *\r\n\t * @type {IGeoPoint}\r\n\t */\r\n\tprotected _geoPoint: IGeoPoint;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for\r\n\t * @type {Component}\r\n\t */\r\n\tpublic _component!: MapImageSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"MapImageSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * A [[MapImage]] element related to this data item.\r\n\t *\r\n\t * @return {MapImage} Element\r\n\t */\r\n\tpublic get mapImage(): MapImage {\r\n\t\tif (!this._mapImage) {\r\n\t\t\tlet mapImage = this.component.mapImages.create();\r\n\t\t\tthis.addSprite(mapImage);\r\n\t\t\tthis._mapImage = mapImage;\r\n\t\t\tthis._disposers.push(mapImage);\r\n\t\t\tthis._disposers.push(new Disposer(() => {\r\n\t\t\t\tif (this.component) {\r\n\t\t\t\t\tthis.component.mapImages.removeValue(mapImage);\r\n\t\t\t\t}\r\n\t\t\t}));\r\n\t\t}\r\n\t\treturn this._mapImage;\r\n\t}\r\n\r\n\t/**\r\n\t * [point description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {number[]} point [description]\r\n\t */\r\n\tpublic set point(point: number[]) {\r\n\t\tthis._point = point;\r\n\t\tthis.geoPoint = $mapUtils.pointToGeo(point);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number[]} [description]\r\n\t */\r\n\tpublic get point(): number[] {\r\n\t\treturn this._point;\r\n\t}\r\n\r\n\t/**\r\n\t * Geographical coordinates (lat/long) image is placed at.\r\n\t *\r\n\t * @param {IGeoPoint} geoPoint Image coordinates\r\n\t */\r\n\tpublic set geoPoint(geoPoint: IGeoPoint) {\r\n\t\tthis._geoPoint = geoPoint;\r\n\t\tthis.updateExtremes([this._geoPoint]);\r\n\r\n\t\tthis.mapImage.latitude = this._geoPoint.latitude;\r\n\t\tthis.mapImage.longitude = this._geoPoint.longitude;\r\n\t}\r\n\r\n\t/**\r\n\t * @return {IGeoPoint} Image coordinates\r\n\t */\r\n\tpublic get geoPoint(): IGeoPoint {\r\n\t\treturn this._geoPoint;\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[MapImageSeries]].\r\n */\r\nexport interface IMapImageSeriesDataFields extends IMapSeriesDataFields {\r\n\r\n\t/**\r\n\t * Field name that holds image point data in pixels.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tpoint?: string;\r\n\r\n\t/**\r\n\t * Field name that holds multi-image point data in pixels.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tmultiPoint?: string;\r\n\r\n\t/**\r\n\t * Field name that holds image point data in Geo coordinates.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tgeoPoint?: string;\r\n\r\n\t/**\r\n\t * Field name that holds multi-image point data in Geo coordinates.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tmultiGeoPoint?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[MapImageSeries]].\r\n */\r\nexport interface IMapImageSeriesProperties extends IMapSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[MapImageSeries]].\r\n */\r\nexport interface IMapImageSeriesEvents extends IMapSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[MapImageSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IMapImageSeriesAdapters extends IMapSeriesAdapters, IMapImageSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A series of map image (marker) elements.\r\n *\r\n * @see {@link IMapImageSeriesEvents} for a list of available Events\r\n * @see {@link IMapImageSeriesAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class MapImageSeries extends MapSeries {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {IMapImageSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IMapImageSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IMapImageSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IMapImageSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IMapImageSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IMapImageSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IMapImageSeriesEvents}\r\n\t */\r\n\tpublic _events!: IMapImageSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {MapImageSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: MapImageSeriesDataItem;\r\n\r\n\t/**\r\n\t * A related chart/map object, this image is drawn on.\r\n\t *\r\n\t * @type {MapChart}\r\n\t */\r\n\tpublic chart: MapChart;\r\n\r\n\t/**\r\n\t * A list of map images in the series.\r\n\t *\r\n\t * @type {ListTemplate}\r\n\t */\r\n\tprotected _mapImages: ListTemplate;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"MapImageSeries\";\r\n\r\n\t\t// Set data fields\r\n\t\tthis.dataFields.multiPoint = \"multiPoint\";\r\n\t\tthis.dataFields.point = \"point\";\r\n\r\n\t\tthis.dataFields.geoPoint = \"geoPoint\";\r\n\t\tthis.dataFields.multiGeoPoint = \"multiGeoPoint\";\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {MapImageSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new MapImageSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the data of the sries, effectively forcing it to redraw\r\n\t * all of its elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\t\tif (this.data.length > 0 && this._parseDataFrom == 0) {\r\n\t\t\tthis.mapImages.clear();\r\n\t\t}\r\n\r\n\t\t// process geoJSON and created map objects\r\n\t\tif (this.useGeodata) {\r\n\t\t\tif (this.useGeodata || this.geodata) {\r\n\t\t\t\tlet geoJSON: any = this.chart.geodata;\r\n\r\n\t\t\t\tlet features: any[];\r\n\r\n\t\t\t\tif (geoJSON.type == \"FeatureCollection\") {\r\n\t\t\t\t\tfeatures = geoJSON.features;\r\n\t\t\t\t}\r\n\t\t\t\telse if (geoJSON.type == \"Feature\") {\r\n\t\t\t\t\tfeatures = [geoJSON];\r\n\t\t\t\t}\r\n\t\t\t\telse if ([\"Point\", \"LineString\", \"Polygon\", \"MultiPoint\", \"MultiLineString\", \"MultiPolygon\"].indexOf(geoJSON.type) != -1) {\r\n\t\t\t\t\tfeatures = [{ geometry: geoJSON }];\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tconsole.log(\"nothing found in geoJSON\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (features) {\r\n\t\t\t\t\tfor (let i = 0, len = features.length; i < len; i++) {\r\n\r\n\t\t\t\t\t\tlet feature: any = features[i];\r\n\t\t\t\t\t\tlet geometry: any = feature.geometry;\r\n\t\t\t\t\t\tif (geometry) {\r\n\t\t\t\t\t\t\tlet type: GEOJSONGeometry = geometry.type;\r\n\t\t\t\t\t\t\tlet id: string = feature.id;\r\n\t\t\t\t\t\t\tif (type == \"Point\" || type == \"MultiPoint\") { // todo: we don't support multipoints at the moment actually\r\n\r\n\t\t\t\t\t\t\t\tif (!this.checkInclude(this.include, this.exclude, id)) {\r\n\t\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tlet coordinates: any[] = geometry.coordinates;\r\n\r\n\t\t\t\t\t\t\t\t// make the same as MultiPoint\r\n\t\t\t\t\t\t\t\tif (type == \"Point\") {\r\n\t\t\t\t\t\t\t\t\tcoordinates = [coordinates];\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tlet dataObject: IMapImageDataObject = $array.find(this.data, (value, i) => {\r\n\t\t\t\t\t\t\t\t\treturn value.id == id;\r\n\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\tif (!dataObject) {\r\n\t\t\t\t\t\t\t\t\tdataObject = { multiPoint: coordinates, id: id };\r\n\t\t\t\t\t\t\t\t\tthis.data.push(dataObject);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\tif (!dataObject.multiPoint) {\r\n\t\t\t\t\t\t\t\t\t\tdataObject.multiPoint = coordinates;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t// copy properties data to datacontext\r\n\t\t\t\t\t\t\t\t$utils.softCopyProperties(feature.properties, dataObject);\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\r\n\t\tsuper.validateData();\r\n\t\t// important! this should go after super.validateData\r\n\t\t// if data is parsed in chunks, images list is corrupted, fix it here\r\n\r\n\t\t$iter.each(this.dataItems.iterator(), (dataItem) => {\r\n\t\t\tlet mapImage = dataItem.mapImage;\r\n\t\t\tthis.mapImages.moveValue(mapImage);\r\n\t\t\tif ($type.isNumber(mapImage.latitude) && $type.isNumber(mapImage.latitude)) {\r\n\t\t\t\tdataItem.geoPoint = { latitude: mapImage.latitude, longitude: mapImage.longitude }\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * A list of map images in the series.\r\n\t *\r\n\t * @return {ListTemplate} Map images\r\n\t */\r\n\tpublic get mapImages(): ListTemplate {\r\n\r\n\t\tif (!this._mapImages) {\r\n\t\t\tlet template: MapImage = new MapImage();\r\n\t\t\tlet mapImages = new ListTemplate(template);\r\n\t\t\tthis._disposers.push(new ListDisposer(mapImages));\r\n\t\t\tthis._disposers.push(mapImages.template);\r\n\t\t\tmapImages.template.focusable = true;\r\n\t\t\tmapImages.events.on(\"inserted\", this.handleObjectAdded, this, false);\r\n\t\t\tthis._mapImages = mapImages;\r\n\t\t}\r\n\r\n\t\treturn this._mapImages;\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates data element, effectively triggering its redrawal.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {this[\"_dataItem\"]} dataItem Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"]) {\r\n\t\tsuper.validateDataElement(dataItem);\r\n\t\tdataItem.mapImage.invalidate();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the series\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\tsuper.validate();\r\n\t\t$iter.each(this.mapImages.iterator(), (mapImage) => {\r\n\t\t\tmapImage.validatePosition();\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all properties from another instance of [[Series]].\r\n\t *\r\n\t * @param {Series} source Source series\r\n\t */\r\n\tpublic copyFrom(source: this) {\r\n\t\tthis.mapImages.template.copyFrom(source.mapImages.template);\r\n\t\tsuper.copyFrom(source);\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"MapImageSeries\"] = MapImageSeries;\r\nregistry.registeredClasses[\"MapImageSeriesDataItem\"] = MapImageSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/map/MapImageSeries.ts","/**\r\n * Map arc series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { MapLineSeries, MapLineSeriesDataItem, IMapLineSeriesProperties, IMapLineSeriesDataFields, IMapLineSeriesAdapters, IMapLineSeriesEvents } from \"./MapLineSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { MapChart, MapLineType } from \"../types/MapChart\";\r\nimport { MapArc } from \"./MapArc\";\r\nimport { ListTemplate, IListEvents } from \"../../core/utils/List\";\r\nimport { IMapDataObject, IMapPolygonDataObject, IMapLineDataObject } from \"../types/MapChart\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[MapArcSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class MapArcSeriesDataItem extends MapLineSeriesDataItem {\r\n\r\n\t/**\r\n\t * A [[MapArc]] element related to this data item.\r\n\t *\r\n\t * @type {MapArc}\r\n\t */\r\n\tpublic _mapLine: MapArc;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {Component}\r\n\t */\r\n\tpublic _component!: MapArcSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"MapArcSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[MapArcSeries]].\r\n */\r\nexport interface IMapArcSeriesDataFields extends IMapLineSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[MapArcSeries]].\r\n */\r\nexport interface IMapArcSeriesProperties extends IMapLineSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[MapArcSeries]].\r\n */\r\nexport interface IMapArcSeriesEvents extends IMapLineSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[MapArcSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IMapArcSeriesAdapters extends IMapLineSeriesAdapters, IMapArcSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A series of arc elements. (curved lines)\r\n *\r\n * @see {@link IMapArcSeriesEvents} for a list of available Events\r\n * @see {@link IMapArcSeriesAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class MapArcSeries extends MapLineSeries {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {IMapArcSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IMapArcSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IMapArcSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IMapArcSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IMapArcSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IMapArcSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IMapArcSeriesEvents}\r\n\t */\r\n\tpublic _events!: IMapArcSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {MapArcSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: MapArcSeriesDataItem;\r\n\r\n\t/**\r\n\t * Defines the type of the line items in this series.\r\n\t *\r\n\t * @type {MapArc}\r\n\t */\r\n\tpublic _mapLine: MapArc;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"MapArcSeries\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {MapArcSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new MapArcSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new line instance of suitable type.\r\n\t *\r\n\t * @return {MapArc} New line\r\n\t */\r\n\tprotected createLine(): this[\"_mapLine\"] {\r\n\t\treturn new MapArc();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"MapArcSeries\"] = MapArcSeries;\r\nregistry.registeredClasses[\"MapArcSeriesDataItem\"] = MapArcSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/map/MapArcSeries.ts","/**\r\n * Functionality for Mercator projection\r\n * \r\n * The function(s) below are from D3.js library (https://d3js.org/)\r\n * \r\n * ```\r\n * Copyright 2017 Mike Bostock\r\n * \r\n * Redistribution and use in source and binary forms, with or without \r\n * modification, are permitted provided that the following conditions are met:\r\n * \r\n * 1. Redistributions of source code must retain the above copyright notice, \r\n * this list of conditions and the following disclaimer.\r\n * \r\n * 2. Redistributions in binary form must reproduce the above copyright notice, \r\n * this list of conditions and the following disclaimer in the documentation \r\n * and/or other materials provided with the distribution.\r\n * \r\n * 3. Neither the name of the copyright holder nor the names of its \r\n * contributors may be used to endorse or promote products derived from this \r\n * software without specific prior written permission.\r\n * \r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" \r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE \r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE \r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE \r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR \r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF \r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS \r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN \r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * ```\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Projection } from \"./Projection\";\r\nimport { IGeoPoint } from \"../../../core/defs/IGeoPoint\";\r\nimport { IPoint } from \"../../../core/defs/IPoint\";\r\nimport { registry } from \"../../../core/Registry\";\r\n\r\n/**\r\n * Mercator projection.\r\n */\r\nexport class Mercator extends Projection {\r\n\r\n\t/**\r\n\t * Converts screen coordinates to latitude/longitude in radians\r\n\t * @param {number} x X\r\n\t * @param {number} y Y\r\n\t * @return {IGeoPoint} Geographical coordinates\r\n\t */\r\n\tpublic unproject(x: number, y: number): IGeoPoint {\r\n\t\treturn {\r\n\t\t\tlongitude: x,\r\n\t\t\tlatitude: 2 * Math.atan(Math.exp(y)) - Math.PI / 2\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Converts geographical coordinates to screen coordinates.\r\n\t * \r\n\t * @param {number} lambda Lambda parameter\r\n\t * @param {number} phi Phi parameter\r\n\t * @return {IPoint} Screen coordinates\r\n\t */\r\n\tpublic project(lambda: number, phi: number): IPoint {\r\n\t\treturn {\r\n\t\t\tx: lambda,\r\n\t\t\ty: Math.log(Math.tan((Math.PI / 2 + phi) / 2))\r\n\t\t};\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n * \r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Mercator\"] = Mercator;\n\n\n// WEBPACK FOOTER //\n// ../../../../../../src/.internal/charts/map/projections/Mercator.ts","/**\n * Functionality for Miller projection\n *\n * The function(s) below are from D3.js library (https://d3js.org/)\n * \n * ```\n * Copyright 2017 Mike Bostock\n * \n * Redistribution and use in source and binary forms, with or without \n * modification, are permitted provided that the following conditions are met:\n * \n * 1. Redistributions of source code must retain the above copyright notice, \n * this list of conditions and the following disclaimer.\n * \n * 2. Redistributions in binary form must reproduce the above copyright notice, \n * this list of conditions and the following disclaimer in the documentation \n * and/or other materials provided with the distribution.\n * \n * 3. Neither the name of the copyright holder nor the names of its \n * contributors may be used to endorse or promote products derived from this \n * software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" \n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE \n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE \n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE \n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR \n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF \n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS \n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN \n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \n * POSSIBILITY OF SUCH DAMAGE.\n * ```\n */\n\n/**\n * ============================================================================\n * IMPORTS\n * ============================================================================\n * @hidden\n */\nimport { Projection } from \"./Projection\";\nimport { IGeoPoint } from \"../../../core/defs/IGeoPoint\";\nimport { IPoint } from \"../../../core/defs/IPoint\";\nimport { registry } from \"../../../core/Registry\";\n\n/**\n * Miller projection.\n */\nexport class Miller extends Projection {\n\n\t/**\n\t * Converts screen coordinates to latitude/longitude.\n\t * \n\t * @param {number} x X\n\t * @param {number} y Y\n\t * @return {IGeoPoint} Geographical coordinates in radians\n\t */\n\tpublic unproject(x: number, y: number): IGeoPoint {\n\t\treturn {\n\t\t\tlongitude: x,\n\t\t\tlatitude: 2.5 * Math.atan(Math.exp(0.8 * y)) - 0.625 * Math.PI\n\t\t};\n\t}\n\n\t/**\n\t * Converts geographical coordinates to screen coordinates.\n\t * \n\t * @param {number} lambda Lambda parameter\n\t * @param {number} phi Phi parameter\n\t * @return {IPoint} Screen coordinates\n\t */\n\tpublic project(lambda: number, phi: number): IPoint {\n\t\treturn {\n\t\t\tx: lambda,\n\t\t\ty: 1.25 * Math.log(Math.tan(Math.PI / 4 + 0.4 * phi))\n\t\t};\n\t}\n\n}\n\n/**\n * Register class in system, so that it can be instantiated using its name from\n * anywhere.\n * \n * @ignore\n */\nregistry.registeredClasses[\"Miller\"] = Miller;\n\n\n// WEBPACK FOOTER //\n// ../../../../../../src/.internal/charts/map/projections/Miller.ts","/**\r\n * Functionality for Eckert6 projection\r\n *\r\n * The function(s) below are from D3.js library (https://d3js.org/)\r\n * \r\n * ```\r\n * Copyright 2017 Mike Bostock\r\n * \r\n * Redistribution and use in source and binary forms, with or without \r\n * modification, are permitted provided that the following conditions are met:\r\n * \r\n * 1. Redistributions of source code must retain the above copyright notice, \r\n * this list of conditions and the following disclaimer.\r\n * \r\n * 2. Redistributions in binary form must reproduce the above copyright notice, \r\n * this list of conditions and the following disclaimer in the documentation \r\n * and/or other materials provided with the distribution.\r\n * \r\n * 3. Neither the name of the copyright holder nor the names of its \r\n * contributors may be used to endorse or promote products derived from this \r\n * software without specific prior written permission.\r\n * \r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" \r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE \r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE \r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE \r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR \r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF \r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS \r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN \r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * ```\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Projection } from \"./Projection\";\r\nimport { IGeoPoint } from \"../../../core/defs/IGeoPoint\";\r\nimport { IPoint } from \"../../../core/defs/IPoint\";\r\nimport { registry } from \"../../../core/Registry\";\r\n\r\n/**\r\n * Eckert6 projection.\r\n */\r\nexport class Eckert6 extends Projection {\r\n\r\n\t/**\r\n\t * Converts screen coordinates to latitude/longitude.\r\n\t * \r\n\t * @param {number} x X\r\n\t * @param {number} y Y\r\n\t * @return {IGeoPoint} Geographical coordinates in radians\r\n\t */\r\n\tpublic unproject(x: number, y: number): IGeoPoint {\r\n\t\tlet j = 1 + Math.PI / 2,\r\n\t\t\tk = Math.sqrt(j / 2);\r\n\t\treturn {\r\n\t\t\tlongitude: x * 2 * k / (1 + Math.cos(y *= k)),\r\n\t\t\tlatitude: Math.asin((y + Math.sin(y)) / j)\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Converts geographical coordinates to screen coordinates.\r\n\t * \r\n\t * @param {number} lambda Lambda parameter\r\n\t * @param {number} phi Phi parameter\r\n\t * @return {IPoint} Screen coordinates\r\n\t */\r\n\tpublic project(lambda: number, phi: number): IPoint {\r\n\t\tlet k = (1 + Math.PI / 2) * Math.sin(phi);\r\n\t\tfor (let i = 0, delta = Infinity; i < 10 && Math.abs(delta) > 0.00001; i++) {\r\n\t\t\tphi -= delta = (phi + Math.sin(phi) - k) / (1 + Math.cos(phi));\r\n\t\t}\r\n\t\tk = Math.sqrt(2 + Math.PI);\r\n\t\treturn {\r\n\t\t\tx: lambda * (1 + Math.cos(phi)) / k,\r\n\t\t\ty: 2 * phi / k\r\n\t\t};\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n * \r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Eckert6\"] = Eckert6;\n\n\n// WEBPACK FOOTER //\n// ../../../../../../src/.internal/charts/map/projections/Eckert6.ts","/**\r\n * Functionality for Mercator projection\r\n * \r\n * The function(s) below are from D3.js library (https://d3js.org/)\r\n * \r\n * ```\r\n * Copyright 2017 Mike Bostock\r\n * \r\n * Redistribution and use in source and binary forms, with or without \r\n * modification, are permitted provided that the following conditions are met:\r\n * \r\n * 1. Redistributions of source code must retain the above copyright notice, \r\n * this list of conditions and the following disclaimer.\r\n * \r\n * 2. Redistributions in binary form must reproduce the above copyright notice, \r\n * this list of conditions and the following disclaimer in the documentation \r\n * and/or other materials provided with the distribution.\r\n * \r\n * 3. Neither the name of the copyright holder nor the names of its \r\n * contributors may be used to endorse or promote products derived from this \r\n * software without specific prior written permission.\r\n * \r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" \r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE \r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE \r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE \r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR \r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF \r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS \r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN \r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * ```\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Projection } from \"./Projection\";\r\nimport { IGeoPoint } from \"../../../core/defs/IGeoPoint\";\r\nimport { IGeoRectangle } from \"../../../core/defs/IGeoRectangle\";\r\nimport { IPoint } from \"../../../core/defs/IPoint\";\r\nimport { registry } from \"../../../core/Registry\";\r\nimport * as $math from \"../../../core/utils/Math\";\r\n\r\n/**\r\n * Orthographic projection.\r\n */\r\nexport class Orthographic extends Projection {\r\n\r\n\t/**\r\n\t * Converts geographical coordinates to screen coordinates.\r\n\t * \r\n\t * @param {number} lambda Lambda parameter\r\n\t * @param {number} phi Phi parameter\r\n\t * @return {IPoint} Screen coordinates\r\n\t */\r\n\tpublic project(lambda: number, phi: number): IPoint {\r\n\t\treturn { x: Math.cos(phi) * Math.sin(lambda), y: Math.sin(phi) };\r\n\t}\r\n\r\n\r\n\tpublic getClipRectangle1(): IGeoPoint[] {\r\n\t\tlet longitude = 90 - this.deltaLongitude;\r\n\t\tlet latitude = -this.deltaLatitude;\r\n\r\n\t\tlet smallNum = 0.00001;\r\n\t\treturn [{ longitude: longitude - 180, latitude: latitude - 90 }, { longitude: longitude - smallNum, latitude: latitude - 90 }, { longitude: longitude - smallNum, latitude: latitude + 90 }, { longitude: longitude - 180, latitude: latitude + 90 }];\r\n\t}\r\n\r\n\r\n\tpublic getRect1(): IGeoRectangle {\r\n\t\tlet longitude = 90 - this.deltaLongitude;\r\n\t\tlet latitude = -this.deltaLatitude;\r\n\r\n\t\treturn { north: latitude + 90, south: latitude - 90, west: longitude - 180, east: longitude };\r\n\t}\r\n\r\n\tpublic getClipRectangle2(): IGeoPoint[] {\r\n\t\tlet longitude = 90 - this.deltaLongitude;\r\n\t\tlet latitude = -this.deltaLatitude;\r\n\r\n\t\tlet smallNum = 0.00001;\r\n\r\n\t\tlet delta: number;\r\n\r\n\t\tif (longitude > 0) {\r\n\t\t\tdelta = -360;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tdelta = 360;\r\n\t\t}\r\n\r\n\t\treturn [{ longitude: smallNum + longitude - 180 + delta, latitude: latitude - 90 }, { longitude: longitude - smallNum + delta, latitude: latitude - 90 }, { longitude: longitude - smallNum + delta, latitude: latitude + 90 }, { longitude: smallNum + longitude - 180 + delta, latitude: latitude + 90 }];\r\n\t}\r\n\r\n\r\n\r\n\tpublic getRect2(): IGeoRectangle {\r\n\t\tlet longitude = 90 - this.deltaLongitude;\r\n\t\tlet latitude = -this.deltaLatitude;\r\n\r\n\t\tlet delta: number;\r\n\r\n\t\tif (longitude > 0) {\r\n\t\t\tdelta = -360;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tdelta = 360;\r\n\t\t}\r\n\t\treturn { north: latitude + 90, south: latitude - 90, west: longitude - 180 + delta, east: longitude + delta };\r\n\t}\r\n\r\n\r\n\r\n\tprotected clipGeoArea(geoArea: IGeoPoint[][][]): IGeoPoint[][][] {\r\n\t\tif (!geoArea) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet clippedArea: IGeoPoint[][][] = [];\r\n\r\n\t\tlet clipRectangle1 = this.getClipRectangle1();\r\n\t\tlet clipRectangle2 = this.getClipRectangle2();\r\n\r\n\t\tlet rect1 = this.getRect1();\r\n\t\tlet rect2 = this.getRect2();\r\n\r\n\t\tfor (let i = 0, len = geoArea.length; i < len; i++) {\r\n\r\n\t\t\tlet surface: IGeoPoint[] = geoArea[i][0];\r\n\t\t\tlet hole: IGeoPoint[] = geoArea[i][1];\r\n\r\n\t\t\tlet clippedAreas: IGeoPoint[][][] = [];\r\n\r\n\t\t\tif (surface) {\r\n\r\n\t\t\t\tlet surfaceRect = this.getExtremes(surface);\r\n\r\n\t\t\t\tif (!this.isInside(surfaceRect, rect1) && !this.isOutside(surfaceRect, rect1)) {\r\n\t\t\t\t\tlet clippedSurface1: IGeoPoint[] = this.clip(surface, clipRectangle1);\r\n\t\t\t\t\tlet clippedHole1: IGeoPoint[] = this.clip(hole, clipRectangle1);\r\n\t\t\t\t\tclippedAreas.push([clippedSurface1, clippedHole1]);\r\n\t\t\t\t}\r\n\t\t\t\telse if (this.isInside(surfaceRect, rect1)) {\r\n\t\t\t\t\tclippedAreas.push([surface, hole]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!this.isInside(surfaceRect, rect2) && !this.isOutside(surfaceRect, rect2)) {\r\n\t\t\t\t\tlet clippedSurface2: IGeoPoint[] = this.clip(surface, clipRectangle2);\r\n\t\t\t\t\tlet clippedHole2: IGeoPoint[] = this.clip(hole, clipRectangle2);\r\n\r\n\t\t\t\t\tclippedAreas.push([clippedSurface2, clippedHole2]);\r\n\t\t\t\t}\r\n\t\t\t\telse if (this.isInside(surfaceRect, rect2)) {\r\n\t\t\t\t\tclippedAreas.push([surface, hole]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfor (let area of clippedAreas) {\r\n\t\t\t\tclippedArea.push(area);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let i = 0, len = clippedArea.length; i < len; i++) {\r\n\r\n\t\t\tlet surface: IGeoPoint[] = clippedArea[i][0];\r\n\t\t\t//let hole: IGeoPoint[] = clippedArea[i][1];\r\n\r\n\t\t\tif (surface) {\r\n\r\n\t\t\t\tlet len = surface.length;\r\n\r\n\t\t\t\tlet prevPoint = surface[len - 1];\r\n\r\n\t\t\t\tfor (let i = 0; i < len; i++) {\r\n\t\t\t\t\tlet point = surface[i];\r\n\r\n\t\t\t\t\tif ($math.round(point.longitude, 4) == $math.round(prevPoint.longitude, 4)) {\r\n\t\t\t\t\t\tlet stepCount = Math.abs((prevPoint.latitude - point.latitude) * 2);\r\n\t\t\t\t\t\tlet extraPoints: IGeoPoint[] = [];\r\n\r\n\t\t\t\t\t\tif (stepCount > 1) {\r\n\t\t\t\t\t\t\tfor (let s = 1; s < stepCount; s++) {\r\n\t\t\t\t\t\t\t\textraPoints.push({ longitude: prevPoint.longitude, latitude: prevPoint.latitude + (point.latitude - prevPoint.latitude) / stepCount * s })\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tsurface.splice(i, 0, ...extraPoints);\r\n\t\t\t\t\t\t\ti = i + extraPoints.length;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tprevPoint = point;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn clippedArea;\r\n\t}\r\n\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n * \r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Orthographic\"] = Orthographic;\n\n\n// WEBPACK FOOTER //\n// ../../../../../../src/.internal/charts/map/projections/Orthographic.ts","import * as m from \"../es2015/maps\";\nwindow.am4maps = m;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./maps.js\n// module id = null\n// module chunks = ","/**\r\n * A module for the mini-map control.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container, IContainerProperties, IContainerAdapters, IContainerEvents } from \"../../core/Container\";\r\nimport { Sprite, ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Rectangle } from \"../../core/elements/Rectangle\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { IGeoPoint } from \"../../core/defs/IGeoPoint\";\r\nimport { MapChart } from \"../types/MapChart\";\r\nimport { MapSeries } from \"./MapSeries\";\r\nimport { List, IListEvents } from \"../../core/utils/List\";\r\nimport { MutableValueDisposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { color } from \"../../core/utils/Color\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[SmallMap]].\r\n */\r\nexport interface ISmallMapProperties extends IContainerProperties { }\r\n\r\n/**\r\n * Defines events for [[SmallMap]].\r\n */\r\nexport interface ISmallMapEvents extends IContainerEvents { }\r\n\r\n/**\r\n * Defines adapters for [[SmallMap]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ISmallMapAdapters extends IContainerAdapters, ISmallMapProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a \"bird's eye\" view of the whole map.\r\n *\r\n * This control creates a mini-map with the whole of the map, highlighting\r\n * the area which is in the current viewport of the map map.\r\n *\r\n * @see {@link ISmallMapEvents} for a list of available events\r\n * @see {@link ISmallMapAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class SmallMap extends Container {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {SmallMaPproperties}\r\n\t */\r\n\tpublic _properties!: ISmallMapProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ISmallMapAdapters}\r\n\t */\r\n\tpublic _adapter!: ISmallMapAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ISmallMapEvents}\r\n\t */\r\n\tpublic _events!: ISmallMapEvents;\r\n\r\n\t/**\r\n\t * A target map.\r\n\t *\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _chart: MutableValueDisposer = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * A container that holds the visual elements for the mini-map.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {Container}\r\n\t */\r\n\tpublic seriesContainer: Container;\r\n\r\n\t/**\r\n\t * The rectangle element which highlights current viewport.\r\n\t *\r\n\t * @type {Rectangle}\r\n\t */\r\n\tpublic rectangle: Rectangle;\r\n\r\n\t/**\r\n\t * A list of map series used to draw the mini-map.\r\n\t *\r\n\t * @type {List}\r\n\t */\r\n\tprotected _series: List;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"SmallMap\";\r\n\r\n\t\t// Set defaults\r\n\t\tthis.align = \"left\";\r\n\t\tthis.valign = \"bottom\";\r\n\t\tthis.percentHeight = 20;\r\n\t\tthis.percentWidth = 20;\r\n\t\tthis.margin(5, 5, 5, 5);\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\t// Set background defailts\r\n\t\tthis.background.fillOpacity = 0.9;\r\n\t\tthis.background.fill = interfaceColors.getFor(\"background\");\r\n\r\n\t\t// Set up events\r\n\t\tthis.events.on(\"hit\", this.moveToPosition, this, false);\r\n\t\tthis.events.on(\"maxsizechanged\", this.updateMapSize, this, false);\r\n\r\n\t\t// Create a container\r\n\t\tthis.seriesContainer = this.createChild(Container);\r\n\t\tthis.seriesContainer.shouldClone = false;\r\n\r\n\t\t// Create an outline rectangle\r\n\t\tlet rectangle: Rectangle = this.createChild(Rectangle);\r\n\t\trectangle.shouldClone = false;\r\n\t\trectangle.stroke = interfaceColors.getFor(\"alternativeBackground\");\r\n\t\trectangle.strokeWidth = 1;\r\n\t\trectangle.strokeOpacity = 0.5;\r\n\t\trectangle.fill = color(); //\"none\";\r\n\t\trectangle.verticalCenter = \"middle\";\r\n\t\trectangle.horizontalCenter = \"middle\";\r\n\t\trectangle.isMeasured = false;\r\n\t\tthis.rectangle = rectangle;\r\n\r\n\t\tthis._disposers.push(this._chart);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * A list of map series used to draw the mini-map.\r\n\t *\r\n\t * @readonly\r\n\t * @return {List} Series\r\n\t */\r\n\tpublic get series(): List {\r\n\t\tif (!this._series) {\r\n\t\t\tthis._series = new List();\r\n\t\t\tthis._series.events.on(\"inserted\", this.handleSeriesAdded, this, false);\r\n\t\t\tthis._series.events.on(\"removed\", this.handleSeriesRemoved, this, false);\r\n\t\t}\r\n\t\treturn this._series;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Decorates a new series when they are pushed into a `series` list.\r\n\t *\r\n\t * @param {IListEvents[\"inserted\"]} event Event\r\n\t */\r\n\tprotected handleSeriesAdded(event: IListEvents[\"inserted\"]) {\r\n\t\tlet series: MapSeries = event.newValue;\r\n\t\tif (this.chart.series.contains(series)) {\r\n\t\t\tlet newSeries = series.clone();\r\n\t\t\tthis._series.removeValue(series);\r\n\t\t\tthis._series.push(newSeries);\r\n\t\t\tseries = newSeries;\r\n\r\n\t\t\tthis.chart.dataUsers.push(newSeries);\r\n\t\t}\r\n\t\tseries.chart = this.chart;\r\n\t\tseries.parent = this.seriesContainer;\r\n\t\tseries.interactionsEnabled = false;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Cleans up after series are removed from Scrollbar.\r\n\t *\r\n\t * @param {IListEvents[\"removed\"]} event Event\r\n\t */\r\n\tprotected handleSeriesRemoved(event: IListEvents[\"removed\"]) {\r\n\t\t//let sourceSeries: MapSeries = event.oldValue;\r\n\t\tthis.invalidate();\r\n\t}\r\n\r\n\t/**\r\n\t * Moves main map pan position after click on the small map.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {AMEvent[\"hit\"]} event Event\r\n\t */\r\n\tpublic moveToPosition(event: AMEvent[\"hit\"]) {\r\n\t\tlet rectPoint: IPoint = $utils.spritePointToSprite(event.spritePoint, this, this.seriesContainer);\r\n\t\tlet geoPoint: IGeoPoint = this.chart.seriesPointToGeo(rectPoint);\r\n\t\tthis.chart.zoomToGeoPoint(geoPoint, this.chart.zoomLevel, true);\r\n\t}\r\n\r\n\t/**\r\n\t * A chart/map that this control is meant for.\r\n\t *\r\n\t * @param {MapChart} chart Chart/map\r\n\t */\r\n\tpublic set chart(chart: MapChart) {\r\n\t\tif (this.chart != chart) {\r\n\t\t\tthis._chart.set(chart, new MultiDisposer([\r\n\t\t\t\t//chart.events.on(\"zoomlevelchanged\", this.updateRectangle, this, false),\r\n\t\t\t\tchart.events.on(\"mappositionchanged\", this.updateRectangle, this, false),\r\n\t\t\t\tchart.events.on(\"scaleratiochanged\", this.updateMapSize, this, false)\r\n\t\t\t]));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {MapChart} Chart/map\r\n\t */\r\n\tpublic get chart(): MapChart {\r\n\t\treturn this._chart.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the viewport recangle as per current map zoom/pan position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateRectangle(): void {\r\n\t\tlet chart: MapChart = this.chart;\r\n\t\tlet zoomLevel: number = chart.zoomLevel;\r\n\t\tlet rectangle: Rectangle = this.rectangle;\r\n\r\n\t\trectangle.width = this.pixelWidth / zoomLevel;\r\n\t\trectangle.height = this.pixelHeight / zoomLevel;\r\n\r\n\t\tlet scale: number = Math.min(this.percentWidth, this.percentHeight) / 100;\r\n\r\n\t\tlet seriesContainer: Container = chart.seriesContainer;\r\n\r\n\t\trectangle.x = Math.ceil((zoomLevel * seriesContainer.pixelWidth / 2 - seriesContainer.pixelX) * scale / zoomLevel)// + rectangle.pixelWidth / 2);\r\n\t\trectangle.y = Math.ceil((zoomLevel * seriesContainer.pixelHeight / 2 - seriesContainer.pixelY) * scale / zoomLevel)// + rectangle.pixelHeight / 2);\r\n\r\n\t\trectangle.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Update map size so that internal elements can redraw themselves after\r\n\t * the size of the small map changes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateMapSize(): void {\r\n\t\tif (this.chart) {\r\n\t\t\tthis.seriesContainer.scale = this.chart.scaleRatio * Math.min(this.percentWidth, this.percentHeight) / 100;\r\n\t\t\tthis.updateRectangle();\r\n\t\t\tthis.afterDraw();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Update elements after drawing the small map.\r\n\t */\r\n\tprotected afterDraw(): void {\r\n\t\tsuper.afterDraw();\r\n\t\tthis.seriesContainer.moveTo({ x: this.pixelWidth / 2, y: this.pixelHeight / 2 });\r\n\t\tthis.rectangle.maskRectangle = { x: -1, y: -1, width: Math.ceil(this.pixelWidth + 2), height: Math.ceil(this.pixelHeight + 2) };\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {object} config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Set up series\r\n\t\t\tif ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n\t\t\t\tfor (let i = 0, len = config.series.length; i < len; i++) {\r\n\t\t\t\t\tlet series = config.series[i];\r\n\t\t\t\t\tif ($type.hasValue(series) && $type.isString(series) && this.map.hasKey(series)) {\r\n\t\t\t\t\t\tconfig.series[i] = this.map.getKey(series);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"SmallMap\"] = SmallMap;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/map/SmallMap.ts"],"sourceRoot":""}