UNPKG

cione-comp-lib

Version:

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

136 lines (135 loc) 4.76 kB
import Geo3D from "./geo3D/Geo3D.mjs"; import "../../../echarts/lib/echarts.mjs"; import { getLayoutRect } from "../../../echarts/lib/util/layout.mjs"; import ViewGL from "../core/ViewGL.mjs"; import retrieve from "../util/retrieve.mjs"; import { getMap } from "../../../echarts/lib/core/echarts.mjs"; import { createScale } from "../../../echarts/lib/export/api/helper.mjs"; import Axis from "../../../echarts/lib/coord/Axis.mjs"; function resizeGeo3D(geo3DModel, api) { var boxLayoutOption = geo3DModel.getBoxLayoutParams(); var viewport = getLayoutRect(boxLayoutOption, { width: api.getWidth(), height: api.getHeight() }); viewport.y = api.getHeight() - viewport.y - viewport.height; this.viewGL.setViewport(viewport.x, viewport.y, viewport.width, viewport.height, api.getDevicePixelRatio()); var geoRect = this.getGeoBoundingRect(); var aspect = geoRect.width / geoRect.height * (geo3DModel.get("aspectScale") || 0.75); var width = geo3DModel.get("boxWidth"); var depth = geo3DModel.get("boxDepth"); var height = geo3DModel.get("boxHeight"); if (height == null) { height = 5; } if (isNaN(width) && isNaN(depth)) { width = 100; } if (isNaN(depth)) { depth = width / aspect; } else if (isNaN(width)) { width = depth / aspect; } this.setSize(width, height, depth); this.regionHeight = geo3DModel.get("regionHeight"); if (this.altitudeAxis) { this.altitudeAxis.setExtent(0, Math.max(height - this.regionHeight, 0)); } } function updateGeo3D(ecModel, api) { var altitudeDataExtent = [Infinity, -Infinity]; ecModel.eachSeries(function(seriesModel) { if (seriesModel.coordinateSystem !== this) { return; } if (seriesModel.type === "series.map3D") { return; } var data = seriesModel.getData(); var altDims = seriesModel.coordDimToDataDim("alt"); var altDim = altDims && altDims[0]; if (altDim) { var dataExtent = data.getDataExtent(altDim, true); altitudeDataExtent[0] = Math.min(altitudeDataExtent[0], dataExtent[0]); altitudeDataExtent[1] = Math.max(altitudeDataExtent[1], dataExtent[1]); } }, this); if (altitudeDataExtent && isFinite(altitudeDataExtent[1] - altitudeDataExtent[0])) { var scale = createScale(altitudeDataExtent, { type: "value", min: "dataMin", max: "dataMax" }); this.altitudeAxis = new Axis("altitude", scale); this.resize(this.model, api); } } var idStart = 0; var geo3DCreator = { dimensions: Geo3D.prototype.dimensions, create: function(ecModel, api) { var geo3DList = []; if (!getMap) { throw new Error("geo3D component depends on geo component"); } function createGeo3D(componentModel, idx) { var geo3D = geo3DCreator.createGeo3D(componentModel); componentModel.__viewGL = componentModel.__viewGL || new ViewGL(); geo3D.viewGL = componentModel.__viewGL; componentModel.coordinateSystem = geo3D; geo3D.model = componentModel; geo3DList.push(geo3D); geo3D.resize = resizeGeo3D; geo3D.resize(componentModel, api); geo3D.update = updateGeo3D; } ecModel.eachComponent("geo3D", function(geo3DModel, idx) { createGeo3D(geo3DModel); }); ecModel.eachSeriesByType("map3D", function(map3DModel, idx) { var coordSys = map3DModel.get("coordinateSystem"); if (coordSys == null) { coordSys = "geo3D"; } if (coordSys === "geo3D") { createGeo3D(map3DModel); } }); ecModel.eachSeries(function(seriesModel) { if (seriesModel.get("coordinateSystem") === "geo3D") { if (seriesModel.type === "series.map3D") { return; } var geo3DModel = seriesModel.getReferringComponents("geo3D").models[0]; if (!geo3DModel) { geo3DModel = ecModel.getComponent("geo3D"); } if (!geo3DModel) { throw new Error('geo "' + retrieve.firstNotNull(seriesModel.get("geo3DIndex"), seriesModel.get("geo3DId"), 0) + '" not found'); } seriesModel.coordinateSystem = geo3DModel.coordinateSystem; } }); return geo3DList; }, createGeo3D: function(componentModel) { var mapData = componentModel.get("map"); var name; if (typeof mapData === "string") { name = mapData; mapData = getMap(mapData); } else { if (mapData && mapData.features) { mapData = { geoJson: mapData }; } } if (name == null) { name = "GEO_ANONYMOUS_" + idStart++; } return new Geo3D(name + idStart++, name, mapData && mapData.geoJson, mapData && mapData.specialAreas, componentModel.get("nameMap")); } }; var geo3DCreator$1 = geo3DCreator; export { geo3DCreator$1 as default };