UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

166 lines (165 loc) 6.11 kB
import { extend, each, map, mergeAll, retrieve, createHashMap } from "../../../../zrender/lib/core/util.mjs"; import Geo, { geo2DDimensions } from "./Geo.mjs"; import { getLayoutRect } from "../../util/layout.mjs"; import { parsePercent } from "../../util/number.mjs"; import geoSourceManager from "./geoSourceManager.mjs"; import { min, max } from "../../../../zrender/lib/core/vector.mjs"; 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]))) ; else { 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]; 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]); min(leftTop_1, leftTop_1, pt); max(rightBottom_1, rightBottom_1, pt); } }; sampleLine(xMin, yMin, xMax, yMin); sampleLine(xMax, yMin, xMax, yMax); sampleLine(xMax, yMax, xMin, yMax); 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 = [parsePercent(centerOption[0], viewWidth), parsePercent(centerOption[1], viewHeight)]; size = parsePercent(sizeOption, Math.min(viewWidth, viewHeight)); if (!isNaN(center[0]) && !isNaN(center[1]) && !isNaN(size)) { useCenterAndSize = true; } } var viewRect; if (useCenterAndSize) { viewRect = {}; if (aspect > 1) { 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 { var boxLayoutOption = geoModel.getBoxLayoutParams(); boxLayoutOption.aspect = aspect; viewRect = 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")); } function setGeoCoords(geo, model) { each(model.get("geoCoord"), function(geoCoord, name) { geo.addGeoCoord(name, geoCoord); }); } var GeoCreator = function() { function GeoCreator2() { this.dimensions = geo2DDimensions; } GeoCreator2.prototype.create = function(ecModel, api) { var geoList = []; function getCommonGeoProperties(model) { return { nameProperty: model.get("nameProperty"), aspectScale: model.get("aspectScale"), projection: model.get("projection") }; } ecModel.eachComponent("geo", function(geoModel, idx) { var mapName = geoModel.get("map"); var geo = new Geo(mapName + idx, mapName, extend({ nameMap: geoModel.get("nameMap") }, getCommonGeoProperties(geoModel))); geo.zoomLimit = geoModel.get("scaleLimit"); geoList.push(geo); geoModel.coordinateSystem = geo; geo.model = geoModel; 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]; } }); var mapModelGroupBySeries = {}; ecModel.eachSeriesByType("map", function(seriesModel) { if (!seriesModel.getHostGeoModel()) { var mapType = seriesModel.getMapType(); mapModelGroupBySeries[mapType] = mapModelGroupBySeries[mapType] || []; mapModelGroupBySeries[mapType].push(seriesModel); } }); each(mapModelGroupBySeries, function(mapSeries, mapType) { var nameMapList = map(mapSeries, function(singleMapSeries) { return singleMapSeries.get("nameMap"); }); var geo = new Geo(mapType, mapType, extend({ nameMap: mergeAll(nameMapList) }, getCommonGeoProperties(mapSeries[0]))); geo.zoomLimit = retrieve.apply(null, map(mapSeries, function(singleMapSeries) { return singleMapSeries.get("scaleLimit"); })); geoList.push(geo); geo.resize = resizeGeo; geo.resize(mapSeries[0], api); each(mapSeries, function(singleMapSeries) { singleMapSeries.coordinateSystem = geo; setGeoCoords(geo, singleMapSeries); }); }); return geoList; }; GeoCreator2.prototype.getFilledRegions = function(originRegionArr, mapName, nameMap, nameProperty) { var regionsArr = (originRegionArr || []).slice(); var dataNameMap = createHashMap(); for (var i = 0; i < regionsArr.length; i++) { dataNameMap.set(regionsArr[i].name, regionsArr[i]); } var source = geoSourceManager.load(mapName, nameMap, nameProperty); each(source.regions, function(region) { var name = region.name; !dataNameMap.get(name) && regionsArr.push({ name }); }); return regionsArr; }; return GeoCreator2; }(); var geoCreator = new GeoCreator(); var geoCreator$1 = geoCreator; export { geoCreator$1 as default };