提交 b849c5e5 编写于 作者: L lang

Optimize extended coordinate system for BMap extension

上级 cf1b877c
......@@ -10,9 +10,7 @@
'../wrap/startExtension.js',
'../wrap/nut.js'
],
endFile: [
'../wrap/endExtension.js'
]
end: 'require("extension/bmap/bmap") }));'
},
include:[
'extension/bmap/bmap'
......
define(function require() {
function Overlay(root) {
this._root = root;
}
Overlay.prototype = new BMap.Overlay();
/**
* 初始化
*
* @param {BMap.Map} map
* @override
*/
Overlay.prototype.initialize = function (map) {
map.getPanes().labelPane.appendChild(this._root);
return this._root;
};
/**
* @override
*/
Overlay.prototype.draw = function () {};
define(function (require) {
var echarts = require('echarts');
function BMapCoordSys(bmap) {
function BMapCoordSys(bmap, api) {
this._bmap = bmap;
this.dimensions = ['lng', 'lat'];
this._mapOffset = [0, 0];
this._api = api;
}
BMapCoordSys.prototype.dimensions = ['lng', 'lat'];
BMapCoordSys.prototype.setMapOffset = function (mapOffset) {
this._mapOffset = mapOffset;
};
......@@ -53,11 +35,47 @@ define(function require() {
return [pt.lng, pt.lat];
};
BMapCoordSys.prototype.getViewRect = function () {
var api = this._api;
return new echarts.graphic.BoundingRect(0, 0, api.getWidth(), api.getHeight());
};
BMapCoordSys.prototype.getRoamTransform = function () {
return echarts.matrix.create();
};
var Overlay;
BMapCoordSys.create = function (ecModel, api) {
var bmapCoordSys;
var root = api.getDom();
// TODO Dispose
ecModel.eachComponent('bmap', function (bmapModel) {
if (typeof BMap === 'undefined') {
throw new Error('BMap api is not loaded');
}
if (!Overlay) {
Overlay = function (root) {
this._root = root;
}
Overlay.prototype = new BMap.Overlay();
/**
* 初始化
*
* @param {BMap.Map} map
* @override
*/
Overlay.prototype.initialize = function (map) {
map.getPanes().labelPane.appendChild(this._root);
return this._root;
};
/**
* @override
*/
Overlay.prototype.draw = function () {};
}
if (bmapCoordSys) {
throw new Error('Only one bmap component can exist');
}
......@@ -127,14 +145,14 @@ define(function require() {
});
});
}
bmapCoordSys = new BMapCoordSys(bmapModel.__bmap);
bmapCoordSys = new BMapCoordSys(bmapModel.__bmap, api);
bmapCoordSys.setMapOffset(bmapModel.__mapOffset || [0, 0]);
bmapModel.coordinateSystem = bmapCoordSys;
});
ecModel.eachSeries(function (seriesModel) {
var coordSys = seriesModel.get('coordinateSystem');
if (coordSys === 'geo') {
if (coordSys === 'bmap') {
seriesModel.coordinateSystem = bmapCoordSys;
}
});
......
......@@ -6,7 +6,7 @@ define(function(require) {
var echartsAPIList = [
'getDom', 'getZr', 'getWidth', 'getHeight', 'dispatchAction',
'on', 'off', 'getDataURL', 'getConnectedDataURL'
'on', 'off', 'getDataURL', 'getConnectedDataURL', 'getModel', 'getOption'
];
function ExtensionAPI(chartInstance) {
......
......@@ -7,7 +7,6 @@
*/
define(function (require) {
var BRUSH_SIZE = 20;
var GRADIENT_LEVELS = 256;
var zrUtil = require('zrender/core/util');
......@@ -21,6 +20,7 @@ define(function (require) {
this.canvas = canvas;
this.blurSize = 30;
this.pointSize = 20;
this.opacity = 1;
this._gradientPixels = {};
......@@ -37,7 +37,7 @@ define(function (require) {
var brush = this._getBrush();
var gradientInRange = this._getGradient(data, colorFunc, 'inRange');
var gradientOutOfRange = this._getGradient(data, colorFunc, 'outOfRange');
var r = BRUSH_SIZE + this.blurSize;
var r = this.pointSize + this.blurSize;
var canvas = this.canvas;
var ctx = canvas.getContext('2d');
......@@ -91,7 +91,7 @@ define(function (require) {
_getBrush: function() {
var brushCanvas = this._brushCanvas || (this._brushCanvas = zrUtil.createCanvas());
// set brush size
var r = BRUSH_SIZE + this.blurSize;
var r = this.pointSize + this.blurSize;
var d = r * 2;
brushCanvas.width = d;
brushCanvas.height = d;
......@@ -110,7 +110,7 @@ define(function (require) {
// draw circle in the left to the canvas
ctx.beginPath();
ctx.arc(-r, r, BRUSH_SIZE, 0, Math.PI * 2, true);
ctx.arc(-r, r, this.pointSize, 0, Math.PI * 2, true);
ctx.closePath();
ctx.fill();
return brushCanvas;
......
......@@ -26,9 +26,9 @@ define(function (require) {
// Geo coordinate system
geoIndex: 0,
// No blur
// Available when heatmap is on geo
blurSize: 20
blurSize: 30,
pointSize: 20
}
});
});
\ No newline at end of file
......@@ -49,6 +49,12 @@ define(function (require) {
};
}
function isGeoCoordSys(coordSys) {
var dimensions = coordSys.dimensions;
// Not use coorSys.type === 'geo' because coordSys maybe extended
return dimensions[0] === 'lng' && dimensions[1] === 'lat';
}
return require('../../echarts').extendChartView({
type: 'heatmap',
......@@ -72,7 +78,7 @@ define(function (require) {
if (coordSys.type === 'cartesian2d') {
this._renderOnCartesian(coordSys, seriesModel, api);
}
else if (coordSys.type === 'geo') {
else if (isGeoCoordSys(coordSys)) {
this._renderOnGeo(
coordSys, seriesModel, visualMapOfThisSeries, api
);
......@@ -150,6 +156,7 @@ define(function (require) {
var data = seriesModel.getData();
var hmLayer = this._hmLayer || (this._hmLayer || new HeatmapLayer());
hmLayer.blurSize = seriesModel.get('blurSize');
hmLayer.pointSize = seriesModel.get('pointSize');
var rect = geo.getViewRect().clone();
var roamTransform = geo.getRoamTransform();
......
......@@ -33,11 +33,14 @@ define(function(require) {
var creator = creators[coordSysName];
var registeredCoordSys = CoordinateSystem.get(coordSysName);
// FIXME
var result = creator ? creator(data, seriesModel, ecModel)
var result = creator && creator(data, seriesModel, ecModel);
var dimensions = result && result.dimensions;
if (!dimensions) {
// Get dimensions from registered coordinate system
: ((registeredCoordSys && registeredCoordSys.dimensions) || ['x', 'y']);
var dimensions = result.dimensions;
var categoryAxisModel = result.categoryAxisModel;
dimensions = (registeredCoordSys && registeredCoordSys.dimensions) || ['x', 'y'];
dimensions = completeDimensions(dimensions, data, dimensions.concat(['value']));
}
var categoryAxisModel = result && result.categoryAxisModel;
var categoryDimIndex = dimensions[0].type === 'ordinal' ? 0
: (dimensions[1].type === 'ordinal' ? 1 : -1);
......@@ -150,7 +153,7 @@ define(function(require) {
function createNameList(result, data) {
var nameList = [];
if (result.categoryAxisModel) {
if (result && result.categoryAxisModel) {
// FIXME Two category axis
var categories = result.categoryAxisModel.getCategories();
if (categories) {
......
......@@ -5,7 +5,7 @@ define(function (require) {
var SeriesModel = require('../../model/Series');
var List = require('../../data/List');
var zrUtil = require('zrender/core/util');
// var CoordinateSystem = require('../../CoordinateSystem');
var CoordinateSystem = require('../../CoordinateSystem');
return SeriesModel.extend({
......@@ -26,13 +26,17 @@ define(function (require) {
));
});
var coordSys = option.coordinateSystem;
// var coordSys = option.coordinateSystem;
// if (coordSys !== 'cartesian2d' && coordSys !== 'geo') {
// throw new Error('Coordinate system can only be cartesian2d or geo in lines');
// }
// var dimensions = coordSys === 'geo' ? ['lng', 'lat'] : ['x', 'y'];
var dimensions = (coordSys && coordSys.dimensions) || ['x', 'y'];
var coordSys = CoordinateSystem.get(option.coordinateSystem);
if (!coordSys) {
throw new Error('Invalid coordinate system');
}
var dimensions = coordSys.dimensions;
var fromData = new List(dimensions, this);
var toData = new List(dimensions, this);
......
......@@ -26,12 +26,6 @@ define(function (require) {
*/
this.name = name;
/**
* @param {Array.<string>}
* @readOnly
*/
this.dimensions = ['x', 'y'];
Transformable.call(this);
this._roamTransform = new TransformDummy();
......@@ -45,6 +39,12 @@ define(function (require) {
type: 'view',
/**
* @param {Array.<string>}
* @readOnly
*/
dimensions: ['x', 'y'],
/**
* Set bounding rect
* @param {number} x
......
......@@ -8,12 +8,6 @@ define(function(require) {
function Cartesian2D(name) {
Cartesian.call(this, name);
/**
* @type {Array.<string>}
* @readOnly
*/
this.dimensions = ['x', 'y'];
}
Cartesian2D.prototype = {
......@@ -22,6 +16,12 @@ define(function(require) {
type: 'cartesian2d',
/**
* @type {Array.<string>}
* @readOnly
*/
dimensions: ['x', 'y'],
/**
* Base axis will be used on stacking.
*
......
......@@ -388,6 +388,9 @@ define(function(require, factory) {
return grids;
};
// For deciding which dimensions to use when creating list data
Grid.dimensions = Cartesian2D.prototype.dimensions;
require('../../CoordinateSystem').register('grid', Grid);
return Grid;
......
......@@ -35,11 +35,6 @@ define(function (require) {
* @type {string}
*/
this.map = map;
/**
* @param {Array.<string>}
* @readOnly
*/
this.dimensions = ['lng', 'lat'];
this._nameCoordMap = {};
......@@ -52,6 +47,12 @@ define(function (require) {
type: 'geo',
/**
* @param {Array.<string>}
* @readOnly
*/
dimensions: ['lng', 'lat'],
/**
* @param {Object} geoJson
* @param {Object} [specialAreas]
......
......@@ -55,6 +55,9 @@ define(function (require) {
var geoCreator = {
// For deciding which dimensions to use when creating list data
dimensions: Geo.prototype.dimensions,
create: function (ecModel, api) {
var geoList = [];
......
......@@ -32,12 +32,6 @@ define(function(require) {
*/
this.cy = 0;
/**
* @param {Array.<string>}
* @readOnly
*/
this.dimensions = ['radius', 'angle'];
/**
* @type {module:echarts/coord/polar/RadiusAxis}
* @private
......@@ -57,6 +51,12 @@ define(function(require) {
type: 'polar',
/**
* @param {Array.<string>}
* @readOnly
*/
dimensions: ['radius', 'angle'],
/**
* If contain coord
* @param {Array.<number>} point
......
......@@ -94,6 +94,8 @@ define(function (require) {
var polarCreator = {
dimensions: Polar.prototype.dimensions,
create: function (ecModel, api) {
var polarList = [];
ecModel.eachComponent('polar', function (polarModel, idx) {
......
......@@ -191,7 +191,6 @@ define(function(require) {
y = lastCoord;
width = columnWidth;
height = coord[1] - lastCoord;
if (Math.abs(height) < barMinHeight) {
// Include zero to has a positive bar
height = (height <= 0 ? -1 : 1) * barMinHeight;
......
......@@ -191,9 +191,9 @@
var toCoord = geoCoordMap[dataItem[1].name];
if (fromCoord && toCoord) {
res.push([{
geoCoord: fromCoord
coord: fromCoord
}, {
geoCoord: toCoord
coord: toCoord
}]);
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册