|   | 
| /* | 
| * Licensed to the Apache Software Foundation (ASF) under one | 
| * or more contributor license agreements.  See the NOTICE file | 
| * distributed with this work for additional information | 
| * regarding copyright ownership.  The ASF licenses this file | 
| * to you under the Apache License, Version 2.0 (the | 
| * "License"); you may not use this file except in compliance | 
| * with the License.  You may obtain a copy of the License at | 
| * | 
| *   http://www.apache.org/licenses/LICENSE-2.0 | 
| * | 
| * Unless required by applicable law or agreed to in writing, | 
| * software distributed under the License is distributed on an | 
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
| * KIND, either express or implied.  See the License for the | 
| * specific language governing permissions and limitations | 
| * under the License. | 
| */ | 
|   | 
|   | 
| /** | 
|  * AUTO-GENERATED FILE. DO NOT MODIFY. | 
|  */ | 
|   | 
| /* | 
| * Licensed to the Apache Software Foundation (ASF) under one | 
| * or more contributor license agreements.  See the NOTICE file | 
| * distributed with this work for additional information | 
| * regarding copyright ownership.  The ASF licenses this file | 
| * to you under the Apache License, Version 2.0 (the | 
| * "License"); you may not use this file except in compliance | 
| * with the License.  You may obtain a copy of the License at | 
| * | 
| *   http://www.apache.org/licenses/LICENSE-2.0 | 
| * | 
| * Unless required by applicable law or agreed to in writing, | 
| * software distributed under the License is distributed on an | 
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
| * KIND, either express or implied.  See the License for the | 
| * specific language governing permissions and limitations | 
| * under the License. | 
| */ | 
| import * as zrUtil from 'zrender/lib/core/util.js'; | 
| import Geo, { geo2DDimensions } from './Geo.js'; | 
| import * as layout from '../../util/layout.js'; | 
| import * as numberUtil from '../../util/number.js'; | 
| import geoSourceManager from './geoSourceManager.js'; | 
| import * as vector from 'zrender/lib/core/vector.js'; | 
| /** | 
|  * Resize method bound to the geo | 
|  */ | 
| function resizeGeo(geoModel, api) { | 
|   var boundingCoords = geoModel.get('boundingCoords'); | 
|   if (boundingCoords != null) { | 
|     var leftTop_1 = boundingCoords[0]; | 
|     var rightBottom_1 = boundingCoords[1]; | 
|     if (!(isFinite(leftTop_1[0]) && isFinite(leftTop_1[1]) && isFinite(rightBottom_1[0]) && isFinite(rightBottom_1[1]))) { | 
|       if (process.env.NODE_ENV !== 'production') { | 
|         console.error('Invalid boundingCoords'); | 
|       } | 
|     } else { | 
|       // Sample around the lng/lat rect and use projection to calculate actual bounding rect. | 
|       var projection_1 = this.projection; | 
|       if (projection_1) { | 
|         var xMin = leftTop_1[0]; | 
|         var yMin = leftTop_1[1]; | 
|         var xMax = rightBottom_1[0]; | 
|         var yMax = rightBottom_1[1]; | 
|         leftTop_1 = [Infinity, Infinity]; | 
|         rightBottom_1 = [-Infinity, -Infinity]; | 
|         // TODO better way? | 
|         var sampleLine = function (x0, y0, x1, y1) { | 
|           var dx = x1 - x0; | 
|           var dy = y1 - y0; | 
|           for (var i = 0; i <= 100; i++) { | 
|             var p = i / 100; | 
|             var pt = projection_1.project([x0 + dx * p, y0 + dy * p]); | 
|             vector.min(leftTop_1, leftTop_1, pt); | 
|             vector.max(rightBottom_1, rightBottom_1, pt); | 
|           } | 
|         }; | 
|         // Top | 
|         sampleLine(xMin, yMin, xMax, yMin); | 
|         // Right | 
|         sampleLine(xMax, yMin, xMax, yMax); | 
|         // Bottom | 
|         sampleLine(xMax, yMax, xMin, yMax); | 
|         // Left | 
|         sampleLine(xMin, yMax, xMax, yMin); | 
|       } | 
|       this.setBoundingRect(leftTop_1[0], leftTop_1[1], rightBottom_1[0] - leftTop_1[0], rightBottom_1[1] - leftTop_1[1]); | 
|     } | 
|   } | 
|   var rect = this.getBoundingRect(); | 
|   var centerOption = geoModel.get('layoutCenter'); | 
|   var sizeOption = geoModel.get('layoutSize'); | 
|   var viewWidth = api.getWidth(); | 
|   var viewHeight = api.getHeight(); | 
|   var aspect = rect.width / rect.height * this.aspectScale; | 
|   var useCenterAndSize = false; | 
|   var center; | 
|   var size; | 
|   if (centerOption && sizeOption) { | 
|     center = [numberUtil.parsePercent(centerOption[0], viewWidth), numberUtil.parsePercent(centerOption[1], viewHeight)]; | 
|     size = numberUtil.parsePercent(sizeOption, Math.min(viewWidth, viewHeight)); | 
|     if (!isNaN(center[0]) && !isNaN(center[1]) && !isNaN(size)) { | 
|       useCenterAndSize = true; | 
|     } else { | 
|       if (process.env.NODE_ENV !== 'production') { | 
|         console.warn('Given layoutCenter or layoutSize data are invalid. Use left/top/width/height instead.'); | 
|       } | 
|     } | 
|   } | 
|   var viewRect; | 
|   if (useCenterAndSize) { | 
|     viewRect = {}; | 
|     if (aspect > 1) { | 
|       // Width is same with size | 
|       viewRect.width = size; | 
|       viewRect.height = size / aspect; | 
|     } else { | 
|       viewRect.height = size; | 
|       viewRect.width = size * aspect; | 
|     } | 
|     viewRect.y = center[1] - viewRect.height / 2; | 
|     viewRect.x = center[0] - viewRect.width / 2; | 
|   } else { | 
|     // Use left/top/width/height | 
|     var boxLayoutOption = geoModel.getBoxLayoutParams(); | 
|     boxLayoutOption.aspect = aspect; | 
|     viewRect = layout.getLayoutRect(boxLayoutOption, { | 
|       width: viewWidth, | 
|       height: viewHeight | 
|     }); | 
|   } | 
|   this.setViewRect(viewRect.x, viewRect.y, viewRect.width, viewRect.height); | 
|   this.setCenter(geoModel.get('center'), api); | 
|   this.setZoom(geoModel.get('zoom')); | 
| } | 
| // Back compat for ECharts2, where the coord map is set on map series: | 
| // {type: 'map', geoCoord: {'cityA': [116.46,39.92], 'cityA': [119.12,24.61]}}, | 
| function setGeoCoords(geo, model) { | 
|   zrUtil.each(model.get('geoCoord'), function (geoCoord, name) { | 
|     geo.addGeoCoord(name, geoCoord); | 
|   }); | 
| } | 
| var GeoCreator = /** @class */function () { | 
|   function GeoCreator() { | 
|     // For deciding which dimensions to use when creating list data | 
|     this.dimensions = geo2DDimensions; | 
|   } | 
|   GeoCreator.prototype.create = function (ecModel, api) { | 
|     var geoList = []; | 
|     function getCommonGeoProperties(model) { | 
|       return { | 
|         nameProperty: model.get('nameProperty'), | 
|         aspectScale: model.get('aspectScale'), | 
|         projection: model.get('projection') | 
|       }; | 
|     } | 
|     // FIXME Create each time may be slow | 
|     ecModel.eachComponent('geo', function (geoModel, idx) { | 
|       var mapName = geoModel.get('map'); | 
|       var geo = new Geo(mapName + idx, mapName, zrUtil.extend({ | 
|         nameMap: geoModel.get('nameMap') | 
|       }, getCommonGeoProperties(geoModel))); | 
|       geo.zoomLimit = geoModel.get('scaleLimit'); | 
|       geoList.push(geo); | 
|       // setGeoCoords(geo, geoModel); | 
|       geoModel.coordinateSystem = geo; | 
|       geo.model = geoModel; | 
|       // Inject resize method | 
|       geo.resize = resizeGeo; | 
|       geo.resize(geoModel, api); | 
|     }); | 
|     ecModel.eachSeries(function (seriesModel) { | 
|       var coordSys = seriesModel.get('coordinateSystem'); | 
|       if (coordSys === 'geo') { | 
|         var geoIndex = seriesModel.get('geoIndex') || 0; | 
|         seriesModel.coordinateSystem = geoList[geoIndex]; | 
|       } | 
|     }); | 
|     // If has map series | 
|     var mapModelGroupBySeries = {}; | 
|     ecModel.eachSeriesByType('map', function (seriesModel) { | 
|       if (!seriesModel.getHostGeoModel()) { | 
|         var mapType = seriesModel.getMapType(); | 
|         mapModelGroupBySeries[mapType] = mapModelGroupBySeries[mapType] || []; | 
|         mapModelGroupBySeries[mapType].push(seriesModel); | 
|       } | 
|     }); | 
|     zrUtil.each(mapModelGroupBySeries, function (mapSeries, mapType) { | 
|       var nameMapList = zrUtil.map(mapSeries, function (singleMapSeries) { | 
|         return singleMapSeries.get('nameMap'); | 
|       }); | 
|       var geo = new Geo(mapType, mapType, zrUtil.extend({ | 
|         nameMap: zrUtil.mergeAll(nameMapList) | 
|       }, getCommonGeoProperties(mapSeries[0]))); | 
|       geo.zoomLimit = zrUtil.retrieve.apply(null, zrUtil.map(mapSeries, function (singleMapSeries) { | 
|         return singleMapSeries.get('scaleLimit'); | 
|       })); | 
|       geoList.push(geo); | 
|       // Inject resize method | 
|       geo.resize = resizeGeo; | 
|       geo.resize(mapSeries[0], api); | 
|       zrUtil.each(mapSeries, function (singleMapSeries) { | 
|         singleMapSeries.coordinateSystem = geo; | 
|         setGeoCoords(geo, singleMapSeries); | 
|       }); | 
|     }); | 
|     return geoList; | 
|   }; | 
|   /** | 
|    * Fill given regions array | 
|    */ | 
|   GeoCreator.prototype.getFilledRegions = function (originRegionArr, mapName, nameMap, nameProperty) { | 
|     // Not use the original | 
|     var regionsArr = (originRegionArr || []).slice(); | 
|     var dataNameMap = zrUtil.createHashMap(); | 
|     for (var i = 0; i < regionsArr.length; i++) { | 
|       dataNameMap.set(regionsArr[i].name, regionsArr[i]); | 
|     } | 
|     var source = geoSourceManager.load(mapName, nameMap, nameProperty); | 
|     zrUtil.each(source.regions, function (region) { | 
|       var name = region.name; | 
|       var regionOption = dataNameMap.get(name); | 
|       // apply specified echarts style in GeoJSON data | 
|       var specifiedGeoJSONRegionStyle = region.properties && region.properties.echartsStyle; | 
|       if (!regionOption) { | 
|         regionOption = { | 
|           name: name | 
|         }; | 
|         regionsArr.push(regionOption); | 
|       } | 
|       specifiedGeoJSONRegionStyle && zrUtil.merge(regionOption, specifiedGeoJSONRegionStyle); | 
|     }); | 
|     return regionsArr; | 
|   }; | 
|   return GeoCreator; | 
| }(); | 
| var geoCreator = new GeoCreator(); | 
| export default geoCreator; |