UNPKG

cione-comp-lib

Version:

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

121 lines (120 loc) 4.07 kB
import "../../../../echarts/lib/echarts.mjs"; import glmatrix from "../../../../claygl/src/glmatrix/index.mjs"; import fixTextCoords from "../../../../echarts/lib/coord/geo/fix/textCoord.mjs"; import fixGeoCoords from "../../../../echarts/lib/coord/geo/fix/geoCoord.mjs"; import BoundingRect from "../../../../zrender/lib/core/BoundingRect.mjs"; import parseGeoJSON from "../../../../echarts/lib/coord/geo/parseGeoJson.mjs"; var vec3 = glmatrix.vec3; var mat4 = glmatrix.mat4; var geoFixFuncs = [fixTextCoords, fixGeoCoords]; function Geo3D(name, map, geoJson, specialAreas, nameMap) { this.name = name; this.map = map; this.regionHeight = 0; this.regions = []; this._nameCoordMap = {}; this.loadGeoJson(geoJson, specialAreas, nameMap); this.transform = mat4.identity(new Float64Array(16)); this.invTransform = mat4.identity(new Float64Array(16)); this.extrudeY = true; this.altitudeAxis; } Geo3D.prototype = { constructor: Geo3D, type: "geo3D", dimensions: ["lng", "lat", "alt"], containPoint: function() { }, loadGeoJson: function(geoJson, specialAreas, nameMap) { var parseGeoJSON$1 = parseGeoJSON || parseGeoJSON; try { this.regions = geoJson ? parseGeoJSON$1(geoJson) : []; } catch (e) { throw "Invalid geoJson format\n" + e; } specialAreas = specialAreas || {}; nameMap = nameMap || {}; var regions = this.regions; var regionsMap = {}; for (var i = 0; i < regions.length; i++) { var regionName = regions[i].name; regionName = nameMap[regionName] || regionName; regions[i].name = regionName; regionsMap[regionName] = regions[i]; this.addGeoCoord(regionName, regions[i].getCenter()); var specialArea = specialAreas[regionName]; if (specialArea) { regions[i].transformTo(specialArea.left, specialArea.top, specialArea.width, specialArea.height); } } this._regionsMap = regionsMap; this._geoRect = null; geoFixFuncs.forEach(function(fixFunc) { fixFunc(this); }, this); }, getGeoBoundingRect: function() { if (this._geoRect) { return this._geoRect; } var rect; var regions = this.regions; for (var i = 0; i < regions.length; i++) { var regionRect = regions[i].getBoundingRect(); rect = rect || regionRect.clone(); rect.union(regionRect); } return this._geoRect = rect || new BoundingRect(0, 0, 0, 0); }, addGeoCoord: function(name, geoCoord) { this._nameCoordMap[name] = geoCoord; }, getRegion: function(name) { return this._regionsMap[name]; }, getRegionByCoord: function(coord) { var regions = this.regions; for (var i = 0; i < regions.length; i++) { if (regions[i].contain(coord)) { return regions[i]; } } }, setSize: function(width, height, depth) { this.size = [width, height, depth]; var rect = this.getGeoBoundingRect(); var scaleX = width / rect.width; var scaleZ = -depth / rect.height; var translateX = -width / 2 - rect.x * scaleX; var translateZ = depth / 2 - rect.y * scaleZ; var position = this.extrudeY ? [translateX, 0, translateZ] : [translateX, translateZ, 0]; var scale = this.extrudeY ? [scaleX, 1, scaleZ] : [scaleX, scaleZ, 1]; var m = this.transform; mat4.identity(m); mat4.translate(m, m, position); mat4.scale(m, m, scale); mat4.invert(this.invTransform, m); }, dataToPoint: function(data, out) { out = out || []; var extrudeCoordIndex = this.extrudeY ? 1 : 2; var sideCoordIndex = this.extrudeY ? 2 : 1; var altitudeVal = data[2]; if (isNaN(altitudeVal)) { altitudeVal = 0; } out[0] = data[0]; out[sideCoordIndex] = data[1]; if (this.altitudeAxis) { out[extrudeCoordIndex] = this.altitudeAxis.dataToCoord(altitudeVal); } else { out[extrudeCoordIndex] = 0; } out[extrudeCoordIndex] += this.regionHeight; vec3.transformMat4(out, out, this.transform); return out; }, pointToData: function(point, out) { } }; export { Geo3D as default };