123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- /*
- * 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;
- !dataNameMap.get(name) && regionsArr.push({
- name: name
- });
- });
- return regionsArr;
- };
- return GeoCreator;
- }();
- var geoCreator = new GeoCreator();
- export default geoCreator;
|