145 lines
4.5 KiB
JavaScript
145 lines
4.5 KiB
JavaScript
import * as echarts from 'echarts/lib/echarts';
|
|
import componentViewControlMixin from '../../component/common/componentViewControlMixin';
|
|
import componentPostEffectMixin from '../../component/common/componentPostEffectMixin';
|
|
import componentLightMixin from '../../component/common/componentLightMixin';
|
|
import componentShadingMixin from '../../component/common/componentShadingMixin';
|
|
import geo3DModelMixin from '../../coord/geo3D/geo3DModelMixin';
|
|
import formatUtil from '../../util/format';
|
|
import formatTooltip from '../common/formatTooltip';
|
|
import geo3DCreator from '../../coord/geo3DCreator';
|
|
|
|
function transformPolygon(mapbox3DCoordSys, poly) {
|
|
var newPoly = [];
|
|
|
|
for (var k = 0; k < poly.length; k++) {
|
|
newPoly.push(mapbox3DCoordSys.dataToPoint(poly[k]));
|
|
}
|
|
|
|
return newPoly;
|
|
}
|
|
|
|
var Map3DSeries = echarts.SeriesModel.extend({
|
|
type: 'series.map3D',
|
|
layoutMode: 'box',
|
|
coordinateSystem: null,
|
|
visualStyleAccessPath: 'itemStyle',
|
|
optionUpdated: function (newOpt) {
|
|
newOpt = newOpt || {};
|
|
var coordSysType = this.get('coordinateSystem');
|
|
|
|
if (coordSysType == null || coordSysType === 'geo3D') {
|
|
return;
|
|
}
|
|
|
|
if (process.env.NODE_ENV !== 'production') {
|
|
var propsNeedToCheck = ['left', 'top', 'width', 'height', 'boxWidth', 'boxDepth', 'boxHeight', 'light', 'viewControl', 'postEffect', 'temporalSuperSampling', 'environment', 'groundPlane'];
|
|
var ignoredProperties = [];
|
|
propsNeedToCheck.forEach(function (propName) {
|
|
if (newOpt[propName] != null) {
|
|
ignoredProperties.push(propName);
|
|
}
|
|
});
|
|
|
|
if (ignoredProperties.length) {
|
|
console.warn('Property %s in map3D series will be ignored if coordinate system is %s', ignoredProperties.join(', '), coordSysType);
|
|
}
|
|
}
|
|
|
|
if (this.get('groundPlane.show')) {
|
|
// Force disable groundPlane if map3D has other coordinate systems.
|
|
this.option.groundPlane.show = false;
|
|
} // Reset geo.
|
|
|
|
|
|
this._geo = null;
|
|
},
|
|
getInitialData: function (option) {
|
|
option.data = this.getFilledRegions(option.data, option.map);
|
|
var dimensions = echarts.helper.createDimensions(option.data, {
|
|
coordDimensions: ['value']
|
|
});
|
|
var list = new echarts.List(dimensions, this);
|
|
list.initData(option.data);
|
|
var regionModelMap = {};
|
|
list.each(function (idx) {
|
|
var name = list.getName(idx);
|
|
var itemModel = list.getItemModel(idx);
|
|
regionModelMap[name] = itemModel;
|
|
});
|
|
this._regionModelMap = regionModelMap;
|
|
return list;
|
|
},
|
|
formatTooltip: function (dataIndex) {
|
|
return formatTooltip(this, dataIndex);
|
|
},
|
|
getRegionModel: function (idx) {
|
|
var name = this.getData().getName(idx);
|
|
return this._regionModelMap[name] || new echarts.Model(null, this);
|
|
},
|
|
getRegionPolygonCoords: function (idx) {
|
|
var coordSys = this.coordinateSystem;
|
|
var name = this.getData().getName(idx);
|
|
|
|
if (coordSys.transform) {
|
|
var region = coordSys.getRegion(name);
|
|
return region ? region.geometries : [];
|
|
} else {
|
|
if (!this._geo) {
|
|
this._geo = geo3DCreator.createGeo3D(this);
|
|
}
|
|
|
|
var region = this._geo.getRegion(name);
|
|
|
|
var ret = [];
|
|
|
|
for (var k = 0; k < region.geometries.length; k++) {
|
|
var geo = region.geometries[k];
|
|
var interiors = [];
|
|
var exterior = transformPolygon(coordSys, geo.exterior);
|
|
|
|
if (interiors && interiors.length) {
|
|
for (var m = 0; m < geo.interiors.length; m++) {
|
|
interiors.push(transformPolygon(coordSys, interiors[m]));
|
|
}
|
|
}
|
|
|
|
ret.push({
|
|
interiors: interiors,
|
|
exterior: exterior
|
|
});
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Format label
|
|
* @param {string} name Region name
|
|
* @param {string} [status='normal'] 'normal' or 'emphasis'
|
|
* @return {string}
|
|
*/
|
|
getFormattedLabel: function (dataIndex, status) {
|
|
var text = formatUtil.getFormattedLabel(this, dataIndex, status);
|
|
|
|
if (text == null) {
|
|
text = this.getData().getName(dataIndex);
|
|
}
|
|
|
|
return text;
|
|
},
|
|
defaultOption: {
|
|
// Support geo3D, mapbox, maptalks3D
|
|
coordinateSystem: 'geo3D',
|
|
// itemStyle: {},
|
|
// height,
|
|
// label: {}
|
|
data: null
|
|
}
|
|
});
|
|
echarts.util.merge(Map3DSeries.prototype, geo3DModelMixin);
|
|
echarts.util.merge(Map3DSeries.prototype, componentViewControlMixin);
|
|
echarts.util.merge(Map3DSeries.prototype, componentPostEffectMixin);
|
|
echarts.util.merge(Map3DSeries.prototype, componentLightMixin);
|
|
echarts.util.merge(Map3DSeries.prototype, componentShadingMixin);
|
|
export default Map3DSeries; |