提交 b695104d 编写于 作者: P pah100

Merge branch 'master' of https://github.com/pissang/echarts-next

define(function (require) {
var zrUtil = require('zrender/core/util');
// var zrUtil = require('zrender/core/util');
var graphic = require('../../util/graphic');
var RoamController = require('../../component/helper/RoamController');
var MapDraw = require('../../component/helper/MapDraw');
require('../../echarts').extendChartView({
type: 'map',
init: function (ecModel, api) {
var controller = new RoamController(api.getZr(), null, null);
this._controller = controller;
var mapDraw = new MapDraw(api, false);
this._mapDraw = mapDraw;
},
render: function (mapModel, ecModel, api) {
var group = this.group;
var mapDraw = this._mapDraw;
group.removeAll();
group.add(mapDraw.group);
mapModel.needsDrawMap &&
this._renderArea(mapModel, ecModel, api);
mapDraw.draw(mapModel, ecModel, api);
mapModel.get('showLegendSymbol') && ecModel.getComponent('legend')
&& this._renderSymbols(mapModel, ecModel, api);
this._updateController(mapModel, ecModel, api);
},
_updateController: function (mapModel, ecModel, api) {
var geo = mapModel.coordinateSystem;
var controller = this._controller;
controller.off('pan')
.on('pan', function (dx, dy) {
api.dispatch({
type: 'geoRoam',
// component: 'series',
name: mapModel.name,
dx: dx,
dy: dy
});
});
controller.off('zoom')
.on('zoom', function (wheelDelta, mouseX, mouseY) {
api.dispatch({
type: 'geoRoam',
// component: 'series',
name: mapModel.name,
zoom: wheelDelta,
originX: mouseX,
originY: mouseY
});
// TODO Update lineWidth
});
controller.rect = geo.getViewBox();
},
_renderArea: function (mapModel, ecModel, api) {
var data = mapModel.getData();
var geo = mapModel.coordinateSystem;
var mapGroup = new graphic.Group();
var group = this.group;
group.add(mapGroup);
var scale = geo.scale;
mapGroup.position = geo.position.slice();
mapGroup.scale = scale.slice();
zrUtil.each(geo.regions, function (region) {
var regionGroup = new graphic.Group();
var dataIdx = data.indexOfName(region.name);
var itemModel = data.getItemModel(dataIdx);
var itemStyleModel = itemModel.getModel('itemStyle.normal');
var hoverItemStyleModel = itemModel.getModel('itemStyle.emphasis');
var itemStyle = itemStyleModel.getItemStyle();
var hoverItemStyle = hoverItemStyleModel.getItemStyle();
// Competitable with 2.0
var areaStylePath = 'areaStyle.color';
itemStyle.fill = itemStyleModel.get(areaStylePath);
hoverItemStyle.fill = hoverItemStyleModel.get('areaColor');
var styleObj = zrUtil.defaults(
{
// Global visual color is used by symbol
// item visual color may be coded by dataRange
fill: data.getItemVisual(dataIdx, 'color', true)
|| data.getVisual('areaColor')
},
itemStyle
);
styleObj.lineWidth && (styleObj.lineWidth /= scale[0]);
hoverItemStyle.lineWidth && (hoverItemStyle.lineWidth /= scale[0]);
zrUtil.each(region.contours, function (contour) {
var polygon = new graphic.Polygon({
shape: {
points: contour
}
});
polygon.setStyle(styleObj);
graphic.setHoverStyle(polygon, hoverItemStyle);
regionGroup.add(polygon);
});
mapGroup.add(regionGroup);
});
},
_renderSymbols: function (mapModel, ecModel, api) {
......
......@@ -2,107 +2,21 @@ define(function (require) {
'use strict';
var zrUtil = require('zrender/core/util');
var graphic = require('../../util/graphic');
var RoamController = require('../helper/RoamController');
var MapDraw = require('../helper/MapDraw');
return require('../../echarts').extendComponentView({
type: 'geo',
init: function (ecModel, api) {
var mapGroup = new graphic.Group();
var controller = new RoamController(api.getZr(), mapGroup, null);
this._controller = controller;
var mapDraw = new MapDraw(api, true);
this._mapDraw = mapDraw;
this._mapGroup = mapGroup;
this.group.add(mapDraw.group);
},
render: function (geoModel, ecModel, api) {
var group = this.group;
var mapGroup = this._mapGroup;
group.removeAll();
group.add(mapGroup);
mapGroup.removeAll();
var geo = geoModel.coordinateSystem;
var itemStyleModel = geoModel.getModel('itemStyle.normal');
var hoverItemStyleModel = geoModel.getModel('itemStyle.emphasis');
var itemStyle = itemStyleModel.getItemStyle();
var hoverItemStyle = hoverItemStyleModel.getItemStyle();
var scale = geo.scale;
mapGroup.attr({
position: geo.position,
scale: scale
});
itemStyle.lineWidth && (itemStyle.lineWidth /= scale[0]);
hoverItemStyle.lineWidth && (hoverItemStyle.lineWidth /= scale[0]);
zrUtil.each(geo.regions, function (region) {
var regionGroup = new graphic.Group();
zrUtil.each(region.contours, function (contour) {
var polygon = new graphic.Polygon({
shape: {
points: contour
}
});
polygon.setStyle(itemStyle);
graphic.setHoverStyle(polygon, hoverItemStyle);
regionGroup.add(polygon);
});
mapGroup.add(regionGroup);
});
this._updateController(geoModel, ecModel, api);
},
_updateController: function (geoModel, ecModel, api) {
var geo = geoModel.coordinateSystem;
var controller = this._controller;
controller.off('pan')
.off('zoom')
.on('pan', function (dx, dy) {
api.dispatch({
type: 'geoRoam',
component: 'geo',
name: geoModel.name,
dx: dx,
dy: dy
});
})
.on('zoom', function (wheelDelta, mouseX, mouseY) {
api.dispatch({
type: 'geoRoam',
component: 'geo',
name: geoModel.name,
zoom: wheelDelta,
originX: mouseX,
originY: mouseY
});
// TODO Update lineWidth
});
controller.rect = geo.getViewBox();
},
this._mapDraw.draw(geoModel, ecModel, api);
}
});
});
\ No newline at end of file
define(function (require) {
var RoamController = require('./RoamController');
var graphic = require('../../util/graphic');
var zrUtil = require('zrender/core/util');
function MapDraw(api, updateGroup) {
var group = new graphic.Group();
this._controller = new RoamController(
api.getZr(), updateGroup ? group : null, null
);
this.group = group;
}
function getFixedItemStyle(model, scale) {
var itemStyle = model.getItemStyle();
var areaColor = model.get('areaColor');
if (areaColor) {
itemStyle.fill = areaColor;
}
itemStyle.lineWidth && (itemStyle.lineWidth /= scale[0]);
return itemStyle;
}
MapDraw.prototype = {
constructor: MapDraw,
draw: function (mapOrGeoModel, ecModel, api) {
// geoModel has no data
var data = mapOrGeoModel.getData && mapOrGeoModel.getData();
var geo = mapOrGeoModel.coordinateSystem;
var group = this.group;
group.removeAll();
var scale = geo.scale;
group.position = geo.position.slice();
group.scale = scale.slice();
var itemStyleModel;
var hoverItemStyleModel;
var itemStyle;
var hoverItemStyle;
var itemStyleAccessPath = ['itemStyle', 'normal'];
var hoverItemStyleAccessPath = ['itemStyle', 'emphasis'];
if (!data) {
itemStyleModel = mapOrGeoModel.getModel(itemStyleAccessPath);
hoverItemStyleModel = mapOrGeoModel.getModel(hoverItemStyleAccessPath);
itemStyle = getFixedItemStyle(itemStyleModel, scale);
hoverItemStyle = getFixedItemStyle(hoverItemStyleModel, scale);
}
zrUtil.each(geo.regions, function (region) {
var regionGroup = new graphic.Group();
// Use the itemStyle in data if has data
if (data) {
var dataIdx = data.indexOfName(region.name);
var itemModel = data.getItemModel(dataIdx);
var visualColor = data.getItemVisual(dataIdx, 'color');
itemStyleModel = itemModel.getModel(itemStyleAccessPath);
hoverItemStyleModel = itemModel.getModel(hoverItemStyleAccessPath);
itemStyle = getFixedItemStyle(itemStyleModel, scale);
hoverItemStyle = getFixedItemStyle(hoverItemStyleModel, scale);
if (visualColor) {
itemStyle.fill = visualColor;
}
}
zrUtil.each(region.contours, function (contour) {
var polygon = new graphic.Polygon({
shape: {
points: contour
}
});
polygon.setStyle(itemStyle);
graphic.setHoverStyle(polygon, hoverItemStyle);
regionGroup.add(polygon);
});
group.add(regionGroup);
});
this._updateController(mapOrGeoModel, ecModel, api);
},
_updateController: function (mapOrGeoModel, ecModel, api) {
var geo = mapOrGeoModel.coordinateSystem;
var controller = this._controller;
// FIXME mainType, subType 作为 component 的属性?
var mainType = mapOrGeoModel.type.split('.')[0];
controller.off('pan')
.on('pan', function (dx, dy) {
api.dispatch({
type: 'geoRoam',
component: mainType,
name: mapOrGeoModel.name,
dx: dx,
dy: dy
});
});
controller.off('zoom')
.on('zoom', function (wheelDelta, mouseX, mouseY) {
api.dispatch({
type: 'geoRoam',
component: mainType,
name: mapOrGeoModel.name,
zoom: wheelDelta,
originX: mouseX,
originY: mouseY
});
// TODO Update lineWidth
});
controller.rect = geo.getViewBox();
},
}
return MapDraw;
});
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册