提交 c76ae836 编写于 作者: P pah100

Merge branch 'master' of https://github.com/ecomfe/echarts

......@@ -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;
};
define(function (require) {
var echarts = require('echarts');
/**
* @override
*/
Overlay.prototype.draw = function () {};
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,55 @@ 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;
// For deciding which dimensions to use when creating list data
BMapCoordSys.dimensions = BMapCoordSys.prototype.dimensions;
function createOverlayCtor() {
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 () {};
return Overlay;
}
BMapCoordSys.create = function (ecModel, api) {
var bmapCoordSys;
var root = api.getDom();
// TODO Dispose
ecModel.eachComponent('bmap', function (bmapModel) {
var viewportRoot = api.getZr().painter.getViewportRoot();
if (typeof BMap === 'undefined') {
throw new Error('BMap api is not loaded');
}
Overlay = Overlay || createOverlayCtor();
if (bmapCoordSys) {
throw new Error('Only one bmap component can exist');
}
......@@ -69,72 +95,28 @@ define(function require() {
}
bmapRoot = document.createElement('div');
bmapRoot.style.cssText = 'width:100%;height:100%';
var viewportRoot = api.getZr().painter.getViewportRoot();
root.insertBefore(bmapRoot, viewportRoot);
var bmap = bmapModel.__bmap = new BMap.Map(bmapRoot);
var overlay = new Overlay(viewportRoot);
bmap.addOverlay(overlay);
}
var bmap = bmapModel.__bmap;
// Set bmap options
var center = bmapModel.get('center');
if (center) {
var pt = new BMap.Point(center[0], center[1]);
bmap.centerAndZoom(pt, bmapModel.get('zoom'));
}
var roam = bmapModel.get('roam');
if (roam && roam !== 'scale') {
bmap.enableDragging();
}
else {
bmap.disableDragging();
}
if (roam && roam !== 'move') {
bmap.enableScrollWheelZoom();
bmap.enableDoubleClickZoom();
bmap.enablePinchToZoom();
}
else {
bmap.disableScrollWheelZoom();
bmap.disableDoubleClickZoom();
bmap.disablePinchToZoom();
}
bmap.setMapStyle(bmapModel.get('mapStyle'));
var moveHandler = function () {
var offsetEl = viewportRoot.parentNode.parentNode.parentNode;
var mapOffset = [
-parseInt(offsetEl.style.left) || 0,
-parseInt(offsetEl.style.top) || 0
];
viewportRoot.style.left = mapOffset[0] + 'px';
viewportRoot.style.top = mapOffset[1] + 'px';
bmapCoordSys.setMapOffset(mapOffset);
bmapModel.__mapOffset = mapOffset;
api.dispatchAction({
type: 'bmapRoam'
});
};
bmap.addEventListener('moving', moveHandler);
bmap.addEventListener('moveend', moveHandler);
bmap.addEventListener('zoomend', function () {
api.dispatchAction({
type: 'bmapRoam'
});
});
// Set bmap options
var center = bmapModel.get('center');
if (center) {
var pt = new BMap.Point(center[0], center[1]);
bmap.centerAndZoom(pt, bmapModel.get('zoom'));
}
bmapCoordSys = new BMapCoordSys(bmapModel.__bmap);
bmapCoordSys = new BMapCoordSys(bmap, api);
bmapCoordSys.setMapOffset(bmapModel.__mapOffset || [0, 0]);
bmapModel.coordinateSystem = bmapCoordSys;
});
ecModel.eachSeries(function (seriesModel) {
var coordSys = seriesModel.get('coordinateSystem');
if (coordSys === 'geo') {
if (seriesModel.get('coordinateSystem') === 'bmap') {
seriesModel.coordinateSystem = bmapCoordSys;
}
});
......
......@@ -8,6 +8,11 @@ define(function (require) {
return this.__bmap;
},
setCenterAndZoom: function (center, zoom) {
this.option.center = center;
this.option.zoom = zoom;
},
defaultOption: {
center: null,
......
define(function (require) {
return require('echarts').extendComponentView({
type: 'bmap'
type: 'bmap',
render: function (bMapModel, ecModel, api) {
var rendering = true;
var bmap = bMapModel.getBMap();
var viewportRoot = api.getZr().painter.getViewportRoot();
var coordSys = bMapModel.coordinateSystem;
var moveHandler = function (type, target) {
if (rendering) {
return;
}
var offsetEl = viewportRoot.parentNode.parentNode.parentNode;
var mapOffset = [
-parseInt(offsetEl.style.left, 10) || 0,
-parseInt(offsetEl.style.top, 10) || 0
];
viewportRoot.style.left = mapOffset[0] + 'px';
viewportRoot.style.top = mapOffset[1] + 'px';
coordSys.setMapOffset(mapOffset);
bMapModel.__mapOffset = mapOffset;
api.dispatchAction({
type: 'bmapRoam'
});
};
function zoomEndHandler() {
if (rendering) {
return;
}
api.dispatchAction({
type: 'bmapRoam'
});
}
bmap.removeEventListener('moving', this._oldMoveHandler);
// FIXME
// Moveend may be triggered by centerAndZoom method when creating coordSys next time
// bmap.removeEventListener('moveend', this._oldMoveHandler);
bmap.removeEventListener('zoomend', this._oldZoomEndHandler);
bmap.addEventListener('moving', moveHandler);
// bmap.addEventListener('moveend', moveHandler);
bmap.addEventListener('zoomend', zoomEndHandler);
this._oldMoveHandler = moveHandler;
this._oldZoomEndHandler = zoomEndHandler;
var roam = bMapModel.get('roam');
if (roam && roam !== 'scale') {
bmap.enableDragging();
}
else {
bmap.disableDragging();
}
if (roam && roam !== 'move') {
bmap.enableScrollWheelZoom();
bmap.enableDoubleClickZoom();
bmap.enablePinchToZoom();
}
else {
bmap.disableScrollWheelZoom();
bmap.disableDoubleClickZoom();
bmap.disablePinchToZoom();
}
bmap.setMapStyle(bMapModel.get('mapStyle'));
coordSys.setMapOffset(bMapModel.__mapOffset || [0, 0]);
rendering = false;
}
});
});
\ No newline at end of file
......@@ -14,8 +14,11 @@ define(function (require) {
type: 'bmapRoam',
event: 'bmapRoam',
update: 'updateLayout'
}, function () {
// Do nothing
// console.log(payload);
}, function (payload, ecModel) {
ecModel.eachComponent('bmap', function (bMapModel) {
var bmap = bMapModel.getBMap();
var center = bmap.getCenter();
bMapModel.setCenterAndZoom([center.lng, center.lat], bmap.getZoom());
});
});
});
\ No newline at end of file
......@@ -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);
......
......@@ -31,8 +31,8 @@ define(function (require) {
);
},
updateLayout: function () {
this._symbolDraw.updateLayout();
updateLayout: function (seriesModel) {
this._symbolDraw.updateLayout(seriesModel);
},
remove: function (ecModel, api) {
......
......@@ -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) {
......
......@@ -1257,6 +1257,8 @@ define(function (require) {
echarts.graphic = require('./util/graphic');
echarts.number = require('./util/number');
echarts.format = require('./util/format');
echarts.matrix = require('zrender/core/matrix');
echarts.vector = require('zrender/core/vector');
echarts.util = {};
each([
......
......@@ -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;
......
......@@ -40,6 +40,8 @@ define(function(require) {
graphic.RadialGradient = require('zrender/graphic/RadialGradient');
graphic.BoundingRect = require('zrender/core/BoundingRect');
/**
* Extend shape with parameters
*/
......
......@@ -191,9 +191,9 @@
var toCoord = geoCoordMap[dataItem[1].name];
if (fromCoord && toCoord) {
res.push([{
geoCoord: fromCoord
coord: fromCoord
}, {
geoCoord: toCoord
coord: toCoord
}]);
}
}
......
......@@ -29,8 +29,6 @@
'echarts/component/tooltip'
], function (echarts, theme) {
echarts.registerTheme('dark', theme);
var chart = echarts.init(document.getElementById('main'), 'dark');
var xAxisData = [];
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册