You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49885 lines
2.0 MiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

(function(_global){
var require, define;
(function () {
var mods = {};
define = function (id, deps, factory) {
mods[id] = {
id: id,
deps: deps,
factory: factory,
defined: 0,
exports: {},
require: createRequire(id)
};
};
require = createRequire('');
function normalize(id, baseId) {
if (!baseId) {
return id;
}
if (id.indexOf('.') === 0) {
var basePath = baseId.split('/');
var namePath = id.split('/');
var baseLen = basePath.length - 1;
var nameLen = namePath.length;
var cutBaseTerms = 0;
var cutNameTerms = 0;
pathLoop: for (var i = 0; i < nameLen; i++) {
switch (namePath[i]) {
case '..':
if (cutBaseTerms < baseLen) {
cutBaseTerms++;
cutNameTerms++;
}
else {
break pathLoop;
}
break;
case '.':
cutNameTerms++;
break;
default:
break pathLoop;
}
}
basePath.length = baseLen - cutBaseTerms;
namePath = namePath.slice(cutNameTerms);
return basePath.concat(namePath).join('/');
}
return id;
}
function createRequire(baseId) {
var cacheMods = {};
function localRequire(id, callback) {
if (typeof id === 'string') {
var exports = cacheMods[id];
if (!exports) {
exports = getModExports(normalize(id, baseId));
cacheMods[id] = exports;
}
return exports;
}
else if (id instanceof Array) {
callback = callback || function () {};
callback.apply(this, getModsExports(id, callback, baseId));
}
};
return localRequire;
}
function getModsExports(ids, factory, baseId) {
var es = [];
var mod = mods[baseId];
for (var i = 0, l = Math.min(ids.length, factory.length); i < l; i++) {
var id = normalize(ids[i], baseId);
var arg;
switch (id) {
case 'require':
arg = (mod && mod.require) || require;
break;
case 'exports':
arg = mod.exports;
break;
case 'module':
arg = mod;
break;
default:
arg = getModExports(id);
}
es.push(arg);
}
return es;
}
function getModExports(id) {
var mod = mods[id];
if (!mod) {
throw new Error('No ' + id);
}
if (!mod.defined) {
var factory = mod.factory;
var factoryReturn = factory.apply(
this,
getModsExports(mod.deps || [], factory, id)
);
if (typeof factoryReturn !== 'undefined') {
mod.exports = factoryReturn;
}
mod.defined = 1;
}
return mod.exports;
}
}());
define('echarts', ['echarts/echarts'], function (main) {return main;});
define('echarts/echarts', [
'require',
'./config',
'zrender/tool/util',
'zrender/tool/event',
'zrender/tool/env',
'zrender',
'zrender/config',
'./chart/island',
'./component/toolbox',
'./component',
'./component/title',
'./component/tooltip',
'./component/legend',
'./util/ecData',
'./chart',
'zrender/tool/color',
'./component/timeline',
'zrender/shape/Image',
'zrender/loadingEffect/Bar',
'zrender/loadingEffect/Bubble',
'zrender/loadingEffect/DynamicLine',
'zrender/loadingEffect/Ring',
'zrender/loadingEffect/Spin',
'zrender/loadingEffect/Whirling',
'./theme/macarons',
'./theme/infographic'
], function (require) {
var ecConfig = require('./config');
var zrUtil = require('zrender/tool/util');
var zrEvent = require('zrender/tool/event');
var self = {};
var _canvasSupported = require('zrender/tool/env').canvasSupported;
var _idBase = new Date() - 0;
var _instances = {};
var DOM_ATTRIBUTE_KEY = '_echarts_instance_';
self.version = '2.2.7';
self.dependencies = { zrender: '2.1.1' };
self.init = function (dom, theme) {
var zrender = require('zrender');
if (zrender.version.replace('.', '') - 0 < self.dependencies.zrender.replace('.', '') - 0) {
console.error('ZRender ' + zrender.version + ' is too old for ECharts ' + self.version + '. Current version need ZRender ' + self.dependencies.zrender + '+');
}
dom = dom instanceof Array ? dom[0] : dom;
var key = dom.getAttribute(DOM_ATTRIBUTE_KEY);
if (!key) {
key = _idBase++;
dom.setAttribute(DOM_ATTRIBUTE_KEY, key);
}
if (_instances[key]) {
_instances[key].dispose();
}
_instances[key] = new Echarts(dom);
_instances[key].id = key;
_instances[key].canvasSupported = _canvasSupported;
_instances[key].setTheme(theme);
return _instances[key];
};
self.getInstanceById = function (key) {
return _instances[key];
};
function MessageCenter() {
zrEvent.Dispatcher.call(this);
}
zrUtil.merge(MessageCenter.prototype, zrEvent.Dispatcher.prototype, true);
function Echarts(dom) {
dom.innerHTML = '';
this._themeConfig = {};
this.dom = dom;
this._connected = false;
this._status = {
dragIn: false,
dragOut: false,
needRefresh: false
};
this._curEventType = false;
this._chartList = [];
this._messageCenter = new MessageCenter();
this._messageCenterOutSide = new MessageCenter();
this.resize = this.resize();
this._init();
}
var ZR_EVENT = require('zrender/config').EVENT;
var ZR_EVENT_LISTENS = [
'CLICK',
'DBLCLICK',
'MOUSEOVER',
'MOUSEOUT',
'DRAGSTART',
'DRAGEND',
'DRAGENTER',
'DRAGOVER',
'DRAGLEAVE',
'DROP'
];
function callChartListMethodReverse(ecInstance, methodName, arg0, arg1, arg2) {
var chartList = ecInstance._chartList;
var len = chartList.length;
while (len--) {
var chart = chartList[len];
if (typeof chart[methodName] === 'function') {
chart[methodName](arg0, arg1, arg2);
}
}
}
Echarts.prototype = {
_init: function () {
var self = this;
var _zr = require('zrender').init(this.dom);
this._zr = _zr;
this._messageCenter.dispatch = function (type, event, eventPackage, that) {
eventPackage = eventPackage || {};
eventPackage.type = type;
eventPackage.event = event;
self._messageCenter.dispatchWithContext(type, eventPackage, that);
self._messageCenterOutSide.dispatchWithContext(type, eventPackage, that);
};
this._onevent = function (param) {
return self.__onevent(param);
};
for (var e in ecConfig.EVENT) {
if (e != 'CLICK' && e != 'DBLCLICK' && e != 'HOVER' && e != 'MOUSEOUT' && e != 'MAP_ROAM') {
this._messageCenter.bind(ecConfig.EVENT[e], this._onevent, this);
}
}
var eventBehaviors = {};
this._onzrevent = function (param) {
return self[eventBehaviors[param.type]](param);
};
for (var i = 0, len = ZR_EVENT_LISTENS.length; i < len; i++) {
var eventName = ZR_EVENT_LISTENS[i];
var eventValue = ZR_EVENT[eventName];
eventBehaviors[eventValue] = '_on' + eventName.toLowerCase();
_zr.on(eventValue, this._onzrevent);
}
this.chart = {};
this.component = {};
var Island = require('./chart/island');
this._island = new Island(this._themeConfig, this._messageCenter, _zr, {}, this);
this.chart.island = this._island;
var Toolbox = require('./component/toolbox');
this._toolbox = new Toolbox(this._themeConfig, this._messageCenter, _zr, {}, this);
this.component.toolbox = this._toolbox;
var componentLibrary = require('./component');
componentLibrary.define('title', require('./component/title'));
componentLibrary.define('tooltip', require('./component/tooltip'));
componentLibrary.define('legend', require('./component/legend'));
if (_zr.getWidth() === 0 || _zr.getHeight() === 0) {
console.error('Doms width & height should be ready before init.');
}
},
__onevent: function (param) {
param.__echartsId = param.__echartsId || this.id;
var fromMyself = param.__echartsId === this.id;
if (!this._curEventType) {
this._curEventType = param.type;
}
switch (param.type) {
case ecConfig.EVENT.LEGEND_SELECTED:
this._onlegendSelected(param);
break;
case ecConfig.EVENT.DATA_ZOOM:
if (!fromMyself) {
var dz = this.component.dataZoom;
if (dz) {
dz.silence(true);
dz.absoluteZoom(param.zoom);
dz.silence(false);
}
}
this._ondataZoom(param);
break;
case ecConfig.EVENT.DATA_RANGE:
fromMyself && this._ondataRange(param);
break;
case ecConfig.EVENT.MAGIC_TYPE_CHANGED:
if (!fromMyself) {
var tb = this.component.toolbox;
if (tb) {
tb.silence(true);
tb.setMagicType(param.magicType);
tb.silence(false);
}
}
this._onmagicTypeChanged(param);
break;
case ecConfig.EVENT.DATA_VIEW_CHANGED:
fromMyself && this._ondataViewChanged(param);
break;
case ecConfig.EVENT.TOOLTIP_HOVER:
fromMyself && this._tooltipHover(param);
break;
case ecConfig.EVENT.RESTORE:
this._onrestore();
break;
case ecConfig.EVENT.REFRESH:
fromMyself && this._onrefresh(param);
break;
case ecConfig.EVENT.TOOLTIP_IN_GRID:
case ecConfig.EVENT.TOOLTIP_OUT_GRID:
if (!fromMyself) {
var grid = this.component.grid;
if (grid) {
this._zr.trigger('mousemove', {
connectTrigger: true,
zrenderX: grid.getX() + param.x * grid.getWidth(),
zrenderY: grid.getY() + param.y * grid.getHeight()
});
}
} else if (this._connected) {
var grid = this.component.grid;
if (grid) {
param.x = (param.event.zrenderX - grid.getX()) / grid.getWidth();
param.y = (param.event.zrenderY - grid.getY()) / grid.getHeight();
}
}
break;
}
if (this._connected && fromMyself && this._curEventType === param.type) {
for (var c in this._connected) {
this._connected[c].connectedEventHandler(param);
}
this._curEventType = null;
}
if (!fromMyself || !this._connected && fromMyself) {
this._curEventType = null;
}
},
_onclick: function (param) {
callChartListMethodReverse(this, 'onclick', param);
if (param.target) {
var ecData = this._eventPackage(param.target);
if (ecData && ecData.seriesIndex != null) {
this._messageCenter.dispatch(ecConfig.EVENT.CLICK, param.event, ecData, this);
}
}
},
_ondblclick: function (param) {
callChartListMethodReverse(this, 'ondblclick', param);
if (param.target) {
var ecData = this._eventPackage(param.target);
if (ecData && ecData.seriesIndex != null) {
this._messageCenter.dispatch(ecConfig.EVENT.DBLCLICK, param.event, ecData, this);
}
}
},
_onmouseover: function (param) {
if (param.target) {
var ecData = this._eventPackage(param.target);
if (ecData && ecData.seriesIndex != null) {
this._messageCenter.dispatch(ecConfig.EVENT.HOVER, param.event, ecData, this);
}
}
},
_onmouseout: function (param) {
if (param.target) {
var ecData = this._eventPackage(param.target);
if (ecData && ecData.seriesIndex != null) {
this._messageCenter.dispatch(ecConfig.EVENT.MOUSEOUT, param.event, ecData, this);
}
}
},
_ondragstart: function (param) {
this._status = {
dragIn: false,
dragOut: false,
needRefresh: false
};
callChartListMethodReverse(this, 'ondragstart', param);
},
_ondragenter: function (param) {
callChartListMethodReverse(this, 'ondragenter', param);
},
_ondragover: function (param) {
callChartListMethodReverse(this, 'ondragover', param);
},
_ondragleave: function (param) {
callChartListMethodReverse(this, 'ondragleave', param);
},
_ondrop: function (param) {
callChartListMethodReverse(this, 'ondrop', param, this._status);
this._island.ondrop(param, this._status);
},
_ondragend: function (param) {
callChartListMethodReverse(this, 'ondragend', param, this._status);
this._timeline && this._timeline.ondragend(param, this._status);
this._island.ondragend(param, this._status);
if (this._status.needRefresh) {
this._syncBackupData(this._option);
var messageCenter = this._messageCenter;
messageCenter.dispatch(ecConfig.EVENT.DATA_CHANGED, param.event, this._eventPackage(param.target), this);
messageCenter.dispatch(ecConfig.EVENT.REFRESH, null, null, this);
}
},
_onlegendSelected: function (param) {
this._status.needRefresh = false;
callChartListMethodReverse(this, 'onlegendSelected', param, this._status);
if (this._status.needRefresh) {
this._messageCenter.dispatch(ecConfig.EVENT.REFRESH, null, null, this);
}
},
_ondataZoom: function (param) {
this._status.needRefresh = false;
callChartListMethodReverse(this, 'ondataZoom', param, this._status);
if (this._status.needRefresh) {
this._messageCenter.dispatch(ecConfig.EVENT.REFRESH, null, null, this);
}
},
_ondataRange: function (param) {
this._clearEffect();
this._status.needRefresh = false;
callChartListMethodReverse(this, 'ondataRange', param, this._status);
if (this._status.needRefresh) {
this._zr.refreshNextFrame();
}
},
_onmagicTypeChanged: function () {
this._clearEffect();
this._render(this._toolbox.getMagicOption());
},
_ondataViewChanged: function (param) {
this._syncBackupData(param.option);
this._messageCenter.dispatch(ecConfig.EVENT.DATA_CHANGED, null, param, this);
this._messageCenter.dispatch(ecConfig.EVENT.REFRESH, null, null, this);
},
_tooltipHover: function (param) {
var tipShape = [];
callChartListMethodReverse(this, 'ontooltipHover', param, tipShape);
},
_onrestore: function () {
this.restore();
},
_onrefresh: function (param) {
this._refreshInside = true;
this.refresh(param);
this._refreshInside = false;
},
_syncBackupData: function (curOption) {
this.component.dataZoom && this.component.dataZoom.syncBackupData(curOption);
},
_eventPackage: function (target) {
if (target) {
var ecData = require('./util/ecData');
var seriesIndex = ecData.get(target, 'seriesIndex');
var dataIndex = ecData.get(target, 'dataIndex');
dataIndex = seriesIndex != -1 && this.component.dataZoom ? this.component.dataZoom.getRealDataIndex(seriesIndex, dataIndex) : dataIndex;
return {
seriesIndex: seriesIndex,
seriesName: (ecData.get(target, 'series') || {}).name,
dataIndex: dataIndex,
data: ecData.get(target, 'data'),
name: ecData.get(target, 'name'),
value: ecData.get(target, 'value'),
special: ecData.get(target, 'special')
};
}
return;
},
_noDataCheck: function (magicOption) {
var series = magicOption.series;
for (var i = 0, l = series.length; i < l; i++) {
if (series[i].type == ecConfig.CHART_TYPE_MAP || series[i].data && series[i].data.length > 0 || series[i].markPoint && series[i].markPoint.data && series[i].markPoint.data.length > 0 || series[i].markLine && series[i].markLine.data && series[i].markLine.data.length > 0 || series[i].nodes && series[i].nodes.length > 0 || series[i].links && series[i].links.length > 0 || series[i].matrix && series[i].matrix.length > 0 || series[i].eventList && series[i].eventList.length > 0) {
return false;
}
}
var loadOption = this._option && this._option.noDataLoadingOption || this._themeConfig.noDataLoadingOption || ecConfig.noDataLoadingOption || {
text: this._option && this._option.noDataText || this._themeConfig.noDataText || ecConfig.noDataText,
effect: this._option && this._option.noDataEffect || this._themeConfig.noDataEffect || ecConfig.noDataEffect
};
this.clear();
this.showLoading(loadOption);
return true;
},
_render: function (magicOption) {
this._mergeGlobalConifg(magicOption);
if (this._noDataCheck(magicOption)) {
return;
}
var bgColor = magicOption.backgroundColor;
if (bgColor) {
if (!_canvasSupported && bgColor.indexOf('rgba') != -1) {
var cList = bgColor.split(',');
this.dom.style.filter = 'alpha(opacity=' + cList[3].substring(0, cList[3].lastIndexOf(')')) * 100 + ')';
cList.length = 3;
cList[0] = cList[0].replace('a', '');
this.dom.style.backgroundColor = cList.join(',') + ')';
} else {
this.dom.style.backgroundColor = bgColor;
}
}
this._zr.clearAnimation();
this._chartList = [];
var chartLibrary = require('./chart');
var componentLibrary = require('./component');
if (magicOption.xAxis || magicOption.yAxis) {
magicOption.grid = magicOption.grid || {};
magicOption.dataZoom = magicOption.dataZoom || {};
}
var componentList = [
'title',
'legend',
'tooltip',
'dataRange',
'roamController',
'grid',
'dataZoom',
'xAxis',
'yAxis',
'polar'
];
var ComponentClass;
var componentType;
var component;
for (var i = 0, l = componentList.length; i < l; i++) {
componentType = componentList[i];
component = this.component[componentType];
if (magicOption[componentType]) {
if (component) {
component.refresh && component.refresh(magicOption);
} else {
ComponentClass = componentLibrary.get(/^[xy]Axis$/.test(componentType) ? 'axis' : componentType);
component = new ComponentClass(this._themeConfig, this._messageCenter, this._zr, magicOption, this, componentType);
this.component[componentType] = component;
}
this._chartList.push(component);
} else if (component) {
component.dispose();
this.component[componentType] = null;
delete this.component[componentType];
}
}
var ChartClass;
var chartType;
var chart;
var chartMap = {};
for (var i = 0, l = magicOption.series.length; i < l; i++) {
chartType = magicOption.series[i].type;
if (!chartType) {
console.error('series[' + i + '] chart type has not been defined.');
continue;
}
if (!chartMap[chartType]) {
chartMap[chartType] = true;
ChartClass = chartLibrary.get(chartType);
if (ChartClass) {
if (this.chart[chartType]) {
chart = this.chart[chartType];
chart.refresh(magicOption);
} else {
chart = new ChartClass(this._themeConfig, this._messageCenter, this._zr, magicOption, this);
}
this._chartList.push(chart);
this.chart[chartType] = chart;
} else {
console.error(chartType + ' has not been required.');
}
}
}
for (chartType in this.chart) {
if (chartType != ecConfig.CHART_TYPE_ISLAND && !chartMap[chartType]) {
this.chart[chartType].dispose();
this.chart[chartType] = null;
delete this.chart[chartType];
}
}
this.component.grid && this.component.grid.refixAxisShape(this.component);
this._island.refresh(magicOption);
this._toolbox.refresh(magicOption);
magicOption.animation && !magicOption.renderAsImage ? this._zr.refresh() : this._zr.render();
var imgId = 'IMG' + this.id;
var img = document.getElementById(imgId);
if (magicOption.renderAsImage && _canvasSupported) {
if (img) {
img.src = this.getDataURL(magicOption.renderAsImage);
} else {
img = this.getImage(magicOption.renderAsImage);
img.id = imgId;
img.style.position = 'absolute';
img.style.left = 0;
img.style.top = 0;
this.dom.firstChild.appendChild(img);
}
this.un();
this._zr.un();
this._disposeChartList();
this._zr.clear();
} else if (img) {
img.parentNode.removeChild(img);
}
img = null;
this._option = magicOption;
},
restore: function () {
this._clearEffect();
this._option = zrUtil.clone(this._optionRestore);
this._disposeChartList();
this._island.clear();
this._toolbox.reset(this._option, true);
this._render(this._option);
},
refresh: function (param) {
this._clearEffect();
param = param || {};
var magicOption = param.option;
if (!this._refreshInside && magicOption) {
magicOption = this.getOption();
zrUtil.merge(magicOption, param.option, true);
zrUtil.merge(this._optionRestore, param.option, true);
this._toolbox.reset(magicOption);
}
this._island.refresh(magicOption);
this._toolbox.refresh(magicOption);
this._zr.clearAnimation();
for (var i = 0, l = this._chartList.length; i < l; i++) {
this._chartList[i].refresh && this._chartList[i].refresh(magicOption);
}
this.component.grid && this.component.grid.refixAxisShape(this.component);
this._zr.refresh();
},
_disposeChartList: function () {
this._clearEffect();
this._zr.clearAnimation();
var len = this._chartList.length;
while (len--) {
var chart = this._chartList[len];
if (chart) {
var chartType = chart.type;
this.chart[chartType] && delete this.chart[chartType];
this.component[chartType] && delete this.component[chartType];
chart.dispose && chart.dispose();
}
}
this._chartList = [];
},
_mergeGlobalConifg: function (magicOption) {
var mergeList = [
'backgroundColor',
'calculable',
'calculableColor',
'calculableHolderColor',
'nameConnector',
'valueConnector',
'animation',
'animationThreshold',
'animationDuration',
'animationDurationUpdate',
'animationEasing',
'addDataAnimation',
'symbolList',
'DRAG_ENABLE_TIME'
];
var len = mergeList.length;
while (len--) {
var mergeItem = mergeList[len];
if (magicOption[mergeItem] == null) {
magicOption[mergeItem] = this._themeConfig[mergeItem] != null ? this._themeConfig[mergeItem] : ecConfig[mergeItem];
}
}
var themeColor = magicOption.color;
if (!(themeColor && themeColor.length)) {
themeColor = this._themeConfig.color || ecConfig.color;
}
this._zr.getColor = function (idx) {
var zrColor = require('zrender/tool/color');
return zrColor.getColor(idx, themeColor);
};
if (!_canvasSupported) {
magicOption.animation = false;
magicOption.addDataAnimation = false;
}
},
setOption: function (option, notMerge) {
if (!option.timeline) {
return this._setOption(option, notMerge);
} else {
return this._setTimelineOption(option);
}
},
_setOption: function (option, notMerge, keepTimeLine) {
if (!notMerge && this._option) {
this._option = zrUtil.merge(this.getOption(), zrUtil.clone(option), true);
} else {
this._option = zrUtil.clone(option);
!keepTimeLine && this._timeline && this._timeline.dispose();
}
this._optionRestore = zrUtil.clone(this._option);
if (!this._option.series || this._option.series.length === 0) {
this._zr.clear();
return;
}
if (this.component.dataZoom && (this._option.dataZoom || this._option.toolbox && this._option.toolbox.feature && this._option.toolbox.feature.dataZoom && this._option.toolbox.feature.dataZoom.show)) {
this.component.dataZoom.syncOption(this._option);
}
this._toolbox.reset(this._option);
this._render(this._option);
return this;
},
getOption: function () {
var magicOption = zrUtil.clone(this._option);
var self = this;
function restoreOption(prop) {
var restoreSource = self._optionRestore[prop];
if (restoreSource) {
if (restoreSource instanceof Array) {
var len = restoreSource.length;
while (len--) {
magicOption[prop][len].data = zrUtil.clone(restoreSource[len].data);
}
} else {
magicOption[prop].data = zrUtil.clone(restoreSource.data);
}
}
}
restoreOption('xAxis');
restoreOption('yAxis');
restoreOption('series');
return magicOption;
},
setSeries: function (series, notMerge) {
if (!notMerge) {
this.setOption({ series: series });
} else {
this._option.series = series;
this.setOption(this._option, notMerge);
}
return this;
},
getSeries: function () {
return this.getOption().series;
},
_setTimelineOption: function (option) {
this._timeline && this._timeline.dispose();
var Timeline = require('./component/timeline');
var timeline = new Timeline(this._themeConfig, this._messageCenter, this._zr, option, this);
this._timeline = timeline;
this.component.timeline = this._timeline;
return this;
},
addData: function (seriesIdx, data, isHead, dataGrow, additionData) {
var params = seriesIdx instanceof Array ? seriesIdx : [[
seriesIdx,
data,
isHead,
dataGrow,
additionData
]];
var magicOption = this.getOption();
var optionRestore = this._optionRestore;
var self = this;
for (var i = 0, l = params.length; i < l; i++) {
seriesIdx = params[i][0];
data = params[i][1];
isHead = params[i][2];
dataGrow = params[i][3];
additionData = params[i][4];
var seriesItem = optionRestore.series[seriesIdx];
var inMethod = isHead ? 'unshift' : 'push';
var outMethod = isHead ? 'pop' : 'shift';
if (seriesItem) {
var seriesItemData = seriesItem.data;
var mSeriesItemData = magicOption.series[seriesIdx].data;
seriesItemData[inMethod](data);
mSeriesItemData[inMethod](data);
if (!dataGrow) {
seriesItemData[outMethod]();
data = mSeriesItemData[outMethod]();
}
if (additionData != null) {
var legend;
var legendData;
if (seriesItem.type === ecConfig.CHART_TYPE_PIE && (legend = optionRestore.legend) && (legendData = legend.data)) {
var mLegendData = magicOption.legend.data;
legendData[inMethod](additionData);
mLegendData[inMethod](additionData);
if (!dataGrow) {
var legendDataIdx = zrUtil.indexOf(legendData, data.name);
legendDataIdx != -1 && legendData.splice(legendDataIdx, 1);
legendDataIdx = zrUtil.indexOf(mLegendData, data.name);
legendDataIdx != -1 && mLegendData.splice(legendDataIdx, 1);
}
} else if (optionRestore.xAxis != null && optionRestore.yAxis != null) {
var axisData;
var mAxisData;
var axisIdx = seriesItem.xAxisIndex || 0;
if (optionRestore.xAxis[axisIdx].type == null || optionRestore.xAxis[axisIdx].type === 'category') {
axisData = optionRestore.xAxis[axisIdx].data;
mAxisData = magicOption.xAxis[axisIdx].data;
axisData[inMethod](additionData);
mAxisData[inMethod](additionData);
if (!dataGrow) {
axisData[outMethod]();
mAxisData[outMethod]();
}
}
axisIdx = seriesItem.yAxisIndex || 0;
if (optionRestore.yAxis[axisIdx].type === 'category') {
axisData = optionRestore.yAxis[axisIdx].data;
mAxisData = magicOption.yAxis[axisIdx].data;
axisData[inMethod](additionData);
mAxisData[inMethod](additionData);
if (!dataGrow) {
axisData[outMethod]();
mAxisData[outMethod]();
}
}
}
}
this._option.series[seriesIdx].data = magicOption.series[seriesIdx].data;
}
}
this._zr.clearAnimation();
var chartList = this._chartList;
var chartAnimationCount = 0;
var chartAnimationDone = function () {
chartAnimationCount--;
if (chartAnimationCount === 0) {
animationDone();
}
};
for (var i = 0, l = chartList.length; i < l; i++) {
if (magicOption.addDataAnimation && chartList[i].addDataAnimation) {
chartAnimationCount++;
chartList[i].addDataAnimation(params, chartAnimationDone);
}
}
this.component.dataZoom && this.component.dataZoom.syncOption(magicOption);
this._option = magicOption;
function animationDone() {
if (!self._zr) {
return;
}
self._zr.clearAnimation();
for (var i = 0, l = chartList.length; i < l; i++) {
chartList[i].motionlessOnce = magicOption.addDataAnimation && chartList[i].addDataAnimation;
}
self._messageCenter.dispatch(ecConfig.EVENT.REFRESH, null, { option: magicOption }, self);
}
if (!magicOption.addDataAnimation) {
setTimeout(animationDone, 0);
}
return this;
},
addMarkPoint: function (seriesIdx, markData) {
return this._addMark(seriesIdx, markData, 'markPoint');
},
addMarkLine: function (seriesIdx, markData) {
return this._addMark(seriesIdx, markData, 'markLine');
},
_addMark: function (seriesIdx, markData, markType) {
var series = this._option.series;
var seriesItem;
if (series && (seriesItem = series[seriesIdx])) {
var seriesR = this._optionRestore.series;
var seriesRItem = seriesR[seriesIdx];
var markOpt = seriesItem[markType];
var markOptR = seriesRItem[markType];
markOpt = seriesItem[markType] = markOpt || { data: [] };
markOptR = seriesRItem[markType] = markOptR || { data: [] };
for (var key in markData) {
if (key === 'data') {
markOpt.data = markOpt.data.concat(markData.data);
markOptR.data = markOptR.data.concat(markData.data);
} else if (typeof markData[key] != 'object' || markOpt[key] == null) {
markOpt[key] = markOptR[key] = markData[key];
} else {
zrUtil.merge(markOpt[key], markData[key], true);
zrUtil.merge(markOptR[key], markData[key], true);
}
}
var chart = this.chart[seriesItem.type];
chart && chart.addMark(seriesIdx, markData, markType);
}
return this;
},
delMarkPoint: function (seriesIdx, markName) {
return this._delMark(seriesIdx, markName, 'markPoint');
},
delMarkLine: function (seriesIdx, markName) {
return this._delMark(seriesIdx, markName, 'markLine');
},
_delMark: function (seriesIdx, markName, markType) {
var series = this._option.series;
var seriesItem;
var mark;
var dataArray;
if (!(series && (seriesItem = series[seriesIdx]) && (mark = seriesItem[markType]) && (dataArray = mark.data))) {
return this;
}
markName = markName.split(' > ');
var targetIndex = -1;
for (var i = 0, l = dataArray.length; i < l; i++) {
var dataItem = dataArray[i];
if (dataItem instanceof Array) {
if (dataItem[0].name === markName[0] && dataItem[1].name === markName[1]) {
targetIndex = i;
break;
}
} else if (dataItem.name === markName[0]) {
targetIndex = i;
break;
}
}
if (targetIndex > -1) {
dataArray.splice(targetIndex, 1);
this._optionRestore.series[seriesIdx][markType].data.splice(targetIndex, 1);
var chart = this.chart[seriesItem.type];
chart && chart.delMark(seriesIdx, markName.join(' > '), markType);
}
return this;
},
getDom: function () {
return this.dom;
},
getZrender: function () {
return this._zr;
},
getDataURL: function (imgType) {
if (!_canvasSupported) {
return '';
}
if (this._chartList.length === 0) {
var imgId = 'IMG' + this.id;
var img = document.getElementById(imgId);
if (img) {
return img.src;
}
}
var tooltip = this.component.tooltip;
tooltip && tooltip.hideTip();
switch (imgType) {
case 'jpeg':
break;
default:
imgType = 'png';
}
var bgColor = this._option.backgroundColor;
if (bgColor && bgColor.replace(' ', '') === 'rgba(0,0,0,0)') {
bgColor = '#fff';
}
return this._zr.toDataURL('image/' + imgType, bgColor);
},
getImage: function (imgType) {
var title = this._optionRestore.title;
var imgDom = document.createElement('img');
imgDom.src = this.getDataURL(imgType);
imgDom.title = title && title.text || 'ECharts';
return imgDom;
},
getConnectedDataURL: function (imgType) {
if (!this.isConnected()) {
return this.getDataURL(imgType);
}
var tempDom = this.dom;
var imgList = {
'self': {
img: this.getDataURL(imgType),
left: tempDom.offsetLeft,
top: tempDom.offsetTop,
right: tempDom.offsetLeft + tempDom.offsetWidth,
bottom: tempDom.offsetTop + tempDom.offsetHeight
}
};
var minLeft = imgList.self.left;
var minTop = imgList.self.top;
var maxRight = imgList.self.right;
var maxBottom = imgList.self.bottom;
for (var c in this._connected) {
tempDom = this._connected[c].getDom();
imgList[c] = {
img: this._connected[c].getDataURL(imgType),
left: tempDom.offsetLeft,
top: tempDom.offsetTop,
right: tempDom.offsetLeft + tempDom.offsetWidth,
bottom: tempDom.offsetTop + tempDom.offsetHeight
};
minLeft = Math.min(minLeft, imgList[c].left);
minTop = Math.min(minTop, imgList[c].top);
maxRight = Math.max(maxRight, imgList[c].right);
maxBottom = Math.max(maxBottom, imgList[c].bottom);
}
var zrDom = document.createElement('div');
zrDom.style.position = 'absolute';
zrDom.style.left = '-4000px';
zrDom.style.width = maxRight - minLeft + 'px';
zrDom.style.height = maxBottom - minTop + 'px';
document.body.appendChild(zrDom);
var zrImg = require('zrender').init(zrDom);
var ImageShape = require('zrender/shape/Image');
for (var c in imgList) {
zrImg.addShape(new ImageShape({
style: {
x: imgList[c].left - minLeft,
y: imgList[c].top - minTop,
image: imgList[c].img
}
}));
}
zrImg.render();
var bgColor = this._option.backgroundColor;
if (bgColor && bgColor.replace(/ /g, '') === 'rgba(0,0,0,0)') {
bgColor = '#fff';
}
var image = zrImg.toDataURL('image/png', bgColor);
setTimeout(function () {
zrImg.dispose();
zrDom.parentNode.removeChild(zrDom);
zrDom = null;
}, 100);
return image;
},
getConnectedImage: function (imgType) {
var title = this._optionRestore.title;
var imgDom = document.createElement('img');
imgDom.src = this.getConnectedDataURL(imgType);
imgDom.title = title && title.text || 'ECharts';
return imgDom;
},
on: function (eventName, eventListener) {
this._messageCenterOutSide.bind(eventName, eventListener, this);
return this;
},
un: function (eventName, eventListener) {
this._messageCenterOutSide.unbind(eventName, eventListener);
return this;
},
connect: function (connectTarget) {
if (!connectTarget) {
return this;
}
if (!this._connected) {
this._connected = {};
}
if (connectTarget instanceof Array) {
for (var i = 0, l = connectTarget.length; i < l; i++) {
this._connected[connectTarget[i].id] = connectTarget[i];
}
} else {
this._connected[connectTarget.id] = connectTarget;
}
return this;
},
disConnect: function (connectTarget) {
if (!connectTarget || !this._connected) {
return this;
}
if (connectTarget instanceof Array) {
for (var i = 0, l = connectTarget.length; i < l; i++) {
delete this._connected[connectTarget[i].id];
}
} else {
delete this._connected[connectTarget.id];
}
for (var k in this._connected) {
return k, this;
}
this._connected = false;
return this;
},
connectedEventHandler: function (param) {
if (param.__echartsId != this.id) {
this._onevent(param);
}
},
isConnected: function () {
return !!this._connected;
},
showLoading: function (loadingOption) {
var effectList = {
bar: require('zrender/loadingEffect/Bar'),
bubble: require('zrender/loadingEffect/Bubble'),
dynamicLine: require('zrender/loadingEffect/DynamicLine'),
ring: require('zrender/loadingEffect/Ring'),
spin: require('zrender/loadingEffect/Spin'),
whirling: require('zrender/loadingEffect/Whirling')
};
this._toolbox.hideDataView();
loadingOption = loadingOption || {};
var textStyle = loadingOption.textStyle || {};
loadingOption.textStyle = textStyle;
var finalTextStyle = zrUtil.merge(zrUtil.merge(zrUtil.clone(textStyle), this._themeConfig.textStyle), ecConfig.textStyle);
textStyle.textFont = finalTextStyle.fontStyle + ' ' + finalTextStyle.fontWeight + ' ' + finalTextStyle.fontSize + 'px ' + finalTextStyle.fontFamily;
textStyle.text = loadingOption.text || this._option && this._option.loadingText || this._themeConfig.loadingText || ecConfig.loadingText;
if (loadingOption.x != null) {
textStyle.x = loadingOption.x;
}
if (loadingOption.y != null) {
textStyle.y = loadingOption.y;
}
loadingOption.effectOption = loadingOption.effectOption || {};
loadingOption.effectOption.textStyle = textStyle;
var Effect = loadingOption.effect;
if (typeof Effect === 'string' || Effect == null) {
Effect = effectList[loadingOption.effect || this._option && this._option.loadingEffect || this._themeConfig.loadingEffect || ecConfig.loadingEffect] || effectList.spin;
}
this._zr.showLoading(new Effect(loadingOption.effectOption));
return this;
},
hideLoading: function () {
this._zr.hideLoading();
return this;
},
setTheme: function (theme) {
if (theme) {
if (typeof theme === 'string') {
switch (theme) {
case 'macarons':
theme = require('./theme/macarons');
break;
case 'infographic':
theme = require('./theme/infographic');
break;
default:
theme = {};
}
} else {
theme = theme || {};
}
this._themeConfig = theme;
}
if (!_canvasSupported) {
var textStyle = this._themeConfig.textStyle;
textStyle && textStyle.fontFamily && textStyle.fontFamily2 && (textStyle.fontFamily = textStyle.fontFamily2);
textStyle = ecConfig.textStyle;
textStyle.fontFamily = textStyle.fontFamily2;
}
this._timeline && this._timeline.setTheme(true);
this._optionRestore && this.restore();
},
resize: function () {
var self = this;
return function () {
self._clearEffect();
self._zr.resize();
if (self._option && self._option.renderAsImage && _canvasSupported) {
self._render(self._option);
return self;
}
self._zr.clearAnimation();
self._island.resize();
self._toolbox.resize();
self._timeline && self._timeline.resize();
for (var i = 0, l = self._chartList.length; i < l; i++) {
self._chartList[i].resize && self._chartList[i].resize();
}
self.component.grid && self.component.grid.refixAxisShape(self.component);
self._zr.refresh();
self._messageCenter.dispatch(ecConfig.EVENT.RESIZE, null, null, self);
return self;
};
},
_clearEffect: function () {
this._zr.modLayer(ecConfig.EFFECT_ZLEVEL, { motionBlur: false });
this._zr.painter.clearLayer(ecConfig.EFFECT_ZLEVEL);
},
clear: function () {
this._disposeChartList();
this._zr.clear();
this._option = {};
this._optionRestore = {};
this.dom.style.backgroundColor = null;
return this;
},
dispose: function () {
var key = this.dom.getAttribute(DOM_ATTRIBUTE_KEY);
key && delete _instances[key];
this._island.dispose();
this._toolbox.dispose();
this._timeline && this._timeline.dispose();
this._messageCenter.unbind();
this.clear();
this._zr.dispose();
this._zr = null;
}
};
return self;
});define('echarts/config', [], function () {
var config = {
CHART_TYPE_LINE: 'line',
CHART_TYPE_BAR: 'bar',
CHART_TYPE_SCATTER: 'scatter',
CHART_TYPE_PIE: 'pie',
CHART_TYPE_RADAR: 'radar',
CHART_TYPE_VENN: 'venn',
CHART_TYPE_TREEMAP: 'treemap',
CHART_TYPE_TREE: 'tree',
CHART_TYPE_MAP: 'map',
CHART_TYPE_K: 'k',
CHART_TYPE_ISLAND: 'island',
CHART_TYPE_FORCE: 'force',
CHART_TYPE_CHORD: 'chord',
CHART_TYPE_GAUGE: 'gauge',
CHART_TYPE_FUNNEL: 'funnel',
CHART_TYPE_EVENTRIVER: 'eventRiver',
CHART_TYPE_WORDCLOUD: 'wordCloud',
CHART_TYPE_HEATMAP: 'heatmap',
COMPONENT_TYPE_TITLE: 'title',
COMPONENT_TYPE_LEGEND: 'legend',
COMPONENT_TYPE_DATARANGE: 'dataRange',
COMPONENT_TYPE_DATAVIEW: 'dataView',
COMPONENT_TYPE_DATAZOOM: 'dataZoom',
COMPONENT_TYPE_TOOLBOX: 'toolbox',
COMPONENT_TYPE_TOOLTIP: 'tooltip',
COMPONENT_TYPE_GRID: 'grid',
COMPONENT_TYPE_AXIS: 'axis',
COMPONENT_TYPE_POLAR: 'polar',
COMPONENT_TYPE_X_AXIS: 'xAxis',
COMPONENT_TYPE_Y_AXIS: 'yAxis',
COMPONENT_TYPE_AXIS_CATEGORY: 'categoryAxis',
COMPONENT_TYPE_AXIS_VALUE: 'valueAxis',
COMPONENT_TYPE_TIMELINE: 'timeline',
COMPONENT_TYPE_ROAMCONTROLLER: 'roamController',
backgroundColor: 'rgba(0,0,0,0)',
color: [
'#ff7f50',
'#87cefa',
'#da70d6',
'#32cd32',
'#6495ed',
'#ff69b4',
'#ba55d3',
'#cd5c5c',
'#ffa500',
'#40e0d0',
'#1e90ff',
'#ff6347',
'#7b68ee',
'#00fa9a',
'#ffd700',
'#6699FF',
'#ff6666',
'#3cb371',
'#b8860b',
'#30e0e0'
],
markPoint: {
clickable: true,
symbol: 'pin',
symbolSize: 10,
large: false,
effect: {
show: false,
loop: true,
period: 15,
type: 'scale',
scaleSize: 2,
bounceDistance: 10
},
itemStyle: {
normal: {
borderWidth: 2,
label: {
show: true,
position: 'inside'
}
},
emphasis: { label: { show: true } }
}
},
markLine: {
clickable: true,
symbol: [
'circle',
'arrow'
],
symbolSize: [
2,
4
],
smoothness: 0.2,
precision: 2,
effect: {
show: false,
loop: true,
period: 15,
scaleSize: 2
},
bundling: {
enable: false,
maxTurningAngle: 45
},
itemStyle: {
normal: {
borderWidth: 1.5,
label: {
show: true,
position: 'end'
},
lineStyle: { type: 'dashed' }
},
emphasis: {
label: { show: false },
lineStyle: {}
}
}
},
textStyle: {
decoration: 'none',
fontFamily: 'Arial, Verdana, sans-serif',
fontFamily2: '微软雅黑',
fontSize: 12,
fontStyle: 'normal',
fontWeight: 'normal'
},
EVENT: {
REFRESH: 'refresh',
RESTORE: 'restore',
RESIZE: 'resize',
CLICK: 'click',
DBLCLICK: 'dblclick',
HOVER: 'hover',
MOUSEOUT: 'mouseout',
DATA_CHANGED: 'dataChanged',
DATA_ZOOM: 'dataZoom',
DATA_RANGE: 'dataRange',
DATA_RANGE_SELECTED: 'dataRangeSelected',
DATA_RANGE_HOVERLINK: 'dataRangeHoverLink',
LEGEND_SELECTED: 'legendSelected',
LEGEND_HOVERLINK: 'legendHoverLink',
MAP_SELECTED: 'mapSelected',
PIE_SELECTED: 'pieSelected',
MAGIC_TYPE_CHANGED: 'magicTypeChanged',
DATA_VIEW_CHANGED: 'dataViewChanged',
TIMELINE_CHANGED: 'timelineChanged',
MAP_ROAM: 'mapRoam',
FORCE_LAYOUT_END: 'forceLayoutEnd',
TOOLTIP_HOVER: 'tooltipHover',
TOOLTIP_IN_GRID: 'tooltipInGrid',
TOOLTIP_OUT_GRID: 'tooltipOutGrid',
ROAMCONTROLLER: 'roamController'
},
DRAG_ENABLE_TIME: 120,
EFFECT_ZLEVEL: 10,
effectBlendAlpha: 0.95,
symbolList: [
'circle',
'rectangle',
'triangle',
'diamond',
'emptyCircle',
'emptyRectangle',
'emptyTriangle',
'emptyDiamond'
],
loadingEffect: 'spin',
loadingText: '数据读取中...',
noDataEffect: 'bubble',
noDataText: '暂无数据',
calculable: false,
calculableColor: 'rgba(255,165,0,0.6)',
calculableHolderColor: '#ccc',
nameConnector: ' & ',
valueConnector: ': ',
animation: true,
addDataAnimation: true,
animationThreshold: 2000,
animationDuration: 2000,
animationDurationUpdate: 500,
animationEasing: 'ExponentialOut'
};
return config;
});define('zrender/tool/util', [
'require',
'../dep/excanvas'
], function (require) {
var ArrayProto = Array.prototype;
var nativeForEach = ArrayProto.forEach;
var nativeMap = ArrayProto.map;
var nativeFilter = ArrayProto.filter;
var BUILTIN_OBJECT = {
'[object Function]': 1,
'[object RegExp]': 1,
'[object Date]': 1,
'[object Error]': 1,
'[object CanvasGradient]': 1
};
var objToString = Object.prototype.toString;
function isDom(obj) {
return obj && obj.nodeType === 1 && typeof obj.nodeName == 'string';
}
function clone(source) {
if (typeof source == 'object' && source !== null) {
var result = source;
if (source instanceof Array) {
result = [];
for (var i = 0, len = source.length; i < len; i++) {
result[i] = clone(source[i]);
}
} else if (!BUILTIN_OBJECT[objToString.call(source)] && !isDom(source)) {
result = {};
for (var key in source) {
if (source.hasOwnProperty(key)) {
result[key] = clone(source[key]);
}
}
}
return result;
}
return source;
}
function mergeItem(target, source, key, overwrite) {
if (source.hasOwnProperty(key)) {
var targetProp = target[key];
if (typeof targetProp == 'object' && !BUILTIN_OBJECT[objToString.call(targetProp)] && !isDom(targetProp)) {
merge(target[key], source[key], overwrite);
} else if (overwrite || !(key in target)) {
target[key] = source[key];
}
}
}
function merge(target, source, overwrite) {
for (var i in source) {
mergeItem(target, source, i, overwrite);
}
return target;
}
var _ctx;
function getContext() {
if (!_ctx) {
require('../dep/excanvas');
if (window['G_vmlCanvasManager']) {
var _div = document.createElement('div');
_div.style.position = 'absolute';
_div.style.top = '-1000px';
document.body.appendChild(_div);
_ctx = G_vmlCanvasManager.initElement(_div).getContext('2d');
} else {
_ctx = document.createElement('canvas').getContext('2d');
}
}
return _ctx;
}
function indexOf(array, value) {
if (array.indexOf) {
return array.indexOf(value);
}
for (var i = 0, len = array.length; i < len; i++) {
if (array[i] === value) {
return i;
}
}
return -1;
}
function inherits(clazz, baseClazz) {
var clazzPrototype = clazz.prototype;
function F() {
}
F.prototype = baseClazz.prototype;
clazz.prototype = new F();
for (var prop in clazzPrototype) {
clazz.prototype[prop] = clazzPrototype[prop];
}
clazz.constructor = clazz;
}
function each(obj, cb, context) {
if (!(obj && cb)) {
return;
}
if (obj.forEach && obj.forEach === nativeForEach) {
obj.forEach(cb, context);
} else if (obj.length === +obj.length) {
for (var i = 0, len = obj.length; i < len; i++) {
cb.call(context, obj[i], i, obj);
}
} else {
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
cb.call(context, obj[key], key, obj);
}
}
}
}
function map(obj, cb, context) {
if (!(obj && cb)) {
return;
}
if (obj.map && obj.map === nativeMap) {
return obj.map(cb, context);
} else {
var result = [];
for (var i = 0, len = obj.length; i < len; i++) {
result.push(cb.call(context, obj[i], i, obj));
}
return result;
}
}
function filter(obj, cb, context) {
if (!(obj && cb)) {
return;
}
if (obj.filter && obj.filter === nativeFilter) {
return obj.filter(cb, context);
} else {
var result = [];
for (var i = 0, len = obj.length; i < len; i++) {
if (cb.call(context, obj[i], i, obj)) {
result.push(obj[i]);
}
}
return result;
}
}
function bind(func, context) {
return function () {
func.apply(context, arguments);
};
}
return {
inherits: inherits,
clone: clone,
merge: merge,
getContext: getContext,
indexOf: indexOf,
each: each,
map: map,
filter: filter,
bind: bind
};
});define('zrender/tool/event', [
'require',
'../mixin/Eventful'
], function (require) {
'use strict';
var Eventful = require('../mixin/Eventful');
function getX(e) {
return typeof e.zrenderX != 'undefined' && e.zrenderX || typeof e.offsetX != 'undefined' && e.offsetX || typeof e.layerX != 'undefined' && e.layerX || typeof e.clientX != 'undefined' && e.clientX;
}
function getY(e) {
return typeof e.zrenderY != 'undefined' && e.zrenderY || typeof e.offsetY != 'undefined' && e.offsetY || typeof e.layerY != 'undefined' && e.layerY || typeof e.clientY != 'undefined' && e.clientY;
}
function getDelta(e) {
return typeof e.zrenderDelta != 'undefined' && e.zrenderDelta || typeof e.wheelDelta != 'undefined' && e.wheelDelta || typeof e.detail != 'undefined' && -e.detail;
}
var stop = typeof window.addEventListener === 'function' ? function (e) {
e.preventDefault();
e.stopPropagation();
e.cancelBubble = true;
} : function (e) {
e.returnValue = false;
e.cancelBubble = true;
};
return {
getX: getX,
getY: getY,
getDelta: getDelta,
stop: stop,
Dispatcher: Eventful
};
});define('zrender/tool/env', [], function () {
function detect(ua) {
var os = this.os = {};
var browser = this.browser = {};
var webkit = ua.match(/Web[kK]it[\/]{0,1}([\d.]+)/);
var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/);
var ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
var iphone = !ipad && ua.match(/(iPhone\sOS)\s([\d_]+)/);
var webos = ua.match(/(webOS|hpwOS)[\s\/]([\d.]+)/);
var touchpad = webos && ua.match(/TouchPad/);
var kindle = ua.match(/Kindle\/([\d.]+)/);
var silk = ua.match(/Silk\/([\d._]+)/);
var blackberry = ua.match(/(BlackBerry).*Version\/([\d.]+)/);
var bb10 = ua.match(/(BB10).*Version\/([\d.]+)/);
var rimtabletos = ua.match(/(RIM\sTablet\sOS)\s([\d.]+)/);
var playbook = ua.match(/PlayBook/);
var chrome = ua.match(/Chrome\/([\d.]+)/) || ua.match(/CriOS\/([\d.]+)/);
var firefox = ua.match(/Firefox\/([\d.]+)/);
var ie = ua.match(/MSIE ([\d.]+)/);
var safari = webkit && ua.match(/Mobile\//) && !chrome;
var webview = ua.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/) && !chrome;
var ie = ua.match(/MSIE\s([\d.]+)/);
if (browser.webkit = !!webkit)
browser.version = webkit[1];
if (android)
os.android = true, os.version = android[2];
if (iphone && !ipod)
os.ios = os.iphone = true, os.version = iphone[2].replace(/_/g, '.');
if (ipad)
os.ios = os.ipad = true, os.version = ipad[2].replace(/_/g, '.');
if (ipod)
os.ios = os.ipod = true, os.version = ipod[3] ? ipod[3].replace(/_/g, '.') : null;
if (webos)
os.webos = true, os.version = webos[2];
if (touchpad)
os.touchpad = true;
if (blackberry)
os.blackberry = true, os.version = blackberry[2];
if (bb10)
os.bb10 = true, os.version = bb10[2];
if (rimtabletos)
os.rimtabletos = true, os.version = rimtabletos[2];
if (playbook)
browser.playbook = true;
if (kindle)
os.kindle = true, os.version = kindle[1];
if (silk)
browser.silk = true, browser.version = silk[1];
if (!silk && os.android && ua.match(/Kindle Fire/))
browser.silk = true;
if (chrome)
browser.chrome = true, browser.version = chrome[1];
if (firefox)
browser.firefox = true, browser.version = firefox[1];
if (ie)
browser.ie = true, browser.version = ie[1];
if (safari && (ua.match(/Safari/) || !!os.ios))
browser.safari = true;
if (webview)
browser.webview = true;
if (ie)
browser.ie = true, browser.version = ie[1];
os.tablet = !!(ipad || playbook || android && !ua.match(/Mobile/) || firefox && ua.match(/Tablet/) || ie && !ua.match(/Phone/) && ua.match(/Touch/));
os.phone = !!(!os.tablet && !os.ipod && (android || iphone || webos || blackberry || bb10 || chrome && ua.match(/Android/) || chrome && ua.match(/CriOS\/([\d.]+)/) || firefox && ua.match(/Mobile/) || ie && ua.match(/Touch/)));
return {
browser: browser,
os: os,
canvasSupported: document.createElement('canvas').getContext ? true : false
};
}
return detect(navigator.userAgent);
});define('zrender', ['zrender/zrender'], function (main) {return main;});
define('zrender/zrender', [
'require',
'./dep/excanvas',
'./tool/util',
'./tool/log',
'./tool/guid',
'./Handler',
'./Painter',
'./Storage',
'./animation/Animation',
'./tool/env'
], function (require) {
require('./dep/excanvas');
var util = require('./tool/util');
var log = require('./tool/log');
var guid = require('./tool/guid');
var Handler = require('./Handler');
var Painter = require('./Painter');
var Storage = require('./Storage');
var Animation = require('./animation/Animation');
var _instances = {};
var zrender = {};
zrender.version = '2.1.1';
zrender.init = function (dom) {
var zr = new ZRender(guid(), dom);
_instances[zr.id] = zr;
return zr;
};
zrender.dispose = function (zr) {
if (zr) {
zr.dispose();
} else {
for (var key in _instances) {
_instances[key].dispose();
}
_instances = {};
}
return zrender;
};
zrender.getInstance = function (id) {
return _instances[id];
};
zrender.delInstance = function (id) {
delete _instances[id];
return zrender;
};
function getFrameCallback(zrInstance) {
return function () {
if (zrInstance._needsRefreshNextFrame) {
zrInstance.refresh();
}
};
}
var ZRender = function (id, dom) {
this.id = id;
this.env = require('./tool/env');
this.storage = new Storage();
this.painter = new Painter(dom, this.storage);
this.handler = new Handler(dom, this.storage, this.painter);
this.animation = new Animation({ stage: { update: getFrameCallback(this) } });
this.animation.start();
var self = this;
this.painter.refreshNextFrame = function () {
self.refreshNextFrame();
};
this._needsRefreshNextFrame = false;
var self = this;
var storage = this.storage;
var oldDelFromMap = storage.delFromMap;
storage.delFromMap = function (elId) {
var el = storage.get(elId);
self.stopAnimation(el);
oldDelFromMap.call(storage, elId);
};
};
ZRender.prototype.getId = function () {
return this.id;
};
ZRender.prototype.addShape = function (shape) {
this.addElement(shape);
return this;
};
ZRender.prototype.addGroup = function (group) {
this.addElement(group);
return this;
};
ZRender.prototype.delShape = function (shapeId) {
this.delElement(shapeId);
return this;
};
ZRender.prototype.delGroup = function (groupId) {
this.delElement(groupId);
return this;
};
ZRender.prototype.modShape = function (shapeId, shape) {
this.modElement(shapeId, shape);
return this;
};
ZRender.prototype.modGroup = function (groupId, group) {
this.modElement(groupId, group);
return this;
};
ZRender.prototype.addElement = function (el) {
this.storage.addRoot(el);
this._needsRefreshNextFrame = true;
return this;
};
ZRender.prototype.delElement = function (el) {
this.storage.delRoot(el);
this._needsRefreshNextFrame = true;
return this;
};
ZRender.prototype.modElement = function (el, params) {
this.storage.mod(el, params);
this._needsRefreshNextFrame = true;
return this;
};
ZRender.prototype.modLayer = function (zLevel, config) {
this.painter.modLayer(zLevel, config);
this._needsRefreshNextFrame = true;
return this;
};
ZRender.prototype.addHoverShape = function (shape) {
this.storage.addHover(shape);
return this;
};
ZRender.prototype.render = function (callback) {
this.painter.render(callback);
this._needsRefreshNextFrame = false;
return this;
};
ZRender.prototype.refresh = function (callback) {
this.painter.refresh(callback);
this._needsRefreshNextFrame = false;
return this;
};
ZRender.prototype.refreshNextFrame = function () {
this._needsRefreshNextFrame = true;
return this;
};
ZRender.prototype.refreshHover = function (callback) {
this.painter.refreshHover(callback);
return this;
};
ZRender.prototype.refreshShapes = function (shapeList, callback) {
this.painter.refreshShapes(shapeList, callback);
return this;
};
ZRender.prototype.resize = function () {
this.painter.resize();
return this;
};
ZRender.prototype.animate = function (el, path, loop) {
var self = this;
if (typeof el === 'string') {
el = this.storage.get(el);
}
if (el) {
var target;
if (path) {
var pathSplitted = path.split('.');
var prop = el;
for (var i = 0, l = pathSplitted.length; i < l; i++) {
if (!prop) {
continue;
}
prop = prop[pathSplitted[i]];
}
if (prop) {
target = prop;
}
} else {
target = el;
}
if (!target) {
log('Property "' + path + '" is not existed in element ' + el.id);
return;
}
if (el.__animators == null) {
el.__animators = [];
}
var animators = el.__animators;
var animator = this.animation.animate(target, { loop: loop }).during(function () {
self.modShape(el);
}).done(function () {
var idx = util.indexOf(el.__animators, animator);
if (idx >= 0) {
animators.splice(idx, 1);
}
});
animators.push(animator);
return animator;
} else {
log('Element not existed');
}
};
ZRender.prototype.stopAnimation = function (el) {
if (el.__animators) {
var animators = el.__animators;
var len = animators.length;
for (var i = 0; i < len; i++) {
animators[i].stop();
}
animators.length = 0;
}
return this;
};
ZRender.prototype.clearAnimation = function () {
this.animation.clear();
return this;
};
ZRender.prototype.showLoading = function (loadingEffect) {
this.painter.showLoading(loadingEffect);
return this;
};
ZRender.prototype.hideLoading = function () {
this.painter.hideLoading();
return this;
};
ZRender.prototype.getWidth = function () {
return this.painter.getWidth();
};
ZRender.prototype.getHeight = function () {
return this.painter.getHeight();
};
ZRender.prototype.toDataURL = function (type, backgroundColor, args) {
return this.painter.toDataURL(type, backgroundColor, args);
};
ZRender.prototype.shapeToImage = function (e, width, height) {
var id = guid();
return this.painter.shapeToImage(id, e, width, height);
};
ZRender.prototype.on = function (eventName, eventHandler, context) {
this.handler.on(eventName, eventHandler, context);
return this;
};
ZRender.prototype.un = function (eventName, eventHandler) {
this.handler.un(eventName, eventHandler);
return this;
};
ZRender.prototype.trigger = function (eventName, event) {
this.handler.trigger(eventName, event);
return this;
};
ZRender.prototype.clear = function () {
this.storage.delRoot();
this.painter.clear();
return this;
};
ZRender.prototype.dispose = function () {
this.animation.stop();
this.clear();
this.storage.dispose();
this.painter.dispose();
this.handler.dispose();
this.animation = this.storage = this.painter = this.handler = null;
zrender.delInstance(this.id);
};
return zrender;
});define('zrender/config', [], function () {
var config = {
EVENT: {
RESIZE: 'resize',
CLICK: 'click',
DBLCLICK: 'dblclick',
MOUSEWHEEL: 'mousewheel',
MOUSEMOVE: 'mousemove',
MOUSEOVER: 'mouseover',
MOUSEOUT: 'mouseout',
MOUSEDOWN: 'mousedown',
MOUSEUP: 'mouseup',
GLOBALOUT: 'globalout',
DRAGSTART: 'dragstart',
DRAGEND: 'dragend',
DRAGENTER: 'dragenter',
DRAGOVER: 'dragover',
DRAGLEAVE: 'dragleave',
DROP: 'drop',
touchClickDelay: 300
},
elementClassName: 'zr-element',
catchBrushException: false,
debugMode: 0,
devicePixelRatio: Math.max(window.devicePixelRatio || 1, 1)
};
return config;
});define('echarts/chart/island', [
'require',
'./base',
'zrender/shape/Circle',
'../config',
'../util/ecData',
'zrender/tool/util',
'zrender/tool/event',
'zrender/tool/color',
'../util/accMath',
'../chart'
], function (require) {
var ChartBase = require('./base');
var CircleShape = require('zrender/shape/Circle');
var ecConfig = require('../config');
ecConfig.island = {
zlevel: 0,
z: 5,
r: 15,
calculateStep: 0.1
};
var ecData = require('../util/ecData');
var zrUtil = require('zrender/tool/util');
var zrEvent = require('zrender/tool/event');
function Island(ecTheme, messageCenter, zr, option, myChart) {
ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
this._nameConnector;
this._valueConnector;
this._zrHeight = this.zr.getHeight();
this._zrWidth = this.zr.getWidth();
var self = this;
self.shapeHandler.onmousewheel = function (param) {
var shape = param.target;
var event = param.event;
var delta = zrEvent.getDelta(event);
delta = delta > 0 ? -1 : 1;
shape.style.r -= delta;
shape.style.r = shape.style.r < 5 ? 5 : shape.style.r;
var value = ecData.get(shape, 'value');
var dvalue = value * self.option.island.calculateStep;
value = dvalue > 1 ? Math.round(value - dvalue * delta) : +(value - dvalue * delta).toFixed(2);
var name = ecData.get(shape, 'name');
shape.style.text = name + ':' + value;
ecData.set(shape, 'value', value);
ecData.set(shape, 'name', name);
self.zr.modShape(shape.id);
self.zr.refreshNextFrame();
zrEvent.stop(event);
};
}
Island.prototype = {
type: ecConfig.CHART_TYPE_ISLAND,
_combine: function (tarShape, srcShape) {
var zrColor = require('zrender/tool/color');
var accMath = require('../util/accMath');
var value = accMath.accAdd(ecData.get(tarShape, 'value'), ecData.get(srcShape, 'value'));
var name = ecData.get(tarShape, 'name') + this._nameConnector + ecData.get(srcShape, 'name');
tarShape.style.text = name + this._valueConnector + value;
ecData.set(tarShape, 'value', value);
ecData.set(tarShape, 'name', name);
tarShape.style.r = this.option.island.r;
tarShape.style.color = zrColor.mix(tarShape.style.color, srcShape.style.color);
},
refresh: function (newOption) {
if (newOption) {
newOption.island = this.reformOption(newOption.island);
this.option = newOption;
this._nameConnector = this.option.nameConnector;
this._valueConnector = this.option.valueConnector;
}
},
getOption: function () {
return this.option;
},
resize: function () {
var newWidth = this.zr.getWidth();
var newHieght = this.zr.getHeight();
var xScale = newWidth / (this._zrWidth || newWidth);
var yScale = newHieght / (this._zrHeight || newHieght);
if (xScale === 1 && yScale === 1) {
return;
}
this._zrWidth = newWidth;
this._zrHeight = newHieght;
for (var i = 0, l = this.shapeList.length; i < l; i++) {
this.zr.modShape(this.shapeList[i].id, {
style: {
x: Math.round(this.shapeList[i].style.x * xScale),
y: Math.round(this.shapeList[i].style.y * yScale)
}
});
}
},
add: function (shape) {
var name = ecData.get(shape, 'name');
var value = ecData.get(shape, 'value');
var seriesName = ecData.get(shape, 'series') != null ? ecData.get(shape, 'series').name : '';
var font = this.getFont(this.option.island.textStyle);
var islandOption = this.option.island;
var islandShape = {
zlevel: islandOption.zlevel,
z: islandOption.z,
style: {
x: shape.style.x,
y: shape.style.y,
r: this.option.island.r,
color: shape.style.color || shape.style.strokeColor,
text: name + this._valueConnector + value,
textFont: font
},
draggable: true,
hoverable: true,
onmousewheel: this.shapeHandler.onmousewheel,
_type: 'island'
};
if (islandShape.style.color === '#fff') {
islandShape.style.color = shape.style.strokeColor;
}
this.setCalculable(islandShape);
islandShape.dragEnableTime = 0;
ecData.pack(islandShape, { name: seriesName }, -1, value, -1, name);
islandShape = new CircleShape(islandShape);
this.shapeList.push(islandShape);
this.zr.addShape(islandShape);
},
del: function (shape) {
this.zr.delShape(shape.id);
var newShapeList = [];
for (var i = 0, l = this.shapeList.length; i < l; i++) {
if (this.shapeList[i].id != shape.id) {
newShapeList.push(this.shapeList[i]);
}
}
this.shapeList = newShapeList;
},
ondrop: function (param, status) {
if (!this.isDrop || !param.target) {
return;
}
var target = param.target;
var dragged = param.dragged;
this._combine(target, dragged);
this.zr.modShape(target.id);
status.dragIn = true;
this.isDrop = false;
return;
},
ondragend: function (param, status) {
var target = param.target;
if (!this.isDragend) {
if (!status.dragIn) {
target.style.x = zrEvent.getX(param.event);
target.style.y = zrEvent.getY(param.event);
this.add(target);
status.needRefresh = true;
}
} else {
if (status.dragIn) {
this.del(target);
status.needRefresh = true;
}
}
this.isDragend = false;
return;
}
};
zrUtil.inherits(Island, ChartBase);
require('../chart').define('island', Island);
return Island;
});define('echarts/component/toolbox', [
'require',
'./base',
'zrender/shape/Line',
'zrender/shape/Image',
'zrender/shape/Rectangle',
'../util/shape/Icon',
'../config',
'zrender/tool/util',
'zrender/config',
'zrender/tool/event',
'./dataView',
'../component'
], function (require) {
var Base = require('./base');
var LineShape = require('zrender/shape/Line');
var ImageShape = require('zrender/shape/Image');
var RectangleShape = require('zrender/shape/Rectangle');
var IconShape = require('../util/shape/Icon');
var ecConfig = require('../config');
ecConfig.toolbox = {
zlevel: 0,
z: 6,
show: false,
orient: 'horizontal',
x: 'right',
y: 'top',
color: [
'#1e90ff',
'#22bb22',
'#4b0082',
'#d2691e'
],
disableColor: '#ddd',
effectiveColor: 'red',
backgroundColor: 'rgba(0,0,0,0)',
borderColor: '#ccc',
borderWidth: 0,
padding: 5,
itemGap: 10,
itemSize: 16,
showTitle: true,
feature: {
mark: {
show: false,
title: {
mark: '辅助线开关',
markUndo: '删除辅助线',
markClear: '清空辅助线'
},
lineStyle: {
width: 1,
color: '#1e90ff',
type: 'dashed'
}
},
dataZoom: {
show: false,
title: {
dataZoom: '区域缩放',
dataZoomReset: '区域缩放后退'
}
},
dataView: {
show: false,
title: '数据视图',
readOnly: false,
lang: [
'数据视图',
'关闭',
'刷新'
]
},
magicType: {
show: false,
title: {
line: '折线图切换',
bar: '柱形图切换',
stack: '堆积',
tiled: '平铺',
force: '力导向布局图切换',
chord: '和弦图切换',
pie: '饼图切换',
funnel: '漏斗图切换'
},
type: []
},
restore: {
show: false,
title: '还原'
},
saveAsImage: {
show: false,
title: '保存为图片',
type: 'png',
lang: ['点击保存']
}
}
};
var zrUtil = require('zrender/tool/util');
var zrConfig = require('zrender/config');
var zrEvent = require('zrender/tool/event');
var _MAGICTYPE_STACK = 'stack';
var _MAGICTYPE_TILED = 'tiled';
function Toolbox(ecTheme, messageCenter, zr, option, myChart) {
Base.call(this, ecTheme, messageCenter, zr, option, myChart);
this.dom = myChart.dom;
this._magicType = {};
this._magicMap = {};
this._isSilence = false;
this._iconList;
this._iconShapeMap = {};
this._featureTitle = {};
this._featureIcon = {};
this._featureColor = {};
this._featureOption = {};
this._enableColor = 'red';
this._disableColor = '#ccc';
this._markShapeList = [];
var self = this;
self._onMark = function (param) {
self.__onMark(param);
};
self._onMarkUndo = function (param) {
self.__onMarkUndo(param);
};
self._onMarkClear = function (param) {
self.__onMarkClear(param);
};
self._onDataZoom = function (param) {
self.__onDataZoom(param);
};
self._onDataZoomReset = function (param) {
self.__onDataZoomReset(param);
};
self._onDataView = function (param) {
self.__onDataView(param);
};
self._onRestore = function (param) {
self.__onRestore(param);
};
self._onSaveAsImage = function (param) {
self.__onSaveAsImage(param);
};
self._onMagicType = function (param) {
self.__onMagicType(param);
};
self._onCustomHandler = function (param) {
self.__onCustomHandler(param);
};
self._onmousemove = function (param) {
return self.__onmousemove(param);
};
self._onmousedown = function (param) {
return self.__onmousedown(param);
};
self._onmouseup = function (param) {
return self.__onmouseup(param);
};
self._onclick = function (param) {
return self.__onclick(param);
};
}
Toolbox.prototype = {
type: ecConfig.COMPONENT_TYPE_TOOLBOX,
_buildShape: function () {
this._iconList = [];
var toolboxOption = this.option.toolbox;
this._enableColor = toolboxOption.effectiveColor;
this._disableColor = toolboxOption.disableColor;
var feature = toolboxOption.feature;
var iconName = [];
for (var key in feature) {
if (feature[key].show) {
switch (key) {
case 'mark':
iconName.push({
key: key,
name: 'mark'
});
iconName.push({
key: key,
name: 'markUndo'
});
iconName.push({
key: key,
name: 'markClear'
});
break;
case 'magicType':
for (var i = 0, l = feature[key].type.length; i < l; i++) {
feature[key].title[feature[key].type[i] + 'Chart'] = feature[key].title[feature[key].type[i]];
if (feature[key].option) {
feature[key].option[feature[key].type[i] + 'Chart'] = feature[key].option[feature[key].type[i]];
}
iconName.push({
key: key,
name: feature[key].type[i] + 'Chart'
});
}
break;
case 'dataZoom':
iconName.push({
key: key,
name: 'dataZoom'
});
iconName.push({
key: key,
name: 'dataZoomReset'
});
break;
case 'saveAsImage':
if (this.canvasSupported) {
iconName.push({
key: key,
name: 'saveAsImage'
});
}
break;
default:
iconName.push({
key: key,
name: key
});
break;
}
}
}
if (iconName.length > 0) {
var name;
var key;
for (var i = 0, l = iconName.length; i < l; i++) {
name = iconName[i].name;
key = iconName[i].key;
this._iconList.push(name);
this._featureTitle[name] = feature[key].title[name] || feature[key].title;
if (feature[key].icon) {
this._featureIcon[name] = feature[key].icon[name] || feature[key].icon;
}
if (feature[key].color) {
this._featureColor[name] = feature[key].color[name] || feature[key].color;
}
if (feature[key].option) {
this._featureOption[name] = feature[key].option[name] || feature[key].option;
}
}
this._itemGroupLocation = this._getItemGroupLocation();
this._buildBackground();
this._buildItem();
for (var i = 0, l = this.shapeList.length; i < l; i++) {
this.zr.addShape(this.shapeList[i]);
}
if (this._iconShapeMap['mark']) {
this._iconDisable(this._iconShapeMap['markUndo']);
this._iconDisable(this._iconShapeMap['markClear']);
}
if (this._iconShapeMap['dataZoomReset'] && this._zoomQueue.length === 0) {
this._iconDisable(this._iconShapeMap['dataZoomReset']);
}
}
},
_buildItem: function () {
var toolboxOption = this.option.toolbox;
var iconLength = this._iconList.length;
var lastX = this._itemGroupLocation.x;
var lastY = this._itemGroupLocation.y;
var itemSize = toolboxOption.itemSize;
var itemGap = toolboxOption.itemGap;
var itemShape;
var color = toolboxOption.color instanceof Array ? toolboxOption.color : [toolboxOption.color];
var textFont = this.getFont(toolboxOption.textStyle);
var textPosition;
var textAlign;
var textBaseline;
if (toolboxOption.orient === 'horizontal') {
textPosition = this._itemGroupLocation.y / this.zr.getHeight() < 0.5 ? 'bottom' : 'top';
textAlign = this._itemGroupLocation.x / this.zr.getWidth() < 0.5 ? 'left' : 'right';
textBaseline = this._itemGroupLocation.y / this.zr.getHeight() < 0.5 ? 'top' : 'bottom';
} else {
textPosition = this._itemGroupLocation.x / this.zr.getWidth() < 0.5 ? 'right' : 'left';
}
this._iconShapeMap = {};
var self = this;
for (var i = 0; i < iconLength; i++) {
itemShape = {
type: 'icon',
zlevel: this.getZlevelBase(),
z: this.getZBase(),
style: {
x: lastX,
y: lastY,
width: itemSize,
height: itemSize,
iconType: this._iconList[i],
lineWidth: 1,
strokeColor: this._featureColor[this._iconList[i]] || color[i % color.length],
brushType: 'stroke'
},
highlightStyle: {
lineWidth: 1,
text: toolboxOption.showTitle ? this._featureTitle[this._iconList[i]] : undefined,
textFont: textFont,
textPosition: textPosition,
strokeColor: this._featureColor[this._iconList[i]] || color[i % color.length]
},
hoverable: true,
clickable: true
};
if (this._featureIcon[this._iconList[i]]) {
itemShape.style.image = this._featureIcon[this._iconList[i]].replace(new RegExp('^image:\\/\\/'), '');
itemShape.style.opacity = 0.8;
itemShape.highlightStyle.opacity = 1;
itemShape.type = 'image';
}
if (toolboxOption.orient === 'horizontal') {
if (i === 0 && textAlign === 'left') {
itemShape.highlightStyle.textPosition = 'specific';
itemShape.highlightStyle.textAlign = textAlign;
itemShape.highlightStyle.textBaseline = textBaseline;
itemShape.highlightStyle.textX = lastX;
itemShape.highlightStyle.textY = textBaseline === 'top' ? lastY + itemSize + 10 : lastY - 10;
}
if (i === iconLength - 1 && textAlign === 'right') {
itemShape.highlightStyle.textPosition = 'specific';
itemShape.highlightStyle.textAlign = textAlign;
itemShape.highlightStyle.textBaseline = textBaseline;
itemShape.highlightStyle.textX = lastX + itemSize;
itemShape.highlightStyle.textY = textBaseline === 'top' ? lastY + itemSize + 10 : lastY - 10;
}
}
switch (this._iconList[i]) {
case 'mark':
itemShape.onclick = self._onMark;
break;
case 'markUndo':
itemShape.onclick = self._onMarkUndo;
break;
case 'markClear':
itemShape.onclick = self._onMarkClear;
break;
case 'dataZoom':
itemShape.onclick = self._onDataZoom;
break;
case 'dataZoomReset':
itemShape.onclick = self._onDataZoomReset;
break;
case 'dataView':
if (!this._dataView) {
var DataView = require('./dataView');
this._dataView = new DataView(this.ecTheme, this.messageCenter, this.zr, this.option, this.myChart);
}
itemShape.onclick = self._onDataView;
break;
case 'restore':
itemShape.onclick = self._onRestore;
break;
case 'saveAsImage':
itemShape.onclick = self._onSaveAsImage;
break;
default:
if (this._iconList[i].match('Chart')) {
itemShape._name = this._iconList[i].replace('Chart', '');
itemShape.onclick = self._onMagicType;
} else {
itemShape.onclick = self._onCustomHandler;
}
break;
}
if (itemShape.type === 'icon') {
itemShape = new IconShape(itemShape);
} else if (itemShape.type === 'image') {
itemShape = new ImageShape(itemShape);
}
this.shapeList.push(itemShape);
this._iconShapeMap[this._iconList[i]] = itemShape;
if (toolboxOption.orient === 'horizontal') {
lastX += itemSize + itemGap;
} else {
lastY += itemSize + itemGap;
}
}
},
_buildBackground: function () {
var toolboxOption = this.option.toolbox;
var padding = this.reformCssArray(this.option.toolbox.padding);
this.shapeList.push(new RectangleShape({
zlevel: this.getZlevelBase(),
z: this.getZBase(),
hoverable: false,
style: {
x: this._itemGroupLocation.x - padding[3],
y: this._itemGroupLocation.y - padding[0],
width: this._itemGroupLocation.width + padding[3] + padding[1],
height: this._itemGroupLocation.height + padding[0] + padding[2],
brushType: toolboxOption.borderWidth === 0 ? 'fill' : 'both',
color: toolboxOption.backgroundColor,
strokeColor: toolboxOption.borderColor,
lineWidth: toolboxOption.borderWidth
}
}));
},
_getItemGroupLocation: function () {
var toolboxOption = this.option.toolbox;
var padding = this.reformCssArray(this.option.toolbox.padding);
var iconLength = this._iconList.length;
var itemGap = toolboxOption.itemGap;
var itemSize = toolboxOption.itemSize;
var totalWidth = 0;
var totalHeight = 0;
if (toolboxOption.orient === 'horizontal') {
totalWidth = (itemSize + itemGap) * iconLength - itemGap;
totalHeight = itemSize;
} else {
totalHeight = (itemSize + itemGap) * iconLength - itemGap;
totalWidth = itemSize;
}
var x;
var zrWidth = this.zr.getWidth();
switch (toolboxOption.x) {
case 'center':
x = Math.floor((zrWidth - totalWidth) / 2);
break;
case 'left':
x = padding[3] + toolboxOption.borderWidth;
break;
case 'right':
x = zrWidth - totalWidth - padding[1] - toolboxOption.borderWidth;
break;
default:
x = toolboxOption.x - 0;
x = isNaN(x) ? 0 : x;
break;
}
var y;
var zrHeight = this.zr.getHeight();
switch (toolboxOption.y) {
case 'top':
y = padding[0] + toolboxOption.borderWidth;
break;
case 'bottom':
y = zrHeight - totalHeight - padding[2] - toolboxOption.borderWidth;
break;
case 'center':
y = Math.floor((zrHeight - totalHeight) / 2);
break;
default:
y = toolboxOption.y - 0;
y = isNaN(y) ? 0 : y;
break;
}
return {
x: x,
y: y,
width: totalWidth,
height: totalHeight
};
},
__onmousemove: function (param) {
if (this._marking) {
this._markShape.style.xEnd = zrEvent.getX(param.event);
this._markShape.style.yEnd = zrEvent.getY(param.event);
this.zr.addHoverShape(this._markShape);
}
if (this._zooming) {
this._zoomShape.style.width = zrEvent.getX(param.event) - this._zoomShape.style.x;
this._zoomShape.style.height = zrEvent.getY(param.event) - this._zoomShape.style.y;
this.zr.addHoverShape(this._zoomShape);
this.dom.style.cursor = 'crosshair';
zrEvent.stop(param.event);
}
if (this._zoomStart && (this.dom.style.cursor != 'pointer' && this.dom.style.cursor != 'move')) {
this.dom.style.cursor = 'crosshair';
}
},
__onmousedown: function (param) {
if (param.target) {
return;
}
this._zooming = true;
var x = zrEvent.getX(param.event);
var y = zrEvent.getY(param.event);
var zoomOption = this.option.dataZoom || {};
this._zoomShape = new RectangleShape({
zlevel: this.getZlevelBase(),
z: this.getZBase(),
style: {
x: x,
y: y,
width: 1,
height: 1,
brushType: 'both'
},
highlightStyle: {
lineWidth: 2,
color: zoomOption.fillerColor || ecConfig.dataZoom.fillerColor,
strokeColor: zoomOption.handleColor || ecConfig.dataZoom.handleColor,
brushType: 'both'
}
});
this.zr.addHoverShape(this._zoomShape);
return true;
},
__onmouseup: function () {
if (!this._zoomShape || Math.abs(this._zoomShape.style.width) < 10 || Math.abs(this._zoomShape.style.height) < 10) {
this._zooming = false;
return true;
}
if (this._zooming && this.component.dataZoom) {
this._zooming = false;
var zoom = this.component.dataZoom.rectZoom(this._zoomShape.style);
if (zoom) {
this._zoomQueue.push({
start: zoom.start,
end: zoom.end,
start2: zoom.start2,
end2: zoom.end2
});
this._iconEnable(this._iconShapeMap['dataZoomReset']);
this.zr.refreshNextFrame();
}
}
return true;
},
__onclick: function (param) {
if (param.target) {
return;
}
if (this._marking) {
this._marking = false;
this._markShapeList.push(this._markShape);
this._iconEnable(this._iconShapeMap['markUndo']);
this._iconEnable(this._iconShapeMap['markClear']);
this.zr.addShape(this._markShape);
this.zr.refreshNextFrame();
} else if (this._markStart) {
this._marking = true;
var x = zrEvent.getX(param.event);
var y = zrEvent.getY(param.event);
this._markShape = new LineShape({
zlevel: this.getZlevelBase(),
z: this.getZBase(),
style: {
xStart: x,
yStart: y,
xEnd: x,
yEnd: y,
lineWidth: this.query(this.option, 'toolbox.feature.mark.lineStyle.width'),
strokeColor: this.query(this.option, 'toolbox.feature.mark.lineStyle.color'),
lineType: this.query(this.option, 'toolbox.feature.mark.lineStyle.type')
}
});
this.zr.addHoverShape(this._markShape);
}
},
__onMark: function (param) {
var target = param.target;
if (this._marking || this._markStart) {
this._resetMark();
this.zr.refreshNextFrame();
} else {
this._resetZoom();
this.zr.modShape(target.id, { style: { strokeColor: this._enableColor } });
this.zr.refreshNextFrame();
this._markStart = true;
var self = this;
setTimeout(function () {
self.zr && self.zr.on(zrConfig.EVENT.CLICK, self._onclick) && self.zr.on(zrConfig.EVENT.MOUSEMOVE, self._onmousemove);
}, 10);
}
return true;
},
__onMarkUndo: function () {
if (this._marking) {
this._marking = false;
} else {
var len = this._markShapeList.length;
if (len >= 1) {
var target = this._markShapeList[len - 1];
this.zr.delShape(target.id);
this.zr.refreshNextFrame();
this._markShapeList.pop();
if (len === 1) {
this._iconDisable(this._iconShapeMap['markUndo']);
this._iconDisable(this._iconShapeMap['markClear']);
}
}
}
return true;
},
__onMarkClear: function () {
if (this._marking) {
this._marking = false;
}
var len = this._markShapeList.length;
if (len > 0) {
while (len--) {
this.zr.delShape(this._markShapeList.pop().id);
}
this._iconDisable(this._iconShapeMap['markUndo']);
this._iconDisable(this._iconShapeMap['markClear']);
this.zr.refreshNextFrame();
}
return true;
},
__onDataZoom: function (param) {
var target = param.target;
if (this._zooming || this._zoomStart) {
this._resetZoom();
this.zr.refreshNextFrame();
this.dom.style.cursor = 'default';
} else {
this._resetMark();
this.zr.modShape(target.id, { style: { strokeColor: this._enableColor } });
this.zr.refreshNextFrame();
this._zoomStart = true;
var self = this;
setTimeout(function () {
self.zr && self.zr.on(zrConfig.EVENT.MOUSEDOWN, self._onmousedown) && self.zr.on(zrConfig.EVENT.MOUSEUP, self._onmouseup) && self.zr.on(zrConfig.EVENT.MOUSEMOVE, self._onmousemove);
}, 10);
this.dom.style.cursor = 'crosshair';
}
return true;
},
__onDataZoomReset: function () {
if (this._zooming) {
this._zooming = false;
}
this._zoomQueue.pop();
if (this._zoomQueue.length > 0) {
this.component.dataZoom.absoluteZoom(this._zoomQueue[this._zoomQueue.length - 1]);
} else {
this.component.dataZoom.rectZoom();
this._iconDisable(this._iconShapeMap['dataZoomReset']);
this.zr.refreshNextFrame();
}
return true;
},
_resetMark: function () {
this._marking = false;
if (this._markStart) {
this._markStart = false;
if (this._iconShapeMap['mark']) {
this.zr.modShape(this._iconShapeMap['mark'].id, { style: { strokeColor: this._iconShapeMap['mark'].highlightStyle.strokeColor } });
}
this.zr.un(zrConfig.EVENT.CLICK, this._onclick);
this.zr.un(zrConfig.EVENT.MOUSEMOVE, this._onmousemove);
}
},
_resetZoom: function () {
this._zooming = false;
if (this._zoomStart) {
this._zoomStart = false;
if (this._iconShapeMap['dataZoom']) {
this.zr.modShape(this._iconShapeMap['dataZoom'].id, { style: { strokeColor: this._iconShapeMap['dataZoom'].highlightStyle.strokeColor } });
}
this.zr.un(zrConfig.EVENT.MOUSEDOWN, this._onmousedown);
this.zr.un(zrConfig.EVENT.MOUSEUP, this._onmouseup);
this.zr.un(zrConfig.EVENT.MOUSEMOVE, this._onmousemove);
}
},
_iconDisable: function (target) {
if (target.type != 'image') {
this.zr.modShape(target.id, {
hoverable: false,
clickable: false,
style: { strokeColor: this._disableColor }
});
} else {
this.zr.modShape(target.id, {
hoverable: false,
clickable: false,
style: { opacity: 0.3 }
});
}
},
_iconEnable: function (target) {
if (target.type != 'image') {
this.zr.modShape(target.id, {
hoverable: true,
clickable: true,
style: { strokeColor: target.highlightStyle.strokeColor }
});
} else {
this.zr.modShape(target.id, {
hoverable: true,
clickable: true,
style: { opacity: 0.8 }
});
}
},
__onDataView: function () {
this._dataView.show(this.option);
return true;
},
__onRestore: function () {
this._resetMark();
this._resetZoom();
this.messageCenter.dispatch(ecConfig.EVENT.RESTORE, null, null, this.myChart);
return true;
},
__onSaveAsImage: function () {
var saveOption = this.option.toolbox.feature.saveAsImage;
var imgType = saveOption.type || 'png';
if (imgType != 'png' && imgType != 'jpeg') {
imgType = 'png';
}
var image;
if (!this.myChart.isConnected()) {
image = this.zr.toDataURL('image/' + imgType, this.option.backgroundColor && this.option.backgroundColor.replace(' ', '') === 'rgba(0,0,0,0)' ? '#fff' : this.option.backgroundColor);
} else {
image = this.myChart.getConnectedDataURL(imgType);
}
var downloadDiv = document.createElement('div');
downloadDiv.id = '__echarts_download_wrap__';
downloadDiv.style.cssText = 'position:fixed;' + 'z-index:99999;' + 'display:block;' + 'top:0;left:0;' + 'background-color:rgba(33,33,33,0.5);' + 'text-align:center;' + 'width:100%;' + 'height:100%;' + 'line-height:' + document.documentElement.clientHeight + 'px;';
var downloadLink = document.createElement('a');
downloadLink.href = image;
downloadLink.setAttribute('download', (saveOption.name ? saveOption.name : this.option.title && (this.option.title.text || this.option.title.subtext) ? this.option.title.text || this.option.title.subtext : 'ECharts') + '.' + imgType);
downloadLink.innerHTML = '<img style="vertical-align:middle" src="' + image + '" title="' + (!!window.ActiveXObject || 'ActiveXObject' in window ? '右键->图片另存为' : saveOption.lang ? saveOption.lang[0] : '点击保存') + '"/>';
downloadDiv.appendChild(downloadLink);
document.body.appendChild(downloadDiv);
downloadLink = null;
downloadDiv = null;
setTimeout(function () {
var _d = document.getElementById('__echarts_download_wrap__');
if (_d) {
_d.onclick = function () {
var d = document.getElementById('__echarts_download_wrap__');
d.onclick = null;
d.innerHTML = '';
document.body.removeChild(d);
d = null;
};
_d = null;
}
}, 500);
return;
},
__onMagicType: function (param) {
this._resetMark();
var itemName = param.target._name;
if (!this._magicType[itemName]) {
this._magicType[itemName] = true;
if (itemName === ecConfig.CHART_TYPE_LINE) {
this._magicType[ecConfig.CHART_TYPE_BAR] = false;
} else if (itemName === ecConfig.CHART_TYPE_BAR) {
this._magicType[ecConfig.CHART_TYPE_LINE] = false;
}
if (itemName === ecConfig.CHART_TYPE_PIE) {
this._magicType[ecConfig.CHART_TYPE_FUNNEL] = false;
} else if (itemName === ecConfig.CHART_TYPE_FUNNEL) {
this._magicType[ecConfig.CHART_TYPE_PIE] = false;
}
if (itemName === ecConfig.CHART_TYPE_FORCE) {
this._magicType[ecConfig.CHART_TYPE_CHORD] = false;
} else if (itemName === ecConfig.CHART_TYPE_CHORD) {
this._magicType[ecConfig.CHART_TYPE_FORCE] = false;
}
if (itemName === _MAGICTYPE_STACK) {
this._magicType[_MAGICTYPE_TILED] = false;
} else if (itemName === _MAGICTYPE_TILED) {
this._magicType[_MAGICTYPE_STACK] = false;
}
this.messageCenter.dispatch(ecConfig.EVENT.MAGIC_TYPE_CHANGED, param.event, { magicType: this._magicType }, this.myChart);
}
return true;
},
setMagicType: function (magicType) {
this._resetMark();
this._magicType = magicType;
!this._isSilence && this.messageCenter.dispatch(ecConfig.EVENT.MAGIC_TYPE_CHANGED, null, { magicType: this._magicType }, this.myChart);
},
__onCustomHandler: function (param) {
var target = param.target.style.iconType;
var featureHandler = this.option.toolbox.feature[target].onclick;
if (typeof featureHandler === 'function') {
featureHandler.call(this, this.option);
}
},
reset: function (newOption, isRestore) {
isRestore && this.clear();
if (this.query(newOption, 'toolbox.show') && this.query(newOption, 'toolbox.feature.magicType.show')) {
var magicType = newOption.toolbox.feature.magicType.type;
var len = magicType.length;
this._magicMap = {};
while (len--) {
this._magicMap[magicType[len]] = true;
}
len = newOption.series.length;
var oriType;
var axis;
while (len--) {
oriType = newOption.series[len].type;
if (this._magicMap[oriType]) {
axis = newOption.xAxis instanceof Array ? newOption.xAxis[newOption.series[len].xAxisIndex || 0] : newOption.xAxis;
if (axis && (axis.type || 'category') === 'category') {
axis.__boundaryGap = axis.boundaryGap != null ? axis.boundaryGap : true;
}
axis = newOption.yAxis instanceof Array ? newOption.yAxis[newOption.series[len].yAxisIndex || 0] : newOption.yAxis;
if (axis && axis.type === 'category') {
axis.__boundaryGap = axis.boundaryGap != null ? axis.boundaryGap : true;
}
newOption.series[len].__type = oriType;
newOption.series[len].__itemStyle = zrUtil.clone(newOption.series[len].itemStyle || {});
}
if (this._magicMap[_MAGICTYPE_STACK] || this._magicMap[_MAGICTYPE_TILED]) {
newOption.series[len].__stack = newOption.series[len].stack;
}
}
}
this._magicType = isRestore ? {} : this._magicType || {};
for (var itemName in this._magicType) {
if (this._magicType[itemName]) {
this.option = newOption;
this.getMagicOption();
break;
}
}
var zoomOption = newOption.dataZoom;
if (zoomOption && zoomOption.show) {
var start = zoomOption.start != null && zoomOption.start >= 0 && zoomOption.start <= 100 ? zoomOption.start : 0;
var end = zoomOption.end != null && zoomOption.end >= 0 && zoomOption.end <= 100 ? zoomOption.end : 100;
if (start > end) {
start = start + end;
end = start - end;
start = start - end;
}
this._zoomQueue = [{
start: start,
end: end,
start2: 0,
end2: 100
}];
} else {
this._zoomQueue = [];
}
},
getMagicOption: function () {
var axis;
var chartType;
if (this._magicType[ecConfig.CHART_TYPE_LINE] || this._magicType[ecConfig.CHART_TYPE_BAR]) {
var boundaryGap = this._magicType[ecConfig.CHART_TYPE_LINE] ? false : true;
for (var i = 0, l = this.option.series.length; i < l; i++) {
chartType = this.option.series[i].type;
if (chartType == ecConfig.CHART_TYPE_LINE || chartType == ecConfig.CHART_TYPE_BAR) {
axis = this.option.xAxis instanceof Array ? this.option.xAxis[this.option.series[i].xAxisIndex || 0] : this.option.xAxis;
if (axis && (axis.type || 'category') === 'category') {
axis.boundaryGap = boundaryGap ? true : axis.__boundaryGap;
}
axis = this.option.yAxis instanceof Array ? this.option.yAxis[this.option.series[i].yAxisIndex || 0] : this.option.yAxis;
if (axis && axis.type === 'category') {
axis.boundaryGap = boundaryGap ? true : axis.__boundaryGap;
}
}
}
this._defaultMagic(ecConfig.CHART_TYPE_LINE, ecConfig.CHART_TYPE_BAR);
}
this._defaultMagic(ecConfig.CHART_TYPE_CHORD, ecConfig.CHART_TYPE_FORCE);
this._defaultMagic(ecConfig.CHART_TYPE_PIE, ecConfig.CHART_TYPE_FUNNEL);
if (this._magicType[_MAGICTYPE_STACK] || this._magicType[_MAGICTYPE_TILED]) {
for (var i = 0, l = this.option.series.length; i < l; i++) {
if (this._magicType[_MAGICTYPE_STACK]) {
this.option.series[i].stack = '_ECHARTS_STACK_KENER_2014_';
chartType = _MAGICTYPE_STACK;
} else if (this._magicType[_MAGICTYPE_TILED]) {
this.option.series[i].stack = null;
chartType = _MAGICTYPE_TILED;
}
if (this._featureOption[chartType + 'Chart']) {
zrUtil.merge(this.option.series[i], this._featureOption[chartType + 'Chart'] || {}, true);
}
}
}
return this.option;
},
_defaultMagic: function (cType1, cType2) {
if (this._magicType[cType1] || this._magicType[cType2]) {
for (var i = 0, l = this.option.series.length; i < l; i++) {
var chartType = this.option.series[i].type;
if (chartType == cType1 || chartType == cType2) {
this.option.series[i].type = this._magicType[cType1] ? cType1 : cType2;
this.option.series[i].itemStyle = zrUtil.clone(this.option.series[i].__itemStyle);
chartType = this.option.series[i].type;
if (this._featureOption[chartType + 'Chart']) {
zrUtil.merge(this.option.series[i], this._featureOption[chartType + 'Chart'] || {}, true);
}
}
}
}
},
silence: function (s) {
this._isSilence = s;
},
resize: function () {
this._resetMark();
this.clear();
if (this.option && this.option.toolbox && this.option.toolbox.show) {
this._buildShape();
}
if (this._dataView) {
this._dataView.resize();
}
},
hideDataView: function () {
if (this._dataView) {
this._dataView.hide();
}
},
clear: function (notMark) {
if (this.zr) {
this.zr.delShape(this.shapeList);
this.shapeList = [];
if (!notMark) {
this.zr.delShape(this._markShapeList);
this._markShapeList = [];
}
}
},
onbeforDispose: function () {
if (this._dataView) {
this._dataView.dispose();
this._dataView = null;
}
this._markShapeList = null;
},
refresh: function (newOption) {
if (newOption) {
this._resetMark();
this._resetZoom();
newOption.toolbox = this.reformOption(newOption.toolbox);
this.option = newOption;
this.clear(true);
if (newOption.toolbox.show) {
this._buildShape();
}
this.hideDataView();
}
}
};
zrUtil.inherits(Toolbox, Base);
require('../component').define('toolbox', Toolbox);
return Toolbox;
});define('echarts/component', [], function () {
var self = {};
var _componentLibrary = {};
self.define = function (name, clazz) {
_componentLibrary[name] = clazz;
return self;
};
self.get = function (name) {
return _componentLibrary[name];
};
return self;
});define('echarts/component/title', [
'require',
'./base',
'zrender/shape/Text',
'zrender/shape/Rectangle',
'../config',
'zrender/tool/util',
'zrender/tool/area',
'zrender/tool/color',
'../component'
], function (require) {
var Base = require('./base');
var TextShape = require('zrender/shape/Text');
var RectangleShape = require('zrender/shape/Rectangle');
var ecConfig = require('../config');
ecConfig.title = {
zlevel: 0,
z: 6,
show: true,
text: '',
subtext: '',
x: 'left',
y: 'top',
backgroundColor: 'rgba(0,0,0,0)',
borderColor: '#ccc',
borderWidth: 0,
padding: 5,
itemGap: 5,
textStyle: {
fontSize: 18,
fontWeight: 'bolder',
color: '#333'
},
subtextStyle: { color: '#aaa' }
};
var zrUtil = require('zrender/tool/util');
var zrArea = require('zrender/tool/area');
var zrColor = require('zrender/tool/color');
function Title(ecTheme, messageCenter, zr, option, myChart) {
Base.call(this, ecTheme, messageCenter, zr, option, myChart);
this.refresh(option);
}
Title.prototype = {
type: ecConfig.COMPONENT_TYPE_TITLE,
_buildShape: function () {
if (!this.titleOption.show) {
return;
}
this._itemGroupLocation = this._getItemGroupLocation();
this._buildBackground();
this._buildItem();
for (var i = 0, l = this.shapeList.length; i < l; i++) {
this.zr.addShape(this.shapeList[i]);
}
},
_buildItem: function () {
var text = this.titleOption.text;
var link = this.titleOption.link;
var target = this.titleOption.target;
var subtext = this.titleOption.subtext;
var sublink = this.titleOption.sublink;
var subtarget = this.titleOption.subtarget;
var font = this.getFont(this.titleOption.textStyle);
var subfont = this.getFont(this.titleOption.subtextStyle);
var x = this._itemGroupLocation.x;
var y = this._itemGroupLocation.y;
var width = this._itemGroupLocation.width;
var height = this._itemGroupLocation.height;
var textShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
style: {
y: y,
color: this.titleOption.textStyle.color,
text: text,
textFont: font,
textBaseline: 'top'
},
highlightStyle: {
color: zrColor.lift(this.titleOption.textStyle.color, 1),
brushType: 'fill'
},
hoverable: false
};
if (link) {
textShape.hoverable = true;
textShape.clickable = true;
textShape.onclick = function () {
if (!target || target != 'self') {
window.open(link);
} else {
window.location = link;
}
};
}
var subtextShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
style: {
y: y + height,
color: this.titleOption.subtextStyle.color,
text: subtext,
textFont: subfont,
textBaseline: 'bottom'
},
highlightStyle: {
color: zrColor.lift(this.titleOption.subtextStyle.color, 1),
brushType: 'fill'
},
hoverable: false
};
if (sublink) {
subtextShape.hoverable = true;
subtextShape.clickable = true;
subtextShape.onclick = function () {
if (!subtarget || subtarget != 'self') {
window.open(sublink);
} else {
window.location = sublink;
}
};
}
switch (this.titleOption.x) {
case 'center':
textShape.style.x = subtextShape.style.x = x + width / 2;
textShape.style.textAlign = subtextShape.style.textAlign = 'center';
break;
case 'left':
textShape.style.x = subtextShape.style.x = x;
textShape.style.textAlign = subtextShape.style.textAlign = 'left';
break;
case 'right':
textShape.style.x = subtextShape.style.x = x + width;
textShape.style.textAlign = subtextShape.style.textAlign = 'right';
break;
default:
x = this.titleOption.x - 0;
x = isNaN(x) ? 0 : x;
textShape.style.x = subtextShape.style.x = x;
break;
}
if (this.titleOption.textAlign) {
textShape.style.textAlign = subtextShape.style.textAlign = this.titleOption.textAlign;
}
this.shapeList.push(new TextShape(textShape));
subtext !== '' && this.shapeList.push(new TextShape(subtextShape));
},
_buildBackground: function () {
var padding = this.reformCssArray(this.titleOption.padding);
this.shapeList.push(new RectangleShape({
zlevel: this.getZlevelBase(),
z: this.getZBase(),
hoverable: false,
style: {
x: this._itemGroupLocation.x - padding[3],
y: this._itemGroupLocation.y - padding[0],
width: this._itemGroupLocation.width + padding[3] + padding[1],
height: this._itemGroupLocation.height + padding[0] + padding[2],
brushType: this.titleOption.borderWidth === 0 ? 'fill' : 'both',
color: this.titleOption.backgroundColor,
strokeColor: this.titleOption.borderColor,
lineWidth: this.titleOption.borderWidth
}
}));
},
_getItemGroupLocation: function () {
var padding = this.reformCssArray(this.titleOption.padding);
var text = this.titleOption.text;
var subtext = this.titleOption.subtext;
var font = this.getFont(this.titleOption.textStyle);
var subfont = this.getFont(this.titleOption.subtextStyle);
var totalWidth = Math.max(zrArea.getTextWidth(text, font), zrArea.getTextWidth(subtext, subfont));
var totalHeight = zrArea.getTextHeight(text, font) + (subtext === '' ? 0 : this.titleOption.itemGap + zrArea.getTextHeight(subtext, subfont));
var x;
var zrWidth = this.zr.getWidth();
switch (this.titleOption.x) {
case 'center':
x = Math.floor((zrWidth - totalWidth) / 2);
break;
case 'left':
x = padding[3] + this.titleOption.borderWidth;
break;
case 'right':
x = zrWidth - totalWidth - padding[1] - this.titleOption.borderWidth;
break;
default:
x = this.titleOption.x - 0;
x = isNaN(x) ? 0 : x;
break;
}
var y;
var zrHeight = this.zr.getHeight();
switch (this.titleOption.y) {
case 'top':
y = padding[0] + this.titleOption.borderWidth;
break;
case 'bottom':
y = zrHeight - totalHeight - padding[2] - this.titleOption.borderWidth;
break;
case 'center':
y = Math.floor((zrHeight - totalHeight) / 2);
break;
default:
y = this.titleOption.y - 0;
y = isNaN(y) ? 0 : y;
break;
}
return {
x: x,
y: y,
width: totalWidth,
height: totalHeight
};
},
refresh: function (newOption) {
if (newOption) {
this.option = newOption;
this.option.title = this.reformOption(this.option.title);
this.titleOption = this.option.title;
this.titleOption.textStyle = this.getTextStyle(this.titleOption.textStyle);
this.titleOption.subtextStyle = this.getTextStyle(this.titleOption.subtextStyle);
}
this.clear();
this._buildShape();
}
};
zrUtil.inherits(Title, Base);
require('../component').define('title', Title);
return Title;
});define('echarts/component/tooltip', [
'require',
'./base',
'../util/shape/Cross',
'zrender/shape/Line',
'zrender/shape/Rectangle',
'../config',
'../util/ecData',
'zrender/config',
'zrender/tool/event',
'zrender/tool/area',
'zrender/tool/color',
'zrender/tool/util',
'zrender/shape/Base',
'../component'
], function (require) {
var Base = require('./base');
var CrossShape = require('../util/shape/Cross');
var LineShape = require('zrender/shape/Line');
var RectangleShape = require('zrender/shape/Rectangle');
var rectangleInstance = new RectangleShape({});
var ecConfig = require('../config');
ecConfig.tooltip = {
zlevel: 1,
z: 8,
show: true,
showContent: true,
trigger: 'item',
islandFormatter: '{a} <br/>{b} : {c}',
showDelay: 20,
hideDelay: 100,
transitionDuration: 0.4,
enterable: false,
backgroundColor: 'rgba(0,0,0,0.7)',
borderColor: '#333',
borderRadius: 4,
borderWidth: 0,
padding: 5,
axisPointer: {
type: 'line',
lineStyle: {
color: '#48b',
width: 2,
type: 'solid'
},
crossStyle: {
color: '#1e90ff',
width: 1,
type: 'dashed'
},
shadowStyle: {
color: 'rgba(150,150,150,0.3)',
width: 'auto',
type: 'default'
}
},
textStyle: { color: '#fff' }
};
var ecData = require('../util/ecData');
var zrConfig = require('zrender/config');
var zrEvent = require('zrender/tool/event');
var zrArea = require('zrender/tool/area');
var zrColor = require('zrender/tool/color');
var zrUtil = require('zrender/tool/util');
var zrShapeBase = require('zrender/shape/Base');
function Tooltip(ecTheme, messageCenter, zr, option, myChart) {
Base.call(this, ecTheme, messageCenter, zr, option, myChart);
this.dom = myChart.dom;
var self = this;
self._onmousemove = function (param) {
return self.__onmousemove(param);
};
self._onglobalout = function (param) {
return self.__onglobalout(param);
};
this.zr.on(zrConfig.EVENT.MOUSEMOVE, self._onmousemove);
this.zr.on(zrConfig.EVENT.GLOBALOUT, self._onglobalout);
self._hide = function (param) {
return self.__hide(param);
};
self._tryShow = function (param) {
return self.__tryShow(param);
};
self._refixed = function (param) {
return self.__refixed(param);
};
self._setContent = function (ticket, res) {
return self.__setContent(ticket, res);
};
this._tDom = this._tDom || document.createElement('div');
this._tDom.onselectstart = function () {
return false;
};
this._tDom.onmouseover = function () {
self._mousein = true;
};
this._tDom.onmouseout = function () {
self._mousein = false;
};
this._tDom.className = 'echarts-tooltip';
this._tDom.style.position = 'absolute';
this.hasAppend = false;
this._axisLineShape && this.zr.delShape(this._axisLineShape.id);
this._axisLineShape = new LineShape({
zlevel: this.getZlevelBase(),
z: this.getZBase(),
invisible: true,
hoverable: false
});
this.shapeList.push(this._axisLineShape);
this.zr.addShape(this._axisLineShape);
this._axisShadowShape && this.zr.delShape(this._axisShadowShape.id);
this._axisShadowShape = new LineShape({
zlevel: this.getZlevelBase(),
z: 1,
invisible: true,
hoverable: false
});
this.shapeList.push(this._axisShadowShape);
this.zr.addShape(this._axisShadowShape);
this._axisCrossShape && this.zr.delShape(this._axisCrossShape.id);
this._axisCrossShape = new CrossShape({
zlevel: this.getZlevelBase(),
z: this.getZBase(),
invisible: true,
hoverable: false
});
this.shapeList.push(this._axisCrossShape);
this.zr.addShape(this._axisCrossShape);
this.showing = false;
this.refresh(option);
}
Tooltip.prototype = {
type: ecConfig.COMPONENT_TYPE_TOOLTIP,
_gCssText: 'position:absolute;display:block;border-style:solid;white-space:nowrap;',
_style: function (opt) {
if (!opt) {
return '';
}
var cssText = [];
if (opt.transitionDuration) {
var transitionText = 'left ' + opt.transitionDuration + 's,' + 'top ' + opt.transitionDuration + 's';
cssText.push('transition:' + transitionText);
cssText.push('-moz-transition:' + transitionText);
cssText.push('-webkit-transition:' + transitionText);
cssText.push('-o-transition:' + transitionText);
}
if (opt.backgroundColor) {
cssText.push('background-Color:' + zrColor.toHex(opt.backgroundColor));
cssText.push('filter:alpha(opacity=70)');
cssText.push('background-Color:' + opt.backgroundColor);
}
if (opt.borderWidth != null) {
cssText.push('border-width:' + opt.borderWidth + 'px');
}
if (opt.borderColor != null) {
cssText.push('border-color:' + opt.borderColor);
}
if (opt.borderRadius != null) {
cssText.push('border-radius:' + opt.borderRadius + 'px');
cssText.push('-moz-border-radius:' + opt.borderRadius + 'px');
cssText.push('-webkit-border-radius:' + opt.borderRadius + 'px');
cssText.push('-o-border-radius:' + opt.borderRadius + 'px');
}
var textStyle = opt.textStyle;
if (textStyle) {
textStyle.color && cssText.push('color:' + textStyle.color);
textStyle.decoration && cssText.push('text-decoration:' + textStyle.decoration);
textStyle.align && cssText.push('text-align:' + textStyle.align);
textStyle.fontFamily && cssText.push('font-family:' + textStyle.fontFamily);
textStyle.fontSize && cssText.push('font-size:' + textStyle.fontSize + 'px');
textStyle.fontSize && cssText.push('line-height:' + Math.round(textStyle.fontSize * 3 / 2) + 'px');
textStyle.fontStyle && cssText.push('font-style:' + textStyle.fontStyle);
textStyle.fontWeight && cssText.push('font-weight:' + textStyle.fontWeight);
}
var padding = opt.padding;
if (padding != null) {
padding = this.reformCssArray(padding);
cssText.push('padding:' + padding[0] + 'px ' + padding[1] + 'px ' + padding[2] + 'px ' + padding[3] + 'px');
}
cssText = cssText.join(';') + ';';
return cssText;
},
__hide: function () {
this._lastDataIndex = -1;
this._lastSeriesIndex = -1;
this._lastItemTriggerId = -1;
if (this._tDom) {
this._tDom.style.display = 'none';
}
var needRefresh = false;
if (!this._axisLineShape.invisible) {
this._axisLineShape.invisible = true;
this.zr.modShape(this._axisLineShape.id);
needRefresh = true;
}
if (!this._axisShadowShape.invisible) {
this._axisShadowShape.invisible = true;
this.zr.modShape(this._axisShadowShape.id);
needRefresh = true;
}
if (!this._axisCrossShape.invisible) {
this._axisCrossShape.invisible = true;
this.zr.modShape(this._axisCrossShape.id);
needRefresh = true;
}
if (this._lastTipShape && this._lastTipShape.tipShape.length > 0) {
this.zr.delShape(this._lastTipShape.tipShape);
this._lastTipShape = false;
this.shapeList.length = 2;
}
needRefresh && this.zr.refreshNextFrame();
this.showing = false;
},
_show: function (position, x, y, specialCssText) {
var domHeight = this._tDom.offsetHeight;
var domWidth = this._tDom.offsetWidth;
if (position) {
if (typeof position === 'function') {
position = position([
x,
y
]);
}
if (position instanceof Array) {
x = position[0];
y = position[1];
}
}
if (x + domWidth > this._zrWidth) {
x -= domWidth + 40;
}
if (y + domHeight > this._zrHeight) {
y -= domHeight - 20;
}
if (y < 20) {
y = 0;
}
this._tDom.style.cssText = this._gCssText + this._defaultCssText + (specialCssText ? specialCssText : '') + 'left:' + x + 'px;top:' + y + 'px;';
if (domHeight < 10 || domWidth < 10) {
setTimeout(this._refixed, 20);
}
this.showing = true;
},
__refixed: function () {
if (this._tDom) {
var cssText = '';
var domHeight = this._tDom.offsetHeight;
var domWidth = this._tDom.offsetWidth;
if (this._tDom.offsetLeft + domWidth > this._zrWidth) {
cssText += 'left:' + (this._zrWidth - domWidth - 20) + 'px;';
}
if (this._tDom.offsetTop + domHeight > this._zrHeight) {
cssText += 'top:' + (this._zrHeight - domHeight - 10) + 'px;';
}
if (cssText !== '') {
this._tDom.style.cssText += cssText;
}
}
},
__tryShow: function () {
var needShow;
var trigger;
if (!this._curTarget) {
this._findPolarTrigger() || this._findAxisTrigger();
} else {
if (this._curTarget._type === 'island' && this.option.tooltip.show) {
this._showItemTrigger();
return;
}
var serie = ecData.get(this._curTarget, 'series');
var data = ecData.get(this._curTarget, 'data');
needShow = this.deepQuery([
data,
serie,
this.option
], 'tooltip.show');
if (serie == null || data == null || !needShow) {
clearTimeout(this._hidingTicket);
clearTimeout(this._showingTicket);
this._hidingTicket = setTimeout(this._hide, this._hideDelay);
} else {
trigger = this.deepQuery([
data,
serie,
this.option
], 'tooltip.trigger');
trigger === 'axis' ? this._showAxisTrigger(serie.xAxisIndex, serie.yAxisIndex, ecData.get(this._curTarget, 'dataIndex')) : this._showItemTrigger();
}
}
},
_findAxisTrigger: function () {
if (!this.component.xAxis || !this.component.yAxis) {
this._hidingTicket = setTimeout(this._hide, this._hideDelay);
return;
}
var series = this.option.series;
var xAxisIndex;
var yAxisIndex;
for (var i = 0, l = series.length; i < l; i++) {
if (this.deepQuery([
series[i],
this.option
], 'tooltip.trigger') === 'axis') {
xAxisIndex = series[i].xAxisIndex || 0;
yAxisIndex = series[i].yAxisIndex || 0;
if (this.component.xAxis.getAxis(xAxisIndex) && this.component.xAxis.getAxis(xAxisIndex).type === ecConfig.COMPONENT_TYPE_AXIS_CATEGORY) {
this._showAxisTrigger(xAxisIndex, yAxisIndex, this._getNearestDataIndex('x', this.component.xAxis.getAxis(xAxisIndex)));
return;
} else if (this.component.yAxis.getAxis(yAxisIndex) && this.component.yAxis.getAxis(yAxisIndex).type === ecConfig.COMPONENT_TYPE_AXIS_CATEGORY) {
this._showAxisTrigger(xAxisIndex, yAxisIndex, this._getNearestDataIndex('y', this.component.yAxis.getAxis(yAxisIndex)));
return;
} else {
this._showAxisTrigger(xAxisIndex, yAxisIndex, -1);
return;
}
}
}
if (this.option.tooltip.axisPointer.type === 'cross') {
this._showAxisTrigger(-1, -1, -1);
}
},
_findPolarTrigger: function () {
if (!this.component.polar) {
return false;
}
var x = zrEvent.getX(this._event);
var y = zrEvent.getY(this._event);
var polarIndex = this.component.polar.getNearestIndex([
x,
y
]);
var valueIndex;
if (polarIndex) {
valueIndex = polarIndex.valueIndex;
polarIndex = polarIndex.polarIndex;
} else {
polarIndex = -1;
}
if (polarIndex != -1) {
return this._showPolarTrigger(polarIndex, valueIndex);
}
return false;
},
_getNearestDataIndex: function (direction, categoryAxis) {
var dataIndex = -1;
var x = zrEvent.getX(this._event);
var y = zrEvent.getY(this._event);
if (direction === 'x') {
var left;
var right;
var xEnd = this.component.grid.getXend();
var curCoord = categoryAxis.getCoordByIndex(dataIndex);
while (curCoord < xEnd) {
right = curCoord;
if (curCoord <= x) {
left = curCoord;
} else {
break;
}
curCoord = categoryAxis.getCoordByIndex(++dataIndex);
}
if (dataIndex <= 0) {
dataIndex = 0;
} else if (x - left <= right - x) {
dataIndex -= 1;
} else {
if (categoryAxis.getNameByIndex(dataIndex) == null) {
dataIndex -= 1;
}
}
return dataIndex;
} else {
var top;
var bottom;
var yStart = this.component.grid.getY();
var curCoord = categoryAxis.getCoordByIndex(dataIndex);
while (curCoord > yStart) {
top = curCoord;
if (curCoord >= y) {
bottom = curCoord;
} else {
break;
}
curCoord = categoryAxis.getCoordByIndex(++dataIndex);
}
if (dataIndex <= 0) {
dataIndex = 0;
} else if (y - top >= bottom - y) {
dataIndex -= 1;
} else {
if (categoryAxis.getNameByIndex(dataIndex) == null) {
dataIndex -= 1;
}
}
return dataIndex;
}
return -1;
},
_showAxisTrigger: function (xAxisIndex, yAxisIndex, dataIndex) {
!this._event.connectTrigger && this.messageCenter.dispatch(ecConfig.EVENT.TOOLTIP_IN_GRID, this._event, null, this.myChart);
if (this.component.xAxis == null || this.component.yAxis == null || xAxisIndex == null || yAxisIndex == null) {
clearTimeout(this._hidingTicket);
clearTimeout(this._showingTicket);
this._hidingTicket = setTimeout(this._hide, this._hideDelay);
return;
}
var series = this.option.series;
var seriesArray = [];
var seriesIndex = [];
var categoryAxis;
var formatter;
var position;
var showContent;
var specialCssText = '';
if (this.option.tooltip.trigger === 'axis') {
if (!this.option.tooltip.show) {
return;
}
formatter = this.option.tooltip.formatter;
position = this.option.tooltip.position;
}
var axisLayout = xAxisIndex != -1 && this.component.xAxis.getAxis(xAxisIndex).type === ecConfig.COMPONENT_TYPE_AXIS_CATEGORY ? 'xAxis' : yAxisIndex != -1 && this.component.yAxis.getAxis(yAxisIndex).type === ecConfig.COMPONENT_TYPE_AXIS_CATEGORY ? 'yAxis' : false;
var x;
var y;
if (axisLayout) {
var axisIndex = axisLayout == 'xAxis' ? xAxisIndex : yAxisIndex;
categoryAxis = this.component[axisLayout].getAxis(axisIndex);
for (var i = 0, l = series.length; i < l; i++) {
if (!this._isSelected(series[i].name)) {
continue;
}
if (series[i][axisLayout + 'Index'] === axisIndex && this.deepQuery([
series[i],
this.option
], 'tooltip.trigger') === 'axis') {
showContent = this.query(series[i], 'tooltip.showContent') || showContent;
formatter = this.query(series[i], 'tooltip.formatter') || formatter;
position = this.query(series[i], 'tooltip.position') || position;
specialCssText += this._style(this.query(series[i], 'tooltip'));
if (series[i].stack != null && axisLayout == 'xAxis') {
seriesArray.unshift(series[i]);
seriesIndex.unshift(i);
} else {
seriesArray.push(series[i]);
seriesIndex.push(i);
}
}
}
this.messageCenter.dispatch(ecConfig.EVENT.TOOLTIP_HOVER, this._event, {
seriesIndex: seriesIndex,
dataIndex: dataIndex
}, this.myChart);
var rect;
if (axisLayout == 'xAxis') {
x = this.subPixelOptimize(categoryAxis.getCoordByIndex(dataIndex), this._axisLineWidth);
y = zrEvent.getY(this._event);
rect = [
x,
this.component.grid.getY(),
x,
this.component.grid.getYend()
];
} else {
x = zrEvent.getX(this._event);
y = this.subPixelOptimize(categoryAxis.getCoordByIndex(dataIndex), this._axisLineWidth);
rect = [
this.component.grid.getX(),
y,
this.component.grid.getXend(),
y
];
}
this._styleAxisPointer(seriesArray, rect[0], rect[1], rect[2], rect[3], categoryAxis.getGap(), x, y);
} else {
x = zrEvent.getX(this._event);
y = zrEvent.getY(this._event);
this._styleAxisPointer(series, this.component.grid.getX(), y, this.component.grid.getXend(), y, 0, x, y);
if (dataIndex >= 0) {
this._showItemTrigger(true);
} else {
clearTimeout(this._hidingTicket);
clearTimeout(this._showingTicket);
this._tDom.style.display = 'none';
}
}
if (seriesArray.length > 0) {
this._lastItemTriggerId = -1;
if (this._lastDataIndex != dataIndex || this._lastSeriesIndex != seriesIndex[0]) {
this._lastDataIndex = dataIndex;
this._lastSeriesIndex = seriesIndex[0];
var data;
var value;
if (typeof formatter === 'function') {
var params = [];
for (var i = 0, l = seriesArray.length; i < l; i++) {
data = seriesArray[i].data[dataIndex];
value = this.getDataFromOption(data, '-');
params.push({
seriesIndex: seriesIndex[i],
seriesName: seriesArray[i].name || '',
series: seriesArray[i],
dataIndex: dataIndex,
data: data,
name: categoryAxis.getNameByIndex(dataIndex),
value: value,
0: seriesArray[i].name || '',
1: categoryAxis.getNameByIndex(dataIndex),
2: value,
3: data
});
}
this._curTicket = 'axis:' + dataIndex;
this._tDom.innerHTML = formatter.call(this.myChart, params, this._curTicket, this._setContent);
} else if (typeof formatter === 'string') {
this._curTicket = NaN;
formatter = formatter.replace('{a}', '{a0}').replace('{b}', '{b0}').replace('{c}', '{c0}');
for (var i = 0, l = seriesArray.length; i < l; i++) {
formatter = formatter.replace('{a' + i + '}', this._encodeHTML(seriesArray[i].name || ''));
formatter = formatter.replace('{b' + i + '}', this._encodeHTML(categoryAxis.getNameByIndex(dataIndex)));
data = seriesArray[i].data[dataIndex];
data = this.getDataFromOption(data, '-');
formatter = formatter.replace('{c' + i + '}', data instanceof Array ? data : this.numAddCommas(data));
}
this._tDom.innerHTML = formatter;
} else {
this._curTicket = NaN;
formatter = this._encodeHTML(categoryAxis.getNameByIndex(dataIndex));
for (var i = 0, l = seriesArray.length; i < l; i++) {
formatter += '<br/>' + this._encodeHTML(seriesArray[i].name || '') + ' : ';
data = seriesArray[i].data[dataIndex];
data = this.getDataFromOption(data, '-');
formatter += data instanceof Array ? data : this.numAddCommas(data);
}
this._tDom.innerHTML = formatter;
}
}
if (showContent === false || !this.option.tooltip.showContent) {
return;
}
if (!this.hasAppend) {
this._tDom.style.left = this._zrWidth / 2 + 'px';
this._tDom.style.top = this._zrHeight / 2 + 'px';
this.dom.firstChild.appendChild(this._tDom);
this.hasAppend = true;
}
this._show(position, x + 10, y + 10, specialCssText);
}
},
_showPolarTrigger: function (polarIndex, dataIndex) {
if (this.component.polar == null || polarIndex == null || dataIndex == null || dataIndex < 0) {
return false;
}
var series = this.option.series;
var seriesArray = [];
var seriesIndex = [];
var formatter;
var position;
var showContent;
var specialCssText = '';
if (this.option.tooltip.trigger === 'axis') {
if (!this.option.tooltip.show) {
return false;
}
formatter = this.option.tooltip.formatter;
position = this.option.tooltip.position;
}
var indicatorName = this.option.polar[polarIndex].indicator[dataIndex].text;
for (var i = 0, l = series.length; i < l; i++) {
if (!this._isSelected(series[i].name)) {
continue;
}
if (series[i].polarIndex === polarIndex && this.deepQuery([
series[i],
this.option
], 'tooltip.trigger') === 'axis') {
showContent = this.query(series[i], 'tooltip.showContent') || showContent;
formatter = this.query(series[i], 'tooltip.formatter') || formatter;
position = this.query(series[i], 'tooltip.position') || position;
specialCssText += this._style(this.query(series[i], 'tooltip'));
seriesArray.push(series[i]);
seriesIndex.push(i);
}
}
if (seriesArray.length > 0) {
var polarData;
var data;
var value;
var params = [];
for (var i = 0, l = seriesArray.length; i < l; i++) {
polarData = seriesArray[i].data;
for (var j = 0, k = polarData.length; j < k; j++) {
data = polarData[j];
if (!this._isSelected(data.name)) {
continue;
}
data = data != null ? data : {
name: '',
value: { dataIndex: '-' }
};
value = this.getDataFromOption(data.value[dataIndex]);
params.push({
seriesIndex: seriesIndex[i],
seriesName: seriesArray[i].name || '',
series: seriesArray[i],
dataIndex: dataIndex,
data: data,
name: data.name,
indicator: indicatorName,
value: value,
0: seriesArray[i].name || '',
1: data.name,
2: value,
3: indicatorName
});
}
}
if (params.length <= 0) {
return;
}
this._lastItemTriggerId = -1;
if (this._lastDataIndex != dataIndex || this._lastSeriesIndex != seriesIndex[0]) {
this._lastDataIndex = dataIndex;
this._lastSeriesIndex = seriesIndex[0];
if (typeof formatter === 'function') {
this._curTicket = 'axis:' + dataIndex;
this._tDom.innerHTML = formatter.call(this.myChart, params, this._curTicket, this._setContent);
} else if (typeof formatter === 'string') {
formatter = formatter.replace('{a}', '{a0}').replace('{b}', '{b0}').replace('{c}', '{c0}').replace('{d}', '{d0}');
for (var i = 0, l = params.length; i < l; i++) {
formatter = formatter.replace('{a' + i + '}', this._encodeHTML(params[i].seriesName));
formatter = formatter.replace('{b' + i + '}', this._encodeHTML(params[i].name));
formatter = formatter.replace('{c' + i + '}', this.numAddCommas(params[i].value));
formatter = formatter.replace('{d' + i + '}', this._encodeHTML(params[i].indicator));
}
this._tDom.innerHTML = formatter;
} else {
formatter = this._encodeHTML(params[0].name) + '<br/>' + this._encodeHTML(params[0].indicator) + ' : ' + this.numAddCommas(params[0].value);
for (var i = 1, l = params.length; i < l; i++) {
formatter += '<br/>' + this._encodeHTML(params[i].name) + '<br/>';
formatter += this._encodeHTML(params[i].indicator) + ' : ' + this.numAddCommas(params[i].value);
}
this._tDom.innerHTML = formatter;
}
}
if (showContent === false || !this.option.tooltip.showContent) {
return;
}
if (!this.hasAppend) {
this._tDom.style.left = this._zrWidth / 2 + 'px';
this._tDom.style.top = this._zrHeight / 2 + 'px';
this.dom.firstChild.appendChild(this._tDom);
this.hasAppend = true;
}
this._show(position, zrEvent.getX(this._event), zrEvent.getY(this._event), specialCssText);
return true;
}
},
_showItemTrigger: function (axisTrigger) {
if (!this._curTarget) {
return;
}
var serie = ecData.get(this._curTarget, 'series');
var seriesIndex = ecData.get(this._curTarget, 'seriesIndex');
var data = ecData.get(this._curTarget, 'data');
var dataIndex = ecData.get(this._curTarget, 'dataIndex');
var name = ecData.get(this._curTarget, 'name');
var value = ecData.get(this._curTarget, 'value');
var special = ecData.get(this._curTarget, 'special');
var special2 = ecData.get(this._curTarget, 'special2');
var queryTarget = [
data,
serie,
this.option
];
var formatter;
var position;
var showContent;
var specialCssText = '';
if (this._curTarget._type != 'island') {
var trigger = axisTrigger ? 'axis' : 'item';
if (this.option.tooltip.trigger === trigger) {
formatter = this.option.tooltip.formatter;
position = this.option.tooltip.position;
}
if (this.query(serie, 'tooltip.trigger') === trigger) {
showContent = this.query(serie, 'tooltip.showContent') || showContent;
formatter = this.query(serie, 'tooltip.formatter') || formatter;
position = this.query(serie, 'tooltip.position') || position;
specialCssText += this._style(this.query(serie, 'tooltip'));
}
showContent = this.query(data, 'tooltip.showContent') || showContent;
formatter = this.query(data, 'tooltip.formatter') || formatter;
position = this.query(data, 'tooltip.position') || position;
specialCssText += this._style(this.query(data, 'tooltip'));
} else {
this._lastItemTriggerId = NaN;
showContent = this.deepQuery(queryTarget, 'tooltip.showContent');
formatter = this.deepQuery(queryTarget, 'tooltip.islandFormatter');
position = this.deepQuery(queryTarget, 'tooltip.islandPosition');
}
this._lastDataIndex = -1;
this._lastSeriesIndex = -1;
if (this._lastItemTriggerId !== this._curTarget.id) {
this._lastItemTriggerId = this._curTarget.id;
if (typeof formatter === 'function') {
this._curTicket = (serie.name || '') + ':' + dataIndex;
this._tDom.innerHTML = formatter.call(this.myChart, {
seriesIndex: seriesIndex,
seriesName: serie.name || '',
series: serie,
dataIndex: dataIndex,
data: data,
name: name,
value: value,
percent: special,
indicator: special,
value2: special2,
indicator2: special2,
0: serie.name || '',
1: name,
2: value,
3: special,
4: special2,
5: data,
6: seriesIndex,
7: dataIndex
}, this._curTicket, this._setContent);
} else if (typeof formatter === 'string') {
this._curTicket = NaN;
formatter = formatter.replace('{a}', '{a0}').replace('{b}', '{b0}').replace('{c}', '{c0}');
formatter = formatter.replace('{a0}', this._encodeHTML(serie.name || '')).replace('{b0}', this._encodeHTML(name)).replace('{c0}', value instanceof Array ? value : this.numAddCommas(value));
formatter = formatter.replace('{d}', '{d0}').replace('{d0}', special || '');
formatter = formatter.replace('{e}', '{e0}').replace('{e0}', ecData.get(this._curTarget, 'special2') || '');
this._tDom.innerHTML = formatter;
} else {
this._curTicket = NaN;
if (serie.type === ecConfig.CHART_TYPE_RADAR && special) {
this._tDom.innerHTML = this._itemFormatter.radar.call(this, serie, name, value, special);
} else if (serie.type === ecConfig.CHART_TYPE_EVENTRIVER) {
this._tDom.innerHTML = this._itemFormatter.eventRiver.call(this, serie, name, value, data);
} else {
this._tDom.innerHTML = '' + (serie.name != null ? this._encodeHTML(serie.name) + '<br/>' : '') + (name === '' ? '' : this._encodeHTML(name) + ' : ') + (value instanceof Array ? value : this.numAddCommas(value));
}
}
}
var x = zrEvent.getX(this._event);
var y = zrEvent.getY(this._event);
if (this.deepQuery(queryTarget, 'tooltip.axisPointer.show') && this.component.grid) {
this._styleAxisPointer([serie], this.component.grid.getX(), y, this.component.grid.getXend(), y, 0, x, y);
} else {
this._hide();
}
if (showContent === false || !this.option.tooltip.showContent) {
return;
}
if (!this.hasAppend) {
this._tDom.style.left = this._zrWidth / 2 + 'px';
this._tDom.style.top = this._zrHeight / 2 + 'px';
this.dom.firstChild.appendChild(this._tDom);
this.hasAppend = true;
}
this._show(position, x + 20, y - 20, specialCssText);
},
_itemFormatter: {
radar: function (serie, name, value, indicator) {
var html = '';
html += this._encodeHTML(name === '' ? serie.name || '' : name);
html += html === '' ? '' : '<br />';
for (var i = 0; i < indicator.length; i++) {
html += this._encodeHTML(indicator[i].text) + ' : ' + this.numAddCommas(value[i]) + '<br />';
}
return html;
},
chord: function (serie, name, value, special, special2) {
if (special2 == null) {
return this._encodeHTML(name) + ' (' + this.numAddCommas(value) + ')';
} else {
var name1 = this._encodeHTML(name);
var name2 = this._encodeHTML(special);
return '' + (serie.name != null ? this._encodeHTML(serie.name) + '<br/>' : '') + name1 + ' -> ' + name2 + ' (' + this.numAddCommas(value) + ')' + '<br />' + name2 + ' -> ' + name1 + ' (' + this.numAddCommas(special2) + ')';
}
},
eventRiver: function (serie, name, value, data) {
var html = '';
html += this._encodeHTML(serie.name === '' ? '' : serie.name + ' : ');
html += this._encodeHTML(name);
html += html === '' ? '' : '<br />';
data = data.evolution;
for (var i = 0, l = data.length; i < l; i++) {
html += '<div style="padding-top:5px;">';
if (!data[i].detail) {
continue;
}
if (data[i].detail.img) {
html += '<img src="' + data[i].detail.img + '" style="float:left;width:40px;height:40px;">';
}
html += '<div style="margin-left:45px;">' + data[i].time + '<br/>';
html += '<a href="' + data[i].detail.link + '" target="_blank">';
html += data[i].detail.text + '</a></div>';
html += '</div>';
}
return html;
}
},
_styleAxisPointer: function (seriesArray, xStart, yStart, xEnd, yEnd, gap, x, y) {
if (seriesArray.length > 0) {
var queryTarget;
var curType;
var axisPointer = this.option.tooltip.axisPointer;
var pointType = axisPointer.type;
var style = {
line: {},
cross: {},
shadow: {}
};
for (var pType in style) {
style[pType].color = axisPointer[pType + 'Style'].color;
style[pType].width = axisPointer[pType + 'Style'].width;
style[pType].type = axisPointer[pType + 'Style'].type;
}
for (var i = 0, l = seriesArray.length; i < l; i++) {
queryTarget = seriesArray[i];
curType = this.query(queryTarget, 'tooltip.axisPointer.type');
pointType = curType || pointType;
if (curType) {
style[curType].color = this.query(queryTarget, 'tooltip.axisPointer.' + curType + 'Style.color') || style[curType].color;
style[curType].width = this.query(queryTarget, 'tooltip.axisPointer.' + curType + 'Style.width') || style[curType].width;
style[curType].type = this.query(queryTarget, 'tooltip.axisPointer.' + curType + 'Style.type') || style[curType].type;
}
}
if (pointType === 'line') {
var lineWidth = style.line.width;
var isVertical = xStart == xEnd;
this._axisLineShape.style = {
xStart: isVertical ? this.subPixelOptimize(xStart, lineWidth) : xStart,
yStart: isVertical ? yStart : this.subPixelOptimize(yStart, lineWidth),
xEnd: isVertical ? this.subPixelOptimize(xEnd, lineWidth) : xEnd,
yEnd: isVertical ? yEnd : this.subPixelOptimize(yEnd, lineWidth),
strokeColor: style.line.color,
lineWidth: lineWidth,
lineType: style.line.type
};
this._axisLineShape.invisible = false;
this.zr.modShape(this._axisLineShape.id);
} else if (pointType === 'cross') {
var crossWidth = style.cross.width;
this._axisCrossShape.style = {
brushType: 'stroke',
rect: this.component.grid.getArea(),
x: this.subPixelOptimize(x, crossWidth),
y: this.subPixelOptimize(y, crossWidth),
text: ('( ' + this.component.xAxis.getAxis(0).getValueFromCoord(x) + ' , ' + this.component.yAxis.getAxis(0).getValueFromCoord(y) + ' )').replace(' , ', ' ').replace(' , ', ' '),
textPosition: 'specific',
strokeColor: style.cross.color,
lineWidth: crossWidth,
lineType: style.cross.type
};
if (this.component.grid.getXend() - x > 100) {
this._axisCrossShape.style.textAlign = 'left';
this._axisCrossShape.style.textX = x + 10;
} else {
this._axisCrossShape.style.textAlign = 'right';
this._axisCrossShape.style.textX = x - 10;
}
if (y - this.component.grid.getY() > 50) {
this._axisCrossShape.style.textBaseline = 'bottom';
this._axisCrossShape.style.textY = y - 10;
} else {
this._axisCrossShape.style.textBaseline = 'top';
this._axisCrossShape.style.textY = y + 10;
}
this._axisCrossShape.invisible = false;
this.zr.modShape(this._axisCrossShape.id);
} else if (pointType === 'shadow') {
if (style.shadow.width == null || style.shadow.width === 'auto' || isNaN(style.shadow.width)) {
style.shadow.width = gap;
}
if (xStart === xEnd) {
if (Math.abs(this.component.grid.getX() - xStart) < 2) {
style.shadow.width /= 2;
xStart = xEnd = xEnd + style.shadow.width / 2;
} else if (Math.abs(this.component.grid.getXend() - xStart) < 2) {
style.shadow.width /= 2;
xStart = xEnd = xEnd - style.shadow.width / 2;
}
} else if (yStart === yEnd) {
if (Math.abs(this.component.grid.getY() - yStart) < 2) {
style.shadow.width /= 2;
yStart = yEnd = yEnd + style.shadow.width / 2;
} else if (Math.abs(this.component.grid.getYend() - yStart) < 2) {
style.shadow.width /= 2;
yStart = yEnd = yEnd - style.shadow.width / 2;
}
}
this._axisShadowShape.style = {
xStart: xStart,
yStart: yStart,
xEnd: xEnd,
yEnd: yEnd,
strokeColor: style.shadow.color,
lineWidth: style.shadow.width
};
this._axisShadowShape.invisible = false;
this.zr.modShape(this._axisShadowShape.id);
}
this.zr.refreshNextFrame();
}
},
__onmousemove: function (param) {
clearTimeout(this._hidingTicket);
clearTimeout(this._showingTicket);
if (this._mousein && this._enterable) {
return;
}
var target = param.target;
var mx = zrEvent.getX(param.event);
var my = zrEvent.getY(param.event);
if (!target) {
this._curTarget = false;
this._event = param.event;
this._event.zrenderX = mx;
this._event.zrenderY = my;
if (this._needAxisTrigger && this.component.grid && zrArea.isInside(rectangleInstance, this.component.grid.getArea(), mx, my)) {
this._showingTicket = setTimeout(this._tryShow, this._showDelay);
} else if (this._needAxisTrigger && this.component.polar && this.component.polar.isInside([
mx,
my
]) != -1) {
this._showingTicket = setTimeout(this._tryShow, this._showDelay);
} else {
!this._event.connectTrigger && this.messageCenter.dispatch(ecConfig.EVENT.TOOLTIP_OUT_GRID, this._event, null, this.myChart);
this._hidingTicket = setTimeout(this._hide, this._hideDelay);
}
} else {
this._curTarget = target;
this._event = param.event;
this._event.zrenderX = mx;
this._event.zrenderY = my;
var polarIndex;
if (this._needAxisTrigger && this.component.polar && (polarIndex = this.component.polar.isInside([
mx,
my
])) != -1) {
var series = this.option.series;
for (var i = 0, l = series.length; i < l; i++) {
if (series[i].polarIndex === polarIndex && this.deepQuery([
series[i],
this.option
], 'tooltip.trigger') === 'axis') {
this._curTarget = null;
break;
}
}
}
this._showingTicket = setTimeout(this._tryShow, this._showDelay);
}
},
__onglobalout: function () {
clearTimeout(this._hidingTicket);
clearTimeout(this._showingTicket);
this._hidingTicket = setTimeout(this._hide, this._hideDelay);
},
__setContent: function (ticket, content) {
if (!this._tDom) {
return;
}
if (ticket === this._curTicket) {
this._tDom.innerHTML = content;
}
setTimeout(this._refixed, 20);
},
ontooltipHover: function (param, tipShape) {
if (!this._lastTipShape || this._lastTipShape && this._lastTipShape.dataIndex != param.dataIndex) {
if (this._lastTipShape && this._lastTipShape.tipShape.length > 0) {
this.zr.delShape(this._lastTipShape.tipShape);
this.shapeList.length = 2;
}
for (var i = 0, l = tipShape.length; i < l; i++) {
tipShape[i].zlevel = this.getZlevelBase();
tipShape[i].z = this.getZBase();
tipShape[i].style = zrShapeBase.prototype.getHighlightStyle(tipShape[i].style, tipShape[i].highlightStyle);
tipShape[i].draggable = false;
tipShape[i].hoverable = false;
tipShape[i].clickable = false;
tipShape[i].ondragend = null;
tipShape[i].ondragover = null;
tipShape[i].ondrop = null;
this.shapeList.push(tipShape[i]);
this.zr.addShape(tipShape[i]);
}
this._lastTipShape = {
dataIndex: param.dataIndex,
tipShape: tipShape
};
}
},
ondragend: function () {
this._hide();
},
onlegendSelected: function (param) {
this._selectedMap = param.selected;
},
_setSelectedMap: function () {
if (this.component.legend) {
this._selectedMap = zrUtil.clone(this.component.legend.getSelectedMap());
} else {
this._selectedMap = {};
}
},
_isSelected: function (itemName) {
if (this._selectedMap[itemName] != null) {
return this._selectedMap[itemName];
} else {
return true;
}
},
showTip: function (params) {
if (!params) {
return;
}
var seriesIndex;
var series = this.option.series;
if (params.seriesIndex != null) {
seriesIndex = params.seriesIndex;
} else {
var seriesName = params.seriesName;
for (var i = 0, l = series.length; i < l; i++) {
if (series[i].name === seriesName) {
seriesIndex = i;
break;
}
}
}
var serie = series[seriesIndex];
if (serie == null) {
return;
}
var chart = this.myChart.chart[serie.type];
var isAxisTrigger = this.deepQuery([
serie,
this.option
], 'tooltip.trigger') === 'axis';
if (!chart) {
return;
}
if (isAxisTrigger) {
var dataIndex = params.dataIndex;
switch (chart.type) {
case ecConfig.CHART_TYPE_LINE:
case ecConfig.CHART_TYPE_BAR:
case ecConfig.CHART_TYPE_K:
case ecConfig.CHART_TYPE_RADAR:
if (this.component.polar == null || serie.data[0].value.length <= dataIndex) {
return;
}
var polarIndex = serie.polarIndex || 0;
var vector = this.component.polar.getVector(polarIndex, dataIndex, 'max');
this._event = {
zrenderX: vector[0],
zrenderY: vector[1]
};
this._showPolarTrigger(polarIndex, dataIndex);
break;
}
} else {
var shapeList = chart.shapeList;
var x;
var y;
switch (chart.type) {
case ecConfig.CHART_TYPE_LINE:
case ecConfig.CHART_TYPE_BAR:
case ecConfig.CHART_TYPE_K:
case ecConfig.CHART_TYPE_TREEMAP:
case ecConfig.CHART_TYPE_SCATTER:
var dataIndex = params.dataIndex;
for (var i = 0, l = shapeList.length; i < l; i++) {
if (shapeList[i]._mark == null && ecData.get(shapeList[i], 'seriesIndex') == seriesIndex && ecData.get(shapeList[i], 'dataIndex') == dataIndex) {
this._curTarget = shapeList[i];
x = shapeList[i].style.x;
y = chart.type != ecConfig.CHART_TYPE_K ? shapeList[i].style.y : shapeList[i].style.y[0];
break;
}
}
break;
case ecConfig.CHART_TYPE_RADAR:
var dataIndex = params.dataIndex;
for (var i = 0, l = shapeList.length; i < l; i++) {
if (shapeList[i].type === 'polygon' && ecData.get(shapeList[i], 'seriesIndex') == seriesIndex && ecData.get(shapeList[i], 'dataIndex') == dataIndex) {
this._curTarget = shapeList[i];
var vector = this.component.polar.getCenter(serie.polarIndex || 0);
x = vector[0];
y = vector[1];
break;
}
}
break;
case ecConfig.CHART_TYPE_PIE:
var name = params.name;
for (var i = 0, l = shapeList.length; i < l; i++) {
if (shapeList[i].type === 'sector' && ecData.get(shapeList[i], 'seriesIndex') == seriesIndex && ecData.get(shapeList[i], 'name') == name) {
this._curTarget = shapeList[i];
var style = this._curTarget.style;
var midAngle = (style.startAngle + style.endAngle) / 2 * Math.PI / 180;
x = this._curTarget.style.x + Math.cos(midAngle) * style.r / 1.5;
y = this._curTarget.style.y - Math.sin(midAngle) * style.r / 1.5;
break;
}
}
break;
case ecConfig.CHART_TYPE_MAP:
var name = params.name;
var mapType = serie.mapType;
for (var i = 0, l = shapeList.length; i < l; i++) {
if (shapeList[i].type === 'text' && shapeList[i]._mapType === mapType && shapeList[i].style._name === name) {
this._curTarget = shapeList[i];
x = this._curTarget.style.x + this._curTarget.position[0];
y = this._curTarget.style.y + this._curTarget.position[1];
break;
}
}
break;
case ecConfig.CHART_TYPE_CHORD:
var name = params.name;
for (var i = 0, l = shapeList.length; i < l; i++) {
if (shapeList[i].type === 'sector' && ecData.get(shapeList[i], 'name') == name) {
this._curTarget = shapeList[i];
var style = this._curTarget.style;
var midAngle = (style.startAngle + style.endAngle) / 2 * Math.PI / 180;
x = this._curTarget.style.x + Math.cos(midAngle) * (style.r - 2);
y = this._curTarget.style.y - Math.sin(midAngle) * (style.r - 2);
this.zr.trigger(zrConfig.EVENT.MOUSEMOVE, {
zrenderX: x,
zrenderY: y
});
return;
}
}
break;
case ecConfig.CHART_TYPE_FORCE:
var name = params.name;
for (var i = 0, l = shapeList.length; i < l; i++) {
if (shapeList[i].type === 'circle' && ecData.get(shapeList[i], 'name') == name) {
this._curTarget = shapeList[i];
x = this._curTarget.position[0];
y = this._curTarget.position[1];
break;
}
}
break;
}
if (x != null && y != null) {
this._event = {
zrenderX: x,
zrenderY: y
};
this.zr.addHoverShape(this._curTarget);
this.zr.refreshHover();
this._showItemTrigger();
}
}
},
hideTip: function () {
this._hide();
},
refresh: function (newOption) {
this._zrHeight = this.zr.getHeight();
this._zrWidth = this.zr.getWidth();
if (this._lastTipShape && this._lastTipShape.tipShape.length > 0) {
this.zr.delShape(this._lastTipShape.tipShape);
}
this._lastTipShape = false;
this.shapeList.length = 2;
this._lastDataIndex = -1;
this._lastSeriesIndex = -1;
this._lastItemTriggerId = -1;
if (newOption) {
this.option = newOption;
this.option.tooltip = this.reformOption(this.option.tooltip);
this.option.tooltip.textStyle = zrUtil.merge(this.option.tooltip.textStyle, this.ecTheme.textStyle);
this._needAxisTrigger = false;
if (this.option.tooltip.trigger === 'axis') {
this._needAxisTrigger = true;
}
var series = this.option.series;
for (var i = 0, l = series.length; i < l; i++) {
if (this.query(series[i], 'tooltip.trigger') === 'axis') {
this._needAxisTrigger = true;
break;
}
}
this._showDelay = this.option.tooltip.showDelay;
this._hideDelay = this.option.tooltip.hideDelay;
this._defaultCssText = this._style(this.option.tooltip);
this._setSelectedMap();
this._axisLineWidth = this.option.tooltip.axisPointer.lineStyle.width;
this._enterable = this.option.tooltip.enterable;
if (!this._enterable && this._tDom.className.indexOf(zrConfig.elementClassName) < 0) {
this._tDom.className += ' ' + zrConfig.elementClassName;
}
}
if (this.showing) {
var self = this;
setTimeout(function () {
self.zr.trigger(zrConfig.EVENT.MOUSEMOVE, self.zr.handler._event);
}, 50);
}
},
onbeforDispose: function () {
if (this._lastTipShape && this._lastTipShape.tipShape.length > 0) {
this.zr.delShape(this._lastTipShape.tipShape);
}
clearTimeout(this._hidingTicket);
clearTimeout(this._showingTicket);
this.zr.un(zrConfig.EVENT.MOUSEMOVE, this._onmousemove);
this.zr.un(zrConfig.EVENT.GLOBALOUT, this._onglobalout);
if (this.hasAppend && !!this.dom.firstChild) {
this.dom.firstChild.removeChild(this._tDom);
}
this._tDom = null;
},
_encodeHTML: function (source) {
return String(source).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#39;');
}
};
zrUtil.inherits(Tooltip, Base);
require('../component').define('tooltip', Tooltip);
return Tooltip;
});define('echarts/component/legend', [
'require',
'./base',
'zrender/shape/Text',
'zrender/shape/Rectangle',
'zrender/shape/Sector',
'../util/shape/Icon',
'../util/shape/Candle',
'../config',
'zrender/tool/util',
'zrender/tool/area',
'../component'
], function (require) {
var Base = require('./base');
var TextShape = require('zrender/shape/Text');
var RectangleShape = require('zrender/shape/Rectangle');
var SectorShape = require('zrender/shape/Sector');
var IconShape = require('../util/shape/Icon');
var CandleShape = require('../util/shape/Candle');
var ecConfig = require('../config');
ecConfig.legend = {
zlevel: 0,
z: 4,
show: true,
orient: 'horizontal',
x: 'center',
y: 'top',
backgroundColor: 'rgba(0,0,0,0)',
borderColor: '#ccc',
borderWidth: 0,
padding: 5,
itemGap: 10,
itemWidth: 20,
itemHeight: 14,
textStyle: { color: '#333' },
selectedMode: true
};
var zrUtil = require('zrender/tool/util');
var zrArea = require('zrender/tool/area');
function Legend(ecTheme, messageCenter, zr, option, myChart) {
if (!this.query(option, 'legend.data')) {
console.error('option.legend.data has not been defined.');
return;
}
Base.call(this, ecTheme, messageCenter, zr, option, myChart);
var self = this;
self._legendSelected = function (param) {
self.__legendSelected(param);
};
self._dispatchHoverLink = function (param) {
return self.__dispatchHoverLink(param);
};
this._colorIndex = 0;
this._colorMap = {};
this._selectedMap = {};
this._hasDataMap = {};
this.refresh(option);
}
Legend.prototype = {
type: ecConfig.COMPONENT_TYPE_LEGEND,
_buildShape: function () {
if (!this.legendOption.show) {
return;
}
this._itemGroupLocation = this._getItemGroupLocation();
this._buildBackground();
this._buildItem();
for (var i = 0, l = this.shapeList.length; i < l; i++) {
this.zr.addShape(this.shapeList[i]);
}
},
_buildItem: function () {
var data = this.legendOption.data;
var dataLength = data.length;
var itemName;
var itemType;
var itemShape;
var textShape;
var textStyle = this.legendOption.textStyle;
var dataTextStyle;
var dataFont;
var formattedName;
var zrWidth = this.zr.getWidth();
var zrHeight = this.zr.getHeight();
var lastX = this._itemGroupLocation.x;
var lastY = this._itemGroupLocation.y;
var itemWidth = this.legendOption.itemWidth;
var itemHeight = this.legendOption.itemHeight;
var itemGap = this.legendOption.itemGap;
var color;
if (this.legendOption.orient === 'vertical' && this.legendOption.x === 'right') {
lastX = this._itemGroupLocation.x + this._itemGroupLocation.width - itemWidth;
}
for (var i = 0; i < dataLength; i++) {
dataTextStyle = zrUtil.merge(data[i].textStyle || {}, textStyle);
dataFont = this.getFont(dataTextStyle);
itemName = this._getName(data[i]);
formattedName = this._getFormatterName(itemName);
if (itemName === '') {
if (this.legendOption.orient === 'horizontal') {
lastX = this._itemGroupLocation.x;
lastY += itemHeight + itemGap;
} else {
this.legendOption.x === 'right' ? lastX -= this._itemGroupLocation.maxWidth + itemGap : lastX += this._itemGroupLocation.maxWidth + itemGap;
lastY = this._itemGroupLocation.y;
}
continue;
}
itemType = data[i].icon || this._getSomethingByName(itemName).type;
color = this.getColor(itemName);
if (this.legendOption.orient === 'horizontal') {
if (zrWidth - lastX < 200 && itemWidth + 5 + zrArea.getTextWidth(formattedName, dataFont) + (i === dataLength - 1 || data[i + 1] === '' ? 0 : itemGap) >= zrWidth - lastX) {
lastX = this._itemGroupLocation.x;
lastY += itemHeight + itemGap;
}
} else {
if (zrHeight - lastY < 200 && itemHeight + (i === dataLength - 1 || data[i + 1] === '' ? 0 : itemGap) >= zrHeight - lastY) {
this.legendOption.x === 'right' ? lastX -= this._itemGroupLocation.maxWidth + itemGap : lastX += this._itemGroupLocation.maxWidth + itemGap;
lastY = this._itemGroupLocation.y;
}
}
itemShape = this._getItemShapeByType(lastX, lastY, itemWidth, itemHeight, this._selectedMap[itemName] && this._hasDataMap[itemName] ? color : '#ccc', itemType, color);
itemShape._name = itemName;
itemShape = new IconShape(itemShape);
textShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
style: {
x: lastX + itemWidth + 5,
y: lastY + itemHeight / 2,
color: this._selectedMap[itemName] ? dataTextStyle.color === 'auto' ? color : dataTextStyle.color : '#ccc',
text: formattedName,
textFont: dataFont,
textBaseline: 'middle'
},
highlightStyle: {
color: color,
brushType: 'fill'
},
hoverable: !!this.legendOption.selectedMode,
clickable: !!this.legendOption.selectedMode
};
if (this.legendOption.orient === 'vertical' && this.legendOption.x === 'right') {
textShape.style.x -= itemWidth + 10;
textShape.style.textAlign = 'right';
}
textShape._name = itemName;
textShape = new TextShape(textShape);
if (this.legendOption.selectedMode) {
itemShape.onclick = textShape.onclick = this._legendSelected;
itemShape.onmouseover = textShape.onmouseover = this._dispatchHoverLink;
itemShape.hoverConnect = textShape.id;
textShape.hoverConnect = itemShape.id;
}
this.shapeList.push(itemShape);
this.shapeList.push(textShape);
if (this.legendOption.orient === 'horizontal') {
lastX += itemWidth + 5 + zrArea.getTextWidth(formattedName, dataFont) + itemGap;
} else {
lastY += itemHeight + itemGap;
}
}
if (this.legendOption.orient === 'horizontal' && this.legendOption.x === 'center' && lastY != this._itemGroupLocation.y) {
this._mLineOptimize();
}
},
_getName: function (data) {
return typeof data.name != 'undefined' ? data.name : data;
},
_getFormatterName: function (itemName) {
var formatter = this.legendOption.formatter;
var formattedName;
if (typeof formatter === 'function') {
formattedName = formatter.call(this.myChart, itemName);
} else if (typeof formatter === 'string') {
formattedName = formatter.replace('{name}', itemName);
} else {
formattedName = itemName;
}
return formattedName;
},
_getFormatterNameFromData: function (data) {
var itemName = this._getName(data);
return this._getFormatterName(itemName);
},
_mLineOptimize: function () {
var lineOffsetArray = [];
var lastX = this._itemGroupLocation.x;
for (var i = 2, l = this.shapeList.length; i < l; i++) {
if (this.shapeList[i].style.x === lastX) {
lineOffsetArray.push((this._itemGroupLocation.width - (this.shapeList[i - 1].style.x + zrArea.getTextWidth(this.shapeList[i - 1].style.text, this.shapeList[i - 1].style.textFont) - lastX)) / 2);
} else if (i === l - 1) {
lineOffsetArray.push((this._itemGroupLocation.width - (this.shapeList[i].style.x + zrArea.getTextWidth(this.shapeList[i].style.text, this.shapeList[i].style.textFont) - lastX)) / 2);
}
}
var curLineIndex = -1;
for (var i = 1, l = this.shapeList.length; i < l; i++) {
if (this.shapeList[i].style.x === lastX) {
curLineIndex++;
}
if (lineOffsetArray[curLineIndex] === 0) {
continue;
} else {
this.shapeList[i].style.x += lineOffsetArray[curLineIndex];
}
}
},
_buildBackground: function () {
var padding = this.reformCssArray(this.legendOption.padding);
this.shapeList.push(new RectangleShape({
zlevel: this.getZlevelBase(),
z: this.getZBase(),
hoverable: false,
style: {
x: this._itemGroupLocation.x - padding[3],
y: this._itemGroupLocation.y - padding[0],
width: this._itemGroupLocation.width + padding[3] + padding[1],
height: this._itemGroupLocation.height + padding[0] + padding[2],
brushType: this.legendOption.borderWidth === 0 ? 'fill' : 'both',
color: this.legendOption.backgroundColor,
strokeColor: this.legendOption.borderColor,
lineWidth: this.legendOption.borderWidth
}
}));
},
_getItemGroupLocation: function () {
var data = this.legendOption.data;
var dataLength = data.length;
var itemGap = this.legendOption.itemGap;
var itemWidth = this.legendOption.itemWidth + 5;
var itemHeight = this.legendOption.itemHeight;
var textStyle = this.legendOption.textStyle;
var font = this.getFont(textStyle);
var totalWidth = 0;
var totalHeight = 0;
var padding = this.reformCssArray(this.legendOption.padding);
var zrWidth = this.zr.getWidth() - padding[1] - padding[3];
var zrHeight = this.zr.getHeight() - padding[0] - padding[2];
var temp = 0;
var maxWidth = 0;
if (this.legendOption.orient === 'horizontal') {
totalHeight = itemHeight;
for (var i = 0; i < dataLength; i++) {
if (this._getName(data[i]) === '') {
temp -= itemGap;
totalWidth = Math.max(totalWidth, temp);
totalHeight += itemHeight + itemGap;
temp = 0;
continue;
}
var tempTextWidth = zrArea.getTextWidth(this._getFormatterNameFromData(data[i]), data[i].textStyle ? this.getFont(zrUtil.merge(data[i].textStyle || {}, textStyle)) : font);
if (temp + itemWidth + tempTextWidth + itemGap > zrWidth) {
temp -= itemGap;
totalWidth = Math.max(totalWidth, temp);
totalHeight += itemHeight + itemGap;
temp = 0;
} else {
temp += itemWidth + tempTextWidth + itemGap;
totalWidth = Math.max(totalWidth, temp - itemGap);
}
}
} else {
for (var i = 0; i < dataLength; i++) {
maxWidth = Math.max(maxWidth, zrArea.getTextWidth(this._getFormatterNameFromData(data[i]), data[i].textStyle ? this.getFont(zrUtil.merge(data[i].textStyle || {}, textStyle)) : font));
}
maxWidth += itemWidth;
totalWidth = maxWidth;
for (var i = 0; i < dataLength; i++) {
if (this._getName(data[i]) === '') {
totalWidth += maxWidth + itemGap;
temp -= itemGap;
totalHeight = Math.max(totalHeight, temp);
temp = 0;
continue;
}
if (temp + itemHeight + itemGap > zrHeight) {
totalWidth += maxWidth + itemGap;
temp -= itemGap;
totalHeight = Math.max(totalHeight, temp);
temp = 0;
} else {
temp += itemHeight + itemGap;
totalHeight = Math.max(totalHeight, temp - itemGap);
}
}
}
zrWidth = this.zr.getWidth();
zrHeight = this.zr.getHeight();
var x;
switch (this.legendOption.x) {
case 'center':
x = Math.floor((zrWidth - totalWidth) / 2);
break;
case 'left':
x = padding[3] + this.legendOption.borderWidth;
break;
case 'right':
x = zrWidth - totalWidth - padding[1] - padding[3] - this.legendOption.borderWidth * 2;
break;
default:
x = this.parsePercent(this.legendOption.x, zrWidth);
break;
}
var y;
switch (this.legendOption.y) {
case 'top':
y = padding[0] + this.legendOption.borderWidth;
break;
case 'bottom':
y = zrHeight - totalHeight - padding[0] - padding[2] - this.legendOption.borderWidth * 2;
break;
case 'center':
y = Math.floor((zrHeight - totalHeight) / 2);
break;
default:
y = this.parsePercent(this.legendOption.y, zrHeight);
break;
}
return {
x: x,
y: y,
width: totalWidth,
height: totalHeight,
maxWidth: maxWidth
};
},
_getSomethingByName: function (name) {
var series = this.option.series;
var data;
for (var i = 0, l = series.length; i < l; i++) {
if (series[i].name === name) {
return {
type: series[i].type,
series: series[i],
seriesIndex: i,
data: null,
dataIndex: -1
};
}
if (series[i].type === ecConfig.CHART_TYPE_PIE || series[i].type === ecConfig.CHART_TYPE_RADAR || series[i].type === ecConfig.CHART_TYPE_CHORD || series[i].type === ecConfig.CHART_TYPE_FORCE || series[i].type === ecConfig.CHART_TYPE_FUNNEL || series[i].type === ecConfig.CHART_TYPE_TREEMAP) {
data = series[i].categories || series[i].data || series[i].nodes;
for (var j = 0, k = data.length; j < k; j++) {
if (data[j].name === name) {
return {
type: series[i].type,
series: series[i],
seriesIndex: i,
data: data[j],
dataIndex: j
};
}
}
}
}
return {
type: 'bar',
series: null,
seriesIndex: -1,
data: null,
dataIndex: -1
};
},
_getItemShapeByType: function (x, y, width, height, color, itemType, defaultColor) {
var highlightColor = color === '#ccc' ? defaultColor : color;
var itemShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
style: {
iconType: 'legendicon' + itemType,
x: x,
y: y,
width: width,
height: height,
color: color,
strokeColor: color,
lineWidth: 2
},
highlightStyle: {
color: highlightColor,
strokeColor: highlightColor,
lineWidth: 1
},
hoverable: this.legendOption.selectedMode,
clickable: this.legendOption.selectedMode
};
var imageLocation;
if (itemType.match('image')) {
var imageLocation = itemType.replace(new RegExp('^image:\\/\\/'), '');
itemType = 'image';
}
switch (itemType) {
case 'line':
itemShape.style.brushType = 'stroke';
itemShape.highlightStyle.lineWidth = 3;
break;
case 'radar':
case 'venn':
case 'tree':
case 'treemap':
case 'scatter':
itemShape.highlightStyle.lineWidth = 3;
break;
case 'k':
itemShape.style.brushType = 'both';
itemShape.highlightStyle.lineWidth = 3;
itemShape.highlightStyle.color = itemShape.style.color = this.deepQuery([
this.ecTheme,
ecConfig
], 'k.itemStyle.normal.color') || '#fff';
itemShape.style.strokeColor = color != '#ccc' ? this.deepQuery([
this.ecTheme,
ecConfig
], 'k.itemStyle.normal.lineStyle.color') || '#ff3200' : color;
break;
case 'image':
itemShape.style.iconType = 'image';
itemShape.style.image = imageLocation;
if (color === '#ccc') {
itemShape.style.opacity = 0.5;
}
break;
}
return itemShape;
},
__legendSelected: function (param) {
var itemName = param.target._name;
if (this.legendOption.selectedMode === 'single') {
for (var k in this._selectedMap) {
this._selectedMap[k] = false;
}
}
this._selectedMap[itemName] = !this._selectedMap[itemName];
this.messageCenter.dispatch(ecConfig.EVENT.LEGEND_SELECTED, param.event, {
selected: this._selectedMap,
target: itemName
}, this.myChart);
},
__dispatchHoverLink: function (param) {
this.messageCenter.dispatch(ecConfig.EVENT.LEGEND_HOVERLINK, param.event, { target: param.target._name }, this.myChart);
return;
},
refresh: function (newOption) {
if (newOption) {
this.option = newOption || this.option;
this.option.legend = this.reformOption(this.option.legend);
this.legendOption = this.option.legend;
var data = this.legendOption.data || [];
var itemName;
var something;
var color;
var queryTarget;
if (this.legendOption.selected) {
for (var k in this.legendOption.selected) {
this._selectedMap[k] = typeof this._selectedMap[k] != 'undefined' ? this._selectedMap[k] : this.legendOption.selected[k];
}
}
for (var i = 0, dataLength = data.length; i < dataLength; i++) {
itemName = this._getName(data[i]);
if (itemName === '') {
continue;
}
something = this._getSomethingByName(itemName);
if (!something.series) {
this._hasDataMap[itemName] = false;
} else {
this._hasDataMap[itemName] = true;
if (something.data && (something.type === ecConfig.CHART_TYPE_PIE || something.type === ecConfig.CHART_TYPE_FORCE || something.type === ecConfig.CHART_TYPE_FUNNEL)) {
queryTarget = [
something.data,
something.series
];
} else {
queryTarget = [something.series];
}
color = this.getItemStyleColor(this.deepQuery(queryTarget, 'itemStyle.normal.color'), something.seriesIndex, something.dataIndex, something.data);
if (color && something.type != ecConfig.CHART_TYPE_K) {
this.setColor(itemName, color);
}
this._selectedMap[itemName] = this._selectedMap[itemName] != null ? this._selectedMap[itemName] : true;
}
}
}
this.clear();
this._buildShape();
},
getRelatedAmount: function (name) {
var amount = 0;
var series = this.option.series;
var data;
for (var i = 0, l = series.length; i < l; i++) {
if (series[i].name === name) {
amount++;
}
if (series[i].type === ecConfig.CHART_TYPE_PIE || series[i].type === ecConfig.CHART_TYPE_RADAR || series[i].type === ecConfig.CHART_TYPE_CHORD || series[i].type === ecConfig.CHART_TYPE_FORCE || series[i].type === ecConfig.CHART_TYPE_FUNNEL) {
data = series[i].type != ecConfig.CHART_TYPE_FORCE ? series[i].data : series[i].categories;
for (var j = 0, k = data.length; j < k; j++) {
if (data[j].name === name && data[j].value != '-') {
amount++;
}
}
}
}
return amount;
},
setColor: function (legendName, color) {
this._colorMap[legendName] = color;
},
getColor: function (legendName) {
if (!this._colorMap[legendName]) {
this._colorMap[legendName] = this.zr.getColor(this._colorIndex++);
}
return this._colorMap[legendName];
},
hasColor: function (legendName) {
return this._colorMap[legendName] ? this._colorMap[legendName] : false;
},
add: function (name, color) {
var data = this.legendOption.data;
for (var i = 0, dataLength = data.length; i < dataLength; i++) {
if (this._getName(data[i]) === name) {
return;
}
}
this.legendOption.data.push(name);
this.setColor(name, color);
this._selectedMap[name] = true;
this._hasDataMap[name] = true;
},
del: function (name) {
var data = this.legendOption.data;
for (var i = 0, dataLength = data.length; i < dataLength; i++) {
if (this._getName(data[i]) === name) {
return this.legendOption.data.splice(i, 1);
}
}
},
getItemShape: function (name) {
if (name == null) {
return;
}
var shape;
for (var i = 0, l = this.shapeList.length; i < l; i++) {
shape = this.shapeList[i];
if (shape._name === name && shape.type != 'text') {
return shape;
}
}
},
setItemShape: function (name, itemShape) {
var shape;
for (var i = 0, l = this.shapeList.length; i < l; i++) {
shape = this.shapeList[i];
if (shape._name === name && shape.type != 'text') {
if (!this._selectedMap[name]) {
itemShape.style.color = '#ccc';
itemShape.style.strokeColor = '#ccc';
}
this.zr.modShape(shape.id, itemShape);
}
}
},
isSelected: function (itemName) {
if (typeof this._selectedMap[itemName] != 'undefined') {
return this._selectedMap[itemName];
} else {
return true;
}
},
getSelectedMap: function () {
return this._selectedMap;
},
setSelected: function (itemName, selectStatus) {
if (this.legendOption.selectedMode === 'single') {
for (var k in this._selectedMap) {
this._selectedMap[k] = false;
}
}
this._selectedMap[itemName] = selectStatus;
this.messageCenter.dispatch(ecConfig.EVENT.LEGEND_SELECTED, null, {
selected: this._selectedMap,
target: itemName
}, this.myChart);
},
onlegendSelected: function (param, status) {
var legendSelected = param.selected;
for (var itemName in legendSelected) {
if (this._selectedMap[itemName] != legendSelected[itemName]) {
status.needRefresh = true;
}
this._selectedMap[itemName] = legendSelected[itemName];
}
return;
}
};
var legendIcon = {
line: function (ctx, style) {
var dy = style.height / 2;
ctx.moveTo(style.x, style.y + dy);
ctx.lineTo(style.x + style.width, style.y + dy);
},
pie: function (ctx, style) {
var x = style.x;
var y = style.y;
var width = style.width;
var height = style.height;
SectorShape.prototype.buildPath(ctx, {
x: x + width / 2,
y: y + height + 2,
r: height,
r0: 6,
startAngle: 45,
endAngle: 135
});
},
eventRiver: function (ctx, style) {
var x = style.x;
var y = style.y;
var width = style.width;
var height = style.height;
ctx.moveTo(x, y + height);
ctx.bezierCurveTo(x + width, y + height, x, y + 4, x + width, y + 4);
ctx.lineTo(x + width, y);
ctx.bezierCurveTo(x, y, x + width, y + height - 4, x, y + height - 4);
ctx.lineTo(x, y + height);
},
k: function (ctx, style) {
var x = style.x;
var y = style.y;
var width = style.width;
var height = style.height;
CandleShape.prototype.buildPath(ctx, {
x: x + width / 2,
y: [
y + 1,
y + 1,
y + height - 6,
y + height
],
width: width - 6
});
},
bar: function (ctx, style) {
var x = style.x;
var y = style.y + 1;
var width = style.width;
var height = style.height - 2;
var r = 3;
ctx.moveTo(x + r, y);
ctx.lineTo(x + width - r, y);
ctx.quadraticCurveTo(x + width, y, x + width, y + r);
ctx.lineTo(x + width, y + height - r);
ctx.quadraticCurveTo(x + width, y + height, x + width - r, y + height);
ctx.lineTo(x + r, y + height);
ctx.quadraticCurveTo(x, y + height, x, y + height - r);
ctx.lineTo(x, y + r);
ctx.quadraticCurveTo(x, y, x + r, y);
},
force: function (ctx, style) {
IconShape.prototype.iconLibrary.circle(ctx, style);
},
radar: function (ctx, style) {
var n = 6;
var x = style.x + style.width / 2;
var y = style.y + style.height / 2;
var r = style.height / 2;
var dStep = 2 * Math.PI / n;
var deg = -Math.PI / 2;
var xStart = x + r * Math.cos(deg);
var yStart = y + r * Math.sin(deg);
ctx.moveTo(xStart, yStart);
deg += dStep;
for (var i = 0, end = n - 1; i < end; i++) {
ctx.lineTo(x + r * Math.cos(deg), y + r * Math.sin(deg));
deg += dStep;
}
ctx.lineTo(xStart, yStart);
}
};
legendIcon.chord = legendIcon.pie;
legendIcon.map = legendIcon.bar;
for (var k in legendIcon) {
IconShape.prototype.iconLibrary['legendicon' + k] = legendIcon[k];
}
zrUtil.inherits(Legend, Base);
require('../component').define('legend', Legend);
return Legend;
});define('echarts/util/ecData', [], function () {
function pack(shape, series, seriesIndex, data, dataIndex, name, special, special2) {
var value;
if (typeof data != 'undefined') {
value = data.value == null ? data : data.value;
}
shape._echartsData = {
'_series': series,
'_seriesIndex': seriesIndex,
'_data': data,
'_dataIndex': dataIndex,
'_name': name,
'_value': value,
'_special': special,
'_special2': special2
};
return shape._echartsData;
}
function get(shape, key) {
var data = shape._echartsData;
if (!key) {
return data;
}
switch (key) {
case 'series':
case 'seriesIndex':
case 'data':
case 'dataIndex':
case 'name':
case 'value':
case 'special':
case 'special2':
return data && data['_' + key];
}
return null;
}
function set(shape, key, value) {
shape._echartsData = shape._echartsData || {};
switch (key) {
case 'series':
case 'seriesIndex':
case 'data':
case 'dataIndex':
case 'name':
case 'value':
case 'special':
case 'special2':
shape._echartsData['_' + key] = value;
break;
}
}
function clone(source, target) {
target._echartsData = {
'_series': source._echartsData._series,
'_seriesIndex': source._echartsData._seriesIndex,
'_data': source._echartsData._data,
'_dataIndex': source._echartsData._dataIndex,
'_name': source._echartsData._name,
'_value': source._echartsData._value,
'_special': source._echartsData._special,
'_special2': source._echartsData._special2
};
}
return {
pack: pack,
set: set,
get: get,
clone: clone
};
});define('echarts/chart', [], function () {
var self = {};
var _chartLibrary = {};
self.define = function (name, clazz) {
_chartLibrary[name] = clazz;
return self;
};
self.get = function (name) {
return _chartLibrary[name];
};
return self;
});define('zrender/tool/color', [
'require',
'../tool/util'
], function (require) {
var util = require('../tool/util');
var _ctx;
var palette = [
'#ff9277',
' #dddd00',
' #ffc877',
' #bbe3ff',
' #d5ffbb',
'#bbbbff',
' #ddb000',
' #b0dd00',
' #e2bbff',
' #ffbbe3',
'#ff7777',
' #ff9900',
' #83dd00',
' #77e3ff',
' #778fff',
'#c877ff',
' #ff77ab',
' #ff6600',
' #aa8800',
' #77c7ff',
'#ad77ff',
' #ff77ff',
' #dd0083',
' #777700',
' #00aa00',
'#0088aa',
' #8400dd',
' #aa0088',
' #dd0000',
' #772e00'
];
var _palette = palette;
var highlightColor = 'rgba(255,255,0,0.5)';
var _highlightColor = highlightColor;
var colorRegExp = /^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+%?)?)\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i;
var _nameColors = {
aliceblue: '#f0f8ff',
antiquewhite: '#faebd7',
aqua: '#0ff',
aquamarine: '#7fffd4',
azure: '#f0ffff',
beige: '#f5f5dc',
bisque: '#ffe4c4',
black: '#000',
blanchedalmond: '#ffebcd',
blue: '#00f',
blueviolet: '#8a2be2',
brown: '#a52a2a',
burlywood: '#deb887',
cadetblue: '#5f9ea0',
chartreuse: '#7fff00',
chocolate: '#d2691e',
coral: '#ff7f50',
cornflowerblue: '#6495ed',
cornsilk: '#fff8dc',
crimson: '#dc143c',
cyan: '#0ff',
darkblue: '#00008b',
darkcyan: '#008b8b',
darkgoldenrod: '#b8860b',
darkgray: '#a9a9a9',
darkgrey: '#a9a9a9',
darkgreen: '#006400',
darkkhaki: '#bdb76b',
darkmagenta: '#8b008b',
darkolivegreen: '#556b2f',
darkorange: '#ff8c00',
darkorchid: '#9932cc',
darkred: '#8b0000',
darksalmon: '#e9967a',
darkseagreen: '#8fbc8f',
darkslateblue: '#483d8b',
darkslategray: '#2f4f4f',
darkslategrey: '#2f4f4f',
darkturquoise: '#00ced1',
darkviolet: '#9400d3',
deeppink: '#ff1493',
deepskyblue: '#00bfff',
dimgray: '#696969',
dimgrey: '#696969',
dodgerblue: '#1e90ff',
firebrick: '#b22222',
floralwhite: '#fffaf0',
forestgreen: '#228b22',
fuchsia: '#f0f',
gainsboro: '#dcdcdc',
ghostwhite: '#f8f8ff',
gold: '#ffd700',
goldenrod: '#daa520',
gray: '#808080',
grey: '#808080',
green: '#008000',
greenyellow: '#adff2f',
honeydew: '#f0fff0',
hotpink: '#ff69b4',
indianred: '#cd5c5c',
indigo: '#4b0082',
ivory: '#fffff0',
khaki: '#f0e68c',
lavender: '#e6e6fa',
lavenderblush: '#fff0f5',
lawngreen: '#7cfc00',
lemonchiffon: '#fffacd',
lightblue: '#add8e6',
lightcoral: '#f08080',
lightcyan: '#e0ffff',
lightgoldenrodyellow: '#fafad2',
lightgray: '#d3d3d3',
lightgrey: '#d3d3d3',
lightgreen: '#90ee90',
lightpink: '#ffb6c1',
lightsalmon: '#ffa07a',
lightseagreen: '#20b2aa',
lightskyblue: '#87cefa',
lightslategray: '#789',
lightslategrey: '#789',
lightsteelblue: '#b0c4de',
lightyellow: '#ffffe0',
lime: '#0f0',
limegreen: '#32cd32',
linen: '#faf0e6',
magenta: '#f0f',
maroon: '#800000',
mediumaquamarine: '#66cdaa',
mediumblue: '#0000cd',
mediumorchid: '#ba55d3',
mediumpurple: '#9370d8',
mediumseagreen: '#3cb371',
mediumslateblue: '#7b68ee',
mediumspringgreen: '#00fa9a',
mediumturquoise: '#48d1cc',
mediumvioletred: '#c71585',
midnightblue: '#191970',
mintcream: '#f5fffa',
mistyrose: '#ffe4e1',
moccasin: '#ffe4b5',
navajowhite: '#ffdead',
navy: '#000080',
oldlace: '#fdf5e6',
olive: '#808000',
olivedrab: '#6b8e23',
orange: '#ffa500',
orangered: '#ff4500',
orchid: '#da70d6',
palegoldenrod: '#eee8aa',
palegreen: '#98fb98',
paleturquoise: '#afeeee',
palevioletred: '#d87093',
papayawhip: '#ffefd5',
peachpuff: '#ffdab9',
peru: '#cd853f',
pink: '#ffc0cb',
plum: '#dda0dd',
powderblue: '#b0e0e6',
purple: '#800080',
red: '#f00',
rosybrown: '#bc8f8f',
royalblue: '#4169e1',
saddlebrown: '#8b4513',
salmon: '#fa8072',
sandybrown: '#f4a460',
seagreen: '#2e8b57',
seashell: '#fff5ee',
sienna: '#a0522d',
silver: '#c0c0c0',
skyblue: '#87ceeb',
slateblue: '#6a5acd',
slategray: '#708090',
slategrey: '#708090',
snow: '#fffafa',
springgreen: '#00ff7f',
steelblue: '#4682b4',
tan: '#d2b48c',
teal: '#008080',
thistle: '#d8bfd8',
tomato: '#ff6347',
turquoise: '#40e0d0',
violet: '#ee82ee',
wheat: '#f5deb3',
white: '#fff',
whitesmoke: '#f5f5f5',
yellow: '#ff0',
yellowgreen: '#9acd32'
};
function customPalette(userPalete) {
palette = userPalete;
}
function resetPalette() {
palette = _palette;
}
function getColor(idx, userPalete) {
idx = idx | 0;
userPalete = userPalete || palette;
return userPalete[idx % userPalete.length];
}
function customHighlight(userHighlightColor) {
highlightColor = userHighlightColor;
}
function resetHighlight() {
_highlightColor = highlightColor;
}
function getHighlightColor() {
return highlightColor;
}
function getRadialGradient(x0, y0, r0, x1, y1, r1, colorList) {
if (!_ctx) {
_ctx = util.getContext();
}
var gradient = _ctx.createRadialGradient(x0, y0, r0, x1, y1, r1);
for (var i = 0, l = colorList.length; i < l; i++) {
gradient.addColorStop(colorList[i][0], colorList[i][1]);
}
gradient.__nonRecursion = true;
return gradient;
}
function getLinearGradient(x0, y0, x1, y1, colorList) {
if (!_ctx) {
_ctx = util.getContext();
}
var gradient = _ctx.createLinearGradient(x0, y0, x1, y1);
for (var i = 0, l = colorList.length; i < l; i++) {
gradient.addColorStop(colorList[i][0], colorList[i][1]);
}
gradient.__nonRecursion = true;
return gradient;
}
function getStepColors(start, end, step) {
start = toRGBA(start);
end = toRGBA(end);
start = getData(start);
end = getData(end);
var colors = [];
var stepR = (end[0] - start[0]) / step;
var stepG = (end[1] - start[1]) / step;
var stepB = (end[2] - start[2]) / step;
var stepA = (end[3] - start[3]) / step;
for (var i = 0, r = start[0], g = start[1], b = start[2], a = start[3]; i < step; i++) {
colors[i] = toColor([
adjust(Math.floor(r), [
0,
255
]),
adjust(Math.floor(g), [
0,
255
]),
adjust(Math.floor(b), [
0,
255
]),
a.toFixed(4) - 0
], 'rgba');
r += stepR;
g += stepG;
b += stepB;
a += stepA;
}
r = end[0];
g = end[1];
b = end[2];
a = end[3];
colors[i] = toColor([
r,
g,
b,
a
], 'rgba');
return colors;
}
function getGradientColors(colors, step) {
var ret = [];
var len = colors.length;
if (step === undefined) {
step = 20;
}
if (len === 1) {
ret = getStepColors(colors[0], colors[0], step);
} else if (len > 1) {
for (var i = 0, n = len - 1; i < n; i++) {
var steps = getStepColors(colors[i], colors[i + 1], step);
if (i < n - 1) {
steps.pop();
}
ret = ret.concat(steps);
}
}
return ret;
}
function toColor(data, format) {
format = format || 'rgb';
if (data && (data.length === 3 || data.length === 4)) {
data = map(data, function (c) {
return c > 1 ? Math.ceil(c) : c;
});
if (format.indexOf('hex') > -1) {
return '#' + ((1 << 24) + (data[0] << 16) + (data[1] << 8) + +data[2]).toString(16).slice(1);
} else if (format.indexOf('hs') > -1) {
var sx = map(data.slice(1, 3), function (c) {
return c + '%';
});
data[1] = sx[0];
data[2] = sx[1];
}
if (format.indexOf('a') > -1) {
if (data.length === 3) {
data.push(1);
}
data[3] = adjust(data[3], [
0,
1
]);
return format + '(' + data.slice(0, 4).join(',') + ')';
}
return format + '(' + data.slice(0, 3).join(',') + ')';
}
}
function toArray(color) {
color = trim(color);
if (color.indexOf('rgba') < 0) {
color = toRGBA(color);
}
var data = [];
var i = 0;
color.replace(/[\d.]+/g, function (n) {
if (i < 3) {
n = n | 0;
} else {
n = +n;
}
data[i++] = n;
});
return data;
}
function convert(color, format) {
if (!isCalculableColor(color)) {
return color;
}
var data = getData(color);
var alpha = data[3];
if (typeof alpha === 'undefined') {
alpha = 1;
}
if (color.indexOf('hsb') > -1) {
data = _HSV_2_RGB(data);
} else if (color.indexOf('hsl') > -1) {
data = _HSL_2_RGB(data);
}
if (format.indexOf('hsb') > -1 || format.indexOf('hsv') > -1) {
data = _RGB_2_HSB(data);
} else if (format.indexOf('hsl') > -1) {
data = _RGB_2_HSL(data);
}
data[3] = alpha;
return toColor(data, format);
}
function toRGBA(color) {
return convert(color, 'rgba');
}
function toRGB(color) {
return convert(color, 'rgb');
}
function toHex(color) {
return convert(color, 'hex');
}
function toHSVA(color) {
return convert(color, 'hsva');
}
function toHSV(color) {
return convert(color, 'hsv');
}
function toHSBA(color) {
return convert(color, 'hsba');
}
function toHSB(color) {
return convert(color, 'hsb');
}
function toHSLA(color) {
return convert(color, 'hsla');
}
function toHSL(color) {
return convert(color, 'hsl');
}
function toName(color) {
for (var key in _nameColors) {
if (toHex(_nameColors[key]) === toHex(color)) {
return key;
}
}
return null;
}
function trim(color) {
return String(color).replace(/\s+/g, '');
}
function normalize(color) {
if (_nameColors[color]) {
color = _nameColors[color];
}
color = trim(color);
color = color.replace(/hsv/i, 'hsb');
if (/^#[\da-f]{3}$/i.test(color)) {
color = parseInt(color.slice(1), 16);
var r = (color & 3840) << 8;
var g = (color & 240) << 4;
var b = color & 15;
color = '#' + ((1 << 24) + (r << 4) + r + (g << 4) + g + (b << 4) + b).toString(16).slice(1);
}
return color;
}
function lift(color, level) {
if (!isCalculableColor(color)) {
return color;
}
var direct = level > 0 ? 1 : -1;
if (typeof level === 'undefined') {
level = 0;
}
level = Math.abs(level) > 1 ? 1 : Math.abs(level);
color = toRGB(color);
var data = getData(color);
for (var i = 0; i < 3; i++) {
if (direct === 1) {
data[i] = data[i] * (1 - level) | 0;
} else {
data[i] = (255 - data[i]) * level + data[i] | 0;
}
}
return 'rgb(' + data.join(',') + ')';
}
function reverse(color) {
if (!isCalculableColor(color)) {
return color;
}
var data = getData(toRGBA(color));
data = map(data, function (c) {
return 255 - c;
});
return toColor(data, 'rgb');
}
function mix(color1, color2, weight) {
if (!isCalculableColor(color1) || !isCalculableColor(color2)) {
return color1;
}
if (typeof weight === 'undefined') {
weight = 0.5;
}
weight = 1 - adjust(weight, [
0,
1
]);
var w = weight * 2 - 1;
var data1 = getData(toRGBA(color1));
var data2 = getData(toRGBA(color2));
var d = data1[3] - data2[3];
var weight1 = ((w * d === -1 ? w : (w + d) / (1 + w * d)) + 1) / 2;
var weight2 = 1 - weight1;
var data = [];
for (var i = 0; i < 3; i++) {
data[i] = data1[i] * weight1 + data2[i] * weight2;
}
var alpha = data1[3] * weight + data2[3] * (1 - weight);
alpha = Math.max(0, Math.min(1, alpha));
if (data1[3] === 1 && data2[3] === 1) {
return toColor(data, 'rgb');
}
data[3] = alpha;
return toColor(data, 'rgba');
}
function random() {
return '#' + (Math.random().toString(16) + '0000').slice(2, 8);
}
function getData(color) {
color = normalize(color);
var r = color.match(colorRegExp);
if (r === null) {
throw new Error('The color format error');
}
var d;
var a;
var data = [];
var rgb;
if (r[2]) {
d = r[2].replace('#', '').split('');
rgb = [
d[0] + d[1],
d[2] + d[3],
d[4] + d[5]
];
data = map(rgb, function (c) {
return adjust(parseInt(c, 16), [
0,
255
]);
});
} else if (r[4]) {
var rgba = r[4].split(',');
a = rgba[3];
rgb = rgba.slice(0, 3);
data = map(rgb, function (c) {
c = Math.floor(c.indexOf('%') > 0 ? parseInt(c, 0) * 2.55 : c);
return adjust(c, [
0,
255
]);
});
if (typeof a !== 'undefined') {
data.push(adjust(parseFloat(a), [
0,
1
]));
}
} else if (r[5] || r[6]) {
var hsxa = (r[5] || r[6]).split(',');
var h = parseInt(hsxa[0], 0) / 360;
var s = hsxa[1];
var x = hsxa[2];
a = hsxa[3];
data = map([
s,
x
], function (c) {
return adjust(parseFloat(c) / 100, [
0,
1
]);
});
data.unshift(h);
if (typeof a !== 'undefined') {
data.push(adjust(parseFloat(a), [
0,
1
]));
}
}
return data;
}
function alpha(color, a) {
if (!isCalculableColor(color)) {
return color;
}
if (a === null) {
a = 1;
}
var data = getData(toRGBA(color));
data[3] = adjust(Number(a).toFixed(4), [
0,
1
]);
return toColor(data, 'rgba');
}
function map(array, fun) {
if (typeof fun !== 'function') {
throw new TypeError();
}
var len = array ? array.length : 0;
for (var i = 0; i < len; i++) {
array[i] = fun(array[i]);
}
return array;
}
function adjust(value, region) {
if (value <= region[0]) {
value = region[0];
} else if (value >= region[1]) {
value = region[1];
}
return value;
}
function isCalculableColor(color) {
return color instanceof Array || typeof color === 'string';
}
function _HSV_2_RGB(data) {
var H = data[0];
var S = data[1];
var V = data[2];
var R;
var G;
var B;
if (S === 0) {
R = V * 255;
G = V * 255;
B = V * 255;
} else {
var h = H * 6;
if (h === 6) {
h = 0;
}
var i = h | 0;
var v1 = V * (1 - S);
var v2 = V * (1 - S * (h - i));
var v3 = V * (1 - S * (1 - (h - i)));
var r = 0;
var g = 0;
var b = 0;
if (i === 0) {
r = V;
g = v3;
b = v1;
} else if (i === 1) {
r = v2;
g = V;
b = v1;
} else if (i === 2) {
r = v1;
g = V;
b = v3;
} else if (i === 3) {
r = v1;
g = v2;
b = V;
} else if (i === 4) {
r = v3;
g = v1;
b = V;
} else {
r = V;
g = v1;
b = v2;
}
R = r * 255;
G = g * 255;
B = b * 255;
}
return [
R,
G,
B
];
}
function _HSL_2_RGB(data) {
var H = data[0];
var S = data[1];
var L = data[2];
var R;
var G;
var B;
if (S === 0) {
R = L * 255;
G = L * 255;
B = L * 255;
} else {
var v2;
if (L < 0.5) {
v2 = L * (1 + S);
} else {
v2 = L + S - S * L;
}
var v1 = 2 * L - v2;
R = 255 * _HUE_2_RGB(v1, v2, H + 1 / 3);
G = 255 * _HUE_2_RGB(v1, v2, H);
B = 255 * _HUE_2_RGB(v1, v2, H - 1 / 3);
}
return [
R,
G,
B
];
}
function _HUE_2_RGB(v1, v2, vH) {
if (vH < 0) {
vH += 1;
}
if (vH > 1) {
vH -= 1;
}
if (6 * vH < 1) {
return v1 + (v2 - v1) * 6 * vH;
}
if (2 * vH < 1) {
return v2;
}
if (3 * vH < 2) {
return v1 + (v2 - v1) * (2 / 3 - vH) * 6;
}
return v1;
}
function _RGB_2_HSB(data) {
var R = data[0] / 255;
var G = data[1] / 255;
var B = data[2] / 255;
var vMin = Math.min(R, G, B);
var vMax = Math.max(R, G, B);
var delta = vMax - vMin;
var V = vMax;
var H;
var S;
if (delta === 0) {
H = 0;
S = 0;
} else {
S = delta / vMax;
var deltaR = ((vMax - R) / 6 + delta / 2) / delta;
var deltaG = ((vMax - G) / 6 + delta / 2) / delta;
var deltaB = ((vMax - B) / 6 + delta / 2) / delta;
if (R === vMax) {
H = deltaB - deltaG;
} else if (G === vMax) {
H = 1 / 3 + deltaR - deltaB;
} else if (B === vMax) {
H = 2 / 3 + deltaG - deltaR;
}
if (H < 0) {
H += 1;
}
if (H > 1) {
H -= 1;
}
}
H = H * 360;
S = S * 100;
V = V * 100;
return [
H,
S,
V
];
}
function _RGB_2_HSL(data) {
var R = data[0] / 255;
var G = data[1] / 255;
var B = data[2] / 255;
var vMin = Math.min(R, G, B);
var vMax = Math.max(R, G, B);
var delta = vMax - vMin;
var L = (vMax + vMin) / 2;
var H;
var S;
if (delta === 0) {
H = 0;
S = 0;
} else {
if (L < 0.5) {
S = delta / (vMax + vMin);
} else {
S = delta / (2 - vMax - vMin);
}
var deltaR = ((vMax - R) / 6 + delta / 2) / delta;
var deltaG = ((vMax - G) / 6 + delta / 2) / delta;
var deltaB = ((vMax - B) / 6 + delta / 2) / delta;
if (R === vMax) {
H = deltaB - deltaG;
} else if (G === vMax) {
H = 1 / 3 + deltaR - deltaB;
} else if (B === vMax) {
H = 2 / 3 + deltaG - deltaR;
}
if (H < 0) {
H += 1;
}
if (H > 1) {
H -= 1;
}
}
H = H * 360;
S = S * 100;
L = L * 100;
return [
H,
S,
L
];
}
return {
customPalette: customPalette,
resetPalette: resetPalette,
getColor: getColor,
getHighlightColor: getHighlightColor,
customHighlight: customHighlight,
resetHighlight: resetHighlight,
getRadialGradient: getRadialGradient,
getLinearGradient: getLinearGradient,
getGradientColors: getGradientColors,
getStepColors: getStepColors,
reverse: reverse,
mix: mix,
lift: lift,
trim: trim,
random: random,
toRGB: toRGB,
toRGBA: toRGBA,
toHex: toHex,
toHSL: toHSL,
toHSLA: toHSLA,
toHSB: toHSB,
toHSBA: toHSBA,
toHSV: toHSV,
toHSVA: toHSVA,
toName: toName,
toColor: toColor,
toArray: toArray,
alpha: alpha,
getData: getData
};
});define('echarts/component/timeline', [
'require',
'./base',
'zrender/shape/Rectangle',
'../util/shape/Icon',
'../util/shape/Chain',
'../config',
'zrender/tool/util',
'zrender/tool/area',
'zrender/tool/event',
'../component'
], function (require) {
var Base = require('./base');
var RectangleShape = require('zrender/shape/Rectangle');
var IconShape = require('../util/shape/Icon');
var ChainShape = require('../util/shape/Chain');
var ecConfig = require('../config');
ecConfig.timeline = {
zlevel: 0,
z: 4,
show: true,
type: 'time',
notMerge: false,
realtime: true,
x: 80,
x2: 80,
y2: 0,
height: 50,
backgroundColor: 'rgba(0,0,0,0)',
borderColor: '#ccc',
borderWidth: 0,
padding: 5,
controlPosition: 'left',
autoPlay: false,
loop: true,
playInterval: 2000,
lineStyle: {
width: 1,
color: '#666',
type: 'dashed'
},
label: {
show: true,
interval: 'auto',
rotate: 0,
textStyle: { color: '#333' }
},
checkpointStyle: {
symbol: 'auto',
symbolSize: 'auto',
color: 'auto',
borderColor: 'auto',
borderWidth: 'auto',
label: {
show: false,
textStyle: { color: 'auto' }
}
},
controlStyle: {
itemSize: 15,
itemGap: 5,
normal: { color: '#333' },
emphasis: { color: '#1e90ff' }
},
symbol: 'emptyDiamond',
symbolSize: 4,
currentIndex: 0
};
var zrUtil = require('zrender/tool/util');
var zrArea = require('zrender/tool/area');
var zrEvent = require('zrender/tool/event');
function Timeline(ecTheme, messageCenter, zr, option, myChart) {
Base.call(this, ecTheme, messageCenter, zr, option, myChart);
var self = this;
self._onclick = function (param) {
return self.__onclick(param);
};
self._ondrift = function (dx, dy) {
return self.__ondrift(this, dx, dy);
};
self._ondragend = function () {
return self.__ondragend();
};
self._setCurrentOption = function () {
var timelineOption = self.timelineOption;
self.currentIndex %= timelineOption.data.length;
var curOption = self.options[self.currentIndex] || {};
self.myChart._setOption(curOption, timelineOption.notMerge, true);
self.messageCenter.dispatch(ecConfig.EVENT.TIMELINE_CHANGED, null, {
currentIndex: self.currentIndex,
data: timelineOption.data[self.currentIndex].name != null ? timelineOption.data[self.currentIndex].name : timelineOption.data[self.currentIndex]
}, self.myChart);
};
self._onFrame = function () {
self._setCurrentOption();
self._syncHandleShape();
if (self.timelineOption.autoPlay) {
self.playTicket = setTimeout(function () {
self.currentIndex += 1;
if (!self.timelineOption.loop && self.currentIndex >= self.timelineOption.data.length) {
self.currentIndex = self.timelineOption.data.length - 1;
self.stop();
return;
}
self._onFrame();
}, self.timelineOption.playInterval);
}
};
this.setTheme(false);
this.options = this.option.options;
this.currentIndex = this.timelineOption.currentIndex % this.timelineOption.data.length;
if (!this.timelineOption.notMerge && this.currentIndex !== 0) {
this.options[this.currentIndex] = zrUtil.merge(this.options[this.currentIndex], this.options[0]);
}
if (this.timelineOption.show) {
this._buildShape();
this._syncHandleShape();
}
this._setCurrentOption();
if (this.timelineOption.autoPlay) {
var self = this;
this.playTicket = setTimeout(function () {
self.play();
}, this.ecTheme.animationDuration != null ? this.ecTheme.animationDuration : ecConfig.animationDuration);
}
}
Timeline.prototype = {
type: ecConfig.COMPONENT_TYPE_TIMELINE,
_buildShape: function () {
this._location = this._getLocation();
this._buildBackground();
this._buildControl();
this._chainPoint = this._getChainPoint();
if (this.timelineOption.label.show) {
var interval = this._getInterval();
for (var i = 0, len = this._chainPoint.length; i < len; i += interval) {
this._chainPoint[i].showLabel = true;
}
}
this._buildChain();
this._buildHandle();
for (var i = 0, l = this.shapeList.length; i < l; i++) {
this.zr.addShape(this.shapeList[i]);
}
},
_getLocation: function () {
var timelineOption = this.timelineOption;
var padding = this.reformCssArray(this.timelineOption.padding);
var zrWidth = this.zr.getWidth();
var x = this.parsePercent(timelineOption.x, zrWidth);
var x2 = this.parsePercent(timelineOption.x2, zrWidth);
var width;
if (timelineOption.width == null) {
width = zrWidth - x - x2;
x2 = zrWidth - x2;
} else {
width = this.parsePercent(timelineOption.width, zrWidth);
x2 = x + width;
}
var zrHeight = this.zr.getHeight();
var height = this.parsePercent(timelineOption.height, zrHeight);
var y;
var y2;
if (timelineOption.y != null) {
y = this.parsePercent(timelineOption.y, zrHeight);
y2 = y + height;
} else {
y2 = zrHeight - this.parsePercent(timelineOption.y2, zrHeight);
y = y2 - height;
}
return {
x: x + padding[3],
y: y + padding[0],
x2: x2 - padding[1],
y2: y2 - padding[2],
width: width - padding[1] - padding[3],
height: height - padding[0] - padding[2]
};
},
_getReformedLabel: function (idx) {
var timelineOption = this.timelineOption;
var data = timelineOption.data[idx].name != null ? timelineOption.data[idx].name : timelineOption.data[idx];
var formatter = timelineOption.data[idx].formatter || timelineOption.label.formatter;
if (formatter) {
if (typeof formatter === 'function') {
data = formatter.call(this.myChart, data);
} else if (typeof formatter === 'string') {
data = formatter.replace('{value}', data);
}
}
return data;
},
_getInterval: function () {
var chainPoint = this._chainPoint;
var timelineOption = this.timelineOption;
var interval = timelineOption.label.interval;
if (interval === 'auto') {
var fontSize = timelineOption.label.textStyle.fontSize;
var data = timelineOption.data;
var dataLength = timelineOption.data.length;
if (dataLength > 3) {
var isEnough = false;
var labelSpace;
var labelSize;
interval = 0;
while (!isEnough && interval < dataLength) {
interval++;
isEnough = true;
for (var i = interval; i < dataLength; i += interval) {
labelSpace = chainPoint[i].x - chainPoint[i - interval].x;
if (timelineOption.label.rotate !== 0) {
labelSize = fontSize;
} else if (data[i].textStyle) {
labelSize = zrArea.getTextWidth(chainPoint[i].name, chainPoint[i].textFont);
} else {
var label = chainPoint[i].name + '';
var wLen = (label.match(/\w/g) || '').length;
var oLen = label.length - wLen;
labelSize = wLen * fontSize * 2 / 3 + oLen * fontSize;
}
if (labelSpace < labelSize) {
isEnough = false;
break;
}
}
}
} else {
interval = 1;
}
} else {
interval = interval - 0 + 1;
}
return interval;
},
_getChainPoint: function () {
var timelineOption = this.timelineOption;
var symbol = timelineOption.symbol.toLowerCase();
var symbolSize = timelineOption.symbolSize;
var rotate = timelineOption.label.rotate;
var textStyle = timelineOption.label.textStyle;
var textFont = this.getFont(textStyle);
var dataTextStyle;
var data = timelineOption.data;
var x = this._location.x;
var y = this._location.y + this._location.height / 4 * 3;
var width = this._location.x2 - this._location.x;
var len = data.length;
function _getName(i) {
return data[i].name != null ? data[i].name : data[i] + '';
}
var xList = [];
if (len > 1) {
var boundaryGap = width / len;
boundaryGap = boundaryGap > 50 ? 50 : boundaryGap < 20 ? 5 : boundaryGap;
width -= boundaryGap * 2;
if (timelineOption.type === 'number') {
for (var i = 0; i < len; i++) {
xList.push(x + boundaryGap + width / (len - 1) * i);
}
} else {
xList[0] = new Date(_getName(0).replace(/-/g, '/'));
xList[len - 1] = new Date(_getName(len - 1).replace(/-/g, '/')) - xList[0];
for (var i = 1; i < len; i++) {
xList[i] = x + boundaryGap + width * (new Date(_getName(i).replace(/-/g, '/')) - xList[0]) / xList[len - 1];
}
xList[0] = x + boundaryGap;
}
} else {
xList.push(x + width / 2);
}
var list = [];
var curSymbol;
var n;
var isEmpty;
var textAlign;
var rotation;
for (var i = 0; i < len; i++) {
x = xList[i];
curSymbol = data[i].symbol && data[i].symbol.toLowerCase() || symbol;
if (curSymbol.match('empty')) {
curSymbol = curSymbol.replace('empty', '');
isEmpty = true;
} else {
isEmpty = false;
}
if (curSymbol.match('star')) {
n = curSymbol.replace('star', '') - 0 || 5;
curSymbol = 'star';
}
dataTextStyle = data[i].textStyle ? zrUtil.merge(data[i].textStyle || {}, textStyle) : textStyle;
textAlign = dataTextStyle.align || 'center';
if (rotate) {
textAlign = rotate > 0 ? 'right' : 'left';
rotation = [
rotate * Math.PI / 180,
x,
y - 5
];
} else {
rotation = false;
}
list.push({
x: x,
n: n,
isEmpty: isEmpty,
symbol: curSymbol,
symbolSize: data[i].symbolSize || symbolSize,
color: data[i].color,
borderColor: data[i].borderColor,
borderWidth: data[i].borderWidth,
name: this._getReformedLabel(i),
textColor: dataTextStyle.color,
textAlign: textAlign,
textBaseline: dataTextStyle.baseline || 'middle',
textX: x,
textY: y - (rotate ? 5 : 0),
textFont: data[i].textStyle ? this.getFont(dataTextStyle) : textFont,
rotation: rotation,
showLabel: false
});
}
return list;
},
_buildBackground: function () {
var timelineOption = this.timelineOption;
var padding = this.reformCssArray(this.timelineOption.padding);
var width = this._location.width;
var height = this._location.height;
if (timelineOption.borderWidth !== 0 || timelineOption.backgroundColor.replace(/\s/g, '') != 'rgba(0,0,0,0)') {
this.shapeList.push(new RectangleShape({
zlevel: this.getZlevelBase(),
z: this.getZBase(),
hoverable: false,
style: {
x: this._location.x - padding[3],
y: this._location.y - padding[0],
width: width + padding[1] + padding[3],
height: height + padding[0] + padding[2],
brushType: timelineOption.borderWidth === 0 ? 'fill' : 'both',
color: timelineOption.backgroundColor,
strokeColor: timelineOption.borderColor,
lineWidth: timelineOption.borderWidth
}
}));
}
},
_buildControl: function () {
var self = this;
var timelineOption = this.timelineOption;
var lineStyle = timelineOption.lineStyle;
var controlStyle = timelineOption.controlStyle;
if (timelineOption.controlPosition === 'none') {
return;
}
var iconSize = controlStyle.itemSize;
var iconGap = controlStyle.itemGap;
var x;
if (timelineOption.controlPosition === 'left') {
x = this._location.x;
this._location.x += (iconSize + iconGap) * 3;
} else {
x = this._location.x2 - ((iconSize + iconGap) * 3 - iconGap);
this._location.x2 -= (iconSize + iconGap) * 3;
}
var y = this._location.y;
var iconStyle = {
zlevel: this.getZlevelBase(),
z: this.getZBase() + 1,
style: {
iconType: 'timelineControl',
symbol: 'last',
x: x,
y: y,
width: iconSize,
height: iconSize,
brushType: 'stroke',
color: controlStyle.normal.color,
strokeColor: controlStyle.normal.color,
lineWidth: lineStyle.width
},
highlightStyle: {
color: controlStyle.emphasis.color,
strokeColor: controlStyle.emphasis.color,
lineWidth: lineStyle.width + 1
},
clickable: true
};
this._ctrLastShape = new IconShape(iconStyle);
this._ctrLastShape.onclick = function () {
self.last();
};
this.shapeList.push(this._ctrLastShape);
x += iconSize + iconGap;
this._ctrPlayShape = new IconShape(zrUtil.clone(iconStyle));
this._ctrPlayShape.style.brushType = 'fill';
this._ctrPlayShape.style.symbol = 'play';
this._ctrPlayShape.style.status = this.timelineOption.autoPlay ? 'playing' : 'stop';
this._ctrPlayShape.style.x = x;
this._ctrPlayShape.onclick = function () {
if (self._ctrPlayShape.style.status === 'stop') {
self.play();
} else {
self.stop();
}
};
this.shapeList.push(this._ctrPlayShape);
x += iconSize + iconGap;
this._ctrNextShape = new IconShape(zrUtil.clone(iconStyle));
this._ctrNextShape.style.symbol = 'next';
this._ctrNextShape.style.x = x;
this._ctrNextShape.onclick = function () {
self.next();
};
this.shapeList.push(this._ctrNextShape);
},
_buildChain: function () {
var timelineOption = this.timelineOption;
var lineStyle = timelineOption.lineStyle;
this._timelineShae = {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
style: {
x: this._location.x,
y: this.subPixelOptimize(this._location.y, lineStyle.width),
width: this._location.x2 - this._location.x,
height: this._location.height,
chainPoint: this._chainPoint,
brushType: 'both',
strokeColor: lineStyle.color,
lineWidth: lineStyle.width,
lineType: lineStyle.type
},
hoverable: false,
clickable: true,
onclick: this._onclick
};
this._timelineShae = new ChainShape(this._timelineShae);
this.shapeList.push(this._timelineShae);
},
_buildHandle: function () {
var curPoint = this._chainPoint[this.currentIndex];
var symbolSize = curPoint.symbolSize + 1;
symbolSize = symbolSize < 5 ? 5 : symbolSize;
this._handleShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase() + 1,
hoverable: false,
draggable: true,
style: {
iconType: 'diamond',
n: curPoint.n,
x: curPoint.x - symbolSize,
y: this._location.y + this._location.height / 4 - symbolSize,
width: symbolSize * 2,
height: symbolSize * 2,
brushType: 'both',
textPosition: 'specific',
textX: curPoint.x,
textY: this._location.y - this._location.height / 4,
textAlign: 'center',
textBaseline: 'middle'
},
highlightStyle: {},
ondrift: this._ondrift,
ondragend: this._ondragend
};
this._handleShape = new IconShape(this._handleShape);
this.shapeList.push(this._handleShape);
},
_syncHandleShape: function () {
if (!this.timelineOption.show) {
return;
}
var timelineOption = this.timelineOption;
var cpStyle = timelineOption.checkpointStyle;
var curPoint = this._chainPoint[this.currentIndex];
this._handleShape.style.text = cpStyle.label.show ? curPoint.name : '';
this._handleShape.style.textFont = curPoint.textFont;
this._handleShape.style.n = curPoint.n;
if (cpStyle.symbol === 'auto') {
this._handleShape.style.iconType = curPoint.symbol != 'none' ? curPoint.symbol : 'diamond';
} else {
this._handleShape.style.iconType = cpStyle.symbol;
if (cpStyle.symbol.match('star')) {
this._handleShape.style.n = cpStyle.symbol.replace('star', '') - 0 || 5;
this._handleShape.style.iconType = 'star';
}
}
var symbolSize;
if (cpStyle.symbolSize === 'auto') {
symbolSize = curPoint.symbolSize + 2;
symbolSize = symbolSize < 5 ? 5 : symbolSize;
} else {
symbolSize = cpStyle.symbolSize - 0;
}
this._handleShape.style.color = cpStyle.color === 'auto' ? curPoint.color ? curPoint.color : timelineOption.controlStyle.emphasis.color : cpStyle.color;
this._handleShape.style.textColor = cpStyle.label.textStyle.color === 'auto' ? this._handleShape.style.color : cpStyle.label.textStyle.color;
this._handleShape.highlightStyle.strokeColor = this._handleShape.style.strokeColor = cpStyle.borderColor === 'auto' ? curPoint.borderColor ? curPoint.borderColor : '#fff' : cpStyle.borderColor;
this._handleShape.style.lineWidth = cpStyle.borderWidth === 'auto' ? curPoint.borderWidth ? curPoint.borderWidth : 0 : cpStyle.borderWidth - 0;
this._handleShape.highlightStyle.lineWidth = this._handleShape.style.lineWidth + 1;
this.zr.animate(this._handleShape.id, 'style').when(500, {
x: curPoint.x - symbolSize,
textX: curPoint.x,
y: this._location.y + this._location.height / 4 - symbolSize,
width: symbolSize * 2,
height: symbolSize * 2
}).start('ExponentialOut');
},
_findChainIndex: function (x) {
var chainPoint = this._chainPoint;
var len = chainPoint.length;
if (x <= chainPoint[0].x) {
return 0;
} else if (x >= chainPoint[len - 1].x) {
return len - 1;
}
for (var i = 0; i < len - 1; i++) {
if (x >= chainPoint[i].x && x <= chainPoint[i + 1].x) {
return Math.abs(x - chainPoint[i].x) < Math.abs(x - chainPoint[i + 1].x) ? i : i + 1;
}
}
},
__onclick: function (param) {
var x = zrEvent.getX(param.event);
var newIndex = this._findChainIndex(x);
if (newIndex === this.currentIndex) {
return true;
}
this.currentIndex = newIndex;
this.timelineOption.autoPlay && this.stop();
clearTimeout(this.playTicket);
this._onFrame();
},
__ondrift: function (shape, dx) {
this.timelineOption.autoPlay && this.stop();
var chainPoint = this._chainPoint;
var len = chainPoint.length;
var newIndex;
if (shape.style.x + dx <= chainPoint[0].x - chainPoint[0].symbolSize) {
shape.style.x = chainPoint[0].x - chainPoint[0].symbolSize;
newIndex = 0;
} else if (shape.style.x + dx >= chainPoint[len - 1].x - chainPoint[len - 1].symbolSize) {
shape.style.x = chainPoint[len - 1].x - chainPoint[len - 1].symbolSize;
newIndex = len - 1;
} else {
shape.style.x += dx;
newIndex = this._findChainIndex(shape.style.x);
}
var curPoint = chainPoint[newIndex];
var symbolSize = curPoint.symbolSize + 2;
shape.style.iconType = curPoint.symbol;
shape.style.n = curPoint.n;
shape.style.textX = shape.style.x + symbolSize / 2;
shape.style.y = this._location.y + this._location.height / 4 - symbolSize;
shape.style.width = symbolSize * 2;
shape.style.height = symbolSize * 2;
shape.style.text = curPoint.name;
if (newIndex === this.currentIndex) {
return true;
}
this.currentIndex = newIndex;
if (this.timelineOption.realtime) {
clearTimeout(this.playTicket);
var self = this;
this.playTicket = setTimeout(function () {
self._setCurrentOption();
}, 200);
}
return true;
},
__ondragend: function () {
this.isDragend = true;
},
ondragend: function (param, status) {
if (!this.isDragend || !param.target) {
return;
}
!this.timelineOption.realtime && this._setCurrentOption();
status.dragOut = true;
status.dragIn = true;
status.needRefresh = false;
this.isDragend = false;
this._syncHandleShape();
return;
},
last: function () {
this.timelineOption.autoPlay && this.stop();
this.currentIndex -= 1;
if (this.currentIndex < 0) {
this.currentIndex = this.timelineOption.data.length - 1;
}
this._onFrame();
return this.currentIndex;
},
next: function () {
this.timelineOption.autoPlay && this.stop();
this.currentIndex += 1;
if (this.currentIndex >= this.timelineOption.data.length) {
this.currentIndex = 0;
}
this._onFrame();
return this.currentIndex;
},
play: function (targetIndex, autoPlay) {
if (this._ctrPlayShape && this._ctrPlayShape.style.status != 'playing') {
this._ctrPlayShape.style.status = 'playing';
this.zr.modShape(this._ctrPlayShape.id);
this.zr.refreshNextFrame();
}
this.timelineOption.autoPlay = autoPlay != null ? autoPlay : true;
if (!this.timelineOption.autoPlay) {
clearTimeout(this.playTicket);
}
this.currentIndex = targetIndex != null ? targetIndex : this.currentIndex + 1;
if (this.currentIndex >= this.timelineOption.data.length) {
this.currentIndex = 0;
}
this._onFrame();
return this.currentIndex;
},
stop: function () {
if (this._ctrPlayShape && this._ctrPlayShape.style.status != 'stop') {
this._ctrPlayShape.style.status = 'stop';
this.zr.modShape(this._ctrPlayShape.id);
this.zr.refreshNextFrame();
}
this.timelineOption.autoPlay = false;
clearTimeout(this.playTicket);
return this.currentIndex;
},
resize: function () {
if (this.timelineOption.show) {
this.clear();
this._buildShape();
this._syncHandleShape();
}
},
setTheme: function (needRefresh) {
this.timelineOption = this.reformOption(zrUtil.clone(this.option.timeline));
this.timelineOption.label.textStyle = this.getTextStyle(this.timelineOption.label.textStyle);
this.timelineOption.checkpointStyle.label.textStyle = this.getTextStyle(this.timelineOption.checkpointStyle.label.textStyle);
if (!this.myChart.canvasSupported) {
this.timelineOption.realtime = false;
}
if (this.timelineOption.show && needRefresh) {
this.clear();
this._buildShape();
this._syncHandleShape();
}
},
onbeforDispose: function () {
clearTimeout(this.playTicket);
}
};
function timelineControl(ctx, style) {
var lineWidth = 2;
var x = style.x + lineWidth;
var y = style.y + lineWidth + 2;
var width = style.width - lineWidth;
var height = style.height - lineWidth;
var symbol = style.symbol;
if (symbol === 'last') {
ctx.moveTo(x + width - 2, y + height / 3);
ctx.lineTo(x + width - 2, y);
ctx.lineTo(x + 2, y + height / 2);
ctx.lineTo(x + width - 2, y + height);
ctx.lineTo(x + width - 2, y + height / 3 * 2);
ctx.moveTo(x, y);
ctx.lineTo(x, y);
} else if (symbol === 'next') {
ctx.moveTo(x + 2, y + height / 3);
ctx.lineTo(x + 2, y);
ctx.lineTo(x + width - 2, y + height / 2);
ctx.lineTo(x + 2, y + height);
ctx.lineTo(x + 2, y + height / 3 * 2);
ctx.moveTo(x, y);
ctx.lineTo(x, y);
} else if (symbol === 'play') {
if (style.status === 'stop') {
ctx.moveTo(x + 2, y);
ctx.lineTo(x + width - 2, y + height / 2);
ctx.lineTo(x + 2, y + height);
ctx.lineTo(x + 2, y);
} else {
var delta = style.brushType === 'both' ? 2 : 3;
ctx.rect(x + 2, y, delta, height);
ctx.rect(x + width - delta - 2, y, delta, height);
}
} else if (symbol.match('image')) {
var imageLocation = '';
imageLocation = symbol.replace(new RegExp('^image:\\/\\/'), '');
symbol = IconShape.prototype.iconLibrary.image;
symbol(ctx, {
x: x,
y: y,
width: width,
height: height,
image: imageLocation
});
}
}
IconShape.prototype.iconLibrary['timelineControl'] = timelineControl;
zrUtil.inherits(Timeline, Base);
require('../component').define('timeline', Timeline);
return Timeline;
});define('zrender/shape/Image', [
'require',
'./Base',
'../tool/util'
], function (require) {
var Base = require('./Base');
var ZImage = function (options) {
Base.call(this, options);
};
ZImage.prototype = {
type: 'image',
brush: function (ctx, isHighlight, refreshNextFrame) {
var style = this.style || {};
if (isHighlight) {
style = this.getHighlightStyle(style, this.highlightStyle || {});
}
var image = style.image;
var self = this;
if (!this._imageCache) {
this._imageCache = {};
}
if (typeof image === 'string') {
var src = image;
if (this._imageCache[src]) {
image = this._imageCache[src];
} else {
image = new Image();
image.onload = function () {
image.onload = null;
self.modSelf();
refreshNextFrame();
};
image.src = src;
this._imageCache[src] = image;
}
}
if (image) {
if (image.nodeName.toUpperCase() == 'IMG') {
if (window.ActiveXObject) {
if (image.readyState != 'complete') {
return;
}
} else {
if (!image.complete) {
return;
}
}
}
var width = style.width || image.width;
var height = style.height || image.height;
var x = style.x;
var y = style.y;
if (!image.width || !image.height) {
return;
}
ctx.save();
this.doClip(ctx);
this.setContext(ctx, style);
this.setTransform(ctx);
if (style.sWidth && style.sHeight) {
var sx = style.sx || 0;
var sy = style.sy || 0;
ctx.drawImage(image, sx, sy, style.sWidth, style.sHeight, x, y, width, height);
} else if (style.sx && style.sy) {
var sx = style.sx;
var sy = style.sy;
var sWidth = width - sx;
var sHeight = height - sy;
ctx.drawImage(image, sx, sy, sWidth, sHeight, x, y, width, height);
} else {
ctx.drawImage(image, x, y, width, height);
}
if (!style.width) {
style.width = width;
}
if (!style.height) {
style.height = height;
}
if (!this.style.width) {
this.style.width = width;
}
if (!this.style.height) {
this.style.height = height;
}
this.drawText(ctx, style, this.style);
ctx.restore();
}
},
getRect: function (style) {
return {
x: style.x,
y: style.y,
width: style.width,
height: style.height
};
},
clearCache: function () {
this._imageCache = {};
}
};
require('../tool/util').inherits(ZImage, Base);
return ZImage;
});define('zrender/loadingEffect/Bar', [
'require',
'./Base',
'../tool/util',
'../tool/color',
'../shape/Rectangle'
], function (require) {
var Base = require('./Base');
var util = require('../tool/util');
var zrColor = require('../tool/color');
var RectangleShape = require('../shape/Rectangle');
function Bar(options) {
Base.call(this, options);
}
util.inherits(Bar, Base);
Bar.prototype._start = function (addShapeHandle, refreshHandle) {
var options = util.merge(this.options, {
textStyle: { color: '#888' },
backgroundColor: 'rgba(250, 250, 250, 0.8)',
effectOption: {
x: 0,
y: this.canvasHeight / 2 - 30,
width: this.canvasWidth,
height: 5,
brushType: 'fill',
timeInterval: 100
}
});
var textShape = this.createTextShape(options.textStyle);
var background = this.createBackgroundShape(options.backgroundColor);
var effectOption = options.effectOption;
var barShape = new RectangleShape({ highlightStyle: util.clone(effectOption) });
barShape.highlightStyle.color = effectOption.color || zrColor.getLinearGradient(effectOption.x, effectOption.y, effectOption.x + effectOption.width, effectOption.y + effectOption.height, [
[
0,
'#ff6400'
],
[
0.5,
'#ffe100'
],
[
1,
'#b1ff00'
]
]);
if (options.progress != null) {
addShapeHandle(background);
barShape.highlightStyle.width = this.adjust(options.progress, [
0,
1
]) * options.effectOption.width;
addShapeHandle(barShape);
addShapeHandle(textShape);
refreshHandle();
return;
} else {
barShape.highlightStyle.width = 0;
return setInterval(function () {
addShapeHandle(background);
if (barShape.highlightStyle.width < effectOption.width) {
barShape.highlightStyle.width += 8;
} else {
barShape.highlightStyle.width = 0;
}
addShapeHandle(barShape);
addShapeHandle(textShape);
refreshHandle();
}, effectOption.timeInterval);
}
};
return Bar;
});define('zrender/loadingEffect/Bubble', [
'require',
'./Base',
'../tool/util',
'../tool/color',
'../shape/Circle'
], function (require) {
var Base = require('./Base');
var util = require('../tool/util');
var zrColor = require('../tool/color');
var CircleShape = require('../shape/Circle');
function Bubble(options) {
Base.call(this, options);
}
util.inherits(Bubble, Base);
Bubble.prototype._start = function (addShapeHandle, refreshHandle) {
var options = util.merge(this.options, {
textStyle: { color: '#888' },
backgroundColor: 'rgba(250, 250, 250, 0.8)',
effect: {
n: 50,
lineWidth: 2,
brushType: 'stroke',
color: 'random',
timeInterval: 100
}
});
var textShape = this.createTextShape(options.textStyle);
var background = this.createBackgroundShape(options.backgroundColor);
var effectOption = options.effect;
var n = effectOption.n;
var brushType = effectOption.brushType;
var lineWidth = effectOption.lineWidth;
var shapeList = [];
var canvasWidth = this.canvasWidth;
var canvasHeight = this.canvasHeight;
for (var i = 0; i < n; i++) {
var color = effectOption.color == 'random' ? zrColor.alpha(zrColor.random(), 0.3) : effectOption.color;
shapeList[i] = new CircleShape({
highlightStyle: {
x: Math.ceil(Math.random() * canvasWidth),
y: Math.ceil(Math.random() * canvasHeight),
r: Math.ceil(Math.random() * 40),
brushType: brushType,
color: color,
strokeColor: color,
lineWidth: lineWidth
},
animationY: Math.ceil(Math.random() * 20)
});
}
return setInterval(function () {
addShapeHandle(background);
for (var i = 0; i < n; i++) {
var style = shapeList[i].highlightStyle;
if (style.y - shapeList[i].animationY + style.r <= 0) {
shapeList[i].highlightStyle.y = canvasHeight + style.r;
shapeList[i].highlightStyle.x = Math.ceil(Math.random() * canvasWidth);
}
shapeList[i].highlightStyle.y -= shapeList[i].animationY;
addShapeHandle(shapeList[i]);
}
addShapeHandle(textShape);
refreshHandle();
}, effectOption.timeInterval);
};
return Bubble;
});define('zrender/loadingEffect/DynamicLine', [
'require',
'./Base',
'../tool/util',
'../tool/color',
'../shape/Line'
], function (require) {
var Base = require('./Base');
var util = require('../tool/util');
var zrColor = require('../tool/color');
var LineShape = require('../shape/Line');
function DynamicLine(options) {
Base.call(this, options);
}
util.inherits(DynamicLine, Base);
DynamicLine.prototype._start = function (addShapeHandle, refreshHandle) {
var options = util.merge(this.options, {
textStyle: { color: '#fff' },
backgroundColor: 'rgba(0, 0, 0, 0.8)',
effectOption: {
n: 30,
lineWidth: 1,
color: 'random',
timeInterval: 100
}
});
var textShape = this.createTextShape(options.textStyle);
var background = this.createBackgroundShape(options.backgroundColor);
var effectOption = options.effectOption;
var n = effectOption.n;
var lineWidth = effectOption.lineWidth;
var shapeList = [];
var canvasWidth = this.canvasWidth;
var canvasHeight = this.canvasHeight;
for (var i = 0; i < n; i++) {
var xStart = -Math.ceil(Math.random() * 1000);
var len = Math.ceil(Math.random() * 400);
var pos = Math.ceil(Math.random() * canvasHeight);
var color = effectOption.color == 'random' ? zrColor.random() : effectOption.color;
shapeList[i] = new LineShape({
highlightStyle: {
xStart: xStart,
yStart: pos,
xEnd: xStart + len,
yEnd: pos,
strokeColor: color,
lineWidth: lineWidth
},
animationX: Math.ceil(Math.random() * 100),
len: len
});
}
return setInterval(function () {
addShapeHandle(background);
for (var i = 0; i < n; i++) {
var style = shapeList[i].highlightStyle;
if (style.xStart >= canvasWidth) {
shapeList[i].len = Math.ceil(Math.random() * 400);
style.xStart = -400;
style.xEnd = -400 + shapeList[i].len;
style.yStart = Math.ceil(Math.random() * canvasHeight);
style.yEnd = style.yStart;
}
style.xStart += shapeList[i].animationX;
style.xEnd += shapeList[i].animationX;
addShapeHandle(shapeList[i]);
}
addShapeHandle(textShape);
refreshHandle();
}, effectOption.timeInterval);
};
return DynamicLine;
});define('zrender/loadingEffect/Ring', [
'require',
'./Base',
'../tool/util',
'../tool/color',
'../shape/Ring',
'../shape/Sector'
], function (require) {
var Base = require('./Base');
var util = require('../tool/util');
var zrColor = require('../tool/color');
var RingShape = require('../shape/Ring');
var SectorShape = require('../shape/Sector');
function Ring(options) {
Base.call(this, options);
}
util.inherits(Ring, Base);
Ring.prototype._start = function (addShapeHandle, refreshHandle) {
var options = util.merge(this.options, {
textStyle: { color: '#07a' },
backgroundColor: 'rgba(250, 250, 250, 0.8)',
effect: {
x: this.canvasWidth / 2,
y: this.canvasHeight / 2,
r0: 60,
r: 100,
color: '#bbdcff',
brushType: 'fill',
textPosition: 'inside',
textFont: 'normal 30px verdana',
textColor: 'rgba(30, 144, 255, 0.6)',
timeInterval: 100
}
});
var effectOption = options.effect;
var textStyle = options.textStyle;
if (textStyle.x == null) {
textStyle.x = effectOption.x;
}
if (textStyle.y == null) {
textStyle.y = effectOption.y + (effectOption.r0 + effectOption.r) / 2 - 5;
}
var textShape = this.createTextShape(options.textStyle);
var background = this.createBackgroundShape(options.backgroundColor);
var x = effectOption.x;
var y = effectOption.y;
var r0 = effectOption.r0 + 6;
var r = effectOption.r - 6;
var color = effectOption.color;
var darkColor = zrColor.lift(color, 0.1);
var shapeRing = new RingShape({ highlightStyle: util.clone(effectOption) });
var shapeList = [];
var clolrList = zrColor.getGradientColors([
'#ff6400',
'#ffe100',
'#97ff00'
], 25);
var preAngle = 15;
var endAngle = 240;
for (var i = 0; i < 16; i++) {
shapeList.push(new SectorShape({
highlightStyle: {
x: x,
y: y,
r0: r0,
r: r,
startAngle: endAngle - preAngle,
endAngle: endAngle,
brushType: 'fill',
color: darkColor
},
_color: zrColor.getLinearGradient(x + r0 * Math.cos(endAngle, true), y - r0 * Math.sin(endAngle, true), x + r0 * Math.cos(endAngle - preAngle, true), y - r0 * Math.sin(endAngle - preAngle, true), [
[
0,
clolrList[i * 2]
],
[
1,
clolrList[i * 2 + 1]
]
])
}));
endAngle -= preAngle;
}
endAngle = 360;
for (var i = 0; i < 4; i++) {
shapeList.push(new SectorShape({
highlightStyle: {
x: x,
y: y,
r0: r0,
r: r,
startAngle: endAngle - preAngle,
endAngle: endAngle,
brushType: 'fill',
color: darkColor
},
_color: zrColor.getLinearGradient(x + r0 * Math.cos(endAngle, true), y - r0 * Math.sin(endAngle, true), x + r0 * Math.cos(endAngle - preAngle, true), y - r0 * Math.sin(endAngle - preAngle, true), [
[
0,
clolrList[i * 2 + 32]
],
[
1,
clolrList[i * 2 + 33]
]
])
}));
endAngle -= preAngle;
}
var n = 0;
if (options.progress != null) {
addShapeHandle(background);
n = this.adjust(options.progress, [
0,
1
]).toFixed(2) * 100 / 5;
shapeRing.highlightStyle.text = n * 5 + '%';
addShapeHandle(shapeRing);
for (var i = 0; i < 20; i++) {
shapeList[i].highlightStyle.color = i < n ? shapeList[i]._color : darkColor;
addShapeHandle(shapeList[i]);
}
addShapeHandle(textShape);
refreshHandle();
return;
}
return setInterval(function () {
addShapeHandle(background);
n += n >= 20 ? -20 : 1;
addShapeHandle(shapeRing);
for (var i = 0; i < 20; i++) {
shapeList[i].highlightStyle.color = i < n ? shapeList[i]._color : darkColor;
addShapeHandle(shapeList[i]);
}
addShapeHandle(textShape);
refreshHandle();
}, effectOption.timeInterval);
};
return Ring;
});define('zrender/loadingEffect/Spin', [
'require',
'./Base',
'../tool/util',
'../tool/color',
'../tool/area',
'../shape/Sector'
], function (require) {
var Base = require('./Base');
var util = require('../tool/util');
var zrColor = require('../tool/color');
var zrArea = require('../tool/area');
var SectorShape = require('../shape/Sector');
function Spin(options) {
Base.call(this, options);
}
util.inherits(Spin, Base);
Spin.prototype._start = function (addShapeHandle, refreshHandle) {
var options = util.merge(this.options, {
textStyle: {
color: '#fff',
textAlign: 'start'
},
backgroundColor: 'rgba(0, 0, 0, 0.8)'
});
var textShape = this.createTextShape(options.textStyle);
var textGap = 10;
var textWidth = zrArea.getTextWidth(textShape.highlightStyle.text, textShape.highlightStyle.textFont);
var textHeight = zrArea.getTextHeight(textShape.highlightStyle.text, textShape.highlightStyle.textFont);
var effectOption = util.merge(this.options.effect || {}, {
r0: 9,
r: 15,
n: 18,
color: '#fff',
timeInterval: 100
});
var location = this.getLocation(this.options.textStyle, textWidth + textGap + effectOption.r * 2, Math.max(effectOption.r * 2, textHeight));
effectOption.x = location.x + effectOption.r;
effectOption.y = textShape.highlightStyle.y = location.y + location.height / 2;
textShape.highlightStyle.x = effectOption.x + effectOption.r + textGap;
var background = this.createBackgroundShape(options.backgroundColor);
var n = effectOption.n;
var x = effectOption.x;
var y = effectOption.y;
var r0 = effectOption.r0;
var r = effectOption.r;
var color = effectOption.color;
var shapeList = [];
var preAngle = Math.round(180 / n);
for (var i = 0; i < n; i++) {
shapeList[i] = new SectorShape({
highlightStyle: {
x: x,
y: y,
r0: r0,
r: r,
startAngle: preAngle * i * 2,
endAngle: preAngle * i * 2 + preAngle,
color: zrColor.alpha(color, (i + 1) / n),
brushType: 'fill'
}
});
}
var pos = [
0,
x,
y
];
return setInterval(function () {
addShapeHandle(background);
pos[0] -= 0.3;
for (var i = 0; i < n; i++) {
shapeList[i].rotation = pos;
addShapeHandle(shapeList[i]);
}
addShapeHandle(textShape);
refreshHandle();
}, effectOption.timeInterval);
};
return Spin;
});define('zrender/loadingEffect/Whirling', [
'require',
'./Base',
'../tool/util',
'../tool/area',
'../shape/Ring',
'../shape/Droplet',
'../shape/Circle'
], function (require) {
var Base = require('./Base');
var util = require('../tool/util');
var zrArea = require('../tool/area');
var RingShape = require('../shape/Ring');
var DropletShape = require('../shape/Droplet');
var CircleShape = require('../shape/Circle');
function Whirling(options) {
Base.call(this, options);
}
util.inherits(Whirling, Base);
Whirling.prototype._start = function (addShapeHandle, refreshHandle) {
var options = util.merge(this.options, {
textStyle: {
color: '#888',
textAlign: 'start'
},
backgroundColor: 'rgba(250, 250, 250, 0.8)'
});
var textShape = this.createTextShape(options.textStyle);
var textGap = 10;
var textWidth = zrArea.getTextWidth(textShape.highlightStyle.text, textShape.highlightStyle.textFont);
var textHeight = zrArea.getTextHeight(textShape.highlightStyle.text, textShape.highlightStyle.textFont);
var effectOption = util.merge(this.options.effect || {}, {
r: 18,
colorIn: '#fff',
colorOut: '#555',
colorWhirl: '#6cf',
timeInterval: 50
});
var location = this.getLocation(this.options.textStyle, textWidth + textGap + effectOption.r * 2, Math.max(effectOption.r * 2, textHeight));
effectOption.x = location.x + effectOption.r;
effectOption.y = textShape.highlightStyle.y = location.y + location.height / 2;
textShape.highlightStyle.x = effectOption.x + effectOption.r + textGap;
var background = this.createBackgroundShape(options.backgroundColor);
var droplet = new DropletShape({
highlightStyle: {
a: Math.round(effectOption.r / 2),
b: Math.round(effectOption.r - effectOption.r / 6),
brushType: 'fill',
color: effectOption.colorWhirl
}
});
var circleIn = new CircleShape({
highlightStyle: {
r: Math.round(effectOption.r / 6),
brushType: 'fill',
color: effectOption.colorIn
}
});
var circleOut = new RingShape({
highlightStyle: {
r0: Math.round(effectOption.r - effectOption.r / 3),
r: effectOption.r,
brushType: 'fill',
color: effectOption.colorOut
}
});
var pos = [
0,
effectOption.x,
effectOption.y
];
droplet.highlightStyle.x = circleIn.highlightStyle.x = circleOut.highlightStyle.x = pos[1];
droplet.highlightStyle.y = circleIn.highlightStyle.y = circleOut.highlightStyle.y = pos[2];
return setInterval(function () {
addShapeHandle(background);
addShapeHandle(circleOut);
pos[0] -= 0.3;
droplet.rotation = pos;
addShapeHandle(droplet);
addShapeHandle(circleIn);
addShapeHandle(textShape);
refreshHandle();
}, effectOption.timeInterval);
};
return Whirling;
});define('echarts/theme/macarons', [], function () {
var theme = {
color: [
'#2ec7c9',
'#b6a2de',
'#5ab1ef',
'#ffb980',
'#d87a80',
'#8d98b3',
'#e5cf0d',
'#97b552',
'#95706d',
'#dc69aa',
'#07a2a4',
'#9a7fd1',
'#588dd5',
'#f5994e',
'#c05050',
'#59678c',
'#c9ab00',
'#7eb00a',
'#6f5553',
'#c14089'
],
title: {
textStyle: {
fontWeight: 'normal',
color: '#008acd'
}
},
dataRange: {
itemWidth: 15,
color: [
'#5ab1ef',
'#e0ffff'
]
},
toolbox: {
color: [
'#1e90ff',
'#1e90ff',
'#1e90ff',
'#1e90ff'
],
effectiveColor: '#ff4500'
},
tooltip: {
backgroundColor: 'rgba(50,50,50,0.5)',
axisPointer: {
type: 'line',
lineStyle: { color: '#008acd' },
crossStyle: { color: '#008acd' },
shadowStyle: { color: 'rgba(200,200,200,0.2)' }
}
},
dataZoom: {
dataBackgroundColor: '#efefff',
fillerColor: 'rgba(182,162,222,0.2)',
handleColor: '#008acd'
},
grid: { borderColor: '#eee' },
categoryAxis: {
axisLine: { lineStyle: { color: '#008acd' } },
splitLine: { lineStyle: { color: ['#eee'] } }
},
valueAxis: {
axisLine: { lineStyle: { color: '#008acd' } },
splitArea: {
show: true,
areaStyle: {
color: [
'rgba(250,250,250,0.1)',
'rgba(200,200,200,0.1)'
]
}
},
splitLine: { lineStyle: { color: ['#eee'] } }
},
polar: {
axisLine: { lineStyle: { color: '#ddd' } },
splitArea: {
show: true,
areaStyle: {
color: [
'rgba(250,250,250,0.2)',
'rgba(200,200,200,0.2)'
]
}
},
splitLine: { lineStyle: { color: '#ddd' } }
},
timeline: {
lineStyle: { color: '#008acd' },
controlStyle: {
normal: { color: '#008acd' },
emphasis: { color: '#008acd' }
},
symbol: 'emptyCircle',
symbolSize: 3
},
bar: {
itemStyle: {
normal: { barBorderRadius: 5 },
emphasis: { barBorderRadius: 5 }
}
},
line: {
smooth: true,
symbol: 'emptyCircle',
symbolSize: 3
},
k: {
itemStyle: {
normal: {
color: '#d87a80',
color0: '#2ec7c9',
lineStyle: {
color: '#d87a80',
color0: '#2ec7c9'
}
}
}
},
scatter: {
symbol: 'circle',
symbolSize: 4
},
radar: {
symbol: 'emptyCircle',
symbolSize: 3
},
map: {
itemStyle: {
normal: {
areaStyle: { color: '#ddd' },
label: { textStyle: { color: '#d87a80' } }
},
emphasis: { areaStyle: { color: '#fe994e' } }
}
},
force: { itemStyle: { normal: { linkStyle: { color: '#1e90ff' } } } },
chord: {
itemStyle: {
normal: {
borderWidth: 1,
borderColor: 'rgba(128, 128, 128, 0.5)',
chordStyle: { lineStyle: { color: 'rgba(128, 128, 128, 0.5)' } }
},
emphasis: {
borderWidth: 1,
borderColor: 'rgba(128, 128, 128, 0.5)',
chordStyle: { lineStyle: { color: 'rgba(128, 128, 128, 0.5)' } }
}
}
},
gauge: {
axisLine: {
lineStyle: {
color: [
[
0.2,
'#2ec7c9'
],
[
0.8,
'#5ab1ef'
],
[
1,
'#d87a80'
]
],
width: 10
}
},
axisTick: {
splitNumber: 10,
length: 15,
lineStyle: { color: 'auto' }
},
splitLine: {
length: 22,
lineStyle: { color: 'auto' }
},
pointer: { width: 5 }
},
textStyle: { fontFamily: '微软雅黑, Arial, Verdana, sans-serif' }
};
return theme;
});define('echarts/theme/infographic', [], function () {
var theme = {
color: [
'#C1232B',
'#B5C334',
'#FCCE10',
'#E87C25',
'#27727B',
'#FE8463',
'#9BCA63',
'#FAD860',
'#F3A43B',
'#60C0DD',
'#D7504B',
'#C6E579',
'#F4E001',
'#F0805A',
'#26C0C0'
],
title: {
textStyle: {
fontWeight: 'normal',
color: '#27727B'
}
},
dataRange: {
x: 'right',
y: 'center',
itemWidth: 5,
itemHeight: 25,
color: [
'#C1232B',
'#FCCE10'
]
},
toolbox: {
color: [
'#C1232B',
'#B5C334',
'#FCCE10',
'#E87C25',
'#27727B',
'#FE8463',
'#9BCA63',
'#FAD860',
'#F3A43B',
'#60C0DD'
],
effectiveColor: '#ff4500'
},
tooltip: {
backgroundColor: 'rgba(50,50,50,0.5)',
axisPointer: {
type: 'line',
lineStyle: {
color: '#27727B',
type: 'dashed'
},
crossStyle: { color: '#27727B' },
shadowStyle: { color: 'rgba(200,200,200,0.3)' }
}
},
dataZoom: {
dataBackgroundColor: 'rgba(181,195,52,0.3)',
fillerColor: 'rgba(181,195,52,0.2)',
handleColor: '#27727B'
},
grid: { borderWidth: 0 },
categoryAxis: {
axisLine: { lineStyle: { color: '#27727B' } },
splitLine: { show: false }
},
valueAxis: {
axisLine: { show: false },
splitArea: { show: false },
splitLine: {
lineStyle: {
color: ['#ccc'],
type: 'dashed'
}
}
},
polar: {
axisLine: { lineStyle: { color: '#ddd' } },
splitArea: {
show: true,
areaStyle: {
color: [
'rgba(250,250,250,0.2)',
'rgba(200,200,200,0.2)'
]
}
},
splitLine: { lineStyle: { color: '#ddd' } }
},
timeline: {
lineStyle: { color: '#27727B' },
controlStyle: {
normal: { color: '#27727B' },
emphasis: { color: '#27727B' }
},
symbol: 'emptyCircle',
symbolSize: 3
},
line: {
itemStyle: {
normal: {
borderWidth: 2,
borderColor: '#fff',
lineStyle: { width: 3 }
},
emphasis: { borderWidth: 0 }
},
symbol: 'circle',
symbolSize: 3.5
},
k: {
itemStyle: {
normal: {
color: '#C1232B',
color0: '#B5C334',
lineStyle: {
width: 1,
color: '#C1232B',
color0: '#B5C334'
}
}
}
},
scatter: {
itemStyle: {
normal: {
borderWidth: 1,
borderColor: 'rgba(200,200,200,0.5)'
},
emphasis: { borderWidth: 0 }
},
symbol: 'star4',
symbolSize: 4
},
radar: {
symbol: 'emptyCircle',
symbolSize: 3
},
map: {
itemStyle: {
normal: {
areaStyle: { color: '#ddd' },
label: { textStyle: { color: '#C1232B' } }
},
emphasis: {
areaStyle: { color: '#fe994e' },
label: { textStyle: { color: 'rgb(100,0,0)' } }
}
}
},
force: { itemStyle: { normal: { linkStyle: { color: '#27727B' } } } },
chord: {
itemStyle: {
normal: {
borderWidth: 1,
borderColor: 'rgba(128, 128, 128, 0.5)',
chordStyle: { lineStyle: { color: 'rgba(128, 128, 128, 0.5)' } }
},
emphasis: {
borderWidth: 1,
borderColor: 'rgba(128, 128, 128, 0.5)',
chordStyle: { lineStyle: { color: 'rgba(128, 128, 128, 0.5)' } }
}
}
},
gauge: {
center: [
'50%',
'80%'
],
radius: '100%',
startAngle: 180,
endAngle: 0,
axisLine: {
show: true,
lineStyle: {
color: [
[
0.2,
'#B5C334'
],
[
0.8,
'#27727B'
],
[
1,
'#C1232B'
]
],
width: '40%'
}
},
axisTick: {
splitNumber: 2,
length: 5,
lineStyle: { color: '#fff' }
},
axisLabel: {
textStyle: {
color: '#fff',
fontWeight: 'bolder'
}
},
splitLine: {
length: '5%',
lineStyle: { color: '#fff' }
},
pointer: {
width: '40%',
length: '80%',
color: '#fff'
},
title: {
offsetCenter: [
0,
-20
],
textStyle: {
color: 'auto',
fontSize: 20
}
},
detail: {
offsetCenter: [
0,
0
],
textStyle: {
color: 'auto',
fontSize: 40
}
}
},
textStyle: { fontFamily: '微软雅黑, Arial, Verdana, sans-serif' }
};
return theme;
});define('zrender/dep/excanvas', ['require'], function (require) {
if (!document.createElement('canvas').getContext) {
(function () {
var m = Math;
var mr = m.round;
var ms = m.sin;
var mc = m.cos;
var abs = m.abs;
var sqrt = m.sqrt;
var Z = 10;
var Z2 = Z / 2;
var IE_VERSION = +navigator.userAgent.match(/MSIE ([\d.]+)?/)[1];
function getContext() {
return this.context_ || (this.context_ = new CanvasRenderingContext2D_(this));
}
var slice = Array.prototype.slice;
function bind(f, obj, var_args) {
var a = slice.call(arguments, 2);
return function () {
return f.apply(obj, a.concat(slice.call(arguments)));
};
}
function encodeHtmlAttribute(s) {
return String(s).replace(/&/g, '&amp;').replace(/"/g, '&quot;');
}
function addNamespace(doc, prefix, urn) {
if (!doc.namespaces[prefix]) {
doc.namespaces.add(prefix, urn, '#default#VML');
}
}
function addNamespacesAndStylesheet(doc) {
addNamespace(doc, 'g_vml_', 'urn:schemas-microsoft-com:vml');
addNamespace(doc, 'g_o_', 'urn:schemas-microsoft-com:office:office');
if (!doc.styleSheets['ex_canvas_']) {
var ss = doc.createStyleSheet();
ss.owningElement.id = 'ex_canvas_';
ss.cssText = 'canvas{display:inline-block;overflow:hidden;' + 'text-align:left;width:300px;height:150px}';
}
}
addNamespacesAndStylesheet(document);
var G_vmlCanvasManager_ = {
init: function (opt_doc) {
var doc = opt_doc || document;
doc.createElement('canvas');
doc.attachEvent('onreadystatechange', bind(this.init_, this, doc));
},
init_: function (doc) {
var els = doc.getElementsByTagName('canvas');
for (var i = 0; i < els.length; i++) {
this.initElement(els[i]);
}
},
initElement: function (el) {
if (!el.getContext) {
el.getContext = getContext;
addNamespacesAndStylesheet(el.ownerDocument);
el.innerHTML = '';
el.attachEvent('onpropertychange', onPropertyChange);
el.attachEvent('onresize', onResize);
var attrs = el.attributes;
if (attrs.width && attrs.width.specified) {
el.style.width = attrs.width.nodeValue + 'px';
} else {
el.width = el.clientWidth;
}
if (attrs.height && attrs.height.specified) {
el.style.height = attrs.height.nodeValue + 'px';
} else {
el.height = el.clientHeight;
}
}
return el;
}
};
function onPropertyChange(e) {
var el = e.srcElement;
switch (e.propertyName) {
case 'width':
el.getContext().clearRect();
el.style.width = el.attributes.width.nodeValue + 'px';
el.firstChild.style.width = el.clientWidth + 'px';
break;
case 'height':
el.getContext().clearRect();
el.style.height = el.attributes.height.nodeValue + 'px';
el.firstChild.style.height = el.clientHeight + 'px';
break;
}
}
function onResize(e) {
var el = e.srcElement;
if (el.firstChild) {
el.firstChild.style.width = el.clientWidth + 'px';
el.firstChild.style.height = el.clientHeight + 'px';
}
}
G_vmlCanvasManager_.init();
var decToHex = [];
for (var i = 0; i < 16; i++) {
for (var j = 0; j < 16; j++) {
decToHex[i * 16 + j] = i.toString(16) + j.toString(16);
}
}
function createMatrixIdentity() {
return [
[
1,
0,
0
],
[
0,
1,
0
],
[
0,
0,
1
]
];
}
function matrixMultiply(m1, m2) {
var result = createMatrixIdentity();
for (var x = 0; x < 3; x++) {
for (var y = 0; y < 3; y++) {
var sum = 0;
for (var z = 0; z < 3; z++) {
sum += m1[x][z] * m2[z][y];
}
result[x][y] = sum;
}
}
return result;
}
function copyState(o1, o2) {
o2.fillStyle = o1.fillStyle;
o2.lineCap = o1.lineCap;
o2.lineJoin = o1.lineJoin;
o2.lineWidth = o1.lineWidth;
o2.miterLimit = o1.miterLimit;
o2.shadowBlur = o1.shadowBlur;
o2.shadowColor = o1.shadowColor;
o2.shadowOffsetX = o1.shadowOffsetX;
o2.shadowOffsetY = o1.shadowOffsetY;
o2.strokeStyle = o1.strokeStyle;
o2.globalAlpha = o1.globalAlpha;
o2.font = o1.font;
o2.textAlign = o1.textAlign;
o2.textBaseline = o1.textBaseline;
o2.scaleX_ = o1.scaleX_;
o2.scaleY_ = o1.scaleY_;
o2.lineScale_ = o1.lineScale_;
}
var colorData = {
aliceblue: '#F0F8FF',
antiquewhite: '#FAEBD7',
aquamarine: '#7FFFD4',
azure: '#F0FFFF',
beige: '#F5F5DC',
bisque: '#FFE4C4',
black: '#000000',
blanchedalmond: '#FFEBCD',
blueviolet: '#8A2BE2',
brown: '#A52A2A',
burlywood: '#DEB887',
cadetblue: '#5F9EA0',
chartreuse: '#7FFF00',
chocolate: '#D2691E',
coral: '#FF7F50',
cornflowerblue: '#6495ED',
cornsilk: '#FFF8DC',
crimson: '#DC143C',
cyan: '#00FFFF',
darkblue: '#00008B',
darkcyan: '#008B8B',
darkgoldenrod: '#B8860B',
darkgray: '#A9A9A9',
darkgreen: '#006400',
darkgrey: '#A9A9A9',
darkkhaki: '#BDB76B',
darkmagenta: '#8B008B',
darkolivegreen: '#556B2F',
darkorange: '#FF8C00',
darkorchid: '#9932CC',
darkred: '#8B0000',
darksalmon: '#E9967A',
darkseagreen: '#8FBC8F',
darkslateblue: '#483D8B',
darkslategray: '#2F4F4F',
darkslategrey: '#2F4F4F',
darkturquoise: '#00CED1',
darkviolet: '#9400D3',
deeppink: '#FF1493',
deepskyblue: '#00BFFF',
dimgray: '#696969',
dimgrey: '#696969',
dodgerblue: '#1E90FF',
firebrick: '#B22222',
floralwhite: '#FFFAF0',
forestgreen: '#228B22',
gainsboro: '#DCDCDC',
ghostwhite: '#F8F8FF',
gold: '#FFD700',
goldenrod: '#DAA520',
grey: '#808080',
greenyellow: '#ADFF2F',
honeydew: '#F0FFF0',
hotpink: '#FF69B4',
indianred: '#CD5C5C',
indigo: '#4B0082',
ivory: '#FFFFF0',
khaki: '#F0E68C',
lavender: '#E6E6FA',
lavenderblush: '#FFF0F5',
lawngreen: '#7CFC00',
lemonchiffon: '#FFFACD',
lightblue: '#ADD8E6',
lightcoral: '#F08080',
lightcyan: '#E0FFFF',
lightgoldenrodyellow: '#FAFAD2',
lightgreen: '#90EE90',
lightgrey: '#D3D3D3',
lightpink: '#FFB6C1',
lightsalmon: '#FFA07A',
lightseagreen: '#20B2AA',
lightskyblue: '#87CEFA',
lightslategray: '#778899',
lightslategrey: '#778899',
lightsteelblue: '#B0C4DE',
lightyellow: '#FFFFE0',
limegreen: '#32CD32',
linen: '#FAF0E6',
magenta: '#FF00FF',
mediumaquamarine: '#66CDAA',
mediumblue: '#0000CD',
mediumorchid: '#BA55D3',
mediumpurple: '#9370DB',
mediumseagreen: '#3CB371',
mediumslateblue: '#7B68EE',
mediumspringgreen: '#00FA9A',
mediumturquoise: '#48D1CC',
mediumvioletred: '#C71585',
midnightblue: '#191970',
mintcream: '#F5FFFA',
mistyrose: '#FFE4E1',
moccasin: '#FFE4B5',
navajowhite: '#FFDEAD',
oldlace: '#FDF5E6',
olivedrab: '#6B8E23',
orange: '#FFA500',
orangered: '#FF4500',
orchid: '#DA70D6',
palegoldenrod: '#EEE8AA',
palegreen: '#98FB98',
paleturquoise: '#AFEEEE',
palevioletred: '#DB7093',
papayawhip: '#FFEFD5',
peachpuff: '#FFDAB9',
peru: '#CD853F',
pink: '#FFC0CB',
plum: '#DDA0DD',
powderblue: '#B0E0E6',
rosybrown: '#BC8F8F',
royalblue: '#4169E1',
saddlebrown: '#8B4513',
salmon: '#FA8072',
sandybrown: '#F4A460',
seagreen: '#2E8B57',
seashell: '#FFF5EE',
sienna: '#A0522D',
skyblue: '#87CEEB',
slateblue: '#6A5ACD',
slategray: '#708090',
slategrey: '#708090',
snow: '#FFFAFA',
springgreen: '#00FF7F',
steelblue: '#4682B4',
tan: '#D2B48C',
thistle: '#D8BFD8',
tomato: '#FF6347',
turquoise: '#40E0D0',
violet: '#EE82EE',
wheat: '#F5DEB3',
whitesmoke: '#F5F5F5',
yellowgreen: '#9ACD32'
};
function getRgbHslContent(styleString) {
var start = styleString.indexOf('(', 3);
var end = styleString.indexOf(')', start + 1);
var parts = styleString.substring(start + 1, end).split(',');
if (parts.length != 4 || styleString.charAt(3) != 'a') {
parts[3] = 1;
}
return parts;
}
function percent(s) {
return parseFloat(s) / 100;
}
function clamp(v, min, max) {
return Math.min(max, Math.max(min, v));
}
function hslToRgb(parts) {
var r, g, b, h, s, l;
h = parseFloat(parts[0]) / 360 % 360;
if (h < 0)
h++;
s = clamp(percent(parts[1]), 0, 1);
l = clamp(percent(parts[2]), 0, 1);
if (s == 0) {
r = g = b = l;
} else {
var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
var p = 2 * l - q;
r = hueToRgb(p, q, h + 1 / 3);
g = hueToRgb(p, q, h);
b = hueToRgb(p, q, h - 1 / 3);
}
return '#' + decToHex[Math.floor(r * 255)] + decToHex[Math.floor(g * 255)] + decToHex[Math.floor(b * 255)];
}
function hueToRgb(m1, m2, h) {
if (h < 0)
h++;
if (h > 1)
h--;
if (6 * h < 1)
return m1 + (m2 - m1) * 6 * h;
else if (2 * h < 1)
return m2;
else if (3 * h < 2)
return m1 + (m2 - m1) * (2 / 3 - h) * 6;
else
return m1;
}
var processStyleCache = {};
function processStyle(styleString) {
if (styleString in processStyleCache) {
return processStyleCache[styleString];
}
var str, alpha = 1;
styleString = String(styleString);
if (styleString.charAt(0) == '#') {
str = styleString;
} else if (/^rgb/.test(styleString)) {
var parts = getRgbHslContent(styleString);
var str = '#', n;
for (var i = 0; i < 3; i++) {
if (parts[i].indexOf('%') != -1) {
n = Math.floor(percent(parts[i]) * 255);
} else {
n = +parts[i];
}
str += decToHex[clamp(n, 0, 255)];
}
alpha = +parts[3];
} else if (/^hsl/.test(styleString)) {
var parts = getRgbHslContent(styleString);
str = hslToRgb(parts);
alpha = parts[3];
} else {
str = colorData[styleString] || styleString;
}
return processStyleCache[styleString] = {
color: str,
alpha: alpha
};
}
var DEFAULT_STYLE = {
style: 'normal',
variant: 'normal',
weight: 'normal',
size: 12,
family: '微软雅黑'
};
var fontStyleCache = {};
function processFontStyle(styleString) {
if (fontStyleCache[styleString]) {
return fontStyleCache[styleString];
}
var el = document.createElement('div');
var style = el.style;
var fontFamily;
try {
style.font = styleString;
fontFamily = style.fontFamily.split(',')[0];
} catch (ex) {
}
return fontStyleCache[styleString] = {
style: style.fontStyle || DEFAULT_STYLE.style,
variant: style.fontVariant || DEFAULT_STYLE.variant,
weight: style.fontWeight || DEFAULT_STYLE.weight,
size: style.fontSize || DEFAULT_STYLE.size,
family: fontFamily || DEFAULT_STYLE.family
};
}
function getComputedStyle(style, element) {
var computedStyle = {};
for (var p in style) {
computedStyle[p] = style[p];
}
var canvasFontSize = parseFloat(element.currentStyle.fontSize), fontSize = parseFloat(style.size);
if (typeof style.size == 'number') {
computedStyle.size = style.size;
} else if (style.size.indexOf('px') != -1) {
computedStyle.size = fontSize;
} else if (style.size.indexOf('em') != -1) {
computedStyle.size = canvasFontSize * fontSize;
} else if (style.size.indexOf('%') != -1) {
computedStyle.size = canvasFontSize / 100 * fontSize;
} else if (style.size.indexOf('pt') != -1) {
computedStyle.size = fontSize / 0.75;
} else {
computedStyle.size = canvasFontSize;
}
return computedStyle;
}
function buildStyle(style) {
return style.style + ' ' + style.variant + ' ' + style.weight + ' ' + style.size + 'px \'' + style.family + '\'';
}
var lineCapMap = {
'butt': 'flat',
'round': 'round'
};
function processLineCap(lineCap) {
return lineCapMap[lineCap] || 'square';
}
function CanvasRenderingContext2D_(canvasElement) {
this.m_ = createMatrixIdentity();
this.mStack_ = [];
this.aStack_ = [];
this.currentPath_ = [];
this.strokeStyle = '#000';
this.fillStyle = '#000';
this.lineWidth = 1;
this.lineJoin = 'miter';
this.lineCap = 'butt';
this.miterLimit = Z * 1;
this.globalAlpha = 1;
this.font = '12px 微软雅黑';
this.textAlign = 'left';
this.textBaseline = 'alphabetic';
this.canvas = canvasElement;
var cssText = 'width:' + canvasElement.clientWidth + 'px;height:' + canvasElement.clientHeight + 'px;overflow:hidden;position:absolute';
var el = canvasElement.ownerDocument.createElement('div');
el.style.cssText = cssText;
canvasElement.appendChild(el);
var overlayEl = el.cloneNode(false);
overlayEl.style.backgroundColor = '#fff';
overlayEl.style.filter = 'alpha(opacity=0)';
canvasElement.appendChild(overlayEl);
this.element_ = el;
this.scaleX_ = 1;
this.scaleY_ = 1;
this.lineScale_ = 1;
}
var contextPrototype = CanvasRenderingContext2D_.prototype;
contextPrototype.clearRect = function () {
if (this.textMeasureEl_) {
this.textMeasureEl_.removeNode(true);
this.textMeasureEl_ = null;
}
this.element_.innerHTML = '';
};
contextPrototype.beginPath = function () {
this.currentPath_ = [];
};
contextPrototype.moveTo = function (aX, aY) {
var p = getCoords(this, aX, aY);
this.currentPath_.push({
type: 'moveTo',
x: p.x,
y: p.y
});
this.currentX_ = p.x;
this.currentY_ = p.y;
};
contextPrototype.lineTo = function (aX, aY) {
var p = getCoords(this, aX, aY);
this.currentPath_.push({
type: 'lineTo',
x: p.x,
y: p.y
});
this.currentX_ = p.x;
this.currentY_ = p.y;
};
contextPrototype.bezierCurveTo = function (aCP1x, aCP1y, aCP2x, aCP2y, aX, aY) {
var p = getCoords(this, aX, aY);
var cp1 = getCoords(this, aCP1x, aCP1y);
var cp2 = getCoords(this, aCP2x, aCP2y);
bezierCurveTo(this, cp1, cp2, p);
};
function bezierCurveTo(self, cp1, cp2, p) {
self.currentPath_.push({
type: 'bezierCurveTo',
cp1x: cp1.x,
cp1y: cp1.y,
cp2x: cp2.x,
cp2y: cp2.y,
x: p.x,
y: p.y
});
self.currentX_ = p.x;
self.currentY_ = p.y;
}
contextPrototype.quadraticCurveTo = function (aCPx, aCPy, aX, aY) {
var cp = getCoords(this, aCPx, aCPy);
var p = getCoords(this, aX, aY);
var cp1 = {
x: this.currentX_ + 2 / 3 * (cp.x - this.currentX_),
y: this.currentY_ + 2 / 3 * (cp.y - this.currentY_)
};
var cp2 = {
x: cp1.x + (p.x - this.currentX_) / 3,
y: cp1.y + (p.y - this.currentY_) / 3
};
bezierCurveTo(this, cp1, cp2, p);
};
contextPrototype.arc = function (aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) {
aRadius *= Z;
var arcType = aClockwise ? 'at' : 'wa';
var xStart = aX + mc(aStartAngle) * aRadius - Z2;
var yStart = aY + ms(aStartAngle) * aRadius - Z2;
var xEnd = aX + mc(aEndAngle) * aRadius - Z2;
var yEnd = aY + ms(aEndAngle) * aRadius - Z2;
if (xStart == xEnd && !aClockwise) {
xStart += 0.125;
}
var p = getCoords(this, aX, aY);
var pStart = getCoords(this, xStart, yStart);
var pEnd = getCoords(this, xEnd, yEnd);
this.currentPath_.push({
type: arcType,
x: p.x,
y: p.y,
radius: aRadius,
xStart: pStart.x,
yStart: pStart.y,
xEnd: pEnd.x,
yEnd: pEnd.y
});
};
contextPrototype.rect = function (aX, aY, aWidth, aHeight) {
this.moveTo(aX, aY);
this.lineTo(aX + aWidth, aY);
this.lineTo(aX + aWidth, aY + aHeight);
this.lineTo(aX, aY + aHeight);
this.closePath();
};
contextPrototype.strokeRect = function (aX, aY, aWidth, aHeight) {
var oldPath = this.currentPath_;
this.beginPath();
this.moveTo(aX, aY);
this.lineTo(aX + aWidth, aY);
this.lineTo(aX + aWidth, aY + aHeight);
this.lineTo(aX, aY + aHeight);
this.closePath();
this.stroke();
this.currentPath_ = oldPath;
};
contextPrototype.fillRect = function (aX, aY, aWidth, aHeight) {
var oldPath = this.currentPath_;
this.beginPath();
this.moveTo(aX, aY);
this.lineTo(aX + aWidth, aY);
this.lineTo(aX + aWidth, aY + aHeight);
this.lineTo(aX, aY + aHeight);
this.closePath();
this.fill();
this.currentPath_ = oldPath;
};
contextPrototype.createLinearGradient = function (aX0, aY0, aX1, aY1) {
var gradient = new CanvasGradient_('gradient');
gradient.x0_ = aX0;
gradient.y0_ = aY0;
gradient.x1_ = aX1;
gradient.y1_ = aY1;
return gradient;
};
contextPrototype.createRadialGradient = function (aX0, aY0, aR0, aX1, aY1, aR1) {
var gradient = new CanvasGradient_('gradientradial');
gradient.x0_ = aX0;
gradient.y0_ = aY0;
gradient.r0_ = aR0;
gradient.x1_ = aX1;
gradient.y1_ = aY1;
gradient.r1_ = aR1;
return gradient;
};
contextPrototype.drawImage = function (image, var_args) {
var dx, dy, dw, dh, sx, sy, sw, sh;
var oldRuntimeWidth = image.runtimeStyle.width;
var oldRuntimeHeight = image.runtimeStyle.height;
image.runtimeStyle.width = 'auto';
image.runtimeStyle.height = 'auto';
var w = image.width;
var h = image.height;
image.runtimeStyle.width = oldRuntimeWidth;
image.runtimeStyle.height = oldRuntimeHeight;
if (arguments.length == 3) {
dx = arguments[1];
dy = arguments[2];
sx = sy = 0;
sw = dw = w;
sh = dh = h;
} else if (arguments.length == 5) {
dx = arguments[1];
dy = arguments[2];
dw = arguments[3];
dh = arguments[4];
sx = sy = 0;
sw = w;
sh = h;
} else if (arguments.length == 9) {
sx = arguments[1];
sy = arguments[2];
sw = arguments[3];
sh = arguments[4];
dx = arguments[5];
dy = arguments[6];
dw = arguments[7];
dh = arguments[8];
} else {
throw Error('Invalid number of arguments');
}
var d = getCoords(this, dx, dy);
var w2 = sw / 2;
var h2 = sh / 2;
var vmlStr = [];
var W = 10;
var H = 10;
var scaleX = scaleY = 1;
vmlStr.push(' <g_vml_:group', ' coordsize="', Z * W, ',', Z * H, '"', ' coordorigin="0,0"', ' style="width:', W, 'px;height:', H, 'px;position:absolute;');
if (this.m_[0][0] != 1 || this.m_[0][1] || this.m_[1][1] != 1 || this.m_[1][0]) {
var filter = [];
var scaleX = this.scaleX_;
var scaleY = this.scaleY_;
filter.push('M11=', this.m_[0][0] / scaleX, ',', 'M12=', this.m_[1][0] / scaleY, ',', 'M21=', this.m_[0][1] / scaleX, ',', 'M22=', this.m_[1][1] / scaleY, ',', 'Dx=', mr(d.x / Z), ',', 'Dy=', mr(d.y / Z), '');
var max = d;
var c2 = getCoords(this, dx + dw, dy);
var c3 = getCoords(this, dx, dy + dh);
var c4 = getCoords(this, dx + dw, dy + dh);
max.x = m.max(max.x, c2.x, c3.x, c4.x);
max.y = m.max(max.y, c2.y, c3.y, c4.y);
vmlStr.push('padding:0 ', mr(max.x / Z), 'px ', mr(max.y / Z), 'px 0;filter:progid:DXImageTransform.Microsoft.Matrix(', filter.join(''), ', SizingMethod=\'clip\');');
} else {
vmlStr.push('top:', mr(d.y / Z), 'px;left:', mr(d.x / Z), 'px;');
}
vmlStr.push(' ">');
if (sx || sy) {
vmlStr.push('<div style="overflow: hidden; width:', Math.ceil((dw + sx * dw / sw) * scaleX), 'px;', ' height:', Math.ceil((dh + sy * dh / sh) * scaleY), 'px;', ' filter:progid:DxImageTransform.Microsoft.Matrix(Dx=', -sx * dw / sw * scaleX, ',Dy=', -sy * dh / sh * scaleY, ');">');
}
vmlStr.push('<div style="width:', Math.round(scaleX * w * dw / sw), 'px;', ' height:', Math.round(scaleY * h * dh / sh), 'px;', ' filter:');
if (this.globalAlpha < 1) {
vmlStr.push(' progid:DXImageTransform.Microsoft.Alpha(opacity=' + this.globalAlpha * 100 + ')');
}
vmlStr.push(' progid:DXImageTransform.Microsoft.AlphaImageLoader(src=', image.src, ',sizingMethod=scale)">');
if (sx || sy)
vmlStr.push('</div>');
vmlStr.push('</div></div>');
this.element_.insertAdjacentHTML('BeforeEnd', vmlStr.join(''));
};
contextPrototype.stroke = function (aFill) {
var lineStr = [];
var lineOpen = false;
var W = 10;
var H = 10;
lineStr.push('<g_vml_:shape', ' filled="', !!aFill, '"', ' style="position:absolute;width:', W, 'px;height:', H, 'px;"', ' coordorigin="0,0"', ' coordsize="', Z * W, ',', Z * H, '"', ' stroked="', !aFill, '"', ' path="');
var newSeq = false;
var min = {
x: null,
y: null
};
var max = {
x: null,
y: null
};
for (var i = 0; i < this.currentPath_.length; i++) {
var p = this.currentPath_[i];
var c;
switch (p.type) {
case 'moveTo':
c = p;
lineStr.push(' m ', mr(p.x), ',', mr(p.y));
break;
case 'lineTo':
lineStr.push(' l ', mr(p.x), ',', mr(p.y));
break;
case 'close':
lineStr.push(' x ');
p = null;
break;
case 'bezierCurveTo':
lineStr.push(' c ', mr(p.cp1x), ',', mr(p.cp1y), ',', mr(p.cp2x), ',', mr(p.cp2y), ',', mr(p.x), ',', mr(p.y));
break;
case 'at':
case 'wa':
lineStr.push(' ', p.type, ' ', mr(p.x - this.scaleX_ * p.radius), ',', mr(p.y - this.scaleY_ * p.radius), ' ', mr(p.x + this.scaleX_ * p.radius), ',', mr(p.y + this.scaleY_ * p.radius), ' ', mr(p.xStart), ',', mr(p.yStart), ' ', mr(p.xEnd), ',', mr(p.yEnd));
break;
}
if (p) {
if (min.x == null || p.x < min.x) {
min.x = p.x;
}
if (max.x == null || p.x > max.x) {
max.x = p.x;
}
if (min.y == null || p.y < min.y) {
min.y = p.y;
}
if (max.y == null || p.y > max.y) {
max.y = p.y;
}
}
}
lineStr.push(' ">');
if (!aFill) {
appendStroke(this, lineStr);
} else {
appendFill(this, lineStr, min, max);
}
lineStr.push('</g_vml_:shape>');
this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));
};
function appendStroke(ctx, lineStr) {
var a = processStyle(ctx.strokeStyle);
var color = a.color;
var opacity = a.alpha * ctx.globalAlpha;
var lineWidth = ctx.lineScale_ * ctx.lineWidth;
if (lineWidth < 1) {
opacity *= lineWidth;
}
lineStr.push('<g_vml_:stroke', ' opacity="', opacity, '"', ' joinstyle="', ctx.lineJoin, '"', ' miterlimit="', ctx.miterLimit, '"', ' endcap="', processLineCap(ctx.lineCap), '"', ' weight="', lineWidth, 'px"', ' color="', color, '" />');
}
function appendFill(ctx, lineStr, min, max) {
var fillStyle = ctx.fillStyle;
var arcScaleX = ctx.scaleX_;
var arcScaleY = ctx.scaleY_;
var width = max.x - min.x;
var height = max.y - min.y;
if (fillStyle instanceof CanvasGradient_) {
var angle = 0;
var focus = {
x: 0,
y: 0
};
var shift = 0;
var expansion = 1;
if (fillStyle.type_ == 'gradient') {
var x0 = fillStyle.x0_ / arcScaleX;
var y0 = fillStyle.y0_ / arcScaleY;
var x1 = fillStyle.x1_ / arcScaleX;
var y1 = fillStyle.y1_ / arcScaleY;
var p0 = getCoords(ctx, x0, y0);
var p1 = getCoords(ctx, x1, y1);
var dx = p1.x - p0.x;
var dy = p1.y - p0.y;
angle = Math.atan2(dx, dy) * 180 / Math.PI;
if (angle < 0) {
angle += 360;
}
if (angle < 0.000001) {
angle = 0;
}
} else {
var p0 = getCoords(ctx, fillStyle.x0_, fillStyle.y0_);
focus = {
x: (p0.x - min.x) / width,
y: (p0.y - min.y) / height
};
width /= arcScaleX * Z;
height /= arcScaleY * Z;
var dimension = m.max(width, height);
shift = 2 * fillStyle.r0_ / dimension;
expansion = 2 * fillStyle.r1_ / dimension - shift;
}
var stops = fillStyle.colors_;
stops.sort(function (cs1, cs2) {
return cs1.offset - cs2.offset;
});
var length = stops.length;
var color1 = stops[0].color;
var color2 = stops[length - 1].color;
var opacity1 = stops[0].alpha * ctx.globalAlpha;
var opacity2 = stops[length - 1].alpha * ctx.globalAlpha;
var colors = [];
for (var i = 0; i < length; i++) {
var stop = stops[i];
colors.push(stop.offset * expansion + shift + ' ' + stop.color);
}
lineStr.push('<g_vml_:fill type="', fillStyle.type_, '"', ' method="none" focus="100%"', ' color="', color1, '"', ' color2="', color2, '"', ' colors="', colors.join(','), '"', ' opacity="', opacity2, '"', ' g_o_:opacity2="', opacity1, '"', ' angle="', angle, '"', ' focusposition="', focus.x, ',', focus.y, '" />');
} else if (fillStyle instanceof CanvasPattern_) {
if (width && height) {
var deltaLeft = -min.x;
var deltaTop = -min.y;
lineStr.push('<g_vml_:fill', ' position="', deltaLeft / width * arcScaleX * arcScaleX, ',', deltaTop / height * arcScaleY * arcScaleY, '"', ' type="tile"', ' src="', fillStyle.src_, '" />');
}
} else {
var a = processStyle(ctx.fillStyle);
var color = a.color;
var opacity = a.alpha * ctx.globalAlpha;
lineStr.push('<g_vml_:fill color="', color, '" opacity="', opacity, '" />');
}
}
contextPrototype.fill = function () {
this.stroke(true);
};
contextPrototype.closePath = function () {
this.currentPath_.push({ type: 'close' });
};
function getCoords(ctx, aX, aY) {
var m = ctx.m_;
return {
x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2,
y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2
};
}
;
contextPrototype.save = function () {
var o = {};
copyState(this, o);
this.aStack_.push(o);
this.mStack_.push(this.m_);
this.m_ = matrixMultiply(createMatrixIdentity(), this.m_);
};
contextPrototype.restore = function () {
if (this.aStack_.length) {
copyState(this.aStack_.pop(), this);
this.m_ = this.mStack_.pop();
}
};
function matrixIsFinite(m) {
return isFinite(m[0][0]) && isFinite(m[0][1]) && isFinite(m[1][0]) && isFinite(m[1][1]) && isFinite(m[2][0]) && isFinite(m[2][1]);
}
function setM(ctx, m, updateLineScale) {
if (!matrixIsFinite(m)) {
return;
}
ctx.m_ = m;
ctx.scaleX_ = Math.sqrt(m[0][0] * m[0][0] + m[0][1] * m[0][1]);
ctx.scaleY_ = Math.sqrt(m[1][0] * m[1][0] + m[1][1] * m[1][1]);
if (updateLineScale) {
var det = m[0][0] * m[1][1] - m[0][1] * m[1][0];
ctx.lineScale_ = sqrt(abs(det));
}
}
contextPrototype.translate = function (aX, aY) {
var m1 = [
[
1,
0,
0
],
[
0,
1,
0
],
[
aX,
aY,
1
]
];
setM(this, matrixMultiply(m1, this.m_), false);
};
contextPrototype.rotate = function (aRot) {
var c = mc(aRot);
var s = ms(aRot);
var m1 = [
[
c,
s,
0
],
[
-s,
c,
0
],
[
0,
0,
1
]
];
setM(this, matrixMultiply(m1, this.m_), false);
};
contextPrototype.scale = function (aX, aY) {
var m1 = [
[
aX,
0,
0
],
[
0,
aY,
0
],
[
0,
0,
1
]
];
setM(this, matrixMultiply(m1, this.m_), true);
};
contextPrototype.transform = function (m11, m12, m21, m22, dx, dy) {
var m1 = [
[
m11,
m12,
0
],
[
m21,
m22,
0
],
[
dx,
dy,
1
]
];
setM(this, matrixMultiply(m1, this.m_), true);
};
contextPrototype.setTransform = function (m11, m12, m21, m22, dx, dy) {
var m = [
[
m11,
m12,
0
],
[
m21,
m22,
0
],
[
dx,
dy,
1
]
];
setM(this, m, true);
};
contextPrototype.drawText_ = function (text, x, y, maxWidth, stroke) {
var m = this.m_, delta = 1000, left = 0, right = delta, offset = {
x: 0,
y: 0
}, lineStr = [];
var fontStyle = getComputedStyle(processFontStyle(this.font), this.element_);
var fontStyleString = buildStyle(fontStyle);
var elementStyle = this.element_.currentStyle;
var textAlign = this.textAlign.toLowerCase();
switch (textAlign) {
case 'left':
case 'center':
case 'right':
break;
case 'end':
textAlign = elementStyle.direction == 'ltr' ? 'right' : 'left';
break;
case 'start':
textAlign = elementStyle.direction == 'rtl' ? 'right' : 'left';
break;
default:
textAlign = 'left';
}
switch (this.textBaseline) {
case 'hanging':
case 'top':
offset.y = fontStyle.size / 1.75;
break;
case 'middle':
break;
default:
case null:
case 'alphabetic':
case 'ideographic':
case 'bottom':
offset.y = -fontStyle.size / 2.25;
break;
}
switch (textAlign) {
case 'right':
left = delta;
right = 0.05;
break;
case 'center':
left = right = delta / 2;
break;
}
var d = getCoords(this, x + offset.x, y + offset.y);
lineStr.push('<g_vml_:line from="', -left, ' 0" to="', right, ' 0.05" ', ' coordsize="100 100" coordorigin="0 0"', ' filled="', !stroke, '" stroked="', !!stroke, '" style="position:absolute;width:1px;height:1px;">');
if (stroke) {
appendStroke(this, lineStr);
} else {
appendFill(this, lineStr, {
x: -left,
y: 0
}, {
x: right,
y: fontStyle.size
});
}
var skewM = m[0][0].toFixed(3) + ',' + m[1][0].toFixed(3) + ',' + m[0][1].toFixed(3) + ',' + m[1][1].toFixed(3) + ',0,0';
var skewOffset = mr(d.x / Z) + ',' + mr(d.y / Z);
lineStr.push('<g_vml_:skew on="t" matrix="', skewM, '" ', ' offset="', skewOffset, '" origin="', left, ' 0" />', '<g_vml_:path textpathok="true" />', '<g_vml_:textpath on="true" string="', encodeHtmlAttribute(text), '" style="v-text-align:', textAlign, ';font:', encodeHtmlAttribute(fontStyleString), '" /></g_vml_:line>');
this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));
};
contextPrototype.fillText = function (text, x, y, maxWidth) {
this.drawText_(text, x, y, maxWidth, false);
};
contextPrototype.strokeText = function (text, x, y, maxWidth) {
this.drawText_(text, x, y, maxWidth, true);
};
contextPrototype.measureText = function (text) {
if (!this.textMeasureEl_) {
var s = '<span style="position:absolute;' + 'top:-20000px;left:0;padding:0;margin:0;border:none;' + 'white-space:pre;"></span>';
this.element_.insertAdjacentHTML('beforeEnd', s);
this.textMeasureEl_ = this.element_.lastChild;
}
var doc = this.element_.ownerDocument;
this.textMeasureEl_.innerHTML = '';
try {
this.textMeasureEl_.style.font = this.font;
} catch (ex) {
}
this.textMeasureEl_.appendChild(doc.createTextNode(text));
return { width: this.textMeasureEl_.offsetWidth };
};
contextPrototype.clip = function () {
};
contextPrototype.arcTo = function () {
};
contextPrototype.createPattern = function (image, repetition) {
return new CanvasPattern_(image, repetition);
};
function CanvasGradient_(aType) {
this.type_ = aType;
this.x0_ = 0;
this.y0_ = 0;
this.r0_ = 0;
this.x1_ = 0;
this.y1_ = 0;
this.r1_ = 0;
this.colors_ = [];
}
CanvasGradient_.prototype.addColorStop = function (aOffset, aColor) {
aColor = processStyle(aColor);
this.colors_.push({
offset: aOffset,
color: aColor.color,
alpha: aColor.alpha
});
};
function CanvasPattern_(image, repetition) {
assertImageIsValid(image);
switch (repetition) {
case 'repeat':
case null:
case '':
this.repetition_ = 'repeat';
break;
case 'repeat-x':
case 'repeat-y':
case 'no-repeat':
this.repetition_ = repetition;
break;
default:
throwException('SYNTAX_ERR');
}
this.src_ = image.src;
this.width_ = image.width;
this.height_ = image.height;
}
function throwException(s) {
throw new DOMException_(s);
}
function assertImageIsValid(img) {
if (!img || img.nodeType != 1 || img.tagName != 'IMG') {
throwException('TYPE_MISMATCH_ERR');
}
if (img.readyState != 'complete') {
throwException('INVALID_STATE_ERR');
}
}
function DOMException_(s) {
this.code = this[s];
this.message = s + ': DOM Exception ' + this.code;
}
var p = DOMException_.prototype = new Error();
p.INDEX_SIZE_ERR = 1;
p.DOMSTRING_SIZE_ERR = 2;
p.HIERARCHY_REQUEST_ERR = 3;
p.WRONG_DOCUMENT_ERR = 4;
p.INVALID_CHARACTER_ERR = 5;
p.NO_DATA_ALLOWED_ERR = 6;
p.NO_MODIFICATION_ALLOWED_ERR = 7;
p.NOT_FOUND_ERR = 8;
p.NOT_SUPPORTED_ERR = 9;
p.INUSE_ATTRIBUTE_ERR = 10;
p.INVALID_STATE_ERR = 11;
p.SYNTAX_ERR = 12;
p.INVALID_MODIFICATION_ERR = 13;
p.NAMESPACE_ERR = 14;
p.INVALID_ACCESS_ERR = 15;
p.VALIDATION_ERR = 16;
p.TYPE_MISMATCH_ERR = 17;
G_vmlCanvasManager = G_vmlCanvasManager_;
CanvasRenderingContext2D = CanvasRenderingContext2D_;
CanvasGradient = CanvasGradient_;
CanvasPattern = CanvasPattern_;
DOMException = DOMException_;
}());
} else {
G_vmlCanvasManager = false;
}
return G_vmlCanvasManager;
});define('zrender/mixin/Eventful', ['require'], function (require) {
var Eventful = function () {
this._handlers = {};
};
Eventful.prototype.one = function (event, handler, context) {
var _h = this._handlers;
if (!handler || !event) {
return this;
}
if (!_h[event]) {
_h[event] = [];
}
_h[event].push({
h: handler,
one: true,
ctx: context || this
});
return this;
};
Eventful.prototype.bind = function (event, handler, context) {
var _h = this._handlers;
if (!handler || !event) {
return this;
}
if (!_h[event]) {
_h[event] = [];
}
_h[event].push({
h: handler,
one: false,
ctx: context || this
});
return this;
};
Eventful.prototype.unbind = function (event, handler) {
var _h = this._handlers;
if (!event) {
this._handlers = {};
return this;
}
if (handler) {
if (_h[event]) {
var newList = [];
for (var i = 0, l = _h[event].length; i < l; i++) {
if (_h[event][i]['h'] != handler) {
newList.push(_h[event][i]);
}
}
_h[event] = newList;
}
if (_h[event] && _h[event].length === 0) {
delete _h[event];
}
} else {
delete _h[event];
}
return this;
};
Eventful.prototype.dispatch = function (type) {
if (this._handlers[type]) {
var args = arguments;
var argLen = args.length;
if (argLen > 3) {
args = Array.prototype.slice.call(args, 1);
}
var _h = this._handlers[type];
var len = _h.length;
for (var i = 0; i < len;) {
switch (argLen) {
case 1:
_h[i]['h'].call(_h[i]['ctx']);
break;
case 2:
_h[i]['h'].call(_h[i]['ctx'], args[1]);
break;
case 3:
_h[i]['h'].call(_h[i]['ctx'], args[1], args[2]);
break;
default:
_h[i]['h'].apply(_h[i]['ctx'], args);
break;
}
if (_h[i]['one']) {
_h.splice(i, 1);
len--;
} else {
i++;
}
}
}
return this;
};
Eventful.prototype.dispatchWithContext = function (type) {
if (this._handlers[type]) {
var args = arguments;
var argLen = args.length;
if (argLen > 4) {
args = Array.prototype.slice.call(args, 1, args.length - 1);
}
var ctx = args[args.length - 1];
var _h = this._handlers[type];
var len = _h.length;
for (var i = 0; i < len;) {
switch (argLen) {
case 1:
_h[i]['h'].call(ctx);
break;
case 2:
_h[i]['h'].call(ctx, args[1]);
break;
case 3:
_h[i]['h'].call(ctx, args[1], args[2]);
break;
default:
_h[i]['h'].apply(ctx, args);
break;
}
if (_h[i]['one']) {
_h.splice(i, 1);
len--;
} else {
i++;
}
}
}
return this;
};
return Eventful;
});define('zrender/tool/log', [
'require',
'../config'
], function (require) {
var config = require('../config');
return function () {
if (config.debugMode === 0) {
return;
} else if (config.debugMode == 1) {
for (var k in arguments) {
throw new Error(arguments[k]);
}
} else if (config.debugMode > 1) {
for (var k in arguments) {
console.log(arguments[k]);
}
}
};
});define('zrender/tool/guid', [], function () {
var idStart = 2311;
return function () {
return 'zrender__' + idStart++;
};
});define('zrender/Handler', [
'require',
'./config',
'./tool/env',
'./tool/event',
'./tool/util',
'./tool/vector',
'./tool/matrix',
'./mixin/Eventful'
], function (require) {
'use strict';
var config = require('./config');
var env = require('./tool/env');
var eventTool = require('./tool/event');
var util = require('./tool/util');
var vec2 = require('./tool/vector');
var mat2d = require('./tool/matrix');
var EVENT = config.EVENT;
var Eventful = require('./mixin/Eventful');
var domHandlerNames = [
'resize',
'click',
'dblclick',
'mousewheel',
'mousemove',
'mouseout',
'mouseup',
'mousedown',
'touchstart',
'touchend',
'touchmove'
];
var isZRenderElement = function (event) {
if (window.G_vmlCanvasManager) {
return true;
}
event = event || window.event;
var target = event.toElement || event.relatedTarget || event.srcElement || event.target;
return target && target.className.match(config.elementClassName);
};
var domHandlers = {
resize: function (event) {
event = event || window.event;
this._lastHover = null;
this._isMouseDown = 0;
this.dispatch(EVENT.RESIZE, event);
},
click: function (event, manually) {
if (!isZRenderElement(event) && !manually) {
return;
}
event = this._zrenderEventFixed(event);
var _lastHover = this._lastHover;
if (_lastHover && _lastHover.clickable || !_lastHover) {
if (this._clickThreshold < 5) {
this._dispatchAgency(_lastHover, EVENT.CLICK, event);
}
}
this._mousemoveHandler(event);
},
dblclick: function (event, manually) {
if (!isZRenderElement(event) && !manually) {
return;
}
event = event || window.event;
event = this._zrenderEventFixed(event);
var _lastHover = this._lastHover;
if (_lastHover && _lastHover.clickable || !_lastHover) {
if (this._clickThreshold < 5) {
this._dispatchAgency(_lastHover, EVENT.DBLCLICK, event);
}
}
this._mousemoveHandler(event);
},
mousewheel: function (event, manually) {
if (!isZRenderElement(event) && !manually) {
return;
}
event = this._zrenderEventFixed(event);
var delta = event.wheelDelta || -event.detail;
var scale = delta > 0 ? 1.1 : 1 / 1.1;
var needsRefresh = false;
var mouseX = this._mouseX;
var mouseY = this._mouseY;
this.painter.eachBuildinLayer(function (layer) {
var pos = layer.position;
if (layer.zoomable) {
layer.__zoom = layer.__zoom || 1;
var newZoom = layer.__zoom;
newZoom *= scale;
newZoom = Math.max(Math.min(layer.maxZoom, newZoom), layer.minZoom);
scale = newZoom / layer.__zoom;
layer.__zoom = newZoom;
pos[0] -= (mouseX - pos[0]) * (scale - 1);
pos[1] -= (mouseY - pos[1]) * (scale - 1);
layer.scale[0] *= scale;
layer.scale[1] *= scale;
layer.dirty = true;
needsRefresh = true;
eventTool.stop(event);
}
});
if (needsRefresh) {
this.painter.refresh();
}
this._dispatchAgency(this._lastHover, EVENT.MOUSEWHEEL, event);
this._mousemoveHandler(event);
},
mousemove: function (event, manually) {
if (!isZRenderElement(event) && !manually) {
return;
}
if (this.painter.isLoading()) {
return;
}
event = this._zrenderEventFixed(event);
this._lastX = this._mouseX;
this._lastY = this._mouseY;
this._mouseX = eventTool.getX(event);
this._mouseY = eventTool.getY(event);
var dx = this._mouseX - this._lastX;
var dy = this._mouseY - this._lastY;
this._processDragStart(event);
this._hasfound = 0;
this._event = event;
this._iterateAndFindHover();
if (!this._hasfound) {
if (!this._draggingTarget || this._lastHover && this._lastHover != this._draggingTarget) {
this._processOutShape(event);
this._processDragLeave(event);
}
this._lastHover = null;
this.storage.delHover();
this.painter.clearHover();
}
var cursor = 'default';
if (this._draggingTarget) {
this.storage.drift(this._draggingTarget.id, dx, dy);
this._draggingTarget.modSelf();
this.storage.addHover(this._draggingTarget);
this._clickThreshold++;
} else if (this._isMouseDown) {
var needsRefresh = false;
this.painter.eachBuildinLayer(function (layer) {
if (layer.panable) {
cursor = 'move';
layer.position[0] += dx;
layer.position[1] += dy;
needsRefresh = true;
layer.dirty = true;
}
});
if (needsRefresh) {
this.painter.refresh();
}
}
if (this._draggingTarget || this._hasfound && this._lastHover.draggable) {
cursor = 'move';
} else if (this._hasfound && this._lastHover.clickable) {
cursor = 'pointer';
}
this.root.style.cursor = cursor;
this._dispatchAgency(this._lastHover, EVENT.MOUSEMOVE, event);
if (this._draggingTarget || this._hasfound || this.storage.hasHoverShape()) {
this.painter.refreshHover();
}
},
mouseout: function (event, manually) {
if (!isZRenderElement(event) && !manually) {
return;
}
event = this._zrenderEventFixed(event);
var element = event.toElement || event.relatedTarget;
if (element != this.root) {
while (element && element.nodeType != 9) {
if (element == this.root) {
this._mousemoveHandler(event);
return;
}
element = element.parentNode;
}
}
event.zrenderX = this._lastX;
event.zrenderY = this._lastY;
this.root.style.cursor = 'default';
this._isMouseDown = 0;
this._processOutShape(event);
this._processDrop(event);
this._processDragEnd(event);
if (!this.painter.isLoading()) {
this.painter.refreshHover();
}
this.dispatch(EVENT.GLOBALOUT, event);
},
mousedown: function (event, manually) {
if (!isZRenderElement(event) && !manually) {
return;
}
this._clickThreshold = 0;
if (this._lastDownButton == 2) {
this._lastDownButton = event.button;
this._mouseDownTarget = null;
return;
}
this._lastMouseDownMoment = new Date();
event = this._zrenderEventFixed(event);
this._isMouseDown = 1;
this._mouseDownTarget = this._lastHover;
this._dispatchAgency(this._lastHover, EVENT.MOUSEDOWN, event);
this._lastDownButton = event.button;
},
mouseup: function (event, manually) {
if (!isZRenderElement(event) && !manually) {
return;
}
event = this._zrenderEventFixed(event);
this.root.style.cursor = 'default';
this._isMouseDown = 0;
this._mouseDownTarget = null;
this._dispatchAgency(this._lastHover, EVENT.MOUSEUP, event);
this._processDrop(event);
this._processDragEnd(event);
},
touchstart: function (event, manually) {
if (!isZRenderElement(event) && !manually) {
return;
}
event = this._zrenderEventFixed(event, true);
this._lastTouchMoment = new Date();
this._mobileFindFixed(event);
this._mousedownHandler(event);
},
touchmove: function (event, manually) {
if (!isZRenderElement(event) && !manually) {
return;
}
event = this._zrenderEventFixed(event, true);
this._mousemoveHandler(event);
if (this._isDragging) {
eventTool.stop(event);
}
},
touchend: function (event, manually) {
if (!isZRenderElement(event) && !manually) {
return;
}
event = this._zrenderEventFixed(event, true);
this._mouseupHandler(event);
var now = new Date();
if (now - this._lastTouchMoment < EVENT.touchClickDelay) {
this._mobileFindFixed(event);
this._clickHandler(event);
if (now - this._lastClickMoment < EVENT.touchClickDelay / 2) {
this._dblclickHandler(event);
if (this._lastHover && this._lastHover.clickable) {
eventTool.stop(event);
}
}
this._lastClickMoment = now;
}
this.painter.clearHover();
}
};
function bind2Arg(handler, context) {
return function (arg1, arg2) {
return handler.call(context, arg1, arg2);
};
}
function bind3Arg(handler, context) {
return function (arg1, arg2, arg3) {
return handler.call(context, arg1, arg2, arg3);
};
}
function initDomHandler(instance) {
var len = domHandlerNames.length;
while (len--) {
var name = domHandlerNames[len];
instance['_' + name + 'Handler'] = bind2Arg(domHandlers[name], instance);
}
}
var Handler = function (root, storage, painter) {
Eventful.call(this);
this.root = root;
this.storage = storage;
this.painter = painter;
this._lastX = this._lastY = this._mouseX = this._mouseY = 0;
this._findHover = bind3Arg(findHover, this);
this._domHover = painter.getDomHover();
initDomHandler(this);
if (window.addEventListener) {
window.addEventListener('resize', this._resizeHandler);
if (env.os.tablet || env.os.phone) {
root.addEventListener('touchstart', this._touchstartHandler);
root.addEventListener('touchmove', this._touchmoveHandler);
root.addEventListener('touchend', this._touchendHandler);
} else {
root.addEventListener('click', this._clickHandler);
root.addEventListener('dblclick', this._dblclickHandler);
root.addEventListener('mousewheel', this._mousewheelHandler);
root.addEventListener('mousemove', this._mousemoveHandler);
root.addEventListener('mousedown', this._mousedownHandler);
root.addEventListener('mouseup', this._mouseupHandler);
}
root.addEventListener('DOMMouseScroll', this._mousewheelHandler);
root.addEventListener('mouseout', this._mouseoutHandler);
} else {
window.attachEvent('onresize', this._resizeHandler);
root.attachEvent('onclick', this._clickHandler);
root.ondblclick = this._dblclickHandler;
root.attachEvent('onmousewheel', this._mousewheelHandler);
root.attachEvent('onmousemove', this._mousemoveHandler);
root.attachEvent('onmouseout', this._mouseoutHandler);
root.attachEvent('onmousedown', this._mousedownHandler);
root.attachEvent('onmouseup', this._mouseupHandler);
}
};
Handler.prototype.on = function (eventName, handler, context) {
this.bind(eventName, handler, context);
return this;
};
Handler.prototype.un = function (eventName, handler) {
this.unbind(eventName, handler);
return this;
};
Handler.prototype.trigger = function (eventName, eventArgs) {
switch (eventName) {
case EVENT.RESIZE:
case EVENT.CLICK:
case EVENT.DBLCLICK:
case EVENT.MOUSEWHEEL:
case EVENT.MOUSEMOVE:
case EVENT.MOUSEDOWN:
case EVENT.MOUSEUP:
case EVENT.MOUSEOUT:
this['_' + eventName + 'Handler'](eventArgs, true);
break;
}
};
Handler.prototype.dispose = function () {
var root = this.root;
if (window.removeEventListener) {
window.removeEventListener('resize', this._resizeHandler);
if (env.os.tablet || env.os.phone) {
root.removeEventListener('touchstart', this._touchstartHandler);
root.removeEventListener('touchmove', this._touchmoveHandler);
root.removeEventListener('touchend', this._touchendHandler);
} else {
root.removeEventListener('click', this._clickHandler);
root.removeEventListener('dblclick', this._dblclickHandler);
root.removeEventListener('mousewheel', this._mousewheelHandler);
root.removeEventListener('mousemove', this._mousemoveHandler);
root.removeEventListener('mousedown', this._mousedownHandler);
root.removeEventListener('mouseup', this._mouseupHandler);
}
root.removeEventListener('DOMMouseScroll', this._mousewheelHandler);
root.removeEventListener('mouseout', this._mouseoutHandler);
} else {
window.detachEvent('onresize', this._resizeHandler);
root.detachEvent('onclick', this._clickHandler);
root.detachEvent('dblclick', this._dblclickHandler);
root.detachEvent('onmousewheel', this._mousewheelHandler);
root.detachEvent('onmousemove', this._mousemoveHandler);
root.detachEvent('onmouseout', this._mouseoutHandler);
root.detachEvent('onmousedown', this._mousedownHandler);
root.detachEvent('onmouseup', this._mouseupHandler);
}
this.root = this._domHover = this.storage = this.painter = null;
this.un();
};
Handler.prototype._processDragStart = function (event) {
var _lastHover = this._lastHover;
if (this._isMouseDown && _lastHover && _lastHover.draggable && !this._draggingTarget && this._mouseDownTarget == _lastHover) {
if (_lastHover.dragEnableTime && new Date() - this._lastMouseDownMoment < _lastHover.dragEnableTime) {
return;
}
var _draggingTarget = _lastHover;
this._draggingTarget = _draggingTarget;
this._isDragging = 1;
_draggingTarget.invisible = true;
this.storage.mod(_draggingTarget.id);
this._dispatchAgency(_draggingTarget, EVENT.DRAGSTART, event);
this.painter.refresh();
}
};
Handler.prototype._processDragEnter = function (event) {
if (this._draggingTarget) {
this._dispatchAgency(this._lastHover, EVENT.DRAGENTER, event, this._draggingTarget);
}
};
Handler.prototype._processDragOver = function (event) {
if (this._draggingTarget) {
this._dispatchAgency(this._lastHover, EVENT.DRAGOVER, event, this._draggingTarget);
}
};
Handler.prototype._processDragLeave = function (event) {
if (this._draggingTarget) {
this._dispatchAgency(this._lastHover, EVENT.DRAGLEAVE, event, this._draggingTarget);
}
};
Handler.prototype._processDrop = function (event) {
if (this._draggingTarget) {
this._draggingTarget.invisible = false;
this.storage.mod(this._draggingTarget.id);
this.painter.refresh();
this._dispatchAgency(this._lastHover, EVENT.DROP, event, this._draggingTarget);
}
};
Handler.prototype._processDragEnd = function (event) {
if (this._draggingTarget) {
this._dispatchAgency(this._draggingTarget, EVENT.DRAGEND, event);
this._lastHover = null;
}
this._isDragging = 0;
this._draggingTarget = null;
};
Handler.prototype._processOverShape = function (event) {
this._dispatchAgency(this._lastHover, EVENT.MOUSEOVER, event);
};
Handler.prototype._processOutShape = function (event) {
this._dispatchAgency(this._lastHover, EVENT.MOUSEOUT, event);
};
Handler.prototype._dispatchAgency = function (targetShape, eventName, event, draggedShape) {
var eventHandler = 'on' + eventName;
var eventPacket = {
type: eventName,
event: event,
target: targetShape,
cancelBubble: false
};
var el = targetShape;
if (draggedShape) {
eventPacket.dragged = draggedShape;
}
while (el) {
el[eventHandler] && (eventPacket.cancelBubble = el[eventHandler](eventPacket));
el.dispatch(eventName, eventPacket);
el = el.parent;
if (eventPacket.cancelBubble) {
break;
}
}
if (targetShape) {
if (!eventPacket.cancelBubble) {
this.dispatch(eventName, eventPacket);
}
} else if (!draggedShape) {
var eveObj = {
type: eventName,
event: event
};
this.dispatch(eventName, eveObj);
this.painter.eachOtherLayer(function (layer) {
if (typeof layer[eventHandler] == 'function') {
layer[eventHandler](eveObj);
}
if (layer.dispatch) {
layer.dispatch(eventName, eveObj);
}
});
}
};
Handler.prototype._iterateAndFindHover = function () {
var invTransform = mat2d.create();
return function () {
var list = this.storage.getShapeList();
var currentZLevel;
var currentLayer;
var tmp = [
0,
0
];
for (var i = list.length - 1; i >= 0; i--) {
var shape = list[i];
if (currentZLevel !== shape.zlevel) {
currentLayer = this.painter.getLayer(shape.zlevel, currentLayer);
tmp[0] = this._mouseX;
tmp[1] = this._mouseY;
if (currentLayer.needTransform) {
mat2d.invert(invTransform, currentLayer.transform);
vec2.applyTransform(tmp, tmp, invTransform);
}
}
if (this._findHover(shape, tmp[0], tmp[1])) {
break;
}
}
};
}();
var MOBILE_TOUCH_OFFSETS = [
{ x: 10 },
{ x: -20 },
{
x: 10,
y: 10
},
{ y: -20 }
];
Handler.prototype._mobileFindFixed = function (event) {
this._lastHover = null;
this._mouseX = event.zrenderX;
this._mouseY = event.zrenderY;
this._event = event;
this._iterateAndFindHover();
for (var i = 0; !this._lastHover && i < MOBILE_TOUCH_OFFSETS.length; i++) {
var offset = MOBILE_TOUCH_OFFSETS[i];
offset.x && (this._mouseX += offset.x);
offset.y && (this._mouseY += offset.y);
this._iterateAndFindHover();
}
if (this._lastHover) {
event.zrenderX = this._mouseX;
event.zrenderY = this._mouseY;
}
};
function findHover(shape, x, y) {
if (this._draggingTarget && this._draggingTarget.id == shape.id || shape.isSilent()) {
return false;
}
var event = this._event;
if (shape.isCover(x, y)) {
if (shape.hoverable) {
this.storage.addHover(shape);
}
var p = shape.parent;
while (p) {
if (p.clipShape && !p.clipShape.isCover(this._mouseX, this._mouseY)) {
return false;
}
p = p.parent;
}
if (this._lastHover != shape) {
this._processOutShape(event);
this._processDragLeave(event);
this._lastHover = shape;
this._processDragEnter(event);
}
this._processOverShape(event);
this._processDragOver(event);
this._hasfound = 1;
return true;
}
return false;
}
Handler.prototype._zrenderEventFixed = function (event, isTouch) {
if (event.zrenderFixed) {
return event;
}
if (!isTouch) {
event = event || window.event;
var target = event.toElement || event.relatedTarget || event.srcElement || event.target;
if (target && target != this._domHover) {
event.zrenderX = (typeof event.offsetX != 'undefined' ? event.offsetX : event.layerX) + target.offsetLeft;
event.zrenderY = (typeof event.offsetY != 'undefined' ? event.offsetY : event.layerY) + target.offsetTop;
}
} else {
var touch = event.type != 'touchend' ? event.targetTouches[0] : event.changedTouches[0];
if (touch) {
var rBounding = this.painter._domRoot.getBoundingClientRect();
event.zrenderX = touch.clientX - rBounding.left;
event.zrenderY = touch.clientY - rBounding.top;
}
}
event.zrenderFixed = 1;
return event;
};
util.merge(Handler.prototype, Eventful.prototype, true);
return Handler;
});define('zrender/Painter', [
'require',
'./config',
'./tool/util',
'./tool/log',
'./loadingEffect/Base',
'./Layer',
'./shape/Image'
], function (require) {
'use strict';
var config = require('./config');
var util = require('./tool/util');
var log = require('./tool/log');
var BaseLoadingEffect = require('./loadingEffect/Base');
var Layer = require('./Layer');
function returnFalse() {
return false;
}
function doNothing() {
}
function isLayerValid(layer) {
if (!layer) {
return false;
}
if (layer.isBuildin) {
return true;
}
if (typeof layer.resize !== 'function' || typeof layer.refresh !== 'function') {
return false;
}
return true;
}
var Painter = function (root, storage) {
this.root = root;
root.style['-webkit-tap-highlight-color'] = 'transparent';
root.style['-webkit-user-select'] = 'none';
root.style['user-select'] = 'none';
root.style['-webkit-touch-callout'] = 'none';
this.storage = storage;
root.innerHTML = '';
this._width = this._getWidth();
this._height = this._getHeight();
var domRoot = document.createElement('div');
this._domRoot = domRoot;
domRoot.style.position = 'relative';
domRoot.style.overflow = 'hidden';
domRoot.style.width = this._width + 'px';
domRoot.style.height = this._height + 'px';
root.appendChild(domRoot);
this._layers = {};
this._zlevelList = [];
this._layerConfig = {};
this._loadingEffect = new BaseLoadingEffect({});
this.shapeToImage = this._createShapeToImageProcessor();
this._bgDom = document.createElement('div');
this._bgDom.style.cssText = [
'position:absolute;left:0px;top:0px;width:',
this._width,
'px;height:',
this._height + 'px;',
'-webkit-user-select:none;user-select;none;',
'-webkit-touch-callout:none;'
].join('');
this._bgDom.setAttribute('data-zr-dom-id', 'bg');
this._bgDom.className = config.elementClassName;
domRoot.appendChild(this._bgDom);
this._bgDom.onselectstart = returnFalse;
var hoverLayer = new Layer('_zrender_hover_', this);
this._layers['hover'] = hoverLayer;
domRoot.appendChild(hoverLayer.dom);
hoverLayer.initContext();
hoverLayer.dom.onselectstart = returnFalse;
hoverLayer.dom.style['-webkit-user-select'] = 'none';
hoverLayer.dom.style['user-select'] = 'none';
hoverLayer.dom.style['-webkit-touch-callout'] = 'none';
this.refreshNextFrame = null;
};
Painter.prototype.render = function (callback) {
if (this.isLoading()) {
this.hideLoading();
}
this.refresh(callback, true);
return this;
};
Painter.prototype.refresh = function (callback, paintAll) {
var list = this.storage.getShapeList(true);
this._paintList(list, paintAll);
for (var i = 0; i < this._zlevelList.length; i++) {
var z = this._zlevelList[i];
var layer = this._layers[z];
if (!layer.isBuildin && layer.refresh) {
layer.refresh();
}
}
if (typeof callback == 'function') {
callback();
}
return this;
};
Painter.prototype._preProcessLayer = function (layer) {
layer.unusedCount++;
layer.updateTransform();
};
Painter.prototype._postProcessLayer = function (layer) {
layer.dirty = false;
if (layer.unusedCount == 1) {
layer.clear();
}
};
Painter.prototype._paintList = function (list, paintAll) {
if (typeof paintAll == 'undefined') {
paintAll = false;
}
this._updateLayerStatus(list);
var currentLayer;
var currentZLevel;
var ctx;
this.eachBuildinLayer(this._preProcessLayer);
for (var i = 0, l = list.length; i < l; i++) {
var shape = list[i];
if (currentZLevel !== shape.zlevel) {
if (currentLayer) {
if (currentLayer.needTransform) {
ctx.restore();
}
ctx.flush && ctx.flush();
}
currentZLevel = shape.zlevel;
currentLayer = this.getLayer(currentZLevel);
if (!currentLayer.isBuildin) {
log('ZLevel ' + currentZLevel + ' has been used by unkown layer ' + currentLayer.id);
}
ctx = currentLayer.ctx;
currentLayer.unusedCount = 0;
if (currentLayer.dirty || paintAll) {
currentLayer.clear();
}
if (currentLayer.needTransform) {
ctx.save();
currentLayer.setTransform(ctx);
}
}
if ((currentLayer.dirty || paintAll) && !shape.invisible) {
if (!shape.onbrush || shape.onbrush && !shape.onbrush(ctx, false)) {
if (config.catchBrushException) {
try {
shape.brush(ctx, false, this.refreshNextFrame);
} catch (error) {
log(error, 'brush error of ' + shape.type, shape);
}
} else {
shape.brush(ctx, false, this.refreshNextFrame);
}
}
}
shape.__dirty = false;
}
if (currentLayer) {
if (currentLayer.needTransform) {
ctx.restore();
}
ctx.flush && ctx.flush();
}
this.eachBuildinLayer(this._postProcessLayer);
};
Painter.prototype.getLayer = function (zlevel) {
var layer = this._layers[zlevel];
if (!layer) {
layer = new Layer(zlevel, this);
layer.isBuildin = true;
if (this._layerConfig[zlevel]) {
util.merge(layer, this._layerConfig[zlevel], true);
}
layer.updateTransform();
this.insertLayer(zlevel, layer);
layer.initContext();
}
return layer;
};
Painter.prototype.insertLayer = function (zlevel, layer) {
if (this._layers[zlevel]) {
log('ZLevel ' + zlevel + ' has been used already');
return;
}
if (!isLayerValid(layer)) {
log('Layer of zlevel ' + zlevel + ' is not valid');
return;
}
var len = this._zlevelList.length;
var prevLayer = null;
var i = -1;
if (len > 0 && zlevel > this._zlevelList[0]) {
for (i = 0; i < len - 1; i++) {
if (this._zlevelList[i] < zlevel && this._zlevelList[i + 1] > zlevel) {
break;
}
}
prevLayer = this._layers[this._zlevelList[i]];
}
this._zlevelList.splice(i + 1, 0, zlevel);
var prevDom = prevLayer ? prevLayer.dom : this._bgDom;
if (prevDom.nextSibling) {
prevDom.parentNode.insertBefore(layer.dom, prevDom.nextSibling);
} else {
prevDom.parentNode.appendChild(layer.dom);
}
this._layers[zlevel] = layer;
};
Painter.prototype.eachLayer = function (cb, context) {
for (var i = 0; i < this._zlevelList.length; i++) {
var z = this._zlevelList[i];
cb.call(context, this._layers[z], z);
}
};
Painter.prototype.eachBuildinLayer = function (cb, context) {
for (var i = 0; i < this._zlevelList.length; i++) {
var z = this._zlevelList[i];
var layer = this._layers[z];
if (layer.isBuildin) {
cb.call(context, layer, z);
}
}
};
Painter.prototype.eachOtherLayer = function (cb, context) {
for (var i = 0; i < this._zlevelList.length; i++) {
var z = this._zlevelList[i];
var layer = this._layers[z];
if (!layer.isBuildin) {
cb.call(context, layer, z);
}
}
};
Painter.prototype.getLayers = function () {
return this._layers;
};
Painter.prototype._updateLayerStatus = function (list) {
var layers = this._layers;
var elCounts = {};
this.eachBuildinLayer(function (layer, z) {
elCounts[z] = layer.elCount;
layer.elCount = 0;
});
for (var i = 0, l = list.length; i < l; i++) {
var shape = list[i];
var zlevel = shape.zlevel;
var layer = layers[zlevel];
if (layer) {
layer.elCount++;
if (layer.dirty) {
continue;
}
layer.dirty = shape.__dirty;
}
}
this.eachBuildinLayer(function (layer, z) {
if (elCounts[z] !== layer.elCount) {
layer.dirty = true;
}
});
};
Painter.prototype.refreshShapes = function (shapeList, callback) {
for (var i = 0, l = shapeList.length; i < l; i++) {
var shape = shapeList[i];
shape.modSelf();
}
this.refresh(callback);
return this;
};
Painter.prototype.setLoadingEffect = function (loadingEffect) {
this._loadingEffect = loadingEffect;
return this;
};
Painter.prototype.clear = function () {
this.eachBuildinLayer(this._clearLayer);
return this;
};
Painter.prototype._clearLayer = function (layer) {
layer.clear();
};
Painter.prototype.modLayer = function (zlevel, config) {
if (config) {
if (!this._layerConfig[zlevel]) {
this._layerConfig[zlevel] = config;
} else {
util.merge(this._layerConfig[zlevel], config, true);
}
var layer = this._layers[zlevel];
if (layer) {
util.merge(layer, this._layerConfig[zlevel], true);
}
}
};
Painter.prototype.delLayer = function (zlevel) {
var layer = this._layers[zlevel];
if (!layer) {
return;
}
this.modLayer(zlevel, {
position: layer.position,
rotation: layer.rotation,
scale: layer.scale
});
layer.dom.parentNode.removeChild(layer.dom);
delete this._layers[zlevel];
this._zlevelList.splice(util.indexOf(this._zlevelList, zlevel), 1);
};
Painter.prototype.refreshHover = function () {
this.clearHover();
var list = this.storage.getHoverShapes(true);
for (var i = 0, l = list.length; i < l; i++) {
this._brushHover(list[i]);
}
var ctx = this._layers.hover.ctx;
ctx.flush && ctx.flush();
this.storage.delHover();
return this;
};
Painter.prototype.clearHover = function () {
var hover = this._layers.hover;
hover && hover.clear();
return this;
};
Painter.prototype.showLoading = function (loadingEffect) {
this._loadingEffect && this._loadingEffect.stop();
loadingEffect && this.setLoadingEffect(loadingEffect);
this._loadingEffect.start(this);
this.loading = true;
return this;
};
Painter.prototype.hideLoading = function () {
this._loadingEffect.stop();
this.clearHover();
this.loading = false;
return this;
};
Painter.prototype.isLoading = function () {
return this.loading;
};
Painter.prototype.resize = function () {
var domRoot = this._domRoot;
domRoot.style.display = 'none';
var width = this._getWidth();
var height = this._getHeight();
domRoot.style.display = '';
if (this._width != width || height != this._height) {
this._width = width;
this._height = height;
domRoot.style.width = width + 'px';
domRoot.style.height = height + 'px';
for (var id in this._layers) {
this._layers[id].resize(width, height);
}
this.refresh(null, true);
}
return this;
};
Painter.prototype.clearLayer = function (zLevel) {
var layer = this._layers[zLevel];
if (layer) {
layer.clear();
}
};
Painter.prototype.dispose = function () {
if (this.isLoading()) {
this.hideLoading();
}
this.root.innerHTML = '';
this.root = this.storage = this._domRoot = this._layers = null;
};
Painter.prototype.getDomHover = function () {
return this._layers.hover.dom;
};
Painter.prototype.toDataURL = function (type, backgroundColor, args) {
if (window['G_vmlCanvasManager']) {
return null;
}
var imageLayer = new Layer('image', this);
this._bgDom.appendChild(imageLayer.dom);
imageLayer.initContext();
var ctx = imageLayer.ctx;
imageLayer.clearColor = backgroundColor || '#fff';
imageLayer.clear();
var self = this;
this.storage.iterShape(function (shape) {
if (!shape.invisible) {
if (!shape.onbrush || shape.onbrush && !shape.onbrush(ctx, false)) {
if (config.catchBrushException) {
try {
shape.brush(ctx, false, self.refreshNextFrame);
} catch (error) {
log(error, 'brush error of ' + shape.type, shape);
}
} else {
shape.brush(ctx, false, self.refreshNextFrame);
}
}
}
}, {
normal: 'up',
update: true
});
var image = imageLayer.dom.toDataURL(type, args);
ctx = null;
this._bgDom.removeChild(imageLayer.dom);
return image;
};
Painter.prototype.getWidth = function () {
return this._width;
};
Painter.prototype.getHeight = function () {
return this._height;
};
Painter.prototype._getWidth = function () {
var root = this.root;
var stl = root.currentStyle || document.defaultView.getComputedStyle(root);
return ((root.clientWidth || parseInt(stl.width, 10)) - parseInt(stl.paddingLeft, 10) - parseInt(stl.paddingRight, 10)).toFixed(0) - 0;
};
Painter.prototype._getHeight = function () {
var root = this.root;
var stl = root.currentStyle || document.defaultView.getComputedStyle(root);
return ((root.clientHeight || parseInt(stl.height, 10)) - parseInt(stl.paddingTop, 10) - parseInt(stl.paddingBottom, 10)).toFixed(0) - 0;
};
Painter.prototype._brushHover = function (shape) {
var ctx = this._layers.hover.ctx;
if (!shape.onbrush || shape.onbrush && !shape.onbrush(ctx, true)) {
var layer = this.getLayer(shape.zlevel);
if (layer.needTransform) {
ctx.save();
layer.setTransform(ctx);
}
if (config.catchBrushException) {
try {
shape.brush(ctx, true, this.refreshNextFrame);
} catch (error) {
log(error, 'hoverBrush error of ' + shape.type, shape);
}
} else {
shape.brush(ctx, true, this.refreshNextFrame);
}
if (layer.needTransform) {
ctx.restore();
}
}
};
Painter.prototype._shapeToImage = function (id, shape, width, height, devicePixelRatio) {
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
canvas.style.width = width + 'px';
canvas.style.height = height + 'px';
canvas.setAttribute('width', width * devicePixelRatio);
canvas.setAttribute('height', height * devicePixelRatio);
ctx.clearRect(0, 0, width * devicePixelRatio, height * devicePixelRatio);
var shapeTransform = {
position: shape.position,
rotation: shape.rotation,
scale: shape.scale
};
shape.position = [
0,
0,
0
];
shape.rotation = 0;
shape.scale = [
1,
1
];
if (shape) {
shape.brush(ctx, false);
}
var ImageShape = require('./shape/Image');
var imgShape = new ImageShape({
id: id,
style: {
x: 0,
y: 0,
image: canvas
}
});
if (shapeTransform.position != null) {
imgShape.position = shape.position = shapeTransform.position;
}
if (shapeTransform.rotation != null) {
imgShape.rotation = shape.rotation = shapeTransform.rotation;
}
if (shapeTransform.scale != null) {
imgShape.scale = shape.scale = shapeTransform.scale;
}
return imgShape;
};
Painter.prototype._createShapeToImageProcessor = function () {
if (window['G_vmlCanvasManager']) {
return doNothing;
}
var me = this;
return function (id, e, width, height) {
return me._shapeToImage(id, e, width, height, config.devicePixelRatio);
};
};
return Painter;
});define('zrender/Storage', [
'require',
'./tool/util',
'./Group'
], function (require) {
'use strict';
var util = require('./tool/util');
var Group = require('./Group');
var defaultIterateOption = {
hover: false,
normal: 'down',
update: false
};
function shapeCompareFunc(a, b) {
if (a.zlevel == b.zlevel) {
if (a.z == b.z) {
return a.__renderidx - b.__renderidx;
}
return a.z - b.z;
}
return a.zlevel - b.zlevel;
}
var Storage = function () {
this._elements = {};
this._hoverElements = [];
this._roots = [];
this._shapeList = [];
this._shapeListOffset = 0;
};
Storage.prototype.iterShape = function (fun, option) {
if (!option) {
option = defaultIterateOption;
}
if (option.hover) {
for (var i = 0, l = this._hoverElements.length; i < l; i++) {
var el = this._hoverElements[i];
el.updateTransform();
if (fun(el)) {
return this;
}
}
}
if (option.update) {
this.updateShapeList();
}
switch (option.normal) {
case 'down':
var l = this._shapeList.length;
while (l--) {
if (fun(this._shapeList[l])) {
return this;
}
}
break;
default:
for (var i = 0, l = this._shapeList.length; i < l; i++) {
if (fun(this._shapeList[i])) {
return this;
}
}
break;
}
return this;
};
Storage.prototype.getHoverShapes = function (update) {
var hoverElements = [];
for (var i = 0, l = this._hoverElements.length; i < l; i++) {
hoverElements.push(this._hoverElements[i]);
var target = this._hoverElements[i].hoverConnect;
if (target) {
var shape;
target = target instanceof Array ? target : [target];
for (var j = 0, k = target.length; j < k; j++) {
shape = target[j].id ? target[j] : this.get(target[j]);
if (shape) {
hoverElements.push(shape);
}
}
}
}
hoverElements.sort(shapeCompareFunc);
if (update) {
for (var i = 0, l = hoverElements.length; i < l; i++) {
hoverElements[i].updateTransform();
}
}
return hoverElements;
};
Storage.prototype.getShapeList = function (update) {
if (update) {
this.updateShapeList();
}
return this._shapeList;
};
Storage.prototype.updateShapeList = function () {
this._shapeListOffset = 0;
for (var i = 0, len = this._roots.length; i < len; i++) {
var root = this._roots[i];
this._updateAndAddShape(root);
}
this._shapeList.length = this._shapeListOffset;
for (var i = 0, len = this._shapeList.length; i < len; i++) {
this._shapeList[i].__renderidx = i;
}
this._shapeList.sort(shapeCompareFunc);
};
Storage.prototype._updateAndAddShape = function (el, clipShapes) {
if (el.ignore) {
return;
}
el.updateTransform();
if (el.clipShape) {
el.clipShape.parent = el;
el.clipShape.updateTransform();
if (clipShapes) {
clipShapes = clipShapes.slice();
clipShapes.push(el.clipShape);
} else {
clipShapes = [el.clipShape];
}
}
if (el.type == 'group') {
for (var i = 0; i < el._children.length; i++) {
var child = el._children[i];
child.__dirty = el.__dirty || child.__dirty;
this._updateAndAddShape(child, clipShapes);
}
el.__dirty = false;
} else {
el.__clipShapes = clipShapes;
this._shapeList[this._shapeListOffset++] = el;
}
};
Storage.prototype.mod = function (el, params) {
if (typeof el === 'string') {
el = this._elements[el];
}
if (el) {
el.modSelf();
if (params) {
if (params.parent || params._storage || params.__clipShapes) {
var target = {};
for (var name in params) {
if (name === 'parent' || name === '_storage' || name === '__clipShapes') {
continue;
}
if (params.hasOwnProperty(name)) {
target[name] = params[name];
}
}
util.merge(el, target, true);
} else {
util.merge(el, params, true);
}
}
}
return this;
};
Storage.prototype.drift = function (shapeId, dx, dy) {
var shape = this._elements[shapeId];
if (shape) {
shape.needTransform = true;
if (shape.draggable === 'horizontal') {
dy = 0;
} else if (shape.draggable === 'vertical') {
dx = 0;
}
if (!shape.ondrift || shape.ondrift && !shape.ondrift(dx, dy)) {
shape.drift(dx, dy);
}
}
return this;
};
Storage.prototype.addHover = function (shape) {
shape.updateNeedTransform();
this._hoverElements.push(shape);
return this;
};
Storage.prototype.delHover = function () {
this._hoverElements = [];
return this;
};
Storage.prototype.hasHoverShape = function () {
return this._hoverElements.length > 0;
};
Storage.prototype.addRoot = function (el) {
if (this._elements[el.id]) {
return;
}
if (el instanceof Group) {
el.addChildrenToStorage(this);
}
this.addToMap(el);
this._roots.push(el);
};
Storage.prototype.delRoot = function (elId) {
if (typeof elId == 'undefined') {
for (var i = 0; i < this._roots.length; i++) {
var root = this._roots[i];
if (root instanceof Group) {
root.delChildrenFromStorage(this);
}
}
this._elements = {};
this._hoverElements = [];
this._roots = [];
this._shapeList = [];
this._shapeListOffset = 0;
return;
}
if (elId instanceof Array) {
for (var i = 0, l = elId.length; i < l; i++) {
this.delRoot(elId[i]);
}
return;
}
var el;
if (typeof elId == 'string') {
el = this._elements[elId];
} else {
el = elId;
}
var idx = util.indexOf(this._roots, el);
if (idx >= 0) {
this.delFromMap(el.id);
this._roots.splice(idx, 1);
if (el instanceof Group) {
el.delChildrenFromStorage(this);
}
}
};
Storage.prototype.addToMap = function (el) {
if (el instanceof Group) {
el._storage = this;
}
el.modSelf();
this._elements[el.id] = el;
return this;
};
Storage.prototype.get = function (elId) {
return this._elements[elId];
};
Storage.prototype.delFromMap = function (elId) {
var el = this._elements[elId];
if (el) {
delete this._elements[elId];
if (el instanceof Group) {
el._storage = null;
}
}
return this;
};
Storage.prototype.dispose = function () {
this._elements = this._renderList = this._roots = this._hoverElements = null;
};
return Storage;
});define('zrender/animation/Animation', [
'require',
'./Clip',
'../tool/color',
'../tool/util',
'../tool/event'
], function (require) {
'use strict';
var Clip = require('./Clip');
var color = require('../tool/color');
var util = require('../tool/util');
var Dispatcher = require('../tool/event').Dispatcher;
var requestAnimationFrame = window.requestAnimationFrame || window.msRequestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function (func) {
setTimeout(func, 16);
};
var arraySlice = Array.prototype.slice;
var Animation = function (options) {
options = options || {};
this.stage = options.stage || {};
this.onframe = options.onframe || function () {
};
this._clips = [];
this._running = false;
this._time = 0;
Dispatcher.call(this);
};
Animation.prototype = {
add: function (clip) {
this._clips.push(clip);
},
remove: function (clip) {
if (clip.__inStep) {
clip.__needsRemove = true;
} else {
var idx = util.indexOf(this._clips, clip);
if (idx >= 0) {
this._clips.splice(idx, 1);
}
}
},
_update: function () {
var time = new Date().getTime();
var delta = time - this._time;
var clips = this._clips;
var len = clips.length;
var deferredEvents = [];
var deferredClips = [];
for (var i = 0; i < len; i++) {
var clip = clips[i];
clip.__inStep = true;
var e = clip.step(time);
clip.__inStep = false;
if (e) {
deferredEvents.push(e);
deferredClips.push(clip);
}
}
for (var i = 0; i < len;) {
if (clips[i].__needsRemove) {
clips[i] = clips[len - 1];
clips.pop();
len--;
} else {
i++;
}
}
len = deferredEvents.length;
for (var i = 0; i < len; i++) {
deferredClips[i].fire(deferredEvents[i]);
}
this._time = time;
this.onframe(delta);
this.dispatch('frame', delta);
if (this.stage.update) {
this.stage.update();
}
},
start: function () {
var self = this;
this._running = true;
function step() {
if (self._running) {
requestAnimationFrame(step);
self._update();
}
}
this._time = new Date().getTime();
requestAnimationFrame(step);
},
stop: function () {
this._running = false;
},
clear: function () {
this._clips = [];
},
animate: function (target, options) {
options = options || {};
var deferred = new Animator(target, options.loop, options.getter, options.setter);
deferred.animation = this;
return deferred;
},
constructor: Animation
};
util.merge(Animation.prototype, Dispatcher.prototype, true);
function _defaultGetter(target, key) {
return target[key];
}
function _defaultSetter(target, key, value) {
target[key] = value;
}
function _interpolateNumber(p0, p1, percent) {
return (p1 - p0) * percent + p0;
}
function _interpolateArray(p0, p1, percent, out, arrDim) {
var len = p0.length;
if (arrDim == 1) {
for (var i = 0; i < len; i++) {
out[i] = _interpolateNumber(p0[i], p1[i], percent);
}
} else {
var len2 = p0[0].length;
for (var i = 0; i < len; i++) {
for (var j = 0; j < len2; j++) {
out[i][j] = _interpolateNumber(p0[i][j], p1[i][j], percent);
}
}
}
}
function _isArrayLike(data) {
switch (typeof data) {
case 'undefined':
case 'string':
return false;
}
return typeof data.length !== 'undefined';
}
function _catmullRomInterpolateArray(p0, p1, p2, p3, t, t2, t3, out, arrDim) {
var len = p0.length;
if (arrDim == 1) {
for (var i = 0; i < len; i++) {
out[i] = _catmullRomInterpolate(p0[i], p1[i], p2[i], p3[i], t, t2, t3);
}
} else {
var len2 = p0[0].length;
for (var i = 0; i < len; i++) {
for (var j = 0; j < len2; j++) {
out[i][j] = _catmullRomInterpolate(p0[i][j], p1[i][j], p2[i][j], p3[i][j], t, t2, t3);
}
}
}
}
function _catmullRomInterpolate(p0, p1, p2, p3, t, t2, t3) {
var v0 = (p2 - p0) * 0.5;
var v1 = (p3 - p1) * 0.5;
return (2 * (p1 - p2) + v0 + v1) * t3 + (-3 * (p1 - p2) - 2 * v0 - v1) * t2 + v0 * t + p1;
}
function _cloneValue(value) {
if (_isArrayLike(value)) {
var len = value.length;
if (_isArrayLike(value[0])) {
var ret = [];
for (var i = 0; i < len; i++) {
ret.push(arraySlice.call(value[i]));
}
return ret;
} else {
return arraySlice.call(value);
}
} else {
return value;
}
}
function rgba2String(rgba) {
rgba[0] = Math.floor(rgba[0]);
rgba[1] = Math.floor(rgba[1]);
rgba[2] = Math.floor(rgba[2]);
return 'rgba(' + rgba.join(',') + ')';
}
var Animator = function (target, loop, getter, setter) {
this._tracks = {};
this._target = target;
this._loop = loop || false;
this._getter = getter || _defaultGetter;
this._setter = setter || _defaultSetter;
this._clipCount = 0;
this._delay = 0;
this._doneList = [];
this._onframeList = [];
this._clipList = [];
};
Animator.prototype = {
when: function (time, props) {
for (var propName in props) {
if (!this._tracks[propName]) {
this._tracks[propName] = [];
if (time !== 0) {
this._tracks[propName].push({
time: 0,
value: _cloneValue(this._getter(this._target, propName))
});
}
}
this._tracks[propName].push({
time: parseInt(time, 10),
value: props[propName]
});
}
return this;
},
during: function (callback) {
this._onframeList.push(callback);
return this;
},
start: function (easing) {
var self = this;
var setter = this._setter;
var getter = this._getter;
var useSpline = easing === 'spline';
var ondestroy = function () {
self._clipCount--;
if (self._clipCount === 0) {
self._tracks = {};
var len = self._doneList.length;
for (var i = 0; i < len; i++) {
self._doneList[i].call(self);
}
}
};
var createTrackClip = function (keyframes, propName) {
var trackLen = keyframes.length;
if (!trackLen) {
return;
}
var firstVal = keyframes[0].value;
var isValueArray = _isArrayLike(firstVal);
var isValueColor = false;
var arrDim = isValueArray && _isArrayLike(firstVal[0]) ? 2 : 1;
keyframes.sort(function (a, b) {
return a.time - b.time;
});
var trackMaxTime;
if (trackLen) {
trackMaxTime = keyframes[trackLen - 1].time;
} else {
return;
}
var kfPercents = [];
var kfValues = [];
for (var i = 0; i < trackLen; i++) {
kfPercents.push(keyframes[i].time / trackMaxTime);
var value = keyframes[i].value;
if (typeof value == 'string') {
value = color.toArray(value);
if (value.length === 0) {
value[0] = value[1] = value[2] = 0;
value[3] = 1;
}
isValueColor = true;
}
kfValues.push(value);
}
var cacheKey = 0;
var cachePercent = 0;
var start;
var i;
var w;
var p0;
var p1;
var p2;
var p3;
if (isValueColor) {
var rgba = [
0,
0,
0,
0
];
}
var onframe = function (target, percent) {
if (percent < cachePercent) {
start = Math.min(cacheKey + 1, trackLen - 1);
for (i = start; i >= 0; i--) {
if (kfPercents[i] <= percent) {
break;
}
}
i = Math.min(i, trackLen - 2);
} else {
for (i = cacheKey; i < trackLen; i++) {
if (kfPercents[i] > percent) {
break;
}
}
i = Math.min(i - 1, trackLen - 2);
}
cacheKey = i;
cachePercent = percent;
var range = kfPercents[i + 1] - kfPercents[i];
if (range === 0) {
return;
} else {
w = (percent - kfPercents[i]) / range;
}
if (useSpline) {
p1 = kfValues[i];
p0 = kfValues[i === 0 ? i : i - 1];
p2 = kfValues[i > trackLen - 2 ? trackLen - 1 : i + 1];
p3 = kfValues[i > trackLen - 3 ? trackLen - 1 : i + 2];
if (isValueArray) {
_catmullRomInterpolateArray(p0, p1, p2, p3, w, w * w, w * w * w, getter(target, propName), arrDim);
} else {
var value;
if (isValueColor) {
value = _catmullRomInterpolateArray(p0, p1, p2, p3, w, w * w, w * w * w, rgba, 1);
value = rgba2String(rgba);
} else {
value = _catmullRomInterpolate(p0, p1, p2, p3, w, w * w, w * w * w);
}
setter(target, propName, value);
}
} else {
if (isValueArray) {
_interpolateArray(kfValues[i], kfValues[i + 1], w, getter(target, propName), arrDim);
} else {
var value;
if (isValueColor) {
_interpolateArray(kfValues[i], kfValues[i + 1], w, rgba, 1);
value = rgba2String(rgba);
} else {
value = _interpolateNumber(kfValues[i], kfValues[i + 1], w);
}
setter(target, propName, value);
}
}
for (i = 0; i < self._onframeList.length; i++) {
self._onframeList[i](target, percent);
}
};
var clip = new Clip({
target: self._target,
life: trackMaxTime,
loop: self._loop,
delay: self._delay,
onframe: onframe,
ondestroy: ondestroy
});
if (easing && easing !== 'spline') {
clip.easing = easing;
}
self._clipList.push(clip);
self._clipCount++;
self.animation.add(clip);
};
for (var propName in this._tracks) {
createTrackClip(this._tracks[propName], propName);
}
return this;
},
stop: function () {
for (var i = 0; i < this._clipList.length; i++) {
var clip = this._clipList[i];
this.animation.remove(clip);
}
this._clipList = [];
},
delay: function (time) {
this._delay = time;
return this;
},
done: function (cb) {
if (cb) {
this._doneList.push(cb);
}
return this;
}
};
return Animation;
});define('zrender/tool/vector', [], function () {
var ArrayCtor = typeof Float32Array === 'undefined' ? Array : Float32Array;
var vector = {
create: function (x, y) {
var out = new ArrayCtor(2);
out[0] = x || 0;
out[1] = y || 0;
return out;
},
copy: function (out, v) {
out[0] = v[0];
out[1] = v[1];
return out;
},
clone: function (v) {
var out = new ArrayCtor(2);
out[0] = v[0];
out[1] = v[1];
return out;
},
set: function (out, a, b) {
out[0] = a;
out[1] = b;
return out;
},
add: function (out, v1, v2) {
out[0] = v1[0] + v2[0];
out[1] = v1[1] + v2[1];
return out;
},
scaleAndAdd: function (out, v1, v2, a) {
out[0] = v1[0] + v2[0] * a;
out[1] = v1[1] + v2[1] * a;
return out;
},
sub: function (out, v1, v2) {
out[0] = v1[0] - v2[0];
out[1] = v1[1] - v2[1];
return out;
},
len: function (v) {
return Math.sqrt(this.lenSquare(v));
},
lenSquare: function (v) {
return v[0] * v[0] + v[1] * v[1];
},
mul: function (out, v1, v2) {
out[0] = v1[0] * v2[0];
out[1] = v1[1] * v2[1];
return out;
},
div: function (out, v1, v2) {
out[0] = v1[0] / v2[0];
out[1] = v1[1] / v2[1];
return out;
},
dot: function (v1, v2) {
return v1[0] * v2[0] + v1[1] * v2[1];
},
scale: function (out, v, s) {
out[0] = v[0] * s;
out[1] = v[1] * s;
return out;
},
normalize: function (out, v) {
var d = vector.len(v);
if (d === 0) {
out[0] = 0;
out[1] = 0;
} else {
out[0] = v[0] / d;
out[1] = v[1] / d;
}
return out;
},
distance: function (v1, v2) {
return Math.sqrt((v1[0] - v2[0]) * (v1[0] - v2[0]) + (v1[1] - v2[1]) * (v1[1] - v2[1]));
},
distanceSquare: function (v1, v2) {
return (v1[0] - v2[0]) * (v1[0] - v2[0]) + (v1[1] - v2[1]) * (v1[1] - v2[1]);
},
negate: function (out, v) {
out[0] = -v[0];
out[1] = -v[1];
return out;
},
lerp: function (out, v1, v2, t) {
out[0] = v1[0] + t * (v2[0] - v1[0]);
out[1] = v1[1] + t * (v2[1] - v1[1]);
return out;
},
applyTransform: function (out, v, m) {
var x = v[0];
var y = v[1];
out[0] = m[0] * x + m[2] * y + m[4];
out[1] = m[1] * x + m[3] * y + m[5];
return out;
},
min: function (out, v1, v2) {
out[0] = Math.min(v1[0], v2[0]);
out[1] = Math.min(v1[1], v2[1]);
return out;
},
max: function (out, v1, v2) {
out[0] = Math.max(v1[0], v2[0]);
out[1] = Math.max(v1[1], v2[1]);
return out;
}
};
vector.length = vector.len;
vector.lengthSquare = vector.lenSquare;
vector.dist = vector.distance;
vector.distSquare = vector.distanceSquare;
return vector;
});define('zrender/tool/matrix', [], function () {
var ArrayCtor = typeof Float32Array === 'undefined' ? Array : Float32Array;
var matrix = {
create: function () {
var out = new ArrayCtor(6);
matrix.identity(out);
return out;
},
identity: function (out) {
out[0] = 1;
out[1] = 0;
out[2] = 0;
out[3] = 1;
out[4] = 0;
out[5] = 0;
return out;
},
copy: function (out, m) {
out[0] = m[0];
out[1] = m[1];
out[2] = m[2];
out[3] = m[3];
out[4] = m[4];
out[5] = m[5];
return out;
},
mul: function (out, m1, m2) {
out[0] = m1[0] * m2[0] + m1[2] * m2[1];
out[1] = m1[1] * m2[0] + m1[3] * m2[1];
out[2] = m1[0] * m2[2] + m1[2] * m2[3];
out[3] = m1[1] * m2[2] + m1[3] * m2[3];
out[4] = m1[0] * m2[4] + m1[2] * m2[5] + m1[4];
out[5] = m1[1] * m2[4] + m1[3] * m2[5] + m1[5];
return out;
},
translate: function (out, a, v) {
out[0] = a[0];
out[1] = a[1];
out[2] = a[2];
out[3] = a[3];
out[4] = a[4] + v[0];
out[5] = a[5] + v[1];
return out;
},
rotate: function (out, a, rad) {
var aa = a[0];
var ac = a[2];
var atx = a[4];
var ab = a[1];
var ad = a[3];
var aty = a[5];
var st = Math.sin(rad);
var ct = Math.cos(rad);
out[0] = aa * ct + ab * st;
out[1] = -aa * st + ab * ct;
out[2] = ac * ct + ad * st;
out[3] = -ac * st + ct * ad;
out[4] = ct * atx + st * aty;
out[5] = ct * aty - st * atx;
return out;
},
scale: function (out, a, v) {
var vx = v[0];
var vy = v[1];
out[0] = a[0] * vx;
out[1] = a[1] * vy;
out[2] = a[2] * vx;
out[3] = a[3] * vy;
out[4] = a[4] * vx;
out[5] = a[5] * vy;
return out;
},
invert: function (out, a) {
var aa = a[0];
var ac = a[2];
var atx = a[4];
var ab = a[1];
var ad = a[3];
var aty = a[5];
var det = aa * ad - ab * ac;
if (!det) {
return null;
}
det = 1 / det;
out[0] = ad * det;
out[1] = -ab * det;
out[2] = -ac * det;
out[3] = aa * det;
out[4] = (ac * aty - ad * atx) * det;
out[5] = (ab * atx - aa * aty) * det;
return out;
}
};
return matrix;
});define('zrender/loadingEffect/Base', [
'require',
'../tool/util',
'../shape/Text',
'../shape/Rectangle'
], function (require) {
var util = require('../tool/util');
var TextShape = require('../shape/Text');
var RectangleShape = require('../shape/Rectangle');
var DEFAULT_TEXT = 'Loading...';
var DEFAULT_TEXT_FONT = 'normal 16px Arial';
function Base(options) {
this.setOptions(options);
}
Base.prototype.createTextShape = function (textStyle) {
return new TextShape({
highlightStyle: util.merge({
x: this.canvasWidth / 2,
y: this.canvasHeight / 2,
text: DEFAULT_TEXT,
textAlign: 'center',
textBaseline: 'middle',
textFont: DEFAULT_TEXT_FONT,
color: '#333',
brushType: 'fill'
}, textStyle, true)
});
};
Base.prototype.createBackgroundShape = function (color) {
return new RectangleShape({
highlightStyle: {
x: 0,
y: 0,
width: this.canvasWidth,
height: this.canvasHeight,
brushType: 'fill',
color: color
}
});
};
Base.prototype.start = function (painter) {
this.canvasWidth = painter._width;
this.canvasHeight = painter._height;
function addShapeHandle(param) {
painter.storage.addHover(param);
}
function refreshHandle() {
painter.refreshHover();
}
this.loadingTimer = this._start(addShapeHandle, refreshHandle);
};
Base.prototype._start = function () {
return setInterval(function () {
}, 10000);
};
Base.prototype.stop = function () {
clearInterval(this.loadingTimer);
};
Base.prototype.setOptions = function (options) {
this.options = options || {};
};
Base.prototype.adjust = function (value, region) {
if (value <= region[0]) {
value = region[0];
} else if (value >= region[1]) {
value = region[1];
}
return value;
};
Base.prototype.getLocation = function (loc, totalWidth, totalHeight) {
var x = loc.x != null ? loc.x : 'center';
switch (x) {
case 'center':
x = Math.floor((this.canvasWidth - totalWidth) / 2);
break;
case 'left':
x = 0;
break;
case 'right':
x = this.canvasWidth - totalWidth;
break;
}
var y = loc.y != null ? loc.y : 'center';
switch (y) {
case 'center':
y = Math.floor((this.canvasHeight - totalHeight) / 2);
break;
case 'top':
y = 0;
break;
case 'bottom':
y = this.canvasHeight - totalHeight;
break;
}
return {
x: x,
y: y,
width: totalWidth,
height: totalHeight
};
};
return Base;
});define('zrender/Layer', [
'require',
'./mixin/Transformable',
'./tool/util',
'./config'
], function (require) {
var Transformable = require('./mixin/Transformable');
var util = require('./tool/util');
var vmlCanvasManager = window['G_vmlCanvasManager'];
var config = require('./config');
function returnFalse() {
return false;
}
function createDom(id, type, painter) {
var newDom = document.createElement(type);
var width = painter.getWidth();
var height = painter.getHeight();
newDom.style.position = 'absolute';
newDom.style.left = 0;
newDom.style.top = 0;
newDom.style.width = width + 'px';
newDom.style.height = height + 'px';
newDom.width = width * config.devicePixelRatio;
newDom.height = height * config.devicePixelRatio;
newDom.setAttribute('data-zr-dom-id', id);
return newDom;
}
var Layer = function (id, painter) {
this.id = id;
this.dom = createDom(id, 'canvas', painter);
this.dom.onselectstart = returnFalse;
this.dom.style['-webkit-user-select'] = 'none';
this.dom.style['user-select'] = 'none';
this.dom.style['-webkit-touch-callout'] = 'none';
this.dom.style['-webkit-tap-highlight-color'] = 'rgba(0,0,0,0)';
this.dom.className = config.elementClassName;
vmlCanvasManager && vmlCanvasManager.initElement(this.dom);
this.domBack = null;
this.ctxBack = null;
this.painter = painter;
this.unusedCount = 0;
this.config = null;
this.dirty = true;
this.elCount = 0;
this.clearColor = 0;
this.motionBlur = false;
this.lastFrameAlpha = 0.7;
this.zoomable = false;
this.panable = false;
this.maxZoom = Infinity;
this.minZoom = 0;
Transformable.call(this);
};
Layer.prototype.initContext = function () {
this.ctx = this.dom.getContext('2d');
var dpr = config.devicePixelRatio;
if (dpr != 1) {
this.ctx.scale(dpr, dpr);
}
};
Layer.prototype.createBackBuffer = function () {
if (vmlCanvasManager) {
return;
}
this.domBack = createDom('back-' + this.id, 'canvas', this.painter);
this.ctxBack = this.domBack.getContext('2d');
var dpr = config.devicePixelRatio;
if (dpr != 1) {
this.ctxBack.scale(dpr, dpr);
}
};
Layer.prototype.resize = function (width, height) {
var dpr = config.devicePixelRatio;
this.dom.style.width = width + 'px';
this.dom.style.height = height + 'px';
this.dom.setAttribute('width', width * dpr);
this.dom.setAttribute('height', height * dpr);
if (dpr != 1) {
this.ctx.scale(dpr, dpr);
}
if (this.domBack) {
this.domBack.setAttribute('width', width * dpr);
this.domBack.setAttribute('height', height * dpr);
if (dpr != 1) {
this.ctxBack.scale(dpr, dpr);
}
}
};
Layer.prototype.clear = function () {
var dom = this.dom;
var ctx = this.ctx;
var width = dom.width;
var height = dom.height;
var haveClearColor = this.clearColor && !vmlCanvasManager;
var haveMotionBLur = this.motionBlur && !vmlCanvasManager;
var lastFrameAlpha = this.lastFrameAlpha;
var dpr = config.devicePixelRatio;
if (haveMotionBLur) {
if (!this.domBack) {
this.createBackBuffer();
}
this.ctxBack.globalCompositeOperation = 'copy';
this.ctxBack.drawImage(dom, 0, 0, width / dpr, height / dpr);
}
ctx.clearRect(0, 0, width / dpr, height / dpr);
if (haveClearColor) {
ctx.save();
ctx.fillStyle = this.clearColor;
ctx.fillRect(0, 0, width / dpr, height / dpr);
ctx.restore();
}
if (haveMotionBLur) {
var domBack = this.domBack;
ctx.save();
ctx.globalAlpha = lastFrameAlpha;
ctx.drawImage(domBack, 0, 0, width / dpr, height / dpr);
ctx.restore();
}
};
util.merge(Layer.prototype, Transformable.prototype);
return Layer;
});define('zrender/shape/Text', [
'require',
'../tool/area',
'./Base',
'../tool/util'
], function (require) {
var area = require('../tool/area');
var Base = require('./Base');
var Text = function (options) {
Base.call(this, options);
};
Text.prototype = {
type: 'text',
brush: function (ctx, isHighlight) {
var style = this.style;
if (isHighlight) {
style = this.getHighlightStyle(style, this.highlightStyle || {});
}
if (typeof style.text == 'undefined' || style.text === false) {
return;
}
ctx.save();
this.doClip(ctx);
this.setContext(ctx, style);
this.setTransform(ctx);
if (style.textFont) {
ctx.font = style.textFont;
}
ctx.textAlign = style.textAlign || 'start';
ctx.textBaseline = style.textBaseline || 'middle';
var text = (style.text + '').split('\n');
var lineHeight = area.getTextHeight('国', style.textFont);
var rect = this.getRect(style);
var x = style.x;
var y;
if (style.textBaseline == 'top') {
y = rect.y;
} else if (style.textBaseline == 'bottom') {
y = rect.y + lineHeight;
} else {
y = rect.y + lineHeight / 2;
}
for (var i = 0, l = text.length; i < l; i++) {
if (style.maxWidth) {
switch (style.brushType) {
case 'fill':
ctx.fillText(text[i], x, y, style.maxWidth);
break;
case 'stroke':
ctx.strokeText(text[i], x, y, style.maxWidth);
break;
case 'both':
ctx.fillText(text[i], x, y, style.maxWidth);
ctx.strokeText(text[i], x, y, style.maxWidth);
break;
default:
ctx.fillText(text[i], x, y, style.maxWidth);
}
} else {
switch (style.brushType) {
case 'fill':
ctx.fillText(text[i], x, y);
break;
case 'stroke':
ctx.strokeText(text[i], x, y);
break;
case 'both':
ctx.fillText(text[i], x, y);
ctx.strokeText(text[i], x, y);
break;
default:
ctx.fillText(text[i], x, y);
}
}
y += lineHeight;
}
ctx.restore();
return;
},
getRect: function (style) {
if (style.__rect) {
return style.__rect;
}
var width = area.getTextWidth(style.text, style.textFont);
var height = area.getTextHeight(style.text, style.textFont);
var textX = style.x;
if (style.textAlign == 'end' || style.textAlign == 'right') {
textX -= width;
} else if (style.textAlign == 'center') {
textX -= width / 2;
}
var textY;
if (style.textBaseline == 'top') {
textY = style.y;
} else if (style.textBaseline == 'bottom') {
textY = style.y - height;
} else {
textY = style.y - height / 2;
}
style.__rect = {
x: textX,
y: textY,
width: width,
height: height
};
return style.__rect;
}
};
require('../tool/util').inherits(Text, Base);
return Text;
});define('zrender/shape/Rectangle', [
'require',
'./Base',
'../tool/util'
], function (require) {
var Base = require('./Base');
var Rectangle = function (options) {
Base.call(this, options);
};
Rectangle.prototype = {
type: 'rectangle',
_buildRadiusPath: function (ctx, style) {
var x = style.x;
var y = style.y;
var width = style.width;
var height = style.height;
var r = style.radius;
var r1;
var r2;
var r3;
var r4;
if (typeof r === 'number') {
r1 = r2 = r3 = r4 = r;
} else if (r instanceof Array) {
if (r.length === 1) {
r1 = r2 = r3 = r4 = r[0];
} else if (r.length === 2) {
r1 = r3 = r[0];
r2 = r4 = r[1];
} else if (r.length === 3) {
r1 = r[0];
r2 = r4 = r[1];
r3 = r[2];
} else {
r1 = r[0];
r2 = r[1];
r3 = r[2];
r4 = r[3];
}
} else {
r1 = r2 = r3 = r4 = 0;
}
var total;
if (r1 + r2 > width) {
total = r1 + r2;
r1 *= width / total;
r2 *= width / total;
}
if (r3 + r4 > width) {
total = r3 + r4;
r3 *= width / total;
r4 *= width / total;
}
if (r2 + r3 > height) {
total = r2 + r3;
r2 *= height / total;
r3 *= height / total;
}
if (r1 + r4 > height) {
total = r1 + r4;
r1 *= height / total;
r4 *= height / total;
}
ctx.moveTo(x + r1, y);
ctx.lineTo(x + width - r2, y);
r2 !== 0 && ctx.quadraticCurveTo(x + width, y, x + width, y + r2);
ctx.lineTo(x + width, y + height - r3);
r3 !== 0 && ctx.quadraticCurveTo(x + width, y + height, x + width - r3, y + height);
ctx.lineTo(x + r4, y + height);
r4 !== 0 && ctx.quadraticCurveTo(x, y + height, x, y + height - r4);
ctx.lineTo(x, y + r1);
r1 !== 0 && ctx.quadraticCurveTo(x, y, x + r1, y);
},
buildPath: function (ctx, style) {
if (!style.radius) {
ctx.moveTo(style.x, style.y);
ctx.lineTo(style.x + style.width, style.y);
ctx.lineTo(style.x + style.width, style.y + style.height);
ctx.lineTo(style.x, style.y + style.height);
ctx.lineTo(style.x, style.y);
} else {
this._buildRadiusPath(ctx, style);
}
ctx.closePath();
return;
},
getRect: function (style) {
if (style.__rect) {
return style.__rect;
}
var lineWidth;
if (style.brushType == 'stroke' || style.brushType == 'fill') {
lineWidth = style.lineWidth || 1;
} else {
lineWidth = 0;
}
style.__rect = {
x: Math.round(style.x - lineWidth / 2),
y: Math.round(style.y - lineWidth / 2),
width: style.width + lineWidth,
height: style.height + lineWidth
};
return style.__rect;
}
};
require('../tool/util').inherits(Rectangle, Base);
return Rectangle;
});define('zrender/tool/area', [
'require',
'./util',
'./curve'
], function (require) {
'use strict';
var util = require('./util');
var curve = require('./curve');
var _ctx;
var _textWidthCache = {};
var _textHeightCache = {};
var _textWidthCacheCounter = 0;
var _textHeightCacheCounter = 0;
var TEXT_CACHE_MAX = 5000;
var PI2 = Math.PI * 2;
function normalizeRadian(angle) {
angle %= PI2;
if (angle < 0) {
angle += PI2;
}
return angle;
}
function isInside(shape, area, x, y) {
if (!area || !shape) {
return false;
}
var zoneType = shape.type;
_ctx = _ctx || util.getContext();
var _mathReturn = _mathMethod(shape, area, x, y);
if (typeof _mathReturn != 'undefined') {
return _mathReturn;
}
if (shape.buildPath && _ctx.isPointInPath) {
return _buildPathMethod(shape, _ctx, area, x, y);
}
switch (zoneType) {
case 'ellipse':
return true;
case 'trochoid':
var _r = area.location == 'out' ? area.r1 + area.r2 + area.d : area.r1 - area.r2 + area.d;
return isInsideCircle(area, x, y, _r);
case 'rose':
return isInsideCircle(area, x, y, area.maxr);
default:
return false;
}
}
function _mathMethod(shape, area, x, y) {
var zoneType = shape.type;
switch (zoneType) {
case 'bezier-curve':
if (typeof area.cpX2 === 'undefined') {
return isInsideQuadraticStroke(area.xStart, area.yStart, area.cpX1, area.cpY1, area.xEnd, area.yEnd, area.lineWidth, x, y);
}
return isInsideCubicStroke(area.xStart, area.yStart, area.cpX1, area.cpY1, area.cpX2, area.cpY2, area.xEnd, area.yEnd, area.lineWidth, x, y);
case 'line':
return isInsideLine(area.xStart, area.yStart, area.xEnd, area.yEnd, area.lineWidth, x, y);
case 'polyline':
return isInsidePolyline(area.pointList, area.lineWidth, x, y);
case 'ring':
return isInsideRing(area.x, area.y, area.r0, area.r, x, y);
case 'circle':
return isInsideCircle(area.x, area.y, area.r, x, y);
case 'sector':
var startAngle = area.startAngle * Math.PI / 180;
var endAngle = area.endAngle * Math.PI / 180;
if (!area.clockWise) {
startAngle = -startAngle;
endAngle = -endAngle;
}
return isInsideSector(area.x, area.y, area.r0, area.r, startAngle, endAngle, !area.clockWise, x, y);
case 'path':
return area.pathArray && isInsidePath(area.pathArray, Math.max(area.lineWidth, 5), area.brushType, x, y);
case 'polygon':
case 'star':
case 'isogon':
return isInsidePolygon(area.pointList, x, y);
case 'text':
var rect = area.__rect || shape.getRect(area);
return isInsideRect(rect.x, rect.y, rect.width, rect.height, x, y);
case 'rectangle':
case 'image':
return isInsideRect(area.x, area.y, area.width, area.height, x, y);
}
}
function _buildPathMethod(shape, context, area, x, y) {
context.beginPath();
shape.buildPath(context, area);
context.closePath();
return context.isPointInPath(x, y);
}
function isOutside(shape, area, x, y) {
return !isInside(shape, area, x, y);
}
function isInsideLine(x0, y0, x1, y1, lineWidth, x, y) {
if (lineWidth === 0) {
return false;
}
var _l = Math.max(lineWidth, 5);
var _a = 0;
var _b = x0;
if (y > y0 + _l && y > y1 + _l || y < y0 - _l && y < y1 - _l || x > x0 + _l && x > x1 + _l || x < x0 - _l && x < x1 - _l) {
return false;
}
if (x0 !== x1) {
_a = (y0 - y1) / (x0 - x1);
_b = (x0 * y1 - x1 * y0) / (x0 - x1);
} else {
return Math.abs(x - x0) <= _l / 2;
}
var tmp = _a * x - y + _b;
var _s = tmp * tmp / (_a * _a + 1);
return _s <= _l / 2 * _l / 2;
}
function isInsideCubicStroke(x0, y0, x1, y1, x2, y2, x3, y3, lineWidth, x, y) {
if (lineWidth === 0) {
return false;
}
var _l = Math.max(lineWidth, 5);
if (y > y0 + _l && y > y1 + _l && y > y2 + _l && y > y3 + _l || y < y0 - _l && y < y1 - _l && y < y2 - _l && y < y3 - _l || x > x0 + _l && x > x1 + _l && x > x2 + _l && x > x3 + _l || x < x0 - _l && x < x1 - _l && x < x2 - _l && x < x3 - _l) {
return false;
}
var d = curve.cubicProjectPoint(x0, y0, x1, y1, x2, y2, x3, y3, x, y, null);
return d <= _l / 2;
}
function isInsideQuadraticStroke(x0, y0, x1, y1, x2, y2, lineWidth, x, y) {
if (lineWidth === 0) {
return false;
}
var _l = Math.max(lineWidth, 5);
if (y > y0 + _l && y > y1 + _l && y > y2 + _l || y < y0 - _l && y < y1 - _l && y < y2 - _l || x > x0 + _l && x > x1 + _l && x > x2 + _l || x < x0 - _l && x < x1 - _l && x < x2 - _l) {
return false;
}
var d = curve.quadraticProjectPoint(x0, y0, x1, y1, x2, y2, x, y, null);
return d <= _l / 2;
}
function isInsideArcStroke(cx, cy, r, startAngle, endAngle, anticlockwise, lineWidth, x, y) {
if (lineWidth === 0) {
return false;
}
var _l = Math.max(lineWidth, 5);
x -= cx;
y -= cy;
var d = Math.sqrt(x * x + y * y);
if (d - _l > r || d + _l < r) {
return false;
}
if (Math.abs(startAngle - endAngle) >= PI2) {
return true;
}
if (anticlockwise) {
var tmp = startAngle;
startAngle = normalizeRadian(endAngle);
endAngle = normalizeRadian(tmp);
} else {
startAngle = normalizeRadian(startAngle);
endAngle = normalizeRadian(endAngle);
}
if (startAngle > endAngle) {
endAngle += PI2;
}
var angle = Math.atan2(y, x);
if (angle < 0) {
angle += PI2;
}
return angle >= startAngle && angle <= endAngle || angle + PI2 >= startAngle && angle + PI2 <= endAngle;
}
function isInsidePolyline(points, lineWidth, x, y) {
var lineWidth = Math.max(lineWidth, 10);
for (var i = 0, l = points.length - 1; i < l; i++) {
var x0 = points[i][0];
var y0 = points[i][1];
var x1 = points[i + 1][0];
var y1 = points[i + 1][1];
if (isInsideLine(x0, y0, x1, y1, lineWidth, x, y)) {
return true;
}
}
return false;
}
function isInsideRing(cx, cy, r0, r, x, y) {
var d = (x - cx) * (x - cx) + (y - cy) * (y - cy);
return d < r * r && d > r0 * r0;
}
function isInsideRect(x0, y0, width, height, x, y) {
return x >= x0 && x <= x0 + width && y >= y0 && y <= y0 + height;
}
function isInsideCircle(x0, y0, r, x, y) {
return (x - x0) * (x - x0) + (y - y0) * (y - y0) < r * r;
}
function isInsideSector(cx, cy, r0, r, startAngle, endAngle, anticlockwise, x, y) {
return isInsideArcStroke(cx, cy, (r0 + r) / 2, startAngle, endAngle, anticlockwise, r - r0, x, y);
}
function isInsidePolygon(points, x, y) {
var N = points.length;
var w = 0;
for (var i = 0, j = N - 1; i < N; i++) {
var x0 = points[j][0];
var y0 = points[j][1];
var x1 = points[i][0];
var y1 = points[i][1];
w += windingLine(x0, y0, x1, y1, x, y);
j = i;
}
return w !== 0;
}
function windingLine(x0, y0, x1, y1, x, y) {
if (y > y0 && y > y1 || y < y0 && y < y1) {
return 0;
}
if (y1 == y0) {
return 0;
}
var dir = y1 < y0 ? 1 : -1;
var t = (y - y0) / (y1 - y0);
var x_ = t * (x1 - x0) + x0;
return x_ > x ? dir : 0;
}
var roots = [
-1,
-1,
-1
];
var extrema = [
-1,
-1
];
function swapExtrema() {
var tmp = extrema[0];
extrema[0] = extrema[1];
extrema[1] = tmp;
}
function windingCubic(x0, y0, x1, y1, x2, y2, x3, y3, x, y) {
if (y > y0 && y > y1 && y > y2 && y > y3 || y < y0 && y < y1 && y < y2 && y < y3) {
return 0;
}
var nRoots = curve.cubicRootAt(y0, y1, y2, y3, y, roots);
if (nRoots === 0) {
return 0;
} else {
var w = 0;
var nExtrema = -1;
var y0_, y1_;
for (var i = 0; i < nRoots; i++) {
var t = roots[i];
var x_ = curve.cubicAt(x0, x1, x2, x3, t);
if (x_ < x) {
continue;
}
if (nExtrema < 0) {
nExtrema = curve.cubicExtrema(y0, y1, y2, y3, extrema);
if (extrema[1] < extrema[0] && nExtrema > 1) {
swapExtrema();
}
y0_ = curve.cubicAt(y0, y1, y2, y3, extrema[0]);
if (nExtrema > 1) {
y1_ = curve.cubicAt(y0, y1, y2, y3, extrema[1]);
}
}
if (nExtrema == 2) {
if (t < extrema[0]) {
w += y0_ < y0 ? 1 : -1;
} else if (t < extrema[1]) {
w += y1_ < y0_ ? 1 : -1;
} else {
w += y3 < y1_ ? 1 : -1;
}
} else {
if (t < extrema[0]) {
w += y0_ < y0 ? 1 : -1;
} else {
w += y3 < y0_ ? 1 : -1;
}
}
}
return w;
}
}
function windingQuadratic(x0, y0, x1, y1, x2, y2, x, y) {
if (y > y0 && y > y1 && y > y2 || y < y0 && y < y1 && y < y2) {
return 0;
}
var nRoots = curve.quadraticRootAt(y0, y1, y2, y, roots);
if (nRoots === 0) {
return 0;
} else {
var t = curve.quadraticExtremum(y0, y1, y2);
if (t >= 0 && t <= 1) {
var w = 0;
var y_ = curve.quadraticAt(y0, y1, y2, t);
for (var i = 0; i < nRoots; i++) {
var x_ = curve.quadraticAt(x0, x1, x2, roots[i]);
if (x_ < x) {
continue;
}
if (roots[i] < t) {
w += y_ < y0 ? 1 : -1;
} else {
w += y2 < y_ ? 1 : -1;
}
}
return w;
} else {
var x_ = curve.quadraticAt(x0, x1, x2, roots[0]);
if (x_ < x) {
return 0;
}
return y2 < y0 ? 1 : -1;
}
}
}
function windingArc(cx, cy, r, startAngle, endAngle, anticlockwise, x, y) {
y -= cy;
if (y > r || y < -r) {
return 0;
}
var tmp = Math.sqrt(r * r - y * y);
roots[0] = -tmp;
roots[1] = tmp;
if (Math.abs(startAngle - endAngle) >= PI2) {
startAngle = 0;
endAngle = PI2;
var dir = anticlockwise ? 1 : -1;
if (x >= roots[0] + cx && x <= roots[1] + cx) {
return dir;
} else {
return 0;
}
}
if (anticlockwise) {
var tmp = startAngle;
startAngle = normalizeRadian(endAngle);
endAngle = normalizeRadian(tmp);
} else {
startAngle = normalizeRadian(startAngle);
endAngle = normalizeRadian(endAngle);
}
if (startAngle > endAngle) {
endAngle += PI2;
}
var w = 0;
for (var i = 0; i < 2; i++) {
var x_ = roots[i];
if (x_ + cx > x) {
var angle = Math.atan2(y, x_);
var dir = anticlockwise ? 1 : -1;
if (angle < 0) {
angle = PI2 + angle;
}
if (angle >= startAngle && angle <= endAngle || angle + PI2 >= startAngle && angle + PI2 <= endAngle) {
if (angle > Math.PI / 2 && angle < Math.PI * 1.5) {
dir = -dir;
}
w += dir;
}
}
}
return w;
}
function isInsidePath(pathArray, lineWidth, brushType, x, y) {
var w = 0;
var xi = 0;
var yi = 0;
var x0 = 0;
var y0 = 0;
var beginSubpath = true;
var firstCmd = true;
brushType = brushType || 'fill';
var hasStroke = brushType === 'stroke' || brushType === 'both';
var hasFill = brushType === 'fill' || brushType === 'both';
for (var i = 0; i < pathArray.length; i++) {
var seg = pathArray[i];
var p = seg.points;
if (beginSubpath || seg.command === 'M') {
if (i > 0) {
if (hasFill) {
w += windingLine(xi, yi, x0, y0, x, y);
}
if (w !== 0) {
return true;
}
}
x0 = p[p.length - 2];
y0 = p[p.length - 1];
beginSubpath = false;
if (firstCmd && seg.command !== 'A') {
firstCmd = false;
xi = x0;
yi = y0;
}
}
switch (seg.command) {
case 'M':
xi = p[0];
yi = p[1];
break;
case 'L':
if (hasStroke) {
if (isInsideLine(xi, yi, p[0], p[1], lineWidth, x, y)) {
return true;
}
}
if (hasFill) {
w += windingLine(xi, yi, p[0], p[1], x, y);
}
xi = p[0];
yi = p[1];
break;
case 'C':
if (hasStroke) {
if (isInsideCubicStroke(xi, yi, p[0], p[1], p[2], p[3], p[4], p[5], lineWidth, x, y)) {
return true;
}
}
if (hasFill) {
w += windingCubic(xi, yi, p[0], p[1], p[2], p[3], p[4], p[5], x, y);
}
xi = p[4];
yi = p[5];
break;
case 'Q':
if (hasStroke) {
if (isInsideQuadraticStroke(xi, yi, p[0], p[1], p[2], p[3], lineWidth, x, y)) {
return true;
}
}
if (hasFill) {
w += windingQuadratic(xi, yi, p[0], p[1], p[2], p[3], x, y);
}
xi = p[2];
yi = p[3];
break;
case 'A':
var cx = p[0];
var cy = p[1];
var rx = p[2];
var ry = p[3];
var theta = p[4];
var dTheta = p[5];
var x1 = Math.cos(theta) * rx + cx;
var y1 = Math.sin(theta) * ry + cy;
if (!firstCmd) {
w += windingLine(xi, yi, x1, y1);
} else {
firstCmd = false;
x0 = x1;
y0 = y1;
}
var _x = (x - cx) * ry / rx + cx;
if (hasStroke) {
if (isInsideArcStroke(cx, cy, ry, theta, theta + dTheta, 1 - p[7], lineWidth, _x, y)) {
return true;
}
}
if (hasFill) {
w += windingArc(cx, cy, ry, theta, theta + dTheta, 1 - p[7], _x, y);
}
xi = Math.cos(theta + dTheta) * rx + cx;
yi = Math.sin(theta + dTheta) * ry + cy;
break;
case 'z':
if (hasStroke) {
if (isInsideLine(xi, yi, x0, y0, lineWidth, x, y)) {
return true;
}
}
beginSubpath = true;
break;
}
}
if (hasFill) {
w += windingLine(xi, yi, x0, y0, x, y);
}
return w !== 0;
}
function getTextWidth(text, textFont) {
var key = text + ':' + textFont;
if (_textWidthCache[key]) {
return _textWidthCache[key];
}
_ctx = _ctx || util.getContext();
_ctx.save();
if (textFont) {
_ctx.font = textFont;
}
text = (text + '').split('\n');
var width = 0;
for (var i = 0, l = text.length; i < l; i++) {
width = Math.max(_ctx.measureText(text[i]).width, width);
}
_ctx.restore();
_textWidthCache[key] = width;
if (++_textWidthCacheCounter > TEXT_CACHE_MAX) {
_textWidthCacheCounter = 0;
_textWidthCache = {};
}
return width;
}
function getTextHeight(text, textFont) {
var key = text + ':' + textFont;
if (_textHeightCache[key]) {
return _textHeightCache[key];
}
_ctx = _ctx || util.getContext();
_ctx.save();
if (textFont) {
_ctx.font = textFont;
}
text = (text + '').split('\n');
var height = (_ctx.measureText('国').width + 2) * text.length;
_ctx.restore();
_textHeightCache[key] = height;
if (++_textHeightCacheCounter > TEXT_CACHE_MAX) {
_textHeightCacheCounter = 0;
_textHeightCache = {};
}
return height;
}
return {
isInside: isInside,
isOutside: isOutside,
getTextWidth: getTextWidth,
getTextHeight: getTextHeight,
isInsidePath: isInsidePath,
isInsidePolygon: isInsidePolygon,
isInsideSector: isInsideSector,
isInsideCircle: isInsideCircle,
isInsideLine: isInsideLine,
isInsideRect: isInsideRect,
isInsidePolyline: isInsidePolyline,
isInsideCubicStroke: isInsideCubicStroke,
isInsideQuadraticStroke: isInsideQuadraticStroke
};
});define('zrender/shape/Base', [
'require',
'../tool/matrix',
'../tool/guid',
'../tool/util',
'../tool/log',
'../mixin/Transformable',
'../mixin/Eventful',
'../tool/area',
'../tool/color'
], function (require) {
var vmlCanvasManager = window['G_vmlCanvasManager'];
var matrix = require('../tool/matrix');
var guid = require('../tool/guid');
var util = require('../tool/util');
var log = require('../tool/log');
var Transformable = require('../mixin/Transformable');
var Eventful = require('../mixin/Eventful');
function _fillText(ctx, text, x, y, textFont, textAlign, textBaseline) {
if (textFont) {
ctx.font = textFont;
}
ctx.textAlign = textAlign;
ctx.textBaseline = textBaseline;
var rect = _getTextRect(text, x, y, textFont, textAlign, textBaseline);
text = (text + '').split('\n');
var lineHeight = require('../tool/area').getTextHeight('国', textFont);
switch (textBaseline) {
case 'top':
y = rect.y;
break;
case 'bottom':
y = rect.y + lineHeight;
break;
default:
y = rect.y + lineHeight / 2;
}
for (var i = 0, l = text.length; i < l; i++) {
ctx.fillText(text[i], x, y);
y += lineHeight;
}
}
function _getTextRect(text, x, y, textFont, textAlign, textBaseline) {
var area = require('../tool/area');
var width = area.getTextWidth(text, textFont);
var lineHeight = area.getTextHeight('国', textFont);
text = (text + '').split('\n');
switch (textAlign) {
case 'end':
case 'right':
x -= width;
break;
case 'center':
x -= width / 2;
break;
}
switch (textBaseline) {
case 'top':
break;
case 'bottom':
y -= lineHeight * text.length;
break;
default:
y -= lineHeight * text.length / 2;
}
return {
x: x,
y: y,
width: width,
height: lineHeight * text.length
};
}
var Base = function (options) {
options = options || {};
this.id = options.id || guid();
for (var key in options) {
this[key] = options[key];
}
this.style = this.style || {};
this.highlightStyle = this.highlightStyle || null;
this.parent = null;
this.__dirty = true;
this.__clipShapes = [];
Transformable.call(this);
Eventful.call(this);
};
Base.prototype.invisible = false;
Base.prototype.ignore = false;
Base.prototype.zlevel = 0;
Base.prototype.draggable = false;
Base.prototype.clickable = false;
Base.prototype.hoverable = true;
Base.prototype.z = 0;
Base.prototype.brush = function (ctx, isHighlight) {
var style = this.beforeBrush(ctx, isHighlight);
ctx.beginPath();
this.buildPath(ctx, style);
switch (style.brushType) {
case 'both':
ctx.fill();
case 'stroke':
style.lineWidth > 0 && ctx.stroke();
break;
default:
ctx.fill();
}
this.drawText(ctx, style, this.style);
this.afterBrush(ctx);
};
Base.prototype.beforeBrush = function (ctx, isHighlight) {
var style = this.style;
if (this.brushTypeOnly) {
style.brushType = this.brushTypeOnly;
}
if (isHighlight) {
style = this.getHighlightStyle(style, this.highlightStyle || {}, this.brushTypeOnly);
}
if (this.brushTypeOnly == 'stroke') {
style.strokeColor = style.strokeColor || style.color;
}
ctx.save();
this.doClip(ctx);
this.setContext(ctx, style);
this.setTransform(ctx);
return style;
};
Base.prototype.afterBrush = function (ctx) {
ctx.restore();
};
var STYLE_CTX_MAP = [
[
'color',
'fillStyle'
],
[
'strokeColor',
'strokeStyle'
],
[
'opacity',
'globalAlpha'
],
[
'lineCap',
'lineCap'
],
[
'lineJoin',
'lineJoin'
],
[
'miterLimit',
'miterLimit'
],
[
'lineWidth',
'lineWidth'
],
[
'shadowBlur',
'shadowBlur'
],
[
'shadowColor',
'shadowColor'
],
[
'shadowOffsetX',
'shadowOffsetX'
],
[
'shadowOffsetY',
'shadowOffsetY'
]
];
Base.prototype.setContext = function (ctx, style) {
for (var i = 0, len = STYLE_CTX_MAP.length; i < len; i++) {
var styleProp = STYLE_CTX_MAP[i][0];
var styleValue = style[styleProp];
var ctxProp = STYLE_CTX_MAP[i][1];
if (typeof styleValue != 'undefined') {
ctx[ctxProp] = styleValue;
}
}
};
var clipShapeInvTransform = matrix.create();
Base.prototype.doClip = function (ctx) {
if (this.__clipShapes && !vmlCanvasManager) {
for (var i = 0; i < this.__clipShapes.length; i++) {
var clipShape = this.__clipShapes[i];
if (clipShape.needTransform) {
var m = clipShape.transform;
matrix.invert(clipShapeInvTransform, m);
ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
}
ctx.beginPath();
clipShape.buildPath(ctx, clipShape.style);
ctx.clip();
if (clipShape.needTransform) {
var m = clipShapeInvTransform;
ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
}
}
}
};
Base.prototype.getHighlightStyle = function (style, highlightStyle, brushTypeOnly) {
var newStyle = {};
for (var k in style) {
newStyle[k] = style[k];
}
var color = require('../tool/color');
var highlightColor = color.getHighlightColor();
if (style.brushType != 'stroke') {
newStyle.strokeColor = highlightColor;
newStyle.lineWidth = (style.lineWidth || 1) + this.getHighlightZoom();
newStyle.brushType = 'both';
} else {
if (brushTypeOnly != 'stroke') {
newStyle.strokeColor = highlightColor;
newStyle.lineWidth = (style.lineWidth || 1) + this.getHighlightZoom();
} else {
newStyle.strokeColor = highlightStyle.strokeColor || color.mix(style.strokeColor, color.toRGB(highlightColor));
}
}
for (var k in highlightStyle) {
if (typeof highlightStyle[k] != 'undefined') {
newStyle[k] = highlightStyle[k];
}
}
return newStyle;
};
Base.prototype.getHighlightZoom = function () {
return this.type != 'text' ? 6 : 2;
};
Base.prototype.drift = function (dx, dy) {
this.position[0] += dx;
this.position[1] += dy;
};
Base.prototype.buildPath = function (ctx, style) {
log('buildPath not implemented in ' + this.type);
};
Base.prototype.getRect = function (style) {
log('getRect not implemented in ' + this.type);
};
Base.prototype.isCover = function (x, y) {
var originPos = this.transformCoordToLocal(x, y);
x = originPos[0];
y = originPos[1];
if (this.isCoverRect(x, y)) {
return require('../tool/area').isInside(this, this.style, x, y);
}
return false;
};
Base.prototype.isCoverRect = function (x, y) {
var rect = this.style.__rect;
if (!rect) {
rect = this.style.__rect = this.getRect(this.style);
}
return x >= rect.x && x <= rect.x + rect.width && y >= rect.y && y <= rect.y + rect.height;
};
Base.prototype.drawText = function (ctx, style, normalStyle) {
if (typeof style.text == 'undefined' || style.text === false) {
return;
}
var textColor = style.textColor || style.color || style.strokeColor;
ctx.fillStyle = textColor;
var dd = 10;
var al;
var bl;
var tx;
var ty;
var textPosition = style.textPosition || this.textPosition || 'top';
switch (textPosition) {
case 'inside':
case 'top':
case 'bottom':
case 'left':
case 'right':
if (this.getRect) {
var rect = (normalStyle || style).__rect || this.getRect(normalStyle || style);
switch (textPosition) {
case 'inside':
tx = rect.x + rect.width / 2;
ty = rect.y + rect.height / 2;
al = 'center';
bl = 'middle';
if (style.brushType != 'stroke' && textColor == style.color) {
ctx.fillStyle = '#fff';
}
break;
case 'left':
tx = rect.x - dd;
ty = rect.y + rect.height / 2;
al = 'end';
bl = 'middle';
break;
case 'right':
tx = rect.x + rect.width + dd;
ty = rect.y + rect.height / 2;
al = 'start';
bl = 'middle';
break;
case 'top':
tx = rect.x + rect.width / 2;
ty = rect.y - dd;
al = 'center';
bl = 'bottom';
break;
case 'bottom':
tx = rect.x + rect.width / 2;
ty = rect.y + rect.height + dd;
al = 'center';
bl = 'top';
break;
}
}
break;
case 'start':
case 'end':
var pointList = style.pointList || [
[
style.xStart || 0,
style.yStart || 0
],
[
style.xEnd || 0,
style.yEnd || 0
]
];
var length = pointList.length;
if (length < 2) {
return;
}
var xStart;
var xEnd;
var yStart;
var yEnd;
switch (textPosition) {
case 'start':
xStart = pointList[1][0];
xEnd = pointList[0][0];
yStart = pointList[1][1];
yEnd = pointList[0][1];
break;
case 'end':
xStart = pointList[length - 2][0];
xEnd = pointList[length - 1][0];
yStart = pointList[length - 2][1];
yEnd = pointList[length - 1][1];
break;
}
tx = xEnd;
ty = yEnd;
var angle = Math.atan((yStart - yEnd) / (xEnd - xStart)) / Math.PI * 180;
if (xEnd - xStart < 0) {
angle += 180;
} else if (yStart - yEnd < 0) {
angle += 360;
}
dd = 5;
if (angle >= 30 && angle <= 150) {
al = 'center';
bl = 'bottom';
ty -= dd;
} else if (angle > 150 && angle < 210) {
al = 'right';
bl = 'middle';
tx -= dd;
} else if (angle >= 210 && angle <= 330) {
al = 'center';
bl = 'top';
ty += dd;
} else {
al = 'left';
bl = 'middle';
tx += dd;
}
break;
case 'specific':
tx = style.textX || 0;
ty = style.textY || 0;
al = 'start';
bl = 'middle';
break;
}
if (tx != null && ty != null) {
_fillText(ctx, style.text, tx, ty, style.textFont, style.textAlign || al, style.textBaseline || bl);
}
};
Base.prototype.modSelf = function () {
this.__dirty = true;
if (this.style) {
this.style.__rect = null;
}
if (this.highlightStyle) {
this.highlightStyle.__rect = null;
}
};
Base.prototype.isSilent = function () {
return !(this.hoverable || this.draggable || this.clickable || this.onmousemove || this.onmouseover || this.onmouseout || this.onmousedown || this.onmouseup || this.onclick || this.ondragenter || this.ondragover || this.ondragleave || this.ondrop);
};
util.merge(Base.prototype, Transformable.prototype, true);
util.merge(Base.prototype, Eventful.prototype, true);
return Base;
});define('zrender/tool/curve', [
'require',
'./vector'
], function (require) {
var vector = require('./vector');
'use strict';
var EPSILON = 0.0001;
var THREE_SQRT = Math.sqrt(3);
var ONE_THIRD = 1 / 3;
var _v0 = vector.create();
var _v1 = vector.create();
var _v2 = vector.create();
function isAroundZero(val) {
return val > -EPSILON && val < EPSILON;
}
function isNotAroundZero(val) {
return val > EPSILON || val < -EPSILON;
}
function cubicAt(p0, p1, p2, p3, t) {
var onet = 1 - t;
return onet * onet * (onet * p0 + 3 * t * p1) + t * t * (t * p3 + 3 * onet * p2);
}
function cubicDerivativeAt(p0, p1, p2, p3, t) {
var onet = 1 - t;
return 3 * (((p1 - p0) * onet + 2 * (p2 - p1) * t) * onet + (p3 - p2) * t * t);
}
function cubicRootAt(p0, p1, p2, p3, val, roots) {
var a = p3 + 3 * (p1 - p2) - p0;
var b = 3 * (p2 - p1 * 2 + p0);
var c = 3 * (p1 - p0);
var d = p0 - val;
var A = b * b - 3 * a * c;
var B = b * c - 9 * a * d;
var C = c * c - 3 * b * d;
var n = 0;
if (isAroundZero(A) && isAroundZero(B)) {
if (isAroundZero(b)) {
roots[0] = 0;
} else {
var t1 = -c / b;
if (t1 >= 0 && t1 <= 1) {
roots[n++] = t1;
}
}
} else {
var disc = B * B - 4 * A * C;
if (isAroundZero(disc)) {
var K = B / A;
var t1 = -b / a + K;
var t2 = -K / 2;
if (t1 >= 0 && t1 <= 1) {
roots[n++] = t1;
}
if (t2 >= 0 && t2 <= 1) {
roots[n++] = t2;
}
} else if (disc > 0) {
var discSqrt = Math.sqrt(disc);
var Y1 = A * b + 1.5 * a * (-B + discSqrt);
var Y2 = A * b + 1.5 * a * (-B - discSqrt);
if (Y1 < 0) {
Y1 = -Math.pow(-Y1, ONE_THIRD);
} else {
Y1 = Math.pow(Y1, ONE_THIRD);
}
if (Y2 < 0) {
Y2 = -Math.pow(-Y2, ONE_THIRD);
} else {
Y2 = Math.pow(Y2, ONE_THIRD);
}
var t1 = (-b - (Y1 + Y2)) / (3 * a);
if (t1 >= 0 && t1 <= 1) {
roots[n++] = t1;
}
} else {
var T = (2 * A * b - 3 * a * B) / (2 * Math.sqrt(A * A * A));
var theta = Math.acos(T) / 3;
var ASqrt = Math.sqrt(A);
var tmp = Math.cos(theta);
var t1 = (-b - 2 * ASqrt * tmp) / (3 * a);
var t2 = (-b + ASqrt * (tmp + THREE_SQRT * Math.sin(theta))) / (3 * a);
var t3 = (-b + ASqrt * (tmp - THREE_SQRT * Math.sin(theta))) / (3 * a);
if (t1 >= 0 && t1 <= 1) {
roots[n++] = t1;
}
if (t2 >= 0 && t2 <= 1) {
roots[n++] = t2;
}
if (t3 >= 0 && t3 <= 1) {
roots[n++] = t3;
}
}
}
return n;
}
function cubicExtrema(p0, p1, p2, p3, extrema) {
var b = 6 * p2 - 12 * p1 + 6 * p0;
var a = 9 * p1 + 3 * p3 - 3 * p0 - 9 * p2;
var c = 3 * p1 - 3 * p0;
var n = 0;
if (isAroundZero(a)) {
if (isNotAroundZero(b)) {
var t1 = -c / b;
if (t1 >= 0 && t1 <= 1) {
extrema[n++] = t1;
}
}
} else {
var disc = b * b - 4 * a * c;
if (isAroundZero(disc)) {
extrema[0] = -b / (2 * a);
} else if (disc > 0) {
var discSqrt = Math.sqrt(disc);
var t1 = (-b + discSqrt) / (2 * a);
var t2 = (-b - discSqrt) / (2 * a);
if (t1 >= 0 && t1 <= 1) {
extrema[n++] = t1;
}
if (t2 >= 0 && t2 <= 1) {
extrema[n++] = t2;
}
}
}
return n;
}
function cubicSubdivide(p0, p1, p2, p3, t, out) {
var p01 = (p1 - p0) * t + p0;
var p12 = (p2 - p1) * t + p1;
var p23 = (p3 - p2) * t + p2;
var p012 = (p12 - p01) * t + p01;
var p123 = (p23 - p12) * t + p12;
var p0123 = (p123 - p012) * t + p012;
out[0] = p0;
out[1] = p01;
out[2] = p012;
out[3] = p0123;
out[4] = p0123;
out[5] = p123;
out[6] = p23;
out[7] = p3;
}
function cubicProjectPoint(x0, y0, x1, y1, x2, y2, x3, y3, x, y, out) {
var t;
var interval = 0.005;
var d = Infinity;
_v0[0] = x;
_v0[1] = y;
for (var _t = 0; _t < 1; _t += 0.05) {
_v1[0] = cubicAt(x0, x1, x2, x3, _t);
_v1[1] = cubicAt(y0, y1, y2, y3, _t);
var d1 = vector.distSquare(_v0, _v1);
if (d1 < d) {
t = _t;
d = d1;
}
}
d = Infinity;
for (var i = 0; i < 32; i++) {
if (interval < EPSILON) {
break;
}
var prev = t - interval;
var next = t + interval;
_v1[0] = cubicAt(x0, x1, x2, x3, prev);
_v1[1] = cubicAt(y0, y1, y2, y3, prev);
var d1 = vector.distSquare(_v1, _v0);
if (prev >= 0 && d1 < d) {
t = prev;
d = d1;
} else {
_v2[0] = cubicAt(x0, x1, x2, x3, next);
_v2[1] = cubicAt(y0, y1, y2, y3, next);
var d2 = vector.distSquare(_v2, _v0);
if (next <= 1 && d2 < d) {
t = next;
d = d2;
} else {
interval *= 0.5;
}
}
}
if (out) {
out[0] = cubicAt(x0, x1, x2, x3, t);
out[1] = cubicAt(y0, y1, y2, y3, t);
}
return Math.sqrt(d);
}
function quadraticAt(p0, p1, p2, t) {
var onet = 1 - t;
return onet * (onet * p0 + 2 * t * p1) + t * t * p2;
}
function quadraticDerivativeAt(p0, p1, p2, t) {
return 2 * ((1 - t) * (p1 - p0) + t * (p2 - p1));
}
function quadraticRootAt(p0, p1, p2, val, roots) {
var a = p0 - 2 * p1 + p2;
var b = 2 * (p1 - p0);
var c = p0 - val;
var n = 0;
if (isAroundZero(a)) {
if (isNotAroundZero(b)) {
var t1 = -c / b;
if (t1 >= 0 && t1 <= 1) {
roots[n++] = t1;
}
}
} else {
var disc = b * b - 4 * a * c;
if (isAroundZero(disc)) {
var t1 = -b / (2 * a);
if (t1 >= 0 && t1 <= 1) {
roots[n++] = t1;
}
} else if (disc > 0) {
var discSqrt = Math.sqrt(disc);
var t1 = (-b + discSqrt) / (2 * a);
var t2 = (-b - discSqrt) / (2 * a);
if (t1 >= 0 && t1 <= 1) {
roots[n++] = t1;
}
if (t2 >= 0 && t2 <= 1) {
roots[n++] = t2;
}
}
}
return n;
}
function quadraticExtremum(p0, p1, p2) {
var divider = p0 + p2 - 2 * p1;
if (divider === 0) {
return 0.5;
} else {
return (p0 - p1) / divider;
}
}
function quadraticSubdivide(p0, p1, p2, t, out) {
var p01 = (p1 - p0) * t + p0;
var p12 = (p2 - p1) * t + p1;
var p012 = (p12 - p01) * t + p01;
out[0] = p0;
out[1] = p01;
out[2] = p012;
out[3] = p012;
out[4] = p12;
out[5] = p2;
}
function quadraticProjectPoint(x0, y0, x1, y1, x2, y2, x, y, out) {
var t;
var interval = 0.005;
var d = Infinity;
_v0[0] = x;
_v0[1] = y;
for (var _t = 0; _t < 1; _t += 0.05) {
_v1[0] = quadraticAt(x0, x1, x2, _t);
_v1[1] = quadraticAt(y0, y1, y2, _t);
var d1 = vector.distSquare(_v0, _v1);
if (d1 < d) {
t = _t;
d = d1;
}
}
d = Infinity;
for (var i = 0; i < 32; i++) {
if (interval < EPSILON) {
break;
}
var prev = t - interval;
var next = t + interval;
_v1[0] = quadraticAt(x0, x1, x2, prev);
_v1[1] = quadraticAt(y0, y1, y2, prev);
var d1 = vector.distSquare(_v1, _v0);
if (prev >= 0 && d1 < d) {
t = prev;
d = d1;
} else {
_v2[0] = quadraticAt(x0, x1, x2, next);
_v2[1] = quadraticAt(y0, y1, y2, next);
var d2 = vector.distSquare(_v2, _v0);
if (next <= 1 && d2 < d) {
t = next;
d = d2;
} else {
interval *= 0.5;
}
}
}
if (out) {
out[0] = quadraticAt(x0, x1, x2, t);
out[1] = quadraticAt(y0, y1, y2, t);
}
return Math.sqrt(d);
}
return {
cubicAt: cubicAt,
cubicDerivativeAt: cubicDerivativeAt,
cubicRootAt: cubicRootAt,
cubicExtrema: cubicExtrema,
cubicSubdivide: cubicSubdivide,
cubicProjectPoint: cubicProjectPoint,
quadraticAt: quadraticAt,
quadraticDerivativeAt: quadraticDerivativeAt,
quadraticRootAt: quadraticRootAt,
quadraticExtremum: quadraticExtremum,
quadraticSubdivide: quadraticSubdivide,
quadraticProjectPoint: quadraticProjectPoint
};
});define('zrender/mixin/Transformable', [
'require',
'../tool/matrix',
'../tool/vector'
], function (require) {
'use strict';
var matrix = require('../tool/matrix');
var vector = require('../tool/vector');
var origin = [
0,
0
];
var mTranslate = matrix.translate;
var EPSILON = 0.00005;
function isAroundZero(val) {
return val > -EPSILON && val < EPSILON;
}
function isNotAroundZero(val) {
return val > EPSILON || val < -EPSILON;
}
var Transformable = function () {
if (!this.position) {
this.position = [
0,
0
];
}
if (typeof this.rotation == 'undefined') {
this.rotation = [
0,
0,
0
];
}
if (!this.scale) {
this.scale = [
1,
1,
0,
0
];
}
this.needLocalTransform = false;
this.needTransform = false;
};
Transformable.prototype = {
constructor: Transformable,
updateNeedTransform: function () {
this.needLocalTransform = isNotAroundZero(this.rotation[0]) || isNotAroundZero(this.position[0]) || isNotAroundZero(this.position[1]) || isNotAroundZero(this.scale[0] - 1) || isNotAroundZero(this.scale[1] - 1);
},
updateTransform: function () {
this.updateNeedTransform();
var parentHasTransform = this.parent && this.parent.needTransform;
this.needTransform = this.needLocalTransform || parentHasTransform;
if (!this.needTransform) {
return;
}
var m = this.transform || matrix.create();
matrix.identity(m);
if (this.needLocalTransform) {
var scale = this.scale;
if (isNotAroundZero(scale[0]) || isNotAroundZero(scale[1])) {
origin[0] = -scale[2] || 0;
origin[1] = -scale[3] || 0;
var haveOrigin = isNotAroundZero(origin[0]) || isNotAroundZero(origin[1]);
if (haveOrigin) {
mTranslate(m, m, origin);
}
matrix.scale(m, m, scale);
if (haveOrigin) {
origin[0] = -origin[0];
origin[1] = -origin[1];
mTranslate(m, m, origin);
}
}
if (this.rotation instanceof Array) {
if (this.rotation[0] !== 0) {
origin[0] = -this.rotation[1] || 0;
origin[1] = -this.rotation[2] || 0;
var haveOrigin = isNotAroundZero(origin[0]) || isNotAroundZero(origin[1]);
if (haveOrigin) {
mTranslate(m, m, origin);
}
matrix.rotate(m, m, this.rotation[0]);
if (haveOrigin) {
origin[0] = -origin[0];
origin[1] = -origin[1];
mTranslate(m, m, origin);
}
}
} else {
if (this.rotation !== 0) {
matrix.rotate(m, m, this.rotation);
}
}
if (isNotAroundZero(this.position[0]) || isNotAroundZero(this.position[1])) {
mTranslate(m, m, this.position);
}
}
if (parentHasTransform) {
if (this.needLocalTransform) {
matrix.mul(m, this.parent.transform, m);
} else {
matrix.copy(m, this.parent.transform);
}
}
this.transform = m;
this.invTransform = this.invTransform || matrix.create();
matrix.invert(this.invTransform, m);
},
setTransform: function (ctx) {
if (this.needTransform) {
var m = this.transform;
ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
}
},
lookAt: function () {
var v = vector.create();
return function (target) {
if (!this.transform) {
this.transform = matrix.create();
}
var m = this.transform;
vector.sub(v, target, this.position);
if (isAroundZero(v[0]) && isAroundZero(v[1])) {
return;
}
vector.normalize(v, v);
var scale = this.scale;
m[2] = v[0] * scale[1];
m[3] = v[1] * scale[1];
m[0] = v[1] * scale[0];
m[1] = -v[0] * scale[0];
m[4] = this.position[0];
m[5] = this.position[1];
this.decomposeTransform();
};
}(),
decomposeTransform: function () {
if (!this.transform) {
return;
}
var m = this.transform;
var sx = m[0] * m[0] + m[1] * m[1];
var position = this.position;
var scale = this.scale;
var rotation = this.rotation;
if (isNotAroundZero(sx - 1)) {
sx = Math.sqrt(sx);
}
var sy = m[2] * m[2] + m[3] * m[3];
if (isNotAroundZero(sy - 1)) {
sy = Math.sqrt(sy);
}
position[0] = m[4];
position[1] = m[5];
scale[0] = sx;
scale[1] = sy;
scale[2] = scale[3] = 0;
rotation[0] = Math.atan2(-m[1] / sy, m[0] / sx);
rotation[1] = rotation[2] = 0;
},
transformCoordToLocal: function (x, y) {
var v2 = [
x,
y
];
if (this.needTransform && this.invTransform) {
vector.applyTransform(v2, v2, this.invTransform);
}
return v2;
}
};
return Transformable;
});define('zrender/Group', [
'require',
'./tool/guid',
'./tool/util',
'./mixin/Transformable',
'./mixin/Eventful'
], function (require) {
var guid = require('./tool/guid');
var util = require('./tool/util');
var Transformable = require('./mixin/Transformable');
var Eventful = require('./mixin/Eventful');
var Group = function (options) {
options = options || {};
this.id = options.id || guid();
for (var key in options) {
this[key] = options[key];
}
this.type = 'group';
this.clipShape = null;
this._children = [];
this._storage = null;
this.__dirty = true;
Transformable.call(this);
Eventful.call(this);
};
Group.prototype.ignore = false;
Group.prototype.children = function () {
return this._children.slice();
};
Group.prototype.childAt = function (idx) {
return this._children[idx];
};
Group.prototype.addChild = function (child) {
if (child == this) {
return;
}
if (child.parent == this) {
return;
}
if (child.parent) {
child.parent.removeChild(child);
}
this._children.push(child);
child.parent = this;
if (this._storage && this._storage !== child._storage) {
this._storage.addToMap(child);
if (child instanceof Group) {
child.addChildrenToStorage(this._storage);
}
}
};
Group.prototype.removeChild = function (child) {
var idx = util.indexOf(this._children, child);
if (idx >= 0) {
this._children.splice(idx, 1);
}
child.parent = null;
if (this._storage) {
this._storage.delFromMap(child.id);
if (child instanceof Group) {
child.delChildrenFromStorage(this._storage);
}
}
};
Group.prototype.clearChildren = function () {
for (var i = 0; i < this._children.length; i++) {
var child = this._children[i];
if (this._storage) {
this._storage.delFromMap(child.id);
if (child instanceof Group) {
child.delChildrenFromStorage(this._storage);
}
}
}
this._children.length = 0;
};
Group.prototype.eachChild = function (cb, context) {
var haveContext = !!context;
for (var i = 0; i < this._children.length; i++) {
var child = this._children[i];
if (haveContext) {
cb.call(context, child);
} else {
cb(child);
}
}
};
Group.prototype.traverse = function (cb, context) {
var haveContext = !!context;
for (var i = 0; i < this._children.length; i++) {
var child = this._children[i];
if (haveContext) {
cb.call(context, child);
} else {
cb(child);
}
if (child.type === 'group') {
child.traverse(cb, context);
}
}
};
Group.prototype.addChildrenToStorage = function (storage) {
for (var i = 0; i < this._children.length; i++) {
var child = this._children[i];
storage.addToMap(child);
if (child instanceof Group) {
child.addChildrenToStorage(storage);
}
}
};
Group.prototype.delChildrenFromStorage = function (storage) {
for (var i = 0; i < this._children.length; i++) {
var child = this._children[i];
storage.delFromMap(child.id);
if (child instanceof Group) {
child.delChildrenFromStorage(storage);
}
}
};
Group.prototype.modSelf = function () {
this.__dirty = true;
};
util.merge(Group.prototype, Transformable.prototype, true);
util.merge(Group.prototype, Eventful.prototype, true);
return Group;
});define('zrender/animation/Clip', [
'require',
'./easing'
], function (require) {
var Easing = require('./easing');
function Clip(options) {
this._targetPool = options.target || {};
if (!(this._targetPool instanceof Array)) {
this._targetPool = [this._targetPool];
}
this._life = options.life || 1000;
this._delay = options.delay || 0;
this._startTime = new Date().getTime() + this._delay;
this._endTime = this._startTime + this._life * 1000;
this.loop = typeof options.loop == 'undefined' ? false : options.loop;
this.gap = options.gap || 0;
this.easing = options.easing || 'Linear';
this.onframe = options.onframe;
this.ondestroy = options.ondestroy;
this.onrestart = options.onrestart;
}
Clip.prototype = {
step: function (time) {
var percent = (time - this._startTime) / this._life;
if (percent < 0) {
return;
}
percent = Math.min(percent, 1);
var easingFunc = typeof this.easing == 'string' ? Easing[this.easing] : this.easing;
var schedule = typeof easingFunc === 'function' ? easingFunc(percent) : percent;
this.fire('frame', schedule);
if (percent == 1) {
if (this.loop) {
this.restart();
return 'restart';
}
this.__needsRemove = true;
return 'destroy';
}
return null;
},
restart: function () {
var time = new Date().getTime();
var remainder = (time - this._startTime) % this._life;
this._startTime = new Date().getTime() - remainder + this.gap;
this.__needsRemove = false;
},
fire: function (eventType, arg) {
for (var i = 0, len = this._targetPool.length; i < len; i++) {
if (this['on' + eventType]) {
this['on' + eventType](this._targetPool[i], arg);
}
}
},
constructor: Clip
};
return Clip;
});define('zrender/animation/easing', [], function () {
var easing = {
Linear: function (k) {
return k;
},
QuadraticIn: function (k) {
return k * k;
},
QuadraticOut: function (k) {
return k * (2 - k);
},
QuadraticInOut: function (k) {
if ((k *= 2) < 1) {
return 0.5 * k * k;
}
return -0.5 * (--k * (k - 2) - 1);
},
CubicIn: function (k) {
return k * k * k;
},
CubicOut: function (k) {
return --k * k * k + 1;
},
CubicInOut: function (k) {
if ((k *= 2) < 1) {
return 0.5 * k * k * k;
}
return 0.5 * ((k -= 2) * k * k + 2);
},
QuarticIn: function (k) {
return k * k * k * k;
},
QuarticOut: function (k) {
return 1 - --k * k * k * k;
},
QuarticInOut: function (k) {
if ((k *= 2) < 1) {
return 0.5 * k * k * k * k;
}
return -0.5 * ((k -= 2) * k * k * k - 2);
},
QuinticIn: function (k) {
return k * k * k * k * k;
},
QuinticOut: function (k) {
return --k * k * k * k * k + 1;
},
QuinticInOut: function (k) {
if ((k *= 2) < 1) {
return 0.5 * k * k * k * k * k;
}
return 0.5 * ((k -= 2) * k * k * k * k + 2);
},
SinusoidalIn: function (k) {
return 1 - Math.cos(k * Math.PI / 2);
},
SinusoidalOut: function (k) {
return Math.sin(k * Math.PI / 2);
},
SinusoidalInOut: function (k) {
return 0.5 * (1 - Math.cos(Math.PI * k));
},
ExponentialIn: function (k) {
return k === 0 ? 0 : Math.pow(1024, k - 1);
},
ExponentialOut: function (k) {
return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);
},
ExponentialInOut: function (k) {
if (k === 0) {
return 0;
}
if (k === 1) {
return 1;
}
if ((k *= 2) < 1) {
return 0.5 * Math.pow(1024, k - 1);
}
return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);
},
CircularIn: function (k) {
return 1 - Math.sqrt(1 - k * k);
},
CircularOut: function (k) {
return Math.sqrt(1 - --k * k);
},
CircularInOut: function (k) {
if ((k *= 2) < 1) {
return -0.5 * (Math.sqrt(1 - k * k) - 1);
}
return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);
},
ElasticIn: function (k) {
var s;
var a = 0.1;
var p = 0.4;
if (k === 0) {
return 0;
}
if (k === 1) {
return 1;
}
if (!a || a < 1) {
a = 1;
s = p / 4;
} else {
s = p * Math.asin(1 / a) / (2 * Math.PI);
}
return -(a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));
},
ElasticOut: function (k) {
var s;
var a = 0.1;
var p = 0.4;
if (k === 0) {
return 0;
}
if (k === 1) {
return 1;
}
if (!a || a < 1) {
a = 1;
s = p / 4;
} else {
s = p * Math.asin(1 / a) / (2 * Math.PI);
}
return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1;
},
ElasticInOut: function (k) {
var s;
var a = 0.1;
var p = 0.4;
if (k === 0) {
return 0;
}
if (k === 1) {
return 1;
}
if (!a || a < 1) {
a = 1;
s = p / 4;
} else {
s = p * Math.asin(1 / a) / (2 * Math.PI);
}
if ((k *= 2) < 1) {
return -0.5 * (a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));
}
return a * Math.pow(2, -10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;
},
BackIn: function (k) {
var s = 1.70158;
return k * k * ((s + 1) * k - s);
},
BackOut: function (k) {
var s = 1.70158;
return --k * k * ((s + 1) * k + s) + 1;
},
BackInOut: function (k) {
var s = 1.70158 * 1.525;
if ((k *= 2) < 1) {
return 0.5 * (k * k * ((s + 1) * k - s));
}
return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);
},
BounceIn: function (k) {
return 1 - easing.BounceOut(1 - k);
},
BounceOut: function (k) {
if (k < 1 / 2.75) {
return 7.5625 * k * k;
} else if (k < 2 / 2.75) {
return 7.5625 * (k -= 1.5 / 2.75) * k + 0.75;
} else if (k < 2.5 / 2.75) {
return 7.5625 * (k -= 2.25 / 2.75) * k + 0.9375;
} else {
return 7.5625 * (k -= 2.625 / 2.75) * k + 0.984375;
}
},
BounceInOut: function (k) {
if (k < 0.5) {
return easing.BounceIn(k * 2) * 0.5;
}
return easing.BounceOut(k * 2 - 1) * 0.5 + 0.5;
}
};
return easing;
});define('echarts/chart/base', [
'require',
'zrender/shape/Image',
'../util/shape/Icon',
'../util/shape/MarkLine',
'../util/shape/Symbol',
'zrender/shape/Polyline',
'zrender/shape/ShapeBundle',
'../config',
'../util/ecData',
'../util/ecAnimation',
'../util/ecEffect',
'../util/accMath',
'../component/base',
'../layout/EdgeBundling',
'zrender/tool/util',
'zrender/tool/area'
], function (require) {
var ImageShape = require('zrender/shape/Image');
var IconShape = require('../util/shape/Icon');
var MarkLineShape = require('../util/shape/MarkLine');
var SymbolShape = require('../util/shape/Symbol');
var PolylineShape = require('zrender/shape/Polyline');
var ShapeBundle = require('zrender/shape/ShapeBundle');
var ecConfig = require('../config');
var ecData = require('../util/ecData');
var ecAnimation = require('../util/ecAnimation');
var ecEffect = require('../util/ecEffect');
var accMath = require('../util/accMath');
var ComponentBase = require('../component/base');
var EdgeBundling = require('../layout/EdgeBundling');
var zrUtil = require('zrender/tool/util');
var zrArea = require('zrender/tool/area');
function isCoordAvailable(coord) {
return coord.x != null && coord.y != null;
}
function Base(ecTheme, messageCenter, zr, option, myChart) {
ComponentBase.call(this, ecTheme, messageCenter, zr, option, myChart);
var self = this;
this.selectedMap = {};
this.lastShapeList = [];
this.shapeHandler = {
onclick: function () {
self.isClick = true;
},
ondragover: function (param) {
var calculableShape = param.target;
calculableShape.highlightStyle = calculableShape.highlightStyle || {};
var highlightStyle = calculableShape.highlightStyle;
var brushType = highlightStyle.brushTyep;
var strokeColor = highlightStyle.strokeColor;
var lineWidth = highlightStyle.lineWidth;
highlightStyle.brushType = 'stroke';
highlightStyle.strokeColor = self.ecTheme.calculableColor || ecConfig.calculableColor;
highlightStyle.lineWidth = calculableShape.type === 'icon' ? 30 : 10;
self.zr.addHoverShape(calculableShape);
setTimeout(function () {
if (highlightStyle) {
highlightStyle.brushType = brushType;
highlightStyle.strokeColor = strokeColor;
highlightStyle.lineWidth = lineWidth;
}
}, 20);
},
ondrop: function (param) {
if (ecData.get(param.dragged, 'data') != null) {
self.isDrop = true;
}
},
ondragend: function () {
self.isDragend = true;
}
};
}
Base.prototype = {
setCalculable: function (shape) {
shape.dragEnableTime = this.ecTheme.DRAG_ENABLE_TIME || ecConfig.DRAG_ENABLE_TIME;
shape.ondragover = this.shapeHandler.ondragover;
shape.ondragend = this.shapeHandler.ondragend;
shape.ondrop = this.shapeHandler.ondrop;
return shape;
},
ondrop: function (param, status) {
if (!this.isDrop || !param.target || status.dragIn) {
return;
}
var target = param.target;
var dragged = param.dragged;
var seriesIndex = ecData.get(target, 'seriesIndex');
var dataIndex = ecData.get(target, 'dataIndex');
var series = this.series;
var data;
var legend = this.component.legend;
if (dataIndex === -1) {
if (ecData.get(dragged, 'seriesIndex') == seriesIndex) {
status.dragOut = status.dragIn = status.needRefresh = true;
this.isDrop = false;
return;
}
data = {
value: ecData.get(dragged, 'value'),
name: ecData.get(dragged, 'name')
};
if (this.type === ecConfig.CHART_TYPE_PIE && data.value < 0) {
data.value = 0;
}
var hasFind = false;
var sData = series[seriesIndex].data;
for (var i = 0, l = sData.length; i < l; i++) {
if (sData[i].name === data.name && sData[i].value === '-') {
series[seriesIndex].data[i].value = data.value;
hasFind = true;
}
}
!hasFind && series[seriesIndex].data.push(data);
legend && legend.add(data.name, dragged.style.color || dragged.style.strokeColor);
} else {
data = series[seriesIndex].data[dataIndex] || '-';
if (data.value != null) {
if (data.value != '-') {
series[seriesIndex].data[dataIndex].value = accMath.accAdd(series[seriesIndex].data[dataIndex].value, ecData.get(dragged, 'value'));
} else {
series[seriesIndex].data[dataIndex].value = ecData.get(dragged, 'value');
}
if (this.type === ecConfig.CHART_TYPE_FUNNEL || this.type === ecConfig.CHART_TYPE_PIE) {
legend && legend.getRelatedAmount(data.name) === 1 && this.component.legend.del(data.name);
data.name += this.option.nameConnector + ecData.get(dragged, 'name');
legend && legend.add(data.name, dragged.style.color || dragged.style.strokeColor);
}
} else {
if (data != '-') {
series[seriesIndex].data[dataIndex] = accMath.accAdd(series[seriesIndex].data[dataIndex], ecData.get(dragged, 'value'));
} else {
series[seriesIndex].data[dataIndex] = ecData.get(dragged, 'value');
}
}
}
status.dragIn = status.dragIn || true;
this.isDrop = false;
var self = this;
setTimeout(function () {
self.zr.trigger('mousemove', param.event);
}, 300);
return;
},
ondragend: function (param, status) {
if (!this.isDragend || !param.target || status.dragOut) {
return;
}
var target = param.target;
var seriesIndex = ecData.get(target, 'seriesIndex');
var dataIndex = ecData.get(target, 'dataIndex');
var series = this.series;
if (series[seriesIndex].data[dataIndex].value != null) {
series[seriesIndex].data[dataIndex].value = '-';
var name = series[seriesIndex].data[dataIndex].name;
var legend = this.component.legend;
if (legend && legend.getRelatedAmount(name) === 0) {
legend.del(name);
}
} else {
series[seriesIndex].data[dataIndex] = '-';
}
status.dragOut = true;
status.needRefresh = true;
this.isDragend = false;
return;
},
onlegendSelected: function (param, status) {
var legendSelected = param.selected;
for (var itemName in this.selectedMap) {
if (this.selectedMap[itemName] != legendSelected[itemName]) {
status.needRefresh = true;
}
this.selectedMap[itemName] = legendSelected[itemName];
}
return;
},
_buildPosition: function () {
this._symbol = this.option.symbolList;
this._sIndex2ShapeMap = {};
this._sIndex2ColorMap = {};
this.selectedMap = {};
this.xMarkMap = {};
var series = this.series;
var _position2sIndexMap = {
top: [],
bottom: [],
left: [],
right: [],
other: []
};
var xAxisIndex;
var yAxisIndex;
var xAxis;
var yAxis;
for (var i = 0, l = series.length; i < l; i++) {
if (series[i].type === this.type) {
series[i] = this.reformOption(series[i]);
this.legendHoverLink = series[i].legendHoverLink || this.legendHoverLink;
xAxisIndex = series[i].xAxisIndex;
yAxisIndex = series[i].yAxisIndex;
xAxis = this.component.xAxis.getAxis(xAxisIndex);
yAxis = this.component.yAxis.getAxis(yAxisIndex);
if (xAxis.type === ecConfig.COMPONENT_TYPE_AXIS_CATEGORY) {
_position2sIndexMap[xAxis.getPosition()].push(i);
} else if (yAxis.type === ecConfig.COMPONENT_TYPE_AXIS_CATEGORY) {
_position2sIndexMap[yAxis.getPosition()].push(i);
} else {
_position2sIndexMap.other.push(i);
}
}
}
for (var position in _position2sIndexMap) {
if (_position2sIndexMap[position].length > 0) {
this._buildSinglePosition(position, _position2sIndexMap[position]);
}
}
this.addShapeList();
},
_buildSinglePosition: function (position, seriesArray) {
var mapData = this._mapData(seriesArray);
var locationMap = mapData.locationMap;
var maxDataLength = mapData.maxDataLength;
if (maxDataLength === 0 || locationMap.length === 0) {
return;
}
switch (position) {
case 'bottom':
case 'top':
this._buildHorizontal(seriesArray, maxDataLength, locationMap, this.xMarkMap);
break;
case 'left':
case 'right':
this._buildVertical(seriesArray, maxDataLength, locationMap, this.xMarkMap);
break;
case 'other':
this._buildOther(seriesArray, maxDataLength, locationMap, this.xMarkMap);
break;
}
for (var i = 0, l = seriesArray.length; i < l; i++) {
this.buildMark(seriesArray[i]);
}
},
_mapData: function (seriesArray) {
var series = this.series;
var serie;
var dataIndex = 0;
var stackMap = {};
var magicStackKey = '__kener__stack__';
var stackKey;
var serieName;
var legend = this.component.legend;
var locationMap = [];
var maxDataLength = 0;
var iconShape;
for (var i = 0, l = seriesArray.length; i < l; i++) {
serie = series[seriesArray[i]];
serieName = serie.name;
this._sIndex2ShapeMap[seriesArray[i]] = this._sIndex2ShapeMap[seriesArray[i]] || this.query(serie, 'symbol') || this._symbol[i % this._symbol.length];
if (legend) {
this.selectedMap[serieName] = legend.isSelected(serieName);
this._sIndex2ColorMap[seriesArray[i]] = legend.getColor(serieName);
iconShape = legend.getItemShape(serieName);
if (iconShape) {
var style = iconShape.style;
if (this.type == ecConfig.CHART_TYPE_LINE) {
style.iconType = 'legendLineIcon';
style.symbol = this._sIndex2ShapeMap[seriesArray[i]];
} else if (serie.itemStyle.normal.barBorderWidth > 0) {
var highlightStyle = iconShape.highlightStyle;
style.brushType = 'both';
style.x += 1;
style.y += 1;
style.width -= 2;
style.height -= 2;
style.strokeColor = highlightStyle.strokeColor = serie.itemStyle.normal.barBorderColor;
highlightStyle.lineWidth = 3;
}
legend.setItemShape(serieName, iconShape);
}
} else {
this.selectedMap[serieName] = true;
this._sIndex2ColorMap[seriesArray[i]] = this.zr.getColor(seriesArray[i]);
}
if (this.selectedMap[serieName]) {
stackKey = serie.stack || magicStackKey + seriesArray[i];
if (stackMap[stackKey] == null) {
stackMap[stackKey] = dataIndex;
locationMap[dataIndex] = [seriesArray[i]];
dataIndex++;
} else {
locationMap[stackMap[stackKey]].push(seriesArray[i]);
}
}
maxDataLength = Math.max(maxDataLength, serie.data.length);
}
return {
locationMap: locationMap,
maxDataLength: maxDataLength
};
},
_calculMarkMapXY: function (xMarkMap, locationMap, xy) {
var series = this.series;
for (var j = 0, k = locationMap.length; j < k; j++) {
for (var m = 0, n = locationMap[j].length; m < n; m++) {
var seriesIndex = locationMap[j][m];
var valueIndex = xy == 'xy' ? 0 : '';
var grid = this.component.grid;
var tarMark = xMarkMap[seriesIndex];
if (xy.indexOf('x') != '-1') {
if (tarMark['counter' + valueIndex] > 0) {
tarMark['average' + valueIndex] = tarMark['sum' + valueIndex] / tarMark['counter' + valueIndex];
}
var x = this.component.xAxis.getAxis(series[seriesIndex].xAxisIndex || 0).getCoord(tarMark['average' + valueIndex]);
tarMark['averageLine' + valueIndex] = [
[
x,
grid.getYend()
],
[
x,
grid.getY()
]
];
tarMark['minLine' + valueIndex] = [
[
tarMark['minX' + valueIndex],
grid.getYend()
],
[
tarMark['minX' + valueIndex],
grid.getY()
]
];
tarMark['maxLine' + valueIndex] = [
[
tarMark['maxX' + valueIndex],
grid.getYend()
],
[
tarMark['maxX' + valueIndex],
grid.getY()
]
];
tarMark.isHorizontal = false;
}
valueIndex = xy == 'xy' ? 1 : '';
if (xy.indexOf('y') != '-1') {
if (tarMark['counter' + valueIndex] > 0) {
tarMark['average' + valueIndex] = tarMark['sum' + valueIndex] / tarMark['counter' + valueIndex];
}
var y = this.component.yAxis.getAxis(series[seriesIndex].yAxisIndex || 0).getCoord(tarMark['average' + valueIndex]);
tarMark['averageLine' + valueIndex] = [
[
grid.getX(),
y
],
[
grid.getXend(),
y
]
];
tarMark['minLine' + valueIndex] = [
[
grid.getX(),
tarMark['minY' + valueIndex]
],
[
grid.getXend(),
tarMark['minY' + valueIndex]
]
];
tarMark['maxLine' + valueIndex] = [
[
grid.getX(),
tarMark['maxY' + valueIndex]
],
[
grid.getXend(),
tarMark['maxY' + valueIndex]
]
];
tarMark.isHorizontal = true;
}
}
}
},
addLabel: function (tarShape, serie, data, name, orient) {
var queryTarget = [
data,
serie
];
var nLabel = this.deepMerge(queryTarget, 'itemStyle.normal.label');
var eLabel = this.deepMerge(queryTarget, 'itemStyle.emphasis.label');
var nTextStyle = nLabel.textStyle || {};
var eTextStyle = eLabel.textStyle || {};
if (nLabel.show) {
var style = tarShape.style;
style.text = this._getLabelText(serie, data, name, 'normal');
style.textPosition = nLabel.position == null ? orient === 'horizontal' ? 'right' : 'top' : nLabel.position;
style.textColor = nTextStyle.color;
style.textFont = this.getFont(nTextStyle);
style.textAlign = nTextStyle.align;
style.textBaseline = nTextStyle.baseline;
}
if (eLabel.show) {
var highlightStyle = tarShape.highlightStyle;
highlightStyle.text = this._getLabelText(serie, data, name, 'emphasis');
highlightStyle.textPosition = nLabel.show ? tarShape.style.textPosition : eLabel.position == null ? orient === 'horizontal' ? 'right' : 'top' : eLabel.position;
highlightStyle.textColor = eTextStyle.color;
highlightStyle.textFont = this.getFont(eTextStyle);
highlightStyle.textAlign = eTextStyle.align;
highlightStyle.textBaseline = eTextStyle.baseline;
}
return tarShape;
},
_getLabelText: function (serie, data, name, status) {
var formatter = this.deepQuery([
data,
serie
], 'itemStyle.' + status + '.label.formatter');
if (!formatter && status === 'emphasis') {
formatter = this.deepQuery([
data,
serie
], 'itemStyle.normal.label.formatter');
}
var value = this.getDataFromOption(data, '-');
if (formatter) {
if (typeof formatter === 'function') {
return formatter.call(this.myChart, {
seriesName: serie.name,
series: serie,
name: name,
value: value,
data: data,
status: status
});
} else if (typeof formatter === 'string') {
formatter = formatter.replace('{a}', '{a0}').replace('{b}', '{b0}').replace('{c}', '{c0}').replace('{a0}', serie.name).replace('{b0}', name).replace('{c0}', this.numAddCommas(value));
return formatter;
}
} else {
if (value instanceof Array) {
return value[2] != null ? this.numAddCommas(value[2]) : value[0] + ' , ' + value[1];
} else {
return this.numAddCommas(value);
}
}
},
buildMark: function (seriesIndex) {
var serie = this.series[seriesIndex];
if (this.selectedMap[serie.name]) {
serie.markLine && this._buildMarkLine(seriesIndex);
serie.markPoint && this._buildMarkPoint(seriesIndex);
}
},
_buildMarkPoint: function (seriesIndex) {
var attachStyle = (this.markAttachStyle || {})[seriesIndex];
var serie = this.series[seriesIndex];
var mpData;
var pos;
var markPoint = zrUtil.clone(serie.markPoint);
for (var i = 0, l = markPoint.data.length; i < l; i++) {
mpData = markPoint.data[i];
pos = this.getMarkCoord(seriesIndex, mpData);
mpData.x = mpData.x != null ? mpData.x : pos[0];
mpData.y = mpData.y != null ? mpData.y : pos[1];
if (mpData.type && (mpData.type === 'max' || mpData.type === 'min')) {
mpData.value = pos[3];
mpData.name = mpData.name || mpData.type;
mpData.symbolSize = mpData.symbolSize || zrArea.getTextWidth(pos[3], this.getFont()) / 2 + 5;
}
}
var shapeList = this._markPoint(seriesIndex, markPoint);
for (var i = 0, l = shapeList.length; i < l; i++) {
var tarShape = shapeList[i];
tarShape.zlevel = serie.zlevel;
tarShape.z = serie.z + 1;
for (var key in attachStyle) {
tarShape[key] = zrUtil.clone(attachStyle[key]);
}
this.shapeList.push(tarShape);
}
if (this.type === ecConfig.CHART_TYPE_FORCE || this.type === ecConfig.CHART_TYPE_CHORD) {
for (var i = 0, l = shapeList.length; i < l; i++) {
this.zr.addShape(shapeList[i]);
}
}
},
_buildMarkLine: function (seriesIndex) {
var attachStyle = (this.markAttachStyle || {})[seriesIndex];
var serie = this.series[seriesIndex];
var pos;
var markLine = zrUtil.clone(serie.markLine);
for (var i = 0, l = markLine.data.length; i < l; i++) {
var mlData = markLine.data[i];
if (mlData.type && (mlData.type === 'max' || mlData.type === 'min' || mlData.type === 'average')) {
pos = this.getMarkCoord(seriesIndex, mlData);
markLine.data[i] = [
zrUtil.clone(mlData),
{}
];
markLine.data[i][0].name = mlData.name || mlData.type;
markLine.data[i][0].value = mlData.type !== 'average' ? pos[3] : +pos[3].toFixed(markLine.precision != null ? markLine.precision : this.deepQuery([
this.ecTheme,
ecConfig
], 'markLine.precision'));
pos = pos[2];
mlData = [
{},
{}
];
} else {
pos = [
this.getMarkCoord(seriesIndex, mlData[0]),
this.getMarkCoord(seriesIndex, mlData[1])
];
}
if (pos == null || pos[0] == null || pos[1] == null) {
continue;
}
markLine.data[i][0].x = mlData[0].x != null ? mlData[0].x : pos[0][0];
markLine.data[i][0].y = mlData[0].y != null ? mlData[0].y : pos[0][1];
markLine.data[i][1].x = mlData[1].x != null ? mlData[1].x : pos[1][0];
markLine.data[i][1].y = mlData[1].y != null ? mlData[1].y : pos[1][1];
}
var shapeList = this._markLine(seriesIndex, markLine);
var isLarge = markLine.large;
if (isLarge) {
var shapeBundle = new ShapeBundle({ style: { shapeList: shapeList } });
var firstShape = shapeList[0];
if (firstShape) {
zrUtil.merge(shapeBundle.style, firstShape.style);
zrUtil.merge(shapeBundle.highlightStyle = {}, firstShape.highlightStyle);
shapeBundle.style.brushType = 'stroke';
shapeBundle.zlevel = serie.zlevel;
shapeBundle.z = serie.z + 1;
shapeBundle.hoverable = false;
for (var key in attachStyle) {
shapeBundle[key] = zrUtil.clone(attachStyle[key]);
}
}
this.shapeList.push(shapeBundle);
this.zr.addShape(shapeBundle);
shapeBundle._mark = 'largeLine';
var effect = markLine.effect;
if (effect.show) {
shapeBundle.effect = effect;
}
} else {
for (var i = 0, l = shapeList.length; i < l; i++) {
var tarShape = shapeList[i];
tarShape.zlevel = serie.zlevel;
tarShape.z = serie.z + 1;
for (var key in attachStyle) {
tarShape[key] = zrUtil.clone(attachStyle[key]);
}
this.shapeList.push(tarShape);
}
if (this.type === ecConfig.CHART_TYPE_FORCE || this.type === ecConfig.CHART_TYPE_CHORD) {
for (var i = 0, l = shapeList.length; i < l; i++) {
this.zr.addShape(shapeList[i]);
}
}
}
},
_markPoint: function (seriesIndex, mpOption) {
var serie = this.series[seriesIndex];
var component = this.component;
zrUtil.merge(zrUtil.merge(mpOption, zrUtil.clone(this.ecTheme.markPoint || {})), zrUtil.clone(ecConfig.markPoint));
mpOption.name = serie.name;
var pList = [];
var data = mpOption.data;
var itemShape;
var dataRange = component.dataRange;
var legend = component.legend;
var color;
var value;
var queryTarget;
var nColor;
var eColor;
var effect;
var zrWidth = this.zr.getWidth();
var zrHeight = this.zr.getHeight();
if (!mpOption.large) {
for (var i = 0, l = data.length; i < l; i++) {
if (data[i].x == null || data[i].y == null) {
continue;
}
value = data[i].value != null ? data[i].value : '';
if (legend) {
color = legend.getColor(serie.name);
}
if (dataRange) {
color = isNaN(value) ? color : dataRange.getColor(value);
queryTarget = [
data[i],
mpOption
];
nColor = this.deepQuery(queryTarget, 'itemStyle.normal.color') || color;
eColor = this.deepQuery(queryTarget, 'itemStyle.emphasis.color') || nColor;
if (nColor == null && eColor == null) {
continue;
}
}
color = color == null ? this.zr.getColor(seriesIndex) : color;
data[i].tooltip = data[i].tooltip || mpOption.tooltip || { trigger: 'item' };
data[i].name = data[i].name != null ? data[i].name : '';
data[i].value = value;
itemShape = this.getSymbolShape(mpOption, seriesIndex, data[i], i, data[i].name, this.parsePercent(data[i].x, zrWidth), this.parsePercent(data[i].y, zrHeight), 'pin', color, 'rgba(0,0,0,0)', 'horizontal');
itemShape._mark = 'point';
effect = this.deepMerge([
data[i],
mpOption
], 'effect');
if (effect.show) {
itemShape.effect = effect;
}
if (serie.type === ecConfig.CHART_TYPE_MAP) {
itemShape._geo = this.getMarkGeo(data[i]);
}
ecData.pack(itemShape, serie, seriesIndex, data[i], i, data[i].name, value);
pList.push(itemShape);
}
} else {
itemShape = this.getLargeMarkPointShape(seriesIndex, mpOption);
itemShape._mark = 'largePoint';
itemShape && pList.push(itemShape);
}
return pList;
},
_markLine: function () {
function normalizeOptionValue(mlOption, key) {
mlOption[key] = mlOption[key] instanceof Array ? mlOption[key].length > 1 ? mlOption[key] : [
mlOption[key][0],
mlOption[key][0]
] : [
mlOption[key],
mlOption[key]
];
}
return function (seriesIndex, mlOption) {
var serie = this.series[seriesIndex];
var component = this.component;
var dataRange = component.dataRange;
var legend = component.legend;
zrUtil.merge(zrUtil.merge(mlOption, zrUtil.clone(this.ecTheme.markLine || {})), zrUtil.clone(ecConfig.markLine));
var defaultColor = legend ? legend.getColor(serie.name) : this.zr.getColor(seriesIndex);
normalizeOptionValue(mlOption, 'symbol');
normalizeOptionValue(mlOption, 'symbolSize');
normalizeOptionValue(mlOption, 'symbolRotate');
var data = mlOption.data;
var edges = [];
var zrWidth = this.zr.getWidth();
var zrHeight = this.zr.getHeight();
for (var i = 0; i < data.length; i++) {
var mlData = data[i];
if (isCoordAvailable(mlData[0]) && isCoordAvailable(mlData[1])) {
var mergeData = this.deepMerge(mlData);
var queryTarget = [
mergeData,
mlOption
];
var color = defaultColor;
var value = mergeData.value != null ? mergeData.value : '';
if (dataRange) {
color = isNaN(value) ? color : dataRange.getColor(value);
var nColor = this.deepQuery(queryTarget, 'itemStyle.normal.color') || color;
var eColor = this.deepQuery(queryTarget, 'itemStyle.emphasis.color') || nColor;
if (nColor == null && eColor == null) {
continue;
}
}
mlData[0].tooltip = mergeData.tooltip || mlOption.tooltip || { trigger: 'item' };
mlData[0].name = mlData[0].name || '';
mlData[1].name = mlData[1].name || '';
mlData[0].value = value;
edges.push({
points: [
[
this.parsePercent(mlData[0].x, zrWidth),
this.parsePercent(mlData[0].y, zrHeight)
],
[
this.parsePercent(mlData[1].x, zrWidth),
this.parsePercent(mlData[1].y, zrHeight)
]
],
rawData: mlData,
color: color
});
}
}
var enableBundling = this.query(mlOption, 'bundling.enable');
if (enableBundling) {
var edgeBundling = new EdgeBundling();
edgeBundling.maxTurningAngle = this.query(mlOption, 'bundling.maxTurningAngle') / 180 * Math.PI;
edges = edgeBundling.run(edges);
}
mlOption.name = serie.name;
var shapeList = [];
for (var i = 0, l = edges.length; i < l; i++) {
var edge = edges[i];
var rawEdge = edge.rawEdge || edge;
var mlData = rawEdge.rawData;
var value = mlData.value != null ? mlData.value : '';
var itemShape = this.getMarkLineShape(mlOption, seriesIndex, mlData, i, edge.points, enableBundling, rawEdge.color);
itemShape._mark = 'line';
var effect = this.deepMerge([
mlData[0],
mlData[1],
mlOption
], 'effect');
if (effect.show) {
itemShape.effect = effect;
itemShape.effect.large = mlOption.large;
}
if (serie.type === ecConfig.CHART_TYPE_MAP) {
itemShape._geo = [
this.getMarkGeo(mlData[0]),
this.getMarkGeo(mlData[1])
];
}
ecData.pack(itemShape, serie, seriesIndex, mlData[0], i, mlData[0].name + (mlData[1].name !== '' ? ' > ' + mlData[1].name : ''), value);
shapeList.push(itemShape);
}
return shapeList;
};
}(),
getMarkCoord: function () {
return [
0,
0
];
},
getSymbolShape: function (serie, seriesIndex, data, dataIndex, name, x, y, symbol, color, emptyColor, orient) {
var queryTarget = [
data,
serie
];
var value = this.getDataFromOption(data, '-');
symbol = this.deepQuery(queryTarget, 'symbol') || symbol;
var symbolSize = this.deepQuery(queryTarget, 'symbolSize');
symbolSize = typeof symbolSize === 'function' ? symbolSize(value) : symbolSize;
if (typeof symbolSize === 'number') {
symbolSize = [
symbolSize,
symbolSize
];
}
var symbolRotate = this.deepQuery(queryTarget, 'symbolRotate');
var normal = this.deepMerge(queryTarget, 'itemStyle.normal');
var emphasis = this.deepMerge(queryTarget, 'itemStyle.emphasis');
var nBorderWidth = normal.borderWidth != null ? normal.borderWidth : normal.lineStyle && normal.lineStyle.width;
if (nBorderWidth == null) {
nBorderWidth = symbol.match('empty') ? 2 : 0;
}
var eBorderWidth = emphasis.borderWidth != null ? emphasis.borderWidth : emphasis.lineStyle && emphasis.lineStyle.width;
if (eBorderWidth == null) {
eBorderWidth = nBorderWidth + 2;
}
var nColor = this.getItemStyleColor(normal.color, seriesIndex, dataIndex, data);
var eColor = this.getItemStyleColor(emphasis.color, seriesIndex, dataIndex, data);
var width = symbolSize[0];
var height = symbolSize[1];
var itemShape = new IconShape({
style: {
iconType: symbol.replace('empty', '').toLowerCase(),
x: x - width,
y: y - height,
width: width * 2,
height: height * 2,
brushType: 'both',
color: symbol.match('empty') ? emptyColor : nColor || color,
strokeColor: normal.borderColor || nColor || color,
lineWidth: nBorderWidth
},
highlightStyle: {
color: symbol.match('empty') ? emptyColor : eColor || nColor || color,
strokeColor: emphasis.borderColor || normal.borderColor || eColor || nColor || color,
lineWidth: eBorderWidth
},
clickable: this.deepQuery(queryTarget, 'clickable')
});
if (symbol.match('image')) {
itemShape.style.image = symbol.replace(new RegExp('^image:\\/\\/'), '');
itemShape = new ImageShape({
style: itemShape.style,
highlightStyle: itemShape.highlightStyle,
clickable: this.deepQuery(queryTarget, 'clickable')
});
}
if (symbolRotate != null) {
itemShape.rotation = [
symbolRotate * Math.PI / 180,
x,
y
];
}
if (symbol.match('star')) {
itemShape.style.iconType = 'star';
itemShape.style.n = symbol.replace('empty', '').replace('star', '') - 0 || 5;
}
if (symbol === 'none') {
itemShape.invisible = true;
itemShape.hoverable = false;
}
itemShape = this.addLabel(itemShape, serie, data, name, orient);
if (symbol.match('empty')) {
if (itemShape.style.textColor == null) {
itemShape.style.textColor = itemShape.style.strokeColor;
}
if (itemShape.highlightStyle.textColor == null) {
itemShape.highlightStyle.textColor = itemShape.highlightStyle.strokeColor;
}
}
ecData.pack(itemShape, serie, seriesIndex, data, dataIndex, name);
itemShape._x = x;
itemShape._y = y;
itemShape._dataIndex = dataIndex;
itemShape._seriesIndex = seriesIndex;
return itemShape;
},
getMarkLineShape: function (mlOption, seriesIndex, data, dataIndex, points, bundling, color) {
var value0 = data[0].value != null ? data[0].value : '-';
var value1 = data[1].value != null ? data[1].value : '-';
var symbol = [
data[0].symbol || mlOption.symbol[0],
data[1].symbol || mlOption.symbol[1]
];
var symbolSize = [
data[0].symbolSize || mlOption.symbolSize[0],
data[1].symbolSize || mlOption.symbolSize[1]
];
symbolSize[0] = typeof symbolSize[0] === 'function' ? symbolSize[0](value0) : symbolSize[0];
symbolSize[1] = typeof symbolSize[1] === 'function' ? symbolSize[1](value1) : symbolSize[1];
var symbolRotate = [
this.query(data[0], 'symbolRotate') || mlOption.symbolRotate[0],
this.query(data[1], 'symbolRotate') || mlOption.symbolRotate[1]
];
var queryTarget = [
data[0],
data[1],
mlOption
];
var normal = this.deepMerge(queryTarget, 'itemStyle.normal');
normal.color = this.getItemStyleColor(normal.color, seriesIndex, dataIndex, data);
var emphasis = this.deepMerge(queryTarget, 'itemStyle.emphasis');
emphasis.color = this.getItemStyleColor(emphasis.color, seriesIndex, dataIndex, data);
var nlineStyle = normal.lineStyle;
var elineStyle = emphasis.lineStyle;
var nBorderWidth = nlineStyle.width;
if (nBorderWidth == null) {
nBorderWidth = normal.borderWidth;
}
var eBorderWidth = elineStyle.width;
if (eBorderWidth == null) {
eBorderWidth = emphasis.borderWidth != null ? emphasis.borderWidth : nBorderWidth + 2;
}
var smoothness = this.deepQuery(queryTarget, 'smoothness');
if (!this.deepQuery(queryTarget, 'smooth')) {
smoothness = 0;
}
var ShapeCtor = bundling ? PolylineShape : MarkLineShape;
var itemShape = new ShapeCtor({
style: {
symbol: symbol,
symbolSize: symbolSize,
symbolRotate: symbolRotate,
brushType: 'both',
lineType: nlineStyle.type,
shadowColor: nlineStyle.shadowColor || nlineStyle.color || normal.borderColor || normal.color || color,
shadowBlur: nlineStyle.shadowBlur,
shadowOffsetX: nlineStyle.shadowOffsetX,
shadowOffsetY: nlineStyle.shadowOffsetY,
color: normal.color || color,
strokeColor: nlineStyle.color || normal.borderColor || normal.color || color,
lineWidth: nBorderWidth,
symbolBorderColor: normal.borderColor || normal.color || color,
symbolBorder: normal.borderWidth
},
highlightStyle: {
shadowColor: elineStyle.shadowColor,
shadowBlur: elineStyle.shadowBlur,
shadowOffsetX: elineStyle.shadowOffsetX,
shadowOffsetY: elineStyle.shadowOffsetY,
color: emphasis.color || normal.color || color,
strokeColor: elineStyle.color || nlineStyle.color || emphasis.borderColor || normal.borderColor || emphasis.color || normal.color || color,
lineWidth: eBorderWidth,
symbolBorderColor: emphasis.borderColor || normal.borderColor || emphasis.color || normal.color || color,
symbolBorder: emphasis.borderWidth == null ? normal.borderWidth + 2 : emphasis.borderWidth
},
clickable: this.deepQuery(queryTarget, 'clickable')
});
var shapeStyle = itemShape.style;
if (bundling) {
shapeStyle.pointList = points;
shapeStyle.smooth = smoothness;
} else {
shapeStyle.xStart = points[0][0];
shapeStyle.yStart = points[0][1];
shapeStyle.xEnd = points[1][0];
shapeStyle.yEnd = points[1][1];
shapeStyle.curveness = smoothness;
itemShape.updatePoints(itemShape.style);
}
itemShape = this.addLabel(itemShape, mlOption, data[0], data[0].name + ' : ' + data[1].name);
return itemShape;
},
getLargeMarkPointShape: function (seriesIndex, mpOption) {
var serie = this.series[seriesIndex];
var component = this.component;
var data = mpOption.data;
var itemShape;
var dataRange = component.dataRange;
var legend = component.legend;
var color;
var value;
var queryTarget = [
data[0],
mpOption
];
var nColor;
var eColor;
var effect;
if (legend) {
color = legend.getColor(serie.name);
}
if (dataRange) {
value = data[0].value != null ? data[0].value : '';
color = isNaN(value) ? color : dataRange.getColor(value);
nColor = this.deepQuery(queryTarget, 'itemStyle.normal.color') || color;
eColor = this.deepQuery(queryTarget, 'itemStyle.emphasis.color') || nColor;
if (nColor == null && eColor == null) {
return;
}
}
color = this.deepMerge(queryTarget, 'itemStyle.normal').color || color;
var symbol = this.deepQuery(queryTarget, 'symbol') || 'circle';
symbol = symbol.replace('empty', '').replace(/\d/g, '');
effect = this.deepMerge([
data[0],
mpOption
], 'effect');
var devicePixelRatio = window.devicePixelRatio || 1;
itemShape = new SymbolShape({
style: {
pointList: data,
color: color,
strokeColor: color,
shadowColor: effect.shadowColor || color,
shadowBlur: (effect.shadowBlur != null ? effect.shadowBlur : 8) * devicePixelRatio,
size: this.deepQuery(queryTarget, 'symbolSize'),
iconType: symbol,
brushType: 'fill',
lineWidth: 1
},
draggable: false,
hoverable: false
});
if (effect.show) {
itemShape.effect = effect;
}
return itemShape;
},
backupShapeList: function () {
if (this.shapeList && this.shapeList.length > 0) {
this.lastShapeList = this.shapeList;
this.shapeList = [];
} else {
this.lastShapeList = [];
}
},
addShapeList: function () {
var maxLenth = this.option.animationThreshold / (this.canvasSupported ? 2 : 4);
var lastShapeList = this.lastShapeList;
var shapeList = this.shapeList;
var isUpdate = lastShapeList.length > 0;
var duration = isUpdate ? this.query(this.option, 'animationDurationUpdate') : this.query(this.option, 'animationDuration');
var easing = this.query(this.option, 'animationEasing');
var delay;
var key;
var oldMap = {};
var newMap = {};
if (this.option.animation && !this.option.renderAsImage && shapeList.length < maxLenth && !this.motionlessOnce) {
for (var i = 0, l = lastShapeList.length; i < l; i++) {
key = this._getAnimationKey(lastShapeList[i]);
if (key.match('undefined')) {
this.zr.delShape(lastShapeList[i].id);
} else {
key += lastShapeList[i].type;
if (oldMap[key]) {
this.zr.delShape(lastShapeList[i].id);
} else {
oldMap[key] = lastShapeList[i];
}
}
}
for (var i = 0, l = shapeList.length; i < l; i++) {
key = this._getAnimationKey(shapeList[i]);
if (key.match('undefined')) {
this.zr.addShape(shapeList[i]);
} else {
key += shapeList[i].type;
newMap[key] = shapeList[i];
}
}
for (key in oldMap) {
if (!newMap[key]) {
this.zr.delShape(oldMap[key].id);
}
}
for (key in newMap) {
if (oldMap[key]) {
this.zr.delShape(oldMap[key].id);
this._animateMod(oldMap[key], newMap[key], duration, easing, 0, isUpdate);
} else {
delay = (this.type == ecConfig.CHART_TYPE_LINE || this.type == ecConfig.CHART_TYPE_RADAR) && key.indexOf('icon') !== 0 ? duration / 2 : 0;
this._animateMod(false, newMap[key], duration, easing, delay, isUpdate);
}
}
this.zr.refresh();
this.animationEffect();
} else {
this.motionlessOnce = false;
this.zr.delShape(lastShapeList);
for (var i = 0, l = shapeList.length; i < l; i++) {
this.zr.addShape(shapeList[i]);
}
}
},
_getAnimationKey: function (shape) {
if (this.type != ecConfig.CHART_TYPE_MAP && this.type != ecConfig.CHART_TYPE_TREEMAP && this.type != ecConfig.CHART_TYPE_VENN && this.type != ecConfig.CHART_TYPE_TREE) {
return ecData.get(shape, 'seriesIndex') + '_' + ecData.get(shape, 'dataIndex') + (shape._mark ? shape._mark : '') + (this.type === ecConfig.CHART_TYPE_RADAR ? ecData.get(shape, 'special') : '');
} else {
return ecData.get(shape, 'seriesIndex') + '_' + ecData.get(shape, 'dataIndex') + (shape._mark ? shape._mark : 'undefined');
}
},
_animateMod: function (oldShape, newShape, duration, easing, delay, isUpdate) {
switch (newShape.type) {
case 'polyline':
case 'half-smooth-polygon':
ecAnimation.pointList(this.zr, oldShape, newShape, duration, easing);
break;
case 'rectangle':
ecAnimation.rectangle(this.zr, oldShape, newShape, duration, easing);
break;
case 'image':
case 'icon':
ecAnimation.icon(this.zr, oldShape, newShape, duration, easing, delay);
break;
case 'candle':
if (!isUpdate) {
ecAnimation.candle(this.zr, oldShape, newShape, duration, easing);
} else {
this.zr.addShape(newShape);
}
break;
case 'ring':
case 'sector':
case 'circle':
if (!isUpdate) {
ecAnimation.ring(this.zr, oldShape, newShape, duration + (ecData.get(newShape, 'dataIndex') || 0) % 20 * 100, easing);
} else if (newShape.type === 'sector') {
ecAnimation.sector(this.zr, oldShape, newShape, duration, easing);
} else {
this.zr.addShape(newShape);
}
break;
case 'text':
ecAnimation.text(this.zr, oldShape, newShape, duration, easing);
break;
case 'polygon':
if (!isUpdate) {
ecAnimation.polygon(this.zr, oldShape, newShape, duration, easing);
} else {
ecAnimation.pointList(this.zr, oldShape, newShape, duration, easing);
}
break;
case 'ribbon':
ecAnimation.ribbon(this.zr, oldShape, newShape, duration, easing);
break;
case 'gauge-pointer':
ecAnimation.gaugePointer(this.zr, oldShape, newShape, duration, easing);
break;
case 'mark-line':
ecAnimation.markline(this.zr, oldShape, newShape, duration, easing);
break;
case 'bezier-curve':
case 'line':
ecAnimation.line(this.zr, oldShape, newShape, duration, easing);
break;
default:
this.zr.addShape(newShape);
break;
}
},
animationMark: function (duration, easing, shapeList) {
var shapeList = shapeList || this.shapeList;
for (var i = 0, l = shapeList.length; i < l; i++) {
if (!shapeList[i]._mark) {
continue;
}
this._animateMod(false, shapeList[i], duration, easing, 0, true);
}
this.animationEffect(shapeList);
},
animationEffect: function (shapeList) {
!shapeList && this.clearEffectShape();
shapeList = shapeList || this.shapeList;
if (shapeList == null) {
return;
}
var zlevel = ecConfig.EFFECT_ZLEVEL;
if (this.canvasSupported) {
this.zr.modLayer(zlevel, {
motionBlur: true,
lastFrameAlpha: this.option.effectBlendAlpha || ecConfig.effectBlendAlpha
});
}
var shape;
for (var i = 0, l = shapeList.length; i < l; i++) {
shape = shapeList[i];
if (!(shape._mark && shape.effect && shape.effect.show && ecEffect[shape._mark])) {
continue;
}
ecEffect[shape._mark](this.zr, this.effectList, shape, zlevel);
this.effectList[this.effectList.length - 1]._mark = shape._mark;
}
},
clearEffectShape: function (clearMotionBlur) {
var effectList = this.effectList;
if (this.zr && effectList && effectList.length > 0) {
clearMotionBlur && this.zr.modLayer(ecConfig.EFFECT_ZLEVEL, { motionBlur: false });
this.zr.delShape(effectList);
for (var i = 0; i < effectList.length; i++) {
if (effectList[i].effectAnimator) {
effectList[i].effectAnimator.stop();
}
}
}
this.effectList = [];
},
addMark: function (seriesIndex, markData, markType) {
var serie = this.series[seriesIndex];
if (this.selectedMap[serie.name]) {
var duration = this.query(this.option, 'animationDurationUpdate');
var easing = this.query(this.option, 'animationEasing');
var oriMarkData = serie[markType].data;
var lastLength = this.shapeList.length;
serie[markType].data = markData.data;
this['_build' + markType.replace('m', 'M')](seriesIndex);
if (this.option.animation && !this.option.renderAsImage) {
this.animationMark(duration, easing, this.shapeList.slice(lastLength));
} else {
for (var i = lastLength, l = this.shapeList.length; i < l; i++) {
this.zr.addShape(this.shapeList[i]);
}
this.zr.refreshNextFrame();
}
serie[markType].data = oriMarkData;
}
},
delMark: function (seriesIndex, markName, markType) {
markType = markType.replace('mark', '').replace('large', '').toLowerCase();
var serie = this.series[seriesIndex];
if (this.selectedMap[serie.name]) {
var needRefresh = false;
var shapeList = [
this.shapeList,
this.effectList
];
var len = 2;
while (len--) {
for (var i = 0, l = shapeList[len].length; i < l; i++) {
if (shapeList[len][i]._mark == markType && ecData.get(shapeList[len][i], 'seriesIndex') == seriesIndex && ecData.get(shapeList[len][i], 'name') == markName) {
this.zr.delShape(shapeList[len][i].id);
shapeList[len].splice(i, 1);
needRefresh = true;
break;
}
}
}
needRefresh && this.zr.refreshNextFrame();
}
}
};
zrUtil.inherits(Base, ComponentBase);
return Base;
});define('zrender/shape/Circle', [
'require',
'./Base',
'../tool/util'
], function (require) {
'use strict';
var Base = require('./Base');
var Circle = function (options) {
Base.call(this, options);
};
Circle.prototype = {
type: 'circle',
buildPath: function (ctx, style) {
ctx.moveTo(style.x + style.r, style.y);
ctx.arc(style.x, style.y, style.r, 0, Math.PI * 2, true);
return;
},
getRect: function (style) {
if (style.__rect) {
return style.__rect;
}
var lineWidth;
if (style.brushType == 'stroke' || style.brushType == 'fill') {
lineWidth = style.lineWidth || 1;
} else {
lineWidth = 0;
}
style.__rect = {
x: Math.round(style.x - style.r - lineWidth / 2),
y: Math.round(style.y - style.r - lineWidth / 2),
width: style.r * 2 + lineWidth,
height: style.r * 2 + lineWidth
};
return style.__rect;
}
};
require('../tool/util').inherits(Circle, Base);
return Circle;
});define('echarts/util/accMath', [], function () {
function accDiv(arg1, arg2) {
var s1 = arg1.toString();
var s2 = arg2.toString();
var m = 0;
try {
m = s2.split('.')[1].length;
} catch (e) {
}
try {
m -= s1.split('.')[1].length;
} catch (e) {
}
return (s1.replace('.', '') - 0) / (s2.replace('.', '') - 0) * Math.pow(10, m);
}
function accMul(arg1, arg2) {
var s1 = arg1.toString();
var s2 = arg2.toString();
var m = 0;
try {
m += s1.split('.')[1].length;
} catch (e) {
}
try {
m += s2.split('.')[1].length;
} catch (e) {
}
return (s1.replace('.', '') - 0) * (s2.replace('.', '') - 0) / Math.pow(10, m);
}
function accAdd(arg1, arg2) {
var r1 = 0;
var r2 = 0;
try {
r1 = arg1.toString().split('.')[1].length;
} catch (e) {
}
try {
r2 = arg2.toString().split('.')[1].length;
} catch (e) {
}
var m = Math.pow(10, Math.max(r1, r2));
return (Math.round(arg1 * m) + Math.round(arg2 * m)) / m;
}
function accSub(arg1, arg2) {
return accAdd(arg1, -arg2);
}
return {
accDiv: accDiv,
accMul: accMul,
accAdd: accAdd,
accSub: accSub
};
});define('echarts/util/shape/Icon', [
'require',
'zrender/tool/util',
'zrender/shape/Star',
'zrender/shape/Heart',
'zrender/shape/Droplet',
'zrender/shape/Image',
'zrender/shape/Base'
], function (require) {
var zrUtil = require('zrender/tool/util');
function _iconMark(ctx, style) {
var x = style.x;
var y = style.y;
var dx = style.width / 16;
var dy = style.height / 16;
ctx.moveTo(x, y + style.height);
ctx.lineTo(x + 5 * dx, y + 14 * dy);
ctx.lineTo(x + style.width, y + 3 * dy);
ctx.lineTo(x + 13 * dx, y);
ctx.lineTo(x + 2 * dx, y + 11 * dy);
ctx.lineTo(x, y + style.height);
ctx.moveTo(x + 6 * dx, y + 10 * dy);
ctx.lineTo(x + 14 * dx, y + 2 * dy);
ctx.moveTo(x + 10 * dx, y + 13 * dy);
ctx.lineTo(x + style.width, y + 13 * dy);
ctx.moveTo(x + 13 * dx, y + 10 * dy);
ctx.lineTo(x + 13 * dx, y + style.height);
}
function _iconMarkUndo(ctx, style) {
var x = style.x;
var y = style.y;
var dx = style.width / 16;
var dy = style.height / 16;
ctx.moveTo(x, y + style.height);
ctx.lineTo(x + 5 * dx, y + 14 * dy);
ctx.lineTo(x + style.width, y + 3 * dy);
ctx.lineTo(x + 13 * dx, y);
ctx.lineTo(x + 2 * dx, y + 11 * dy);
ctx.lineTo(x, y + style.height);
ctx.moveTo(x + 6 * dx, y + 10 * dy);
ctx.lineTo(x + 14 * dx, y + 2 * dy);
ctx.moveTo(x + 10 * dx, y + 13 * dy);
ctx.lineTo(x + style.width, y + 13 * dy);
}
function _iconMarkClear(ctx, style) {
var x = style.x;
var y = style.y;
var dx = style.width / 16;
var dy = style.height / 16;
ctx.moveTo(x + 4 * dx, y + 15 * dy);
ctx.lineTo(x + 9 * dx, y + 13 * dy);
ctx.lineTo(x + 14 * dx, y + 8 * dy);
ctx.lineTo(x + 11 * dx, y + 5 * dy);
ctx.lineTo(x + 6 * dx, y + 10 * dy);
ctx.lineTo(x + 4 * dx, y + 15 * dy);
ctx.moveTo(x + 5 * dx, y);
ctx.lineTo(x + 11 * dx, y);
ctx.moveTo(x + 5 * dx, y + dy);
ctx.lineTo(x + 11 * dx, y + dy);
ctx.moveTo(x, y + 2 * dy);
ctx.lineTo(x + style.width, y + 2 * dy);
ctx.moveTo(x, y + 5 * dy);
ctx.lineTo(x + 3 * dx, y + style.height);
ctx.lineTo(x + 13 * dx, y + style.height);
ctx.lineTo(x + style.width, y + 5 * dy);
}
function _iconDataZoom(ctx, style) {
var x = style.x;
var y = style.y;
var dx = style.width / 16;
var dy = style.height / 16;
ctx.moveTo(x, y + 3 * dy);
ctx.lineTo(x + 6 * dx, y + 3 * dy);
ctx.moveTo(x + 3 * dx, y);
ctx.lineTo(x + 3 * dx, y + 6 * dy);
ctx.moveTo(x + 3 * dx, y + 8 * dy);
ctx.lineTo(x + 3 * dx, y + style.height);
ctx.lineTo(x + style.width, y + style.height);
ctx.lineTo(x + style.width, y + 3 * dy);
ctx.lineTo(x + 8 * dx, y + 3 * dy);
}
function _iconDataZoomReset(ctx, style) {
var x = style.x;
var y = style.y;
var dx = style.width / 16;
var dy = style.height / 16;
ctx.moveTo(x + 6 * dx, y);
ctx.lineTo(x + 2 * dx, y + 3 * dy);
ctx.lineTo(x + 6 * dx, y + 6 * dy);
ctx.moveTo(x + 2 * dx, y + 3 * dy);
ctx.lineTo(x + 14 * dx, y + 3 * dy);
ctx.lineTo(x + 14 * dx, y + 11 * dy);
ctx.moveTo(x + 2 * dx, y + 5 * dy);
ctx.lineTo(x + 2 * dx, y + 13 * dy);
ctx.lineTo(x + 14 * dx, y + 13 * dy);
ctx.moveTo(x + 10 * dx, y + 10 * dy);
ctx.lineTo(x + 14 * dx, y + 13 * dy);
ctx.lineTo(x + 10 * dx, y + style.height);
}
function _iconRestore(ctx, style) {
var x = style.x;
var y = style.y;
var dx = style.width / 16;
var dy = style.height / 16;
var r = style.width / 2;
ctx.lineWidth = 1.5;
ctx.arc(x + r, y + r, r - dx, 0, Math.PI * 2 / 3);
ctx.moveTo(x + 3 * dx, y + style.height);
ctx.lineTo(x + 0 * dx, y + 12 * dy);
ctx.lineTo(x + 5 * dx, y + 11 * dy);
ctx.moveTo(x, y + 8 * dy);
ctx.arc(x + r, y + r, r - dx, Math.PI, Math.PI * 5 / 3);
ctx.moveTo(x + 13 * dx, y);
ctx.lineTo(x + style.width, y + 4 * dy);
ctx.lineTo(x + 11 * dx, y + 5 * dy);
}
function _iconLineChart(ctx, style) {
var x = style.x;
var y = style.y;
var dx = style.width / 16;
var dy = style.height / 16;
ctx.moveTo(x, y);
ctx.lineTo(x, y + style.height);
ctx.lineTo(x + style.width, y + style.height);
ctx.moveTo(x + 2 * dx, y + 14 * dy);
ctx.lineTo(x + 7 * dx, y + 6 * dy);
ctx.lineTo(x + 11 * dx, y + 11 * dy);
ctx.lineTo(x + 15 * dx, y + 2 * dy);
}
function _iconBarChart(ctx, style) {
var x = style.x;
var y = style.y;
var dx = style.width / 16;
var dy = style.height / 16;
ctx.moveTo(x, y);
ctx.lineTo(x, y + style.height);
ctx.lineTo(x + style.width, y + style.height);
ctx.moveTo(x + 3 * dx, y + 14 * dy);
ctx.lineTo(x + 3 * dx, y + 6 * dy);
ctx.lineTo(x + 4 * dx, y + 6 * dy);
ctx.lineTo(x + 4 * dx, y + 14 * dy);
ctx.moveTo(x + 7 * dx, y + 14 * dy);
ctx.lineTo(x + 7 * dx, y + 2 * dy);
ctx.lineTo(x + 8 * dx, y + 2 * dy);
ctx.lineTo(x + 8 * dx, y + 14 * dy);
ctx.moveTo(x + 11 * dx, y + 14 * dy);
ctx.lineTo(x + 11 * dx, y + 9 * dy);
ctx.lineTo(x + 12 * dx, y + 9 * dy);
ctx.lineTo(x + 12 * dx, y + 14 * dy);
}
function _iconPieChart(ctx, style) {
var x = style.x;
var y = style.y;
var width = style.width - 2;
var height = style.height - 2;
var r = Math.min(width, height) / 2;
y += 2;
ctx.moveTo(x + r + 3, y + r - 3);
ctx.arc(x + r + 3, y + r - 3, r - 1, 0, -Math.PI / 2, true);
ctx.lineTo(x + r + 3, y + r - 3);
ctx.moveTo(x + r, y);
ctx.lineTo(x + r, y + r);
ctx.arc(x + r, y + r, r, -Math.PI / 2, Math.PI * 2, true);
ctx.lineTo(x + r, y + r);
ctx.lineWidth = 1.5;
}
function _iconFunnelChart(ctx, style) {
var x = style.x;
var y = style.y;
var dx = style.width / 16;
var dy = style.height / 16;
y -= dy;
ctx.moveTo(x + 1 * dx, y + 2 * dy);
ctx.lineTo(x + 15 * dx, y + 2 * dy);
ctx.lineTo(x + 14 * dx, y + 3 * dy);
ctx.lineTo(x + 2 * dx, y + 3 * dy);
ctx.moveTo(x + 3 * dx, y + 6 * dy);
ctx.lineTo(x + 13 * dx, y + 6 * dy);
ctx.lineTo(x + 12 * dx, y + 7 * dy);
ctx.lineTo(x + 4 * dx, y + 7 * dy);
ctx.moveTo(x + 5 * dx, y + 10 * dy);
ctx.lineTo(x + 11 * dx, y + 10 * dy);
ctx.lineTo(x + 10 * dx, y + 11 * dy);
ctx.lineTo(x + 6 * dx, y + 11 * dy);
ctx.moveTo(x + 7 * dx, y + 14 * dy);
ctx.lineTo(x + 9 * dx, y + 14 * dy);
ctx.lineTo(x + 8 * dx, y + 15 * dy);
ctx.lineTo(x + 7 * dx, y + 15 * dy);
}
function _iconForceChart(ctx, style) {
var x = style.x;
var y = style.y;
var width = style.width;
var height = style.height;
var dx = width / 16;
var dy = height / 16;
var r = Math.min(dx, dy) * 2;
ctx.moveTo(x + dx + r, y + dy + r);
ctx.arc(x + dx, y + dy, r, Math.PI / 4, Math.PI * 3);
ctx.lineTo(x + 7 * dx - r, y + 6 * dy - r);
ctx.arc(x + 7 * dx, y + 6 * dy, r, Math.PI / 4 * 5, Math.PI * 4);
ctx.arc(x + 7 * dx, y + 6 * dy, r / 2, Math.PI / 4 * 5, Math.PI * 4);
ctx.moveTo(x + 7 * dx - r / 2, y + 6 * dy + r);
ctx.lineTo(x + dx + r, y + 14 * dy - r);
ctx.arc(x + dx, y + 14 * dy, r, -Math.PI / 4, Math.PI * 2);
ctx.moveTo(x + 7 * dx + r / 2, y + 6 * dy);
ctx.lineTo(x + 14 * dx - r, y + 10 * dy - r / 2);
ctx.moveTo(x + 16 * dx, y + 10 * dy);
ctx.arc(x + 14 * dx, y + 10 * dy, r, 0, Math.PI * 3);
ctx.lineWidth = 1.5;
}
function _iconChordChart(ctx, style) {
var x = style.x;
var y = style.y;
var width = style.width;
var height = style.height;
var r = Math.min(width, height) / 2;
ctx.moveTo(x + width, y + height / 2);
ctx.arc(x + r, y + r, r, 0, Math.PI * 2);
ctx.arc(x + r, y, r, Math.PI / 4, Math.PI / 5 * 4);
ctx.arc(x, y + r, r, -Math.PI / 3, Math.PI / 3);
ctx.arc(x + width, y + height, r, Math.PI, Math.PI / 2 * 3);
ctx.lineWidth = 1.5;
}
function _iconStackChart(ctx, style) {
var x = style.x;
var y = style.y;
var width = style.width;
var height = style.height;
var dy = Math.round(height / 3);
var delta = Math.round((dy - 2) / 2);
var len = 3;
while (len--) {
ctx.rect(x, y + dy * len + delta, width, 2);
}
}
function _iconTiledChart(ctx, style) {
var x = style.x;
var y = style.y;
var width = style.width;
var height = style.height;
var dx = Math.round(width / 3);
var delta = Math.round((dx - 2) / 2);
var len = 3;
while (len--) {
ctx.rect(x + dx * len + delta, y, 2, height);
}
}
function _iconDataView(ctx, style) {
var x = style.x;
var y = style.y;
var dx = style.width / 16;
ctx.moveTo(x + dx, y);
ctx.lineTo(x + dx, y + style.height);
ctx.lineTo(x + 15 * dx, y + style.height);
ctx.lineTo(x + 15 * dx, y);
ctx.lineTo(x + dx, y);
ctx.moveTo(x + 3 * dx, y + 3 * dx);
ctx.lineTo(x + 13 * dx, y + 3 * dx);
ctx.moveTo(x + 3 * dx, y + 6 * dx);
ctx.lineTo(x + 13 * dx, y + 6 * dx);
ctx.moveTo(x + 3 * dx, y + 9 * dx);
ctx.lineTo(x + 13 * dx, y + 9 * dx);
ctx.moveTo(x + 3 * dx, y + 12 * dx);
ctx.lineTo(x + 9 * dx, y + 12 * dx);
}
function _iconSave(ctx, style) {
var x = style.x;
var y = style.y;
var dx = style.width / 16;
var dy = style.height / 16;
ctx.moveTo(x, y);
ctx.lineTo(x, y + style.height);
ctx.lineTo(x + style.width, y + style.height);
ctx.lineTo(x + style.width, y);
ctx.lineTo(x, y);
ctx.moveTo(x + 4 * dx, y);
ctx.lineTo(x + 4 * dx, y + 8 * dy);
ctx.lineTo(x + 12 * dx, y + 8 * dy);
ctx.lineTo(x + 12 * dx, y);
ctx.moveTo(x + 6 * dx, y + 11 * dy);
ctx.lineTo(x + 6 * dx, y + 13 * dy);
ctx.lineTo(x + 10 * dx, y + 13 * dy);
ctx.lineTo(x + 10 * dx, y + 11 * dy);
ctx.lineTo(x + 6 * dx, y + 11 * dy);
}
function _iconCross(ctx, style) {
var x = style.x;
var y = style.y;
var width = style.width;
var height = style.height;
ctx.moveTo(x, y + height / 2);
ctx.lineTo(x + width, y + height / 2);
ctx.moveTo(x + width / 2, y);
ctx.lineTo(x + width / 2, y + height);
}
function _iconCircle(ctx, style) {
var width = style.width / 2;
var height = style.height / 2;
var r = Math.min(width, height);
ctx.moveTo(style.x + width + r, style.y + height);
ctx.arc(style.x + width, style.y + height, r, 0, Math.PI * 2);
ctx.closePath();
}
function _iconRectangle(ctx, style) {
ctx.rect(style.x, style.y, style.width, style.height);
ctx.closePath();
}
function _iconTriangle(ctx, style) {
var width = style.width / 2;
var height = style.height / 2;
var x = style.x + width;
var y = style.y + height;
var symbolSize = Math.min(width, height);
ctx.moveTo(x, y - symbolSize);
ctx.lineTo(x + symbolSize, y + symbolSize);
ctx.lineTo(x - symbolSize, y + symbolSize);
ctx.lineTo(x, y - symbolSize);
ctx.closePath();
}
function _iconDiamond(ctx, style) {
var width = style.width / 2;
var height = style.height / 2;
var x = style.x + width;
var y = style.y + height;
var symbolSize = Math.min(width, height);
ctx.moveTo(x, y - symbolSize);
ctx.lineTo(x + symbolSize, y);
ctx.lineTo(x, y + symbolSize);
ctx.lineTo(x - symbolSize, y);
ctx.lineTo(x, y - symbolSize);
ctx.closePath();
}
function _iconArrow(ctx, style) {
var x = style.x;
var y = style.y;
var dx = style.width / 16;
ctx.moveTo(x + 8 * dx, y);
ctx.lineTo(x + dx, y + style.height);
ctx.lineTo(x + 8 * dx, y + style.height / 4 * 3);
ctx.lineTo(x + 15 * dx, y + style.height);
ctx.lineTo(x + 8 * dx, y);
ctx.closePath();
}
function _iconStar(ctx, style) {
var StarShape = require('zrender/shape/Star');
var width = style.width / 2;
var height = style.height / 2;
StarShape.prototype.buildPath(ctx, {
x: style.x + width,
y: style.y + height,
r: Math.min(width, height),
n: style.n || 5
});
}
function _iconHeart(ctx, style) {
var HeartShape = require('zrender/shape/Heart');
HeartShape.prototype.buildPath(ctx, {
x: style.x + style.width / 2,
y: style.y + style.height * 0.2,
a: style.width / 2,
b: style.height * 0.8
});
}
function _iconDroplet(ctx, style) {
var DropletShape = require('zrender/shape/Droplet');
DropletShape.prototype.buildPath(ctx, {
x: style.x + style.width * 0.5,
y: style.y + style.height * 0.5,
a: style.width * 0.5,
b: style.height * 0.8
});
}
function _iconPin(ctx, style) {
var x = style.x;
var y = style.y - style.height / 2 * 1.5;
var width = style.width / 2;
var height = style.height / 2;
var r = Math.min(width, height);
ctx.arc(x + width, y + height, r, Math.PI / 5 * 4, Math.PI / 5);
ctx.lineTo(x + width, y + height + r * 1.5);
ctx.closePath();
}
function _iconImage(ctx, style, refreshNextFrame) {
var ImageShape = require('zrender/shape/Image');
this._imageShape = this._imageShape || new ImageShape({ style: {} });
for (var name in style) {
this._imageShape.style[name] = style[name];
}
this._imageShape.brush(ctx, false, refreshNextFrame);
}
var Base = require('zrender/shape/Base');
function Icon(options) {
Base.call(this, options);
}
Icon.prototype = {
type: 'icon',
iconLibrary: {
mark: _iconMark,
markUndo: _iconMarkUndo,
markClear: _iconMarkClear,
dataZoom: _iconDataZoom,
dataZoomReset: _iconDataZoomReset,
restore: _iconRestore,
lineChart: _iconLineChart,
barChart: _iconBarChart,
pieChart: _iconPieChart,
funnelChart: _iconFunnelChart,
forceChart: _iconForceChart,
chordChart: _iconChordChart,
stackChart: _iconStackChart,
tiledChart: _iconTiledChart,
dataView: _iconDataView,
saveAsImage: _iconSave,
cross: _iconCross,
circle: _iconCircle,
rectangle: _iconRectangle,
triangle: _iconTriangle,
diamond: _iconDiamond,
arrow: _iconArrow,
star: _iconStar,
heart: _iconHeart,
droplet: _iconDroplet,
pin: _iconPin,
image: _iconImage
},
brush: function (ctx, isHighlight, refreshNextFrame) {
var style = isHighlight ? this.highlightStyle : this.style;
style = style || {};
var iconType = style.iconType || this.style.iconType;
if (iconType === 'image') {
var ImageShape = require('zrender/shape/Image');
ImageShape.prototype.brush.call(this, ctx, isHighlight, refreshNextFrame);
} else {
var style = this.beforeBrush(ctx, isHighlight);
ctx.beginPath();
this.buildPath(ctx, style, refreshNextFrame);
switch (style.brushType) {
case 'both':
ctx.fill();
case 'stroke':
style.lineWidth > 0 && ctx.stroke();
break;
default:
ctx.fill();
}
this.drawText(ctx, style, this.style);
this.afterBrush(ctx);
}
},
buildPath: function (ctx, style, refreshNextFrame) {
if (this.iconLibrary[style.iconType]) {
this.iconLibrary[style.iconType].call(this, ctx, style, refreshNextFrame);
} else {
ctx.moveTo(style.x, style.y);
ctx.lineTo(style.x + style.width, style.y);
ctx.lineTo(style.x + style.width, style.y + style.height);
ctx.lineTo(style.x, style.y + style.height);
ctx.lineTo(style.x, style.y);
ctx.closePath();
}
return;
},
getRect: function (style) {
if (style.__rect) {
return style.__rect;
}
style.__rect = {
x: Math.round(style.x),
y: Math.round(style.y - (style.iconType == 'pin' ? style.height / 2 * 1.5 : 0)),
width: style.width,
height: style.height * (style.iconType === 'pin' ? 1.25 : 1)
};
return style.__rect;
},
isCover: function (x, y) {
var originPos = this.transformCoordToLocal(x, y);
x = originPos[0];
y = originPos[1];
var rect = this.style.__rect;
if (!rect) {
rect = this.style.__rect = this.getRect(this.style);
}
var delta = rect.height < 8 || rect.width < 8 ? 4 : 0;
return x >= rect.x - delta && x <= rect.x + rect.width + delta && y >= rect.y - delta && y <= rect.y + rect.height + delta;
}
};
zrUtil.inherits(Icon, Base);
return Icon;
});define('echarts/util/shape/MarkLine', [
'require',
'zrender/shape/Base',
'./Icon',
'zrender/shape/Line',
'zrender/shape/BezierCurve',
'zrender/tool/area',
'zrender/shape/util/dashedLineTo',
'zrender/tool/util',
'zrender/tool/curve'
], function (require) {
var Base = require('zrender/shape/Base');
var IconShape = require('./Icon');
var LineShape = require('zrender/shape/Line');
var lineInstance = new LineShape({});
var CurveShape = require('zrender/shape/BezierCurve');
var curveInstance = new CurveShape({});
var area = require('zrender/tool/area');
var dashedLineTo = require('zrender/shape/util/dashedLineTo');
var zrUtil = require('zrender/tool/util');
var curveTool = require('zrender/tool/curve');
function MarkLine(options) {
Base.call(this, options);
if (this.style.curveness > 0) {
this.updatePoints(this.style);
}
if (this.highlightStyle.curveness > 0) {
this.updatePoints(this.highlightStyle);
}
}
MarkLine.prototype = {
type: 'mark-line',
brush: function (ctx, isHighlight) {
var style = this.style;
if (isHighlight) {
style = this.getHighlightStyle(style, this.highlightStyle || {});
}
ctx.save();
this.setContext(ctx, style);
this.setTransform(ctx);
ctx.save();
ctx.beginPath();
this.buildPath(ctx, style);
ctx.stroke();
ctx.restore();
this.brushSymbol(ctx, style, 0);
this.brushSymbol(ctx, style, 1);
this.drawText(ctx, style, this.style);
ctx.restore();
},
buildPath: function (ctx, style) {
var lineType = style.lineType || 'solid';
ctx.moveTo(style.xStart, style.yStart);
if (style.curveness > 0) {
var lineDash = null;
switch (lineType) {
case 'dashed':
lineDash = [
5,
5
];
break;
case 'dotted':
lineDash = [
1,
1
];
break;
}
if (lineDash && ctx.setLineDash) {
ctx.setLineDash(lineDash);
}
ctx.quadraticCurveTo(style.cpX1, style.cpY1, style.xEnd, style.yEnd);
} else {
if (lineType == 'solid') {
ctx.lineTo(style.xEnd, style.yEnd);
} else {
var dashLength = (style.lineWidth || 1) * (style.lineType == 'dashed' ? 5 : 1);
dashedLineTo(ctx, style.xStart, style.yStart, style.xEnd, style.yEnd, dashLength);
}
}
},
updatePoints: function (style) {
var curveness = style.curveness || 0;
var inv = 1;
var x0 = style.xStart;
var y0 = style.yStart;
var x2 = style.xEnd;
var y2 = style.yEnd;
var x1 = (x0 + x2) / 2 - inv * (y0 - y2) * curveness;
var y1 = (y0 + y2) / 2 - inv * (x2 - x0) * curveness;
style.cpX1 = x1;
style.cpY1 = y1;
},
brushSymbol: function (ctx, style, idx) {
if (style.symbol[idx] == 'none') {
return;
}
ctx.save();
ctx.beginPath();
ctx.lineWidth = style.symbolBorder;
ctx.strokeStyle = style.symbolBorderColor;
var symbol = style.symbol[idx].replace('empty', '').toLowerCase();
if (style.symbol[idx].match('empty')) {
ctx.fillStyle = '#fff';
}
var x0 = style.xStart;
var y0 = style.yStart;
var x2 = style.xEnd;
var y2 = style.yEnd;
var x = idx === 0 ? x0 : x2;
var y = idx === 0 ? y0 : y2;
var curveness = style.curveness || 0;
var rotate = style.symbolRotate[idx] != null ? style.symbolRotate[idx] - 0 : 0;
rotate = rotate / 180 * Math.PI;
if (symbol == 'arrow' && rotate === 0) {
if (curveness === 0) {
var sign = idx === 0 ? -1 : 1;
rotate = Math.PI / 2 + Math.atan2(sign * (y2 - y0), sign * (x2 - x0));
} else {
var x1 = style.cpX1;
var y1 = style.cpY1;
var quadraticDerivativeAt = curveTool.quadraticDerivativeAt;
var dx = quadraticDerivativeAt(x0, x1, x2, idx);
var dy = quadraticDerivativeAt(y0, y1, y2, idx);
rotate = Math.PI / 2 + Math.atan2(dy, dx);
}
}
ctx.translate(x, y);
if (rotate !== 0) {
ctx.rotate(rotate);
}
var symbolSize = style.symbolSize[idx];
IconShape.prototype.buildPath(ctx, {
x: -symbolSize,
y: -symbolSize,
width: symbolSize * 2,
height: symbolSize * 2,
iconType: symbol
});
ctx.closePath();
ctx.fill();
ctx.stroke();
ctx.restore();
},
getRect: function (style) {
style.curveness > 0 ? curveInstance.getRect(style) : lineInstance.getRect(style);
return style.__rect;
},
isCover: function (x, y) {
var originPos = this.transformCoordToLocal(x, y);
x = originPos[0];
y = originPos[1];
if (this.isCoverRect(x, y)) {
return this.style.curveness > 0 ? area.isInside(curveInstance, this.style, x, y) : area.isInside(lineInstance, this.style, x, y);
}
return false;
}
};
zrUtil.inherits(MarkLine, Base);
return MarkLine;
});define('echarts/util/shape/Symbol', [
'require',
'zrender/shape/Base',
'zrender/shape/Polygon',
'zrender/tool/util',
'./normalIsCover'
], function (require) {
var Base = require('zrender/shape/Base');
var PolygonShape = require('zrender/shape/Polygon');
var polygonInstance = new PolygonShape({});
var zrUtil = require('zrender/tool/util');
function Symbol(options) {
Base.call(this, options);
}
Symbol.prototype = {
type: 'symbol',
buildPath: function (ctx, style) {
var pointList = style.pointList;
var len = pointList.length;
if (len === 0) {
return;
}
var subSize = 10000;
var subSetLength = Math.ceil(len / subSize);
var sub;
var subLen;
var isArray = pointList[0] instanceof Array;
var size = style.size ? style.size : 2;
var curSize = size;
var halfSize = size / 2;
var PI2 = Math.PI * 2;
var percent;
var x;
var y;
for (var j = 0; j < subSetLength; j++) {
ctx.beginPath();
sub = j * subSize;
subLen = sub + subSize;
subLen = subLen > len ? len : subLen;
for (var i = sub; i < subLen; i++) {
if (style.random) {
percent = style['randomMap' + i % 20] / 100;
curSize = size * percent * percent;
halfSize = curSize / 2;
}
if (isArray) {
x = pointList[i][0];
y = pointList[i][1];
} else {
x = pointList[i].x;
y = pointList[i].y;
}
if (curSize < 3) {
ctx.rect(x - halfSize, y - halfSize, curSize, curSize);
} else {
switch (style.iconType) {
case 'circle':
ctx.moveTo(x, y);
ctx.arc(x, y, halfSize, 0, PI2, true);
break;
case 'diamond':
ctx.moveTo(x, y - halfSize);
ctx.lineTo(x + halfSize / 3, y - halfSize / 3);
ctx.lineTo(x + halfSize, y);
ctx.lineTo(x + halfSize / 3, y + halfSize / 3);
ctx.lineTo(x, y + halfSize);
ctx.lineTo(x - halfSize / 3, y + halfSize / 3);
ctx.lineTo(x - halfSize, y);
ctx.lineTo(x - halfSize / 3, y - halfSize / 3);
ctx.lineTo(x, y - halfSize);
break;
default:
ctx.rect(x - halfSize, y - halfSize, curSize, curSize);
}
}
}
ctx.closePath();
if (j < subSetLength - 1) {
switch (style.brushType) {
case 'both':
ctx.fill();
style.lineWidth > 0 && ctx.stroke();
break;
case 'stroke':
style.lineWidth > 0 && ctx.stroke();
break;
default:
ctx.fill();
}
}
}
},
getRect: function (style) {
return style.__rect || polygonInstance.getRect(style);
},
isCover: require('./normalIsCover')
};
zrUtil.inherits(Symbol, Base);
return Symbol;
});define('zrender/shape/Polyline', [
'require',
'./Base',
'./util/smoothSpline',
'./util/smoothBezier',
'./util/dashedLineTo',
'./Polygon',
'../tool/util'
], function (require) {
var Base = require('./Base');
var smoothSpline = require('./util/smoothSpline');
var smoothBezier = require('./util/smoothBezier');
var dashedLineTo = require('./util/dashedLineTo');
var Polyline = function (options) {
this.brushTypeOnly = 'stroke';
this.textPosition = 'end';
Base.call(this, options);
};
Polyline.prototype = {
type: 'polyline',
buildPath: function (ctx, style) {
var pointList = style.pointList;
if (pointList.length < 2) {
return;
}
var len = Math.min(style.pointList.length, Math.round(style.pointListLength || style.pointList.length));
if (style.smooth && style.smooth !== 'spline') {
if (!style.controlPointList) {
this.updateControlPoints(style);
}
var controlPointList = style.controlPointList;
ctx.moveTo(pointList[0][0], pointList[0][1]);
var cp1;
var cp2;
var p;
for (var i = 0; i < len - 1; i++) {
cp1 = controlPointList[i * 2];
cp2 = controlPointList[i * 2 + 1];
p = pointList[i + 1];
ctx.bezierCurveTo(cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]);
}
} else {
if (style.smooth === 'spline') {
pointList = smoothSpline(pointList);
len = pointList.length;
}
if (!style.lineType || style.lineType == 'solid') {
ctx.moveTo(pointList[0][0], pointList[0][1]);
for (var i = 1; i < len; i++) {
ctx.lineTo(pointList[i][0], pointList[i][1]);
}
} else if (style.lineType == 'dashed' || style.lineType == 'dotted') {
var dashLength = (style.lineWidth || 1) * (style.lineType == 'dashed' ? 5 : 1);
ctx.moveTo(pointList[0][0], pointList[0][1]);
for (var i = 1; i < len; i++) {
dashedLineTo(ctx, pointList[i - 1][0], pointList[i - 1][1], pointList[i][0], pointList[i][1], dashLength);
}
}
}
return;
},
updateControlPoints: function (style) {
style.controlPointList = smoothBezier(style.pointList, style.smooth, false, style.smoothConstraint);
},
getRect: function (style) {
return require('./Polygon').prototype.getRect(style);
}
};
require('../tool/util').inherits(Polyline, Base);
return Polyline;
});define('zrender/shape/ShapeBundle', [
'require',
'./Base',
'../tool/util'
], function (require) {
var Base = require('./Base');
var ShapeBundle = function (options) {
Base.call(this, options);
};
ShapeBundle.prototype = {
constructor: ShapeBundle,
type: 'shape-bundle',
brush: function (ctx, isHighlight) {
var style = this.beforeBrush(ctx, isHighlight);
ctx.beginPath();
for (var i = 0; i < style.shapeList.length; i++) {
var subShape = style.shapeList[i];
var subShapeStyle = subShape.style;
if (isHighlight) {
subShapeStyle = subShape.getHighlightStyle(subShapeStyle, subShape.highlightStyle || {}, subShape.brushTypeOnly);
}
subShape.buildPath(ctx, subShapeStyle);
}
switch (style.brushType) {
case 'both':
ctx.fill();
case 'stroke':
style.lineWidth > 0 && ctx.stroke();
break;
default:
ctx.fill();
}
this.drawText(ctx, style, this.style);
this.afterBrush(ctx);
},
getRect: function (style) {
if (style.__rect) {
return style.__rect;
}
var minX = Infinity;
var maxX = -Infinity;
var minY = Infinity;
var maxY = -Infinity;
for (var i = 0; i < style.shapeList.length; i++) {
var subShape = style.shapeList[i];
var subRect = subShape.getRect(subShape.style);
var minX = Math.min(subRect.x, minX);
var minY = Math.min(subRect.y, minY);
var maxX = Math.max(subRect.x + subRect.width, maxX);
var maxY = Math.max(subRect.y + subRect.height, maxY);
}
style.__rect = {
x: minX,
y: minY,
width: maxX - minX,
height: maxY - minY
};
return style.__rect;
},
isCover: function (x, y) {
var originPos = this.transformCoordToLocal(x, y);
x = originPos[0];
y = originPos[1];
if (this.isCoverRect(x, y)) {
for (var i = 0; i < this.style.shapeList.length; i++) {
var subShape = this.style.shapeList[i];
if (subShape.isCover(x, y)) {
return true;
}
}
}
return false;
}
};
require('../tool/util').inherits(ShapeBundle, Base);
return ShapeBundle;
});define('echarts/util/ecAnimation', [
'require',
'zrender/tool/util',
'zrender/tool/curve',
'zrender/shape/Polygon'
], function (require) {
var zrUtil = require('zrender/tool/util');
var curveTool = require('zrender/tool/curve');
function pointList(zr, oldShape, newShape, duration, easing) {
var newPointList = newShape.style.pointList;
var newPointListLen = newPointList.length;
var oldPointList;
if (!oldShape) {
oldPointList = [];
if (newShape._orient != 'vertical') {
var y = newPointList[0][1];
for (var i = 0; i < newPointListLen; i++) {
oldPointList[i] = [
newPointList[i][0],
y
];
}
} else {
var x = newPointList[0][0];
for (var i = 0; i < newPointListLen; i++) {
oldPointList[i] = [
x,
newPointList[i][1]
];
}
}
if (newShape.type == 'half-smooth-polygon') {
oldPointList[newPointListLen - 1] = zrUtil.clone(newPointList[newPointListLen - 1]);
oldPointList[newPointListLen - 2] = zrUtil.clone(newPointList[newPointListLen - 2]);
}
oldShape = { style: { pointList: oldPointList } };
}
oldPointList = oldShape.style.pointList;
var oldPointListLen = oldPointList.length;
if (oldPointListLen == newPointListLen) {
newShape.style.pointList = oldPointList;
} else if (oldPointListLen < newPointListLen) {
newShape.style.pointList = oldPointList.concat(newPointList.slice(oldPointListLen));
} else {
newShape.style.pointList = oldPointList.slice(0, newPointListLen);
}
zr.addShape(newShape);
newShape.__animating = true;
zr.animate(newShape.id, 'style').when(duration, { pointList: newPointList }).during(function () {
if (newShape.updateControlPoints) {
newShape.updateControlPoints(newShape.style);
}
}).done(function () {
newShape.__animating = false;
}).start(easing);
}
function cloneStyle(target, source) {
var len = arguments.length;
for (var i = 2; i < len; i++) {
var prop = arguments[i];
target.style[prop] = source.style[prop];
}
}
function rectangle(zr, oldShape, newShape, duration, easing) {
var newShapeStyle = newShape.style;
if (!oldShape) {
oldShape = {
position: newShape.position,
style: {
x: newShapeStyle.x,
y: newShape._orient == 'vertical' ? newShapeStyle.y + newShapeStyle.height : newShapeStyle.y,
width: newShape._orient == 'vertical' ? newShapeStyle.width : 0,
height: newShape._orient != 'vertical' ? newShapeStyle.height : 0
}
};
}
var newX = newShapeStyle.x;
var newY = newShapeStyle.y;
var newWidth = newShapeStyle.width;
var newHeight = newShapeStyle.height;
var newPosition = [
newShape.position[0],
newShape.position[1]
];
cloneStyle(newShape, oldShape, 'x', 'y', 'width', 'height');
newShape.position = oldShape.position;
zr.addShape(newShape);
if (newPosition[0] != oldShape.position[0] || newPosition[1] != oldShape.position[1]) {
zr.animate(newShape.id, '').when(duration, { position: newPosition }).start(easing);
}
newShape.__animating = true;
zr.animate(newShape.id, 'style').when(duration, {
x: newX,
y: newY,
width: newWidth,
height: newHeight
}).done(function () {
newShape.__animating = false;
}).start(easing);
}
function candle(zr, oldShape, newShape, duration, easing) {
if (!oldShape) {
var y = newShape.style.y;
oldShape = {
style: {
y: [
y[0],
y[0],
y[0],
y[0]
]
}
};
}
var newY = newShape.style.y;
newShape.style.y = oldShape.style.y;
zr.addShape(newShape);
newShape.__animating = true;
zr.animate(newShape.id, 'style').when(duration, { y: newY }).done(function () {
newShape.__animating = false;
}).start(easing);
}
function ring(zr, oldShape, newShape, duration, easing) {
var x = newShape.style.x;
var y = newShape.style.y;
var r0 = newShape.style.r0;
var r = newShape.style.r;
newShape.__animating = true;
if (newShape._animationAdd != 'r') {
newShape.style.r0 = 0;
newShape.style.r = 0;
newShape.rotation = [
Math.PI * 2,
x,
y
];
zr.addShape(newShape);
zr.animate(newShape.id, 'style').when(duration, {
r0: r0,
r: r
}).done(function () {
newShape.__animating = false;
}).start(easing);
zr.animate(newShape.id, '').when(duration, {
rotation: [
0,
x,
y
]
}).start(easing);
} else {
newShape.style.r0 = newShape.style.r;
zr.addShape(newShape);
zr.animate(newShape.id, 'style').when(duration, { r0: r0 }).done(function () {
newShape.__animating = false;
}).start(easing);
}
}
function sector(zr, oldShape, newShape, duration, easing) {
if (!oldShape) {
if (newShape._animationAdd != 'r') {
oldShape = {
style: {
startAngle: newShape.style.startAngle,
endAngle: newShape.style.startAngle
}
};
} else {
oldShape = { style: { r0: newShape.style.r } };
}
}
var startAngle = newShape.style.startAngle;
var endAngle = newShape.style.endAngle;
cloneStyle(newShape, oldShape, 'startAngle', 'endAngle');
zr.addShape(newShape);
newShape.__animating = true;
zr.animate(newShape.id, 'style').when(duration, {
startAngle: startAngle,
endAngle: endAngle
}).done(function () {
newShape.__animating = false;
}).start(easing);
}
function text(zr, oldShape, newShape, duration, easing) {
if (!oldShape) {
oldShape = {
style: {
x: newShape.style.textAlign == 'left' ? newShape.style.x + 100 : newShape.style.x - 100,
y: newShape.style.y
}
};
}
var x = newShape.style.x;
var y = newShape.style.y;
cloneStyle(newShape, oldShape, 'x', 'y');
zr.addShape(newShape);
newShape.__animating = true;
zr.animate(newShape.id, 'style').when(duration, {
x: x,
y: y
}).done(function () {
newShape.__animating = false;
}).start(easing);
}
function polygon(zr, oldShape, newShape, duration, easing) {
var rect = require('zrender/shape/Polygon').prototype.getRect(newShape.style);
var x = rect.x + rect.width / 2;
var y = rect.y + rect.height / 2;
newShape.scale = [
0.1,
0.1,
x,
y
];
zr.addShape(newShape);
newShape.__animating = true;
zr.animate(newShape.id, '').when(duration, {
scale: [
1,
1,
x,
y
]
}).done(function () {
newShape.__animating = false;
}).start(easing);
}
function ribbon(zr, oldShape, newShape, duration, easing) {
if (!oldShape) {
oldShape = {
style: {
source0: 0,
source1: newShape.style.source1 > 0 ? 360 : -360,
target0: 0,
target1: newShape.style.target1 > 0 ? 360 : -360
}
};
}
var source0 = newShape.style.source0;
var source1 = newShape.style.source1;
var target0 = newShape.style.target0;
var target1 = newShape.style.target1;
if (oldShape.style) {
cloneStyle(newShape, oldShape, 'source0', 'source1', 'target0', 'target1');
}
zr.addShape(newShape);
newShape.__animating = true;
zr.animate(newShape.id, 'style').when(duration, {
source0: source0,
source1: source1,
target0: target0,
target1: target1
}).done(function () {
newShape.__animating = false;
}).start(easing);
}
function gaugePointer(zr, oldShape, newShape, duration, easing) {
if (!oldShape) {
oldShape = { style: { angle: newShape.style.startAngle } };
}
var angle = newShape.style.angle;
newShape.style.angle = oldShape.style.angle;
zr.addShape(newShape);
newShape.__animating = true;
zr.animate(newShape.id, 'style').when(duration, { angle: angle }).done(function () {
newShape.__animating = false;
}).start(easing);
}
function icon(zr, oldShape, newShape, duration, easing, delay) {
newShape.style._x = newShape.style.x;
newShape.style._y = newShape.style.y;
newShape.style._width = newShape.style.width;
newShape.style._height = newShape.style.height;
if (!oldShape) {
var x = newShape._x || 0;
var y = newShape._y || 0;
newShape.scale = [
0.01,
0.01,
x,
y
];
zr.addShape(newShape);
newShape.__animating = true;
zr.animate(newShape.id, '').delay(delay).when(duration, {
scale: [
1,
1,
x,
y
]
}).done(function () {
newShape.__animating = false;
}).start(easing || 'QuinticOut');
} else {
rectangle(zr, oldShape, newShape, duration, easing);
}
}
function line(zr, oldShape, newShape, duration, easing) {
if (!oldShape) {
oldShape = {
style: {
xStart: newShape.style.xStart,
yStart: newShape.style.yStart,
xEnd: newShape.style.xStart,
yEnd: newShape.style.yStart
}
};
}
var xStart = newShape.style.xStart;
var xEnd = newShape.style.xEnd;
var yStart = newShape.style.yStart;
var yEnd = newShape.style.yEnd;
cloneStyle(newShape, oldShape, 'xStart', 'xEnd', 'yStart', 'yEnd');
zr.addShape(newShape);
newShape.__animating = true;
zr.animate(newShape.id, 'style').when(duration, {
xStart: xStart,
xEnd: xEnd,
yStart: yStart,
yEnd: yEnd
}).done(function () {
newShape.__animating = false;
}).start(easing);
}
function markline(zr, oldShape, newShape, duration, easing) {
easing = easing || 'QuinticOut';
newShape.__animating = true;
zr.addShape(newShape);
var newShapeStyle = newShape.style;
var animationDone = function () {
newShape.__animating = false;
};
var x0 = newShapeStyle.xStart;
var y0 = newShapeStyle.yStart;
var x2 = newShapeStyle.xEnd;
var y2 = newShapeStyle.yEnd;
if (newShapeStyle.curveness > 0) {
newShape.updatePoints(newShapeStyle);
var obj = { p: 0 };
var x1 = newShapeStyle.cpX1;
var y1 = newShapeStyle.cpY1;
var newXArr = [];
var newYArr = [];
var subdivide = curveTool.quadraticSubdivide;
zr.animation.animate(obj).when(duration, { p: 1 }).during(function () {
subdivide(x0, x1, x2, obj.p, newXArr);
subdivide(y0, y1, y2, obj.p, newYArr);
newShapeStyle.cpX1 = newXArr[1];
newShapeStyle.cpY1 = newYArr[1];
newShapeStyle.xEnd = newXArr[2];
newShapeStyle.yEnd = newYArr[2];
zr.modShape(newShape);
}).done(animationDone).start(easing);
} else {
zr.animate(newShape.id, 'style').when(0, {
xEnd: x0,
yEnd: y0
}).when(duration, {
xEnd: x2,
yEnd: y2
}).done(animationDone).start(easing);
}
}
return {
pointList: pointList,
rectangle: rectangle,
candle: candle,
ring: ring,
sector: sector,
text: text,
polygon: polygon,
ribbon: ribbon,
gaugePointer: gaugePointer,
icon: icon,
line: line,
markline: markline
};
});define('echarts/util/ecEffect', [
'require',
'../util/ecData',
'zrender/shape/Circle',
'zrender/shape/Image',
'zrender/tool/curve',
'../util/shape/Icon',
'../util/shape/Symbol',
'zrender/shape/ShapeBundle',
'zrender/shape/Polyline',
'zrender/tool/vector',
'zrender/tool/env'
], function (require) {
var ecData = require('../util/ecData');
var CircleShape = require('zrender/shape/Circle');
var ImageShape = require('zrender/shape/Image');
var curveTool = require('zrender/tool/curve');
var IconShape = require('../util/shape/Icon');
var SymbolShape = require('../util/shape/Symbol');
var ShapeBundle = require('zrender/shape/ShapeBundle');
var Polyline = require('zrender/shape/Polyline');
var vec2 = require('zrender/tool/vector');
var canvasSupported = require('zrender/tool/env').canvasSupported;
function point(zr, effectList, shape, zlevel) {
var effect = shape.effect;
var color = effect.color || shape.style.strokeColor || shape.style.color;
var shadowColor = effect.shadowColor || color;
var size = effect.scaleSize;
var distance = effect.bounceDistance;
var shadowBlur = typeof effect.shadowBlur != 'undefined' ? effect.shadowBlur : size;
var effectShape;
if (shape.type !== 'image') {
effectShape = new IconShape({
zlevel: zlevel,
style: {
brushType: 'stroke',
iconType: shape.style.iconType != 'droplet' ? shape.style.iconType : 'circle',
x: shadowBlur + 1,
y: shadowBlur + 1,
n: shape.style.n,
width: shape.style._width * size,
height: shape.style._height * size,
lineWidth: 1,
strokeColor: color,
shadowColor: shadowColor,
shadowBlur: shadowBlur
},
draggable: false,
hoverable: false
});
if (shape.style.iconType == 'pin') {
effectShape.style.y += effectShape.style.height / 2 * 1.5;
}
if (canvasSupported) {
effectShape.style.image = zr.shapeToImage(effectShape, effectShape.style.width + shadowBlur * 2 + 2, effectShape.style.height + shadowBlur * 2 + 2).style.image;
effectShape = new ImageShape({
zlevel: effectShape.zlevel,
style: effectShape.style,
draggable: false,
hoverable: false
});
}
} else {
effectShape = new ImageShape({
zlevel: zlevel,
style: shape.style,
draggable: false,
hoverable: false
});
}
ecData.clone(shape, effectShape);
effectShape.position = shape.position;
effectList.push(effectShape);
zr.addShape(effectShape);
var devicePixelRatio = shape.type !== 'image' ? window.devicePixelRatio || 1 : 1;
var offset = (effectShape.style.width / devicePixelRatio - shape.style._width) / 2;
effectShape.style.x = shape.style._x - offset;
effectShape.style.y = shape.style._y - offset;
if (shape.style.iconType == 'pin') {
effectShape.style.y -= shape.style.height / 2 * 1.5;
}
var duration = (effect.period + Math.random() * 10) * 100;
zr.modShape(shape.id, { invisible: true });
var centerX = effectShape.style.x + effectShape.style.width / 2 / devicePixelRatio;
var centerY = effectShape.style.y + effectShape.style.height / 2 / devicePixelRatio;
if (effect.type === 'scale') {
zr.modShape(effectShape.id, {
scale: [
0.1,
0.1,
centerX,
centerY
]
});
zr.animate(effectShape.id, '', effect.loop).when(duration, {
scale: [
1,
1,
centerX,
centerY
]
}).done(function () {
shape.effect.show = false;
zr.delShape(effectShape.id);
}).start();
} else {
zr.animate(effectShape.id, 'style', effect.loop).when(duration, { y: effectShape.style.y - distance }).when(duration * 2, { y: effectShape.style.y }).done(function () {
shape.effect.show = false;
zr.delShape(effectShape.id);
}).start();
}
}
function largePoint(zr, effectList, shape, zlevel) {
var effect = shape.effect;
var color = effect.color || shape.style.strokeColor || shape.style.color;
var size = effect.scaleSize;
var shadowColor = effect.shadowColor || color;
var shadowBlur = typeof effect.shadowBlur != 'undefined' ? effect.shadowBlur : size * 2;
var devicePixelRatio = window.devicePixelRatio || 1;
var effectShape = new SymbolShape({
zlevel: zlevel,
position: shape.position,
scale: shape.scale,
style: {
pointList: shape.style.pointList,
iconType: shape.style.iconType,
color: color,
strokeColor: color,
shadowColor: shadowColor,
shadowBlur: shadowBlur * devicePixelRatio,
random: true,
brushType: 'fill',
lineWidth: 1,
size: shape.style.size
},
draggable: false,
hoverable: false
});
effectList.push(effectShape);
zr.addShape(effectShape);
zr.modShape(shape.id, { invisible: true });
var duration = Math.round(effect.period * 100);
var clip1 = {};
var clip2 = {};
for (var i = 0; i < 20; i++) {
effectShape.style['randomMap' + i] = 0;
clip1 = {};
clip1['randomMap' + i] = 100;
clip2 = {};
clip2['randomMap' + i] = 0;
effectShape.style['randomMap' + i] = Math.random() * 100;
zr.animate(effectShape.id, 'style', true).when(duration, clip1).when(duration * 2, clip2).when(duration * 3, clip1).when(duration * 4, clip1).delay(Math.random() * duration * i).start();
}
}
function line(zr, effectList, shape, zlevel, isLarge) {
var effect = shape.effect;
var shapeStyle = shape.style;
var color = effect.color || shapeStyle.strokeColor || shapeStyle.color;
var shadowColor = effect.shadowColor || shapeStyle.strokeColor || color;
var size = shapeStyle.lineWidth * effect.scaleSize;
var shadowBlur = typeof effect.shadowBlur != 'undefined' ? effect.shadowBlur : size;
var effectShape = new CircleShape({
zlevel: zlevel,
style: {
x: shadowBlur,
y: shadowBlur,
r: size,
color: color,
shadowColor: shadowColor,
shadowBlur: shadowBlur
},
hoverable: false
});
var offset = 0;
if (canvasSupported && !isLarge) {
var zlevel = effectShape.zlevel;
effectShape = zr.shapeToImage(effectShape, (size + shadowBlur) * 2, (size + shadowBlur) * 2);
effectShape.zlevel = zlevel;
effectShape.hoverable = false;
offset = shadowBlur;
}
if (!isLarge) {
ecData.clone(shape, effectShape);
effectShape.position = shape.position;
effectList.push(effectShape);
zr.addShape(effectShape);
}
var effectDone = function () {
if (!isLarge) {
shape.effect.show = false;
zr.delShape(effectShape.id);
}
effectShape.effectAnimator = null;
};
if (shape instanceof Polyline) {
var distanceList = [0];
var totalDist = 0;
var pointList = shapeStyle.pointList;
var controlPointList = shapeStyle.controlPointList;
for (var i = 1; i < pointList.length; i++) {
if (controlPointList) {
var cp1 = controlPointList[(i - 1) * 2];
var cp2 = controlPointList[(i - 1) * 2 + 1];
totalDist += vec2.dist(pointList[i - 1], cp1) + vec2.dist(cp1, cp2) + vec2.dist(cp2, pointList[i]);
} else {
totalDist += vec2.dist(pointList[i - 1], pointList[i]);
}
distanceList.push(totalDist);
}
var obj = { p: 0 };
var animator = zr.animation.animate(obj, { loop: effect.loop });
for (var i = 0; i < distanceList.length; i++) {
animator.when(distanceList[i] * effect.period, { p: i });
}
animator.during(function () {
var i = Math.floor(obj.p);
var x, y;
if (i == pointList.length - 1) {
x = pointList[i][0];
y = pointList[i][1];
} else {
var t = obj.p - i;
var p0 = pointList[i];
var p1 = pointList[i + 1];
if (controlPointList) {
var cp1 = controlPointList[i * 2];
var cp2 = controlPointList[i * 2 + 1];
x = curveTool.cubicAt(p0[0], cp1[0], cp2[0], p1[0], t);
y = curveTool.cubicAt(p0[1], cp1[1], cp2[1], p1[1], t);
} else {
x = (p1[0] - p0[0]) * t + p0[0];
y = (p1[1] - p0[1]) * t + p0[1];
}
}
effectShape.style.x = x;
effectShape.style.y = y;
if (!isLarge) {
zr.modShape(effectShape);
}
}).done(effectDone).start();
animator.duration = totalDist * effect.period;
effectShape.effectAnimator = animator;
} else {
var x0 = shapeStyle.xStart - offset;
var y0 = shapeStyle.yStart - offset;
var x2 = shapeStyle.xEnd - offset;
var y2 = shapeStyle.yEnd - offset;
effectShape.style.x = x0;
effectShape.style.y = y0;
var distance = (x2 - x0) * (x2 - x0) + (y2 - y0) * (y2 - y0);
var duration = Math.round(Math.sqrt(Math.round(distance * effect.period * effect.period)));
if (shape.style.curveness > 0) {
var x1 = shapeStyle.cpX1 - offset;
var y1 = shapeStyle.cpY1 - offset;
effectShape.effectAnimator = zr.animation.animate(effectShape, { loop: effect.loop }).when(duration, { p: 1 }).during(function (target, t) {
effectShape.style.x = curveTool.quadraticAt(x0, x1, x2, t);
effectShape.style.y = curveTool.quadraticAt(y0, y1, y2, t);
if (!isLarge) {
zr.modShape(effectShape);
}
}).done(effectDone).start();
} else {
effectShape.effectAnimator = zr.animation.animate(effectShape.style, { loop: effect.loop }).when(duration, {
x: x2,
y: y2
}).during(function () {
if (!isLarge) {
zr.modShape(effectShape);
}
}).done(effectDone).start();
}
effectShape.effectAnimator.duration = duration;
}
return effectShape;
}
function largeLine(zr, effectList, shape, zlevel) {
var effectShape = new ShapeBundle({
style: { shapeList: [] },
zlevel: zlevel,
hoverable: false
});
var shapeList = shape.style.shapeList;
var effect = shape.effect;
effectShape.position = shape.position;
var maxDuration = 0;
var subEffectAnimators = [];
for (var i = 0; i < shapeList.length; i++) {
shapeList[i].effect = effect;
var subEffectShape = line(zr, null, shapeList[i], zlevel, true);
var subEffectAnimator = subEffectShape.effectAnimator;
effectShape.style.shapeList.push(subEffectShape);
if (subEffectAnimator.duration > maxDuration) {
maxDuration = subEffectAnimator.duration;
}
if (i === 0) {
effectShape.style.color = subEffectShape.style.color;
effectShape.style.shadowBlur = subEffectShape.style.shadowBlur;
effectShape.style.shadowColor = subEffectShape.style.shadowColor;
}
subEffectAnimators.push(subEffectAnimator);
}
effectList.push(effectShape);
zr.addShape(effectShape);
var clearAllAnimators = function () {
for (var i = 0; i < subEffectAnimators.length; i++) {
subEffectAnimators[i].stop();
}
};
if (maxDuration) {
effectShape.__dummy = 0;
var animator = zr.animate(effectShape.id, '', effect.loop).when(maxDuration, { __dummy: 1 }).during(function () {
zr.modShape(effectShape);
}).done(function () {
shape.effect.show = false;
zr.delShape(effectShape.id);
}).start();
var oldStop = animator.stop;
animator.stop = function () {
clearAllAnimators();
oldStop.call(this);
};
}
}
return {
point: point,
largePoint: largePoint,
line: line,
largeLine: largeLine
};
});define('echarts/component/base', [
'require',
'../config',
'../util/ecData',
'../util/ecQuery',
'../util/number',
'zrender/tool/util',
'zrender/tool/env'
], function (require) {
var ecConfig = require('../config');
var ecData = require('../util/ecData');
var ecQuery = require('../util/ecQuery');
var number = require('../util/number');
var zrUtil = require('zrender/tool/util');
function Base(ecTheme, messageCenter, zr, option, myChart) {
this.ecTheme = ecTheme;
this.messageCenter = messageCenter;
this.zr = zr;
this.option = option;
this.series = option.series;
this.myChart = myChart;
this.component = myChart.component;
this.shapeList = [];
this.effectList = [];
var self = this;
self._onlegendhoverlink = function (param) {
if (self.legendHoverLink) {
var targetName = param.target;
var name;
for (var i = self.shapeList.length - 1; i >= 0; i--) {
name = self.type == ecConfig.CHART_TYPE_PIE || self.type == ecConfig.CHART_TYPE_FUNNEL ? ecData.get(self.shapeList[i], 'name') : (ecData.get(self.shapeList[i], 'series') || {}).name;
if (name == targetName && !self.shapeList[i].invisible && !self.shapeList[i].__animating) {
self.zr.addHoverShape(self.shapeList[i]);
}
}
}
};
messageCenter && messageCenter.bind(ecConfig.EVENT.LEGEND_HOVERLINK, this._onlegendhoverlink);
}
Base.prototype = {
canvasSupported: require('zrender/tool/env').canvasSupported,
_getZ: function (zWhat) {
if (this[zWhat] != null) {
return this[zWhat];
}
var opt = this.ecTheme[this.type];
if (opt && opt[zWhat] != null) {
return opt[zWhat];
}
opt = ecConfig[this.type];
if (opt && opt[zWhat] != null) {
return opt[zWhat];
}
return 0;
},
getZlevelBase: function () {
return this._getZ('zlevel');
},
getZBase: function () {
return this._getZ('z');
},
reformOption: function (opt) {
opt = zrUtil.merge(zrUtil.merge(opt || {}, zrUtil.clone(this.ecTheme[this.type] || {})), zrUtil.clone(ecConfig[this.type] || {}));
this.z = opt.z;
this.zlevel = opt.zlevel;
return opt;
},
reformCssArray: function (p) {
if (p instanceof Array) {
switch (p.length + '') {
case '4':
return p;
case '3':
return [
p[0],
p[1],
p[2],
p[1]
];
case '2':
return [
p[0],
p[1],
p[0],
p[1]
];
case '1':
return [
p[0],
p[0],
p[0],
p[0]
];
case '0':
return [
0,
0,
0,
0
];
}
} else {
return [
p,
p,
p,
p
];
}
},
getShapeById: function (id) {
for (var i = 0, l = this.shapeList.length; i < l; i++) {
if (this.shapeList[i].id === id) {
return this.shapeList[i];
}
}
return null;
},
getFont: function (textStyle) {
var finalTextStyle = this.getTextStyle(zrUtil.clone(textStyle));
return finalTextStyle.fontStyle + ' ' + finalTextStyle.fontWeight + ' ' + finalTextStyle.fontSize + 'px ' + finalTextStyle.fontFamily;
},
getTextStyle: function (targetStyle) {
return zrUtil.merge(zrUtil.merge(targetStyle || {}, this.ecTheme.textStyle), ecConfig.textStyle);
},
getItemStyleColor: function (itemColor, seriesIndex, dataIndex, data) {
return typeof itemColor === 'function' ? itemColor.call(this.myChart, {
seriesIndex: seriesIndex,
series: this.series[seriesIndex],
dataIndex: dataIndex,
data: data
}) : itemColor;
},
getDataFromOption: function (data, defaultData) {
return data != null ? data.value != null ? data.value : data : defaultData;
},
subPixelOptimize: function (position, lineWidth) {
if (lineWidth % 2 === 1) {
position = Math.floor(position) + 0.5;
} else {
position = Math.round(position);
}
return position;
},
resize: function () {
this.refresh && this.refresh();
this.clearEffectShape && this.clearEffectShape(true);
var self = this;
setTimeout(function () {
self.animationEffect && self.animationEffect();
}, 200);
},
clear: function () {
this.clearEffectShape && this.clearEffectShape();
this.zr && this.zr.delShape(this.shapeList);
this.shapeList = [];
},
dispose: function () {
this.onbeforDispose && this.onbeforDispose();
this.clear();
this.shapeList = null;
this.effectList = null;
this.messageCenter && this.messageCenter.unbind(ecConfig.EVENT.LEGEND_HOVERLINK, this._onlegendhoverlink);
this.onafterDispose && this.onafterDispose();
},
query: ecQuery.query,
deepQuery: ecQuery.deepQuery,
deepMerge: ecQuery.deepMerge,
parsePercent: number.parsePercent,
parseCenter: number.parseCenter,
parseRadius: number.parseRadius,
numAddCommas: number.addCommas,
getPrecision: number.getPrecision
};
return Base;
});define('echarts/layout/EdgeBundling', [
'require',
'../data/KDTree',
'zrender/tool/vector'
], function (require) {
var KDTree = require('../data/KDTree');
var vec2 = require('zrender/tool/vector');
var v2Create = vec2.create;
var v2DistSquare = vec2.distSquare;
var v2Dist = vec2.dist;
var v2Copy = vec2.copy;
var v2Clone = vec2.clone;
function squaredDistance(a, b) {
a = a.array;
b = b.array;
var x = b[0] - a[0];
var y = b[1] - a[1];
var z = b[2] - a[2];
var w = b[3] - a[3];
return x * x + y * y + z * z + w * w;
}
function CoarsenedEdge(group) {
this.points = [
group.mp0,
group.mp1
];
this.group = group;
}
function Edge(edge) {
var points = edge.points;
if (points[0][1] < points[1][1] || edge instanceof CoarsenedEdge) {
this.array = [
points[0][0],
points[0][1],
points[1][0],
points[1][1]
];
this._startPoint = points[0];
this._endPoint = points[1];
} else {
this.array = [
points[1][0],
points[1][1],
points[0][0],
points[0][1]
];
this._startPoint = points[1];
this._endPoint = points[0];
}
this.ink = v2Dist(points[0], points[1]);
this.edge = edge;
this.group = null;
}
Edge.prototype.getStartPoint = function () {
return this._startPoint;
};
Edge.prototype.getEndPoint = function () {
return this._endPoint;
};
function BundledEdgeGroup() {
this.edgeList = [];
this.mp0 = v2Create();
this.mp1 = v2Create();
this.ink = 0;
}
BundledEdgeGroup.prototype.addEdge = function (edge) {
edge.group = this;
this.edgeList.push(edge);
};
BundledEdgeGroup.prototype.removeEdge = function (edge) {
edge.group = null;
this.edgeList.splice(this.edgeList.indexOf(edge), 1);
};
function EdgeBundling() {
this.maxNearestEdge = 6;
this.maxTurningAngle = Math.PI / 4;
this.maxIteration = 20;
}
EdgeBundling.prototype = {
constructor: EdgeBundling,
run: function (rawEdges) {
var res = this._iterate(rawEdges);
var nIterate = 0;
while (nIterate++ < this.maxIteration) {
var coarsenedEdges = [];
for (var i = 0; i < res.groups.length; i++) {
coarsenedEdges.push(new CoarsenedEdge(res.groups[i]));
}
var newRes = this._iterate(coarsenedEdges);
if (newRes.savedInk <= 0) {
break;
} else {
res = newRes;
}
}
var newEdges = [];
function pointApproxEqual(p0, p1) {
return v2DistSquare(p0, p1) < 1e-10;
}
function cleanEdgePoints(edgePoints, rawEdgePoints) {
var res = [];
var off = 0;
for (var i = 0; i < edgePoints.length; i++) {
if (!(off > 0 && pointApproxEqual(edgePoints[i], res[off - 1]))) {
res[off++] = v2Clone(edgePoints[i]);
}
}
if (rawEdgePoints[0] && !pointApproxEqual(res[0], rawEdgePoints[0])) {
res = res.reverse();
}
return res;
}
var buildNewEdges = function (groups, fromEdgePoints) {
var newEdgePoints;
for (var i = 0; i < groups.length; i++) {
var group = groups[i];
if (group.edgeList[0] && group.edgeList[0].edge instanceof CoarsenedEdge) {
var newGroups = [];
for (var j = 0; j < group.edgeList.length; j++) {
newGroups.push(group.edgeList[j].edge.group);
}
if (!fromEdgePoints) {
newEdgePoints = [];
} else {
newEdgePoints = fromEdgePoints.slice();
}
newEdgePoints.unshift(group.mp0);
newEdgePoints.push(group.mp1);
buildNewEdges(newGroups, newEdgePoints);
} else {
for (var j = 0; j < group.edgeList.length; j++) {
var edge = group.edgeList[j];
if (!fromEdgePoints) {
newEdgePoints = [];
} else {
newEdgePoints = fromEdgePoints.slice();
}
newEdgePoints.unshift(group.mp0);
newEdgePoints.push(group.mp1);
newEdgePoints.unshift(edge.getStartPoint());
newEdgePoints.push(edge.getEndPoint());
newEdges.push({
points: cleanEdgePoints(newEdgePoints, edge.edge.points),
rawEdge: edge.edge
});
}
}
}
};
buildNewEdges(res.groups);
return newEdges;
},
_iterate: function (rawEdges) {
var edges = [];
var groups = [];
var totalSavedInk = 0;
for (var i = 0; i < rawEdges.length; i++) {
var edge = new Edge(rawEdges[i]);
edges.push(edge);
}
var tree = new KDTree(edges, 4);
var nearests = [];
var _mp0 = v2Create();
var _mp1 = v2Create();
var _newGroupInk = 0;
var mp0 = v2Create();
var mp1 = v2Create();
var newGroupInk = 0;
for (var i = 0; i < edges.length; i++) {
var edge = edges[i];
if (edge.group) {
continue;
}
tree.nearestN(edge, this.maxNearestEdge, squaredDistance, nearests);
var maxSavedInk = 0;
var mostSavingInkEdge = null;
var lastCheckedGroup = null;
for (var j = 0; j < nearests.length; j++) {
var nearest = nearests[j];
var savedInk = 0;
if (nearest.group) {
if (nearest.group !== lastCheckedGroup) {
lastCheckedGroup = nearest.group;
_newGroupInk = this._calculateGroupEdgeInk(nearest.group, edge, _mp0, _mp1);
savedInk = nearest.group.ink + edge.ink - _newGroupInk;
}
} else {
_newGroupInk = this._calculateEdgeEdgeInk(edge, nearest, _mp0, _mp1);
savedInk = nearest.ink + edge.ink - _newGroupInk;
}
if (savedInk > maxSavedInk) {
maxSavedInk = savedInk;
mostSavingInkEdge = nearest;
v2Copy(mp1, _mp1);
v2Copy(mp0, _mp0);
newGroupInk = _newGroupInk;
}
}
if (mostSavingInkEdge) {
totalSavedInk += maxSavedInk;
var group;
if (!mostSavingInkEdge.group) {
group = new BundledEdgeGroup();
groups.push(group);
group.addEdge(mostSavingInkEdge);
}
group = mostSavingInkEdge.group;
v2Copy(group.mp0, mp0);
v2Copy(group.mp1, mp1);
group.ink = newGroupInk;
mostSavingInkEdge.group.addEdge(edge);
} else {
var group = new BundledEdgeGroup();
groups.push(group);
v2Copy(group.mp0, edge.getStartPoint());
v2Copy(group.mp1, edge.getEndPoint());
group.ink = edge.ink;
group.addEdge(edge);
}
}
return {
groups: groups,
edges: edges,
savedInk: totalSavedInk
};
},
_calculateEdgeEdgeInk: function () {
var startPointSet = [];
var endPointSet = [];
return function (e0, e1, mp0, mp1) {
startPointSet[0] = e0.getStartPoint();
startPointSet[1] = e1.getStartPoint();
endPointSet[0] = e0.getEndPoint();
endPointSet[1] = e1.getEndPoint();
this._calculateMeetPoints(startPointSet, endPointSet, mp0, mp1);
var ink = v2Dist(startPointSet[0], mp0) + v2Dist(mp0, mp1) + v2Dist(mp1, endPointSet[0]) + v2Dist(startPointSet[1], mp0) + v2Dist(mp1, endPointSet[1]);
return ink;
};
}(),
_calculateGroupEdgeInk: function (group, edgeTryAdd, mp0, mp1) {
var startPointSet = [];
var endPointSet = [];
for (var i = 0; i < group.edgeList.length; i++) {
var edge = group.edgeList[i];
startPointSet.push(edge.getStartPoint());
endPointSet.push(edge.getEndPoint());
}
startPointSet.push(edgeTryAdd.getStartPoint());
endPointSet.push(edgeTryAdd.getEndPoint());
this._calculateMeetPoints(startPointSet, endPointSet, mp0, mp1);
var ink = v2Dist(mp0, mp1);
for (var i = 0; i < startPointSet.length; i++) {
ink += v2Dist(startPointSet[i], mp0) + v2Dist(endPointSet[i], mp1);
}
return ink;
},
_calculateMeetPoints: function () {
var cp0 = v2Create();
var cp1 = v2Create();
return function (startPointSet, endPointSet, mp0, mp1) {
vec2.set(cp0, 0, 0);
vec2.set(cp1, 0, 0);
var len = startPointSet.length;
for (var i = 0; i < len; i++) {
vec2.add(cp0, cp0, startPointSet[i]);
}
vec2.scale(cp0, cp0, 1 / len);
len = endPointSet.length;
for (var i = 0; i < len; i++) {
vec2.add(cp1, cp1, endPointSet[i]);
}
vec2.scale(cp1, cp1, 1 / len);
this._limitTurningAngle(startPointSet, cp0, cp1, mp0);
this._limitTurningAngle(endPointSet, cp1, cp0, mp1);
};
}(),
_limitTurningAngle: function () {
var v10 = v2Create();
var vTmp = v2Create();
var project = v2Create();
var tmpOut = v2Create();
return function (pointSet, p0, p1, out) {
var maxTurningAngleCos = Math.cos(this.maxTurningAngle);
var maxTurningAngleTan = Math.tan(this.maxTurningAngle);
vec2.sub(v10, p0, p1);
vec2.normalize(v10, v10);
vec2.copy(out, p0);
var maxMovement = 0;
for (var i = 0; i < pointSet.length; i++) {
var p = pointSet[i];
vec2.sub(vTmp, p, p0);
var len = vec2.len(vTmp);
vec2.scale(vTmp, vTmp, 1 / len);
var turningAngleCos = vec2.dot(vTmp, v10);
if (turningAngleCos < maxTurningAngleCos) {
vec2.scaleAndAdd(project, p0, v10, len * turningAngleCos);
var distance = v2Dist(project, p);
var d = distance / maxTurningAngleTan;
vec2.scaleAndAdd(tmpOut, project, v10, -d);
var movement = v2DistSquare(tmpOut, p0);
if (movement > maxMovement) {
maxMovement = movement;
vec2.copy(out, tmpOut);
}
}
}
};
}()
};
return EdgeBundling;
});define('zrender/shape/Star', [
'require',
'../tool/math',
'./Base',
'../tool/util'
], function (require) {
var math = require('../tool/math');
var sin = math.sin;
var cos = math.cos;
var PI = Math.PI;
var Base = require('./Base');
var Star = function (options) {
Base.call(this, options);
};
Star.prototype = {
type: 'star',
buildPath: function (ctx, style) {
var n = style.n;
if (!n || n < 2) {
return;
}
var x = style.x;
var y = style.y;
var r = style.r;
var r0 = style.r0;
if (r0 == null) {
r0 = n > 4 ? r * cos(2 * PI / n) / cos(PI / n) : r / 3;
}
var dStep = PI / n;
var deg = -PI / 2;
var xStart = x + r * cos(deg);
var yStart = y + r * sin(deg);
deg += dStep;
var pointList = style.pointList = [];
pointList.push([
xStart,
yStart
]);
for (var i = 0, end = n * 2 - 1, ri; i < end; i++) {
ri = i % 2 === 0 ? r0 : r;
pointList.push([
x + ri * cos(deg),
y + ri * sin(deg)
]);
deg += dStep;
}
pointList.push([
xStart,
yStart
]);
ctx.moveTo(pointList[0][0], pointList[0][1]);
for (var i = 0; i < pointList.length; i++) {
ctx.lineTo(pointList[i][0], pointList[i][1]);
}
ctx.closePath();
return;
},
getRect: function (style) {
if (style.__rect) {
return style.__rect;
}
var lineWidth;
if (style.brushType == 'stroke' || style.brushType == 'fill') {
lineWidth = style.lineWidth || 1;
} else {
lineWidth = 0;
}
style.__rect = {
x: Math.round(style.x - style.r - lineWidth / 2),
y: Math.round(style.y - style.r - lineWidth / 2),
width: style.r * 2 + lineWidth,
height: style.r * 2 + lineWidth
};
return style.__rect;
}
};
require('../tool/util').inherits(Star, Base);
return Star;
});define('zrender/shape/Heart', [
'require',
'./Base',
'./util/PathProxy',
'../tool/area',
'../tool/util'
], function (require) {
'use strict';
var Base = require('./Base');
var PathProxy = require('./util/PathProxy');
var area = require('../tool/area');
var Heart = function (options) {
Base.call(this, options);
this._pathProxy = new PathProxy();
};
Heart.prototype = {
type: 'heart',
buildPath: function (ctx, style) {
var path = this._pathProxy || new PathProxy();
path.begin(ctx);
path.moveTo(style.x, style.y);
path.bezierCurveTo(style.x + style.a / 2, style.y - style.b * 2 / 3, style.x + style.a * 2, style.y + style.b / 3, style.x, style.y + style.b);
path.bezierCurveTo(style.x - style.a * 2, style.y + style.b / 3, style.x - style.a / 2, style.y - style.b * 2 / 3, style.x, style.y);
path.closePath();
return;
},
getRect: function (style) {
if (style.__rect) {
return style.__rect;
}
if (!this._pathProxy.isEmpty()) {
this.buildPath(null, style);
}
return this._pathProxy.fastBoundingRect();
},
isCover: function (x, y) {
var originPos = this.transformCoordToLocal(x, y);
x = originPos[0];
y = originPos[1];
if (this.isCoverRect(x, y)) {
return area.isInsidePath(this._pathProxy.pathCommands, this.style.lineWidth, this.style.brushType, x, y);
}
}
};
require('../tool/util').inherits(Heart, Base);
return Heart;
});define('zrender/shape/Droplet', [
'require',
'./Base',
'./util/PathProxy',
'../tool/area',
'../tool/util'
], function (require) {
'use strict';
var Base = require('./Base');
var PathProxy = require('./util/PathProxy');
var area = require('../tool/area');
var Droplet = function (options) {
Base.call(this, options);
this._pathProxy = new PathProxy();
};
Droplet.prototype = {
type: 'droplet',
buildPath: function (ctx, style) {
var path = this._pathProxy || new PathProxy();
path.begin(ctx);
path.moveTo(style.x, style.y + style.a);
path.bezierCurveTo(style.x + style.a, style.y + style.a, style.x + style.a * 3 / 2, style.y - style.a / 3, style.x, style.y - style.b);
path.bezierCurveTo(style.x - style.a * 3 / 2, style.y - style.a / 3, style.x - style.a, style.y + style.a, style.x, style.y + style.a);
path.closePath();
},
getRect: function (style) {
if (style.__rect) {
return style.__rect;
}
if (!this._pathProxy.isEmpty()) {
this.buildPath(null, style);
}
return this._pathProxy.fastBoundingRect();
},
isCover: function (x, y) {
var originPos = this.transformCoordToLocal(x, y);
x = originPos[0];
y = originPos[1];
if (this.isCoverRect(x, y)) {
return area.isInsidePath(this._pathProxy.pathCommands, this.style.lineWidth, this.style.brushType, x, y);
}
}
};
require('../tool/util').inherits(Droplet, Base);
return Droplet;
});define('zrender/tool/math', [], function () {
var _radians = Math.PI / 180;
function sin(angle, isDegrees) {
return Math.sin(isDegrees ? angle * _radians : angle);
}
function cos(angle, isDegrees) {
return Math.cos(isDegrees ? angle * _radians : angle);
}
function degreeToRadian(angle) {
return angle * _radians;
}
function radianToDegree(angle) {
return angle / _radians;
}
return {
sin: sin,
cos: cos,
degreeToRadian: degreeToRadian,
radianToDegree: radianToDegree
};
});define('zrender/shape/util/PathProxy', [
'require',
'../../tool/vector'
], function (require) {
var vector = require('../../tool/vector');
var PathSegment = function (command, points) {
this.command = command;
this.points = points || null;
};
var PathProxy = function () {
this.pathCommands = [];
this._ctx = null;
this._min = [];
this._max = [];
};
PathProxy.prototype.fastBoundingRect = function () {
var min = this._min;
var max = this._max;
min[0] = min[1] = Infinity;
max[0] = max[1] = -Infinity;
for (var i = 0; i < this.pathCommands.length; i++) {
var seg = this.pathCommands[i];
var p = seg.points;
switch (seg.command) {
case 'M':
vector.min(min, min, p);
vector.max(max, max, p);
break;
case 'L':
vector.min(min, min, p);
vector.max(max, max, p);
break;
case 'C':
for (var j = 0; j < 6; j += 2) {
min[0] = Math.min(min[0], min[0], p[j]);
min[1] = Math.min(min[1], min[1], p[j + 1]);
max[0] = Math.max(max[0], max[0], p[j]);
max[1] = Math.max(max[1], max[1], p[j + 1]);
}
break;
case 'Q':
for (var j = 0; j < 4; j += 2) {
min[0] = Math.min(min[0], min[0], p[j]);
min[1] = Math.min(min[1], min[1], p[j + 1]);
max[0] = Math.max(max[0], max[0], p[j]);
max[1] = Math.max(max[1], max[1], p[j + 1]);
}
break;
case 'A':
var cx = p[0];
var cy = p[1];
var rx = p[2];
var ry = p[3];
min[0] = Math.min(min[0], min[0], cx - rx);
min[1] = Math.min(min[1], min[1], cy - ry);
max[0] = Math.max(max[0], max[0], cx + rx);
max[1] = Math.max(max[1], max[1], cy + ry);
break;
}
}
return {
x: min[0],
y: min[1],
width: max[0] - min[0],
height: max[1] - min[1]
};
};
PathProxy.prototype.begin = function (ctx) {
this._ctx = ctx || null;
this.pathCommands.length = 0;
return this;
};
PathProxy.prototype.moveTo = function (x, y) {
this.pathCommands.push(new PathSegment('M', [
x,
y
]));
if (this._ctx) {
this._ctx.moveTo(x, y);
}
return this;
};
PathProxy.prototype.lineTo = function (x, y) {
this.pathCommands.push(new PathSegment('L', [
x,
y
]));
if (this._ctx) {
this._ctx.lineTo(x, y);
}
return this;
};
PathProxy.prototype.bezierCurveTo = function (x1, y1, x2, y2, x3, y3) {
this.pathCommands.push(new PathSegment('C', [
x1,
y1,
x2,
y2,
x3,
y3
]));
if (this._ctx) {
this._ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3);
}
return this;
};
PathProxy.prototype.quadraticCurveTo = function (x1, y1, x2, y2) {
this.pathCommands.push(new PathSegment('Q', [
x1,
y1,
x2,
y2
]));
if (this._ctx) {
this._ctx.quadraticCurveTo(x1, y1, x2, y2);
}
return this;
};
PathProxy.prototype.arc = function (cx, cy, r, startAngle, endAngle, anticlockwise) {
this.pathCommands.push(new PathSegment('A', [
cx,
cy,
r,
r,
startAngle,
endAngle - startAngle,
0,
anticlockwise ? 0 : 1
]));
if (this._ctx) {
this._ctx.arc(cx, cy, r, startAngle, endAngle, anticlockwise);
}
return this;
};
PathProxy.prototype.arcTo = function (x1, y1, x2, y2, radius) {
if (this._ctx) {
this._ctx.arcTo(x1, y1, x2, y2, radius);
}
return this;
};
PathProxy.prototype.rect = function (x, y, w, h) {
if (this._ctx) {
this._ctx.rect(x, y, w, h);
}
return this;
};
PathProxy.prototype.closePath = function () {
this.pathCommands.push(new PathSegment('z'));
if (this._ctx) {
this._ctx.closePath();
}
return this;
};
PathProxy.prototype.isEmpty = function () {
return this.pathCommands.length === 0;
};
PathProxy.PathSegment = PathSegment;
return PathProxy;
});define('zrender/shape/Line', [
'require',
'./Base',
'./util/dashedLineTo',
'../tool/util'
], function (require) {
var Base = require('./Base');
var dashedLineTo = require('./util/dashedLineTo');
var Line = function (options) {
this.brushTypeOnly = 'stroke';
this.textPosition = 'end';
Base.call(this, options);
};
Line.prototype = {
type: 'line',
buildPath: function (ctx, style) {
if (!style.lineType || style.lineType == 'solid') {
ctx.moveTo(style.xStart, style.yStart);
ctx.lineTo(style.xEnd, style.yEnd);
} else if (style.lineType == 'dashed' || style.lineType == 'dotted') {
var dashLength = (style.lineWidth || 1) * (style.lineType == 'dashed' ? 5 : 1);
dashedLineTo(ctx, style.xStart, style.yStart, style.xEnd, style.yEnd, dashLength);
}
},
getRect: function (style) {
if (style.__rect) {
return style.__rect;
}
var lineWidth = style.lineWidth || 1;
style.__rect = {
x: Math.min(style.xStart, style.xEnd) - lineWidth,
y: Math.min(style.yStart, style.yEnd) - lineWidth,
width: Math.abs(style.xStart - style.xEnd) + lineWidth,
height: Math.abs(style.yStart - style.yEnd) + lineWidth
};
return style.__rect;
}
};
require('../tool/util').inherits(Line, Base);
return Line;
});define('zrender/shape/BezierCurve', [
'require',
'./Base',
'../tool/util'
], function (require) {
'use strict';
var Base = require('./Base');
var BezierCurve = function (options) {
this.brushTypeOnly = 'stroke';
this.textPosition = 'end';
Base.call(this, options);
};
BezierCurve.prototype = {
type: 'bezier-curve',
buildPath: function (ctx, style) {
ctx.moveTo(style.xStart, style.yStart);
if (typeof style.cpX2 != 'undefined' && typeof style.cpY2 != 'undefined') {
ctx.bezierCurveTo(style.cpX1, style.cpY1, style.cpX2, style.cpY2, style.xEnd, style.yEnd);
} else {
ctx.quadraticCurveTo(style.cpX1, style.cpY1, style.xEnd, style.yEnd);
}
},
getRect: function (style) {
if (style.__rect) {
return style.__rect;
}
var _minX = Math.min(style.xStart, style.xEnd, style.cpX1);
var _minY = Math.min(style.yStart, style.yEnd, style.cpY1);
var _maxX = Math.max(style.xStart, style.xEnd, style.cpX1);
var _maxY = Math.max(style.yStart, style.yEnd, style.cpY1);
var _x2 = style.cpX2;
var _y2 = style.cpY2;
if (typeof _x2 != 'undefined' && typeof _y2 != 'undefined') {
_minX = Math.min(_minX, _x2);
_minY = Math.min(_minY, _y2);
_maxX = Math.max(_maxX, _x2);
_maxY = Math.max(_maxY, _y2);
}
var lineWidth = style.lineWidth || 1;
style.__rect = {
x: _minX - lineWidth,
y: _minY - lineWidth,
width: _maxX - _minX + lineWidth,
height: _maxY - _minY + lineWidth
};
return style.__rect;
}
};
require('../tool/util').inherits(BezierCurve, Base);
return BezierCurve;
});define('zrender/shape/util/dashedLineTo', [], function () {
var dashPattern = [
5,
5
];
return function (ctx, x1, y1, x2, y2, dashLength) {
if (ctx.setLineDash) {
dashPattern[0] = dashPattern[1] = dashLength;
ctx.setLineDash(dashPattern);
ctx.moveTo(x1, y1);
ctx.lineTo(x2, y2);
return;
}
dashLength = typeof dashLength != 'number' ? 5 : dashLength;
var dx = x2 - x1;
var dy = y2 - y1;
var numDashes = Math.floor(Math.sqrt(dx * dx + dy * dy) / dashLength);
dx = dx / numDashes;
dy = dy / numDashes;
var flag = true;
for (var i = 0; i < numDashes; ++i) {
if (flag) {
ctx.moveTo(x1, y1);
} else {
ctx.lineTo(x1, y1);
}
flag = !flag;
x1 += dx;
y1 += dy;
}
ctx.lineTo(x2, y2);
};
});define('zrender/shape/Polygon', [
'require',
'./Base',
'./util/smoothSpline',
'./util/smoothBezier',
'./util/dashedLineTo',
'../tool/util'
], function (require) {
var Base = require('./Base');
var smoothSpline = require('./util/smoothSpline');
var smoothBezier = require('./util/smoothBezier');
var dashedLineTo = require('./util/dashedLineTo');
var Polygon = function (options) {
Base.call(this, options);
};
Polygon.prototype = {
type: 'polygon',
buildPath: function (ctx, style) {
var pointList = style.pointList;
if (pointList.length < 2) {
return;
}
if (style.smooth && style.smooth !== 'spline') {
var controlPoints = smoothBezier(pointList, style.smooth, true, style.smoothConstraint);
ctx.moveTo(pointList[0][0], pointList[0][1]);
var cp1;
var cp2;
var p;
var len = pointList.length;
for (var i = 0; i < len; i++) {
cp1 = controlPoints[i * 2];
cp2 = controlPoints[i * 2 + 1];
p = pointList[(i + 1) % len];
ctx.bezierCurveTo(cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]);
}
} else {
if (style.smooth === 'spline') {
pointList = smoothSpline(pointList, true);
}
if (!style.lineType || style.lineType == 'solid') {
ctx.moveTo(pointList[0][0], pointList[0][1]);
for (var i = 1, l = pointList.length; i < l; i++) {
ctx.lineTo(pointList[i][0], pointList[i][1]);
}
ctx.lineTo(pointList[0][0], pointList[0][1]);
} else if (style.lineType == 'dashed' || style.lineType == 'dotted') {
var dashLength = style._dashLength || (style.lineWidth || 1) * (style.lineType == 'dashed' ? 5 : 1);
style._dashLength = dashLength;
ctx.moveTo(pointList[0][0], pointList[0][1]);
for (var i = 1, l = pointList.length; i < l; i++) {
dashedLineTo(ctx, pointList[i - 1][0], pointList[i - 1][1], pointList[i][0], pointList[i][1], dashLength);
}
dashedLineTo(ctx, pointList[pointList.length - 1][0], pointList[pointList.length - 1][1], pointList[0][0], pointList[0][1], dashLength);
}
}
ctx.closePath();
return;
},
getRect: function (style) {
if (style.__rect) {
return style.__rect;
}
var minX = Number.MAX_VALUE;
var maxX = Number.MIN_VALUE;
var minY = Number.MAX_VALUE;
var maxY = Number.MIN_VALUE;
var pointList = style.pointList;
for (var i = 0, l = pointList.length; i < l; i++) {
if (pointList[i][0] < minX) {
minX = pointList[i][0];
}
if (pointList[i][0] > maxX) {
maxX = pointList[i][0];
}
if (pointList[i][1] < minY) {
minY = pointList[i][1];
}
if (pointList[i][1] > maxY) {
maxY = pointList[i][1];
}
}
var lineWidth;
if (style.brushType == 'stroke' || style.brushType == 'fill') {
lineWidth = style.lineWidth || 1;
} else {
lineWidth = 0;
}
style.__rect = {
x: Math.round(minX - lineWidth / 2),
y: Math.round(minY - lineWidth / 2),
width: maxX - minX + lineWidth,
height: maxY - minY + lineWidth
};
return style.__rect;
}
};
require('../tool/util').inherits(Polygon, Base);
return Polygon;
});define('echarts/util/shape/normalIsCover', [], function () {
return function (x, y) {
var originPos = this.transformCoordToLocal(x, y);
x = originPos[0];
y = originPos[1];
return this.isCoverRect(x, y);
};
});define('zrender/shape/util/smoothSpline', [
'require',
'../../tool/vector'
], function (require) {
var vector = require('../../tool/vector');
function interpolate(p0, p1, p2, p3, t, t2, t3) {
var v0 = (p2 - p0) * 0.5;
var v1 = (p3 - p1) * 0.5;
return (2 * (p1 - p2) + v0 + v1) * t3 + (-3 * (p1 - p2) - 2 * v0 - v1) * t2 + v0 * t + p1;
}
return function (points, isLoop, constraint) {
var len = points.length;
var ret = [];
var distance = 0;
for (var i = 1; i < len; i++) {
distance += vector.distance(points[i - 1], points[i]);
}
var segs = distance / 5;
segs = segs < len ? len : segs;
for (var i = 0; i < segs; i++) {
var pos = i / (segs - 1) * (isLoop ? len : len - 1);
var idx = Math.floor(pos);
var w = pos - idx;
var p0;
var p1 = points[idx % len];
var p2;
var p3;
if (!isLoop) {
p0 = points[idx === 0 ? idx : idx - 1];
p2 = points[idx > len - 2 ? len - 1 : idx + 1];
p3 = points[idx > len - 3 ? len - 1 : idx + 2];
} else {
p0 = points[(idx - 1 + len) % len];
p2 = points[(idx + 1) % len];
p3 = points[(idx + 2) % len];
}
var w2 = w * w;
var w3 = w * w2;
ret.push([
interpolate(p0[0], p1[0], p2[0], p3[0], w, w2, w3),
interpolate(p0[1], p1[1], p2[1], p3[1], w, w2, w3)
]);
}
return ret;
};
});define('zrender/shape/util/smoothBezier', [
'require',
'../../tool/vector'
], function (require) {
var vector = require('../../tool/vector');
return function (points, smooth, isLoop, constraint) {
var cps = [];
var v = [];
var v1 = [];
var v2 = [];
var prevPoint;
var nextPoint;
var hasConstraint = !!constraint;
var min, max;
if (hasConstraint) {
min = [
Infinity,
Infinity
];
max = [
-Infinity,
-Infinity
];
for (var i = 0, len = points.length; i < len; i++) {
vector.min(min, min, points[i]);
vector.max(max, max, points[i]);
}
vector.min(min, min, constraint[0]);
vector.max(max, max, constraint[1]);
}
for (var i = 0, len = points.length; i < len; i++) {
var point = points[i];
var prevPoint;
var nextPoint;
if (isLoop) {
prevPoint = points[i ? i - 1 : len - 1];
nextPoint = points[(i + 1) % len];
} else {
if (i === 0 || i === len - 1) {
cps.push(vector.clone(points[i]));
continue;
} else {
prevPoint = points[i - 1];
nextPoint = points[i + 1];
}
}
vector.sub(v, nextPoint, prevPoint);
vector.scale(v, v, smooth);
var d0 = vector.distance(point, prevPoint);
var d1 = vector.distance(point, nextPoint);
var sum = d0 + d1;
if (sum !== 0) {
d0 /= sum;
d1 /= sum;
}
vector.scale(v1, v, -d0);
vector.scale(v2, v, d1);
var cp0 = vector.add([], point, v1);
var cp1 = vector.add([], point, v2);
if (hasConstraint) {
vector.max(cp0, cp0, min);
vector.min(cp0, cp0, max);
vector.max(cp1, cp1, min);
vector.min(cp1, cp1, max);
}
cps.push(cp0);
cps.push(cp1);
}
if (isLoop) {
cps.push(vector.clone(cps.shift()));
}
return cps;
};
});define('echarts/util/ecQuery', [
'require',
'zrender/tool/util'
], function (require) {
var zrUtil = require('zrender/tool/util');
function query(optionTarget, optionLocation) {
if (typeof optionTarget == 'undefined') {
return;
}
if (!optionLocation) {
return optionTarget;
}
optionLocation = optionLocation.split('.');
var length = optionLocation.length;
var curIdx = 0;
while (curIdx < length) {
optionTarget = optionTarget[optionLocation[curIdx]];
if (typeof optionTarget == 'undefined') {
return;
}
curIdx++;
}
return optionTarget;
}
function deepQuery(ctrList, optionLocation) {
var finalOption;
for (var i = 0, l = ctrList.length; i < l; i++) {
finalOption = query(ctrList[i], optionLocation);
if (typeof finalOption != 'undefined') {
return finalOption;
}
}
}
function deepMerge(ctrList, optionLocation) {
var finalOption;
var len = ctrList.length;
while (len--) {
var tempOption = query(ctrList[len], optionLocation);
if (typeof tempOption != 'undefined') {
if (typeof finalOption == 'undefined') {
finalOption = zrUtil.clone(tempOption);
} else {
zrUtil.merge(finalOption, tempOption, true);
}
}
}
return finalOption;
}
return {
query: query,
deepQuery: deepQuery,
deepMerge: deepMerge
};
});define('echarts/util/number', [], function () {
function _trim(str) {
return str.replace(/^\s+/, '').replace(/\s+$/, '');
}
function parsePercent(value, maxValue) {
if (typeof value === 'string') {
if (_trim(value).match(/%$/)) {
return parseFloat(value) / 100 * maxValue;
}
return parseFloat(value);
}
return value;
}
function parseCenter(zr, center) {
return [
parsePercent(center[0], zr.getWidth()),
parsePercent(center[1], zr.getHeight())
];
}
function parseRadius(zr, radius) {
if (!(radius instanceof Array)) {
radius = [
0,
radius
];
}
var zrSize = Math.min(zr.getWidth(), zr.getHeight()) / 2;
return [
parsePercent(radius[0], zrSize),
parsePercent(radius[1], zrSize)
];
}
function addCommas(x) {
if (isNaN(x)) {
return '-';
}
x = (x + '').split('.');
return x[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g, '$1,') + (x.length > 1 ? '.' + x[1] : '');
}
function getPrecision(val) {
var e = 1;
var count = 0;
while (Math.round(val * e) / e !== val) {
e *= 10;
count++;
}
return count;
}
return {
parsePercent: parsePercent,
parseCenter: parseCenter,
parseRadius: parseRadius,
addCommas: addCommas,
getPrecision: getPrecision
};
});define('echarts/data/KDTree', [
'require',
'./quickSelect'
], function (require) {
var quickSelect = require('./quickSelect');
function Node(axis, data) {
this.left = null;
this.right = null;
this.axis = axis;
this.data = data;
}
var KDTree = function (points, dimension) {
if (!points.length) {
return;
}
if (!dimension) {
dimension = points[0].array.length;
}
this.dimension = dimension;
this.root = this._buildTree(points, 0, points.length - 1, 0);
this._stack = [];
this._nearstNList = [];
};
KDTree.prototype._buildTree = function (points, left, right, axis) {
if (right < left) {
return null;
}
var medianIndex = Math.floor((left + right) / 2);
medianIndex = quickSelect(points, left, right, medianIndex, function (a, b) {
return a.array[axis] - b.array[axis];
});
var median = points[medianIndex];
var node = new Node(axis, median);
axis = (axis + 1) % this.dimension;
if (right > left) {
node.left = this._buildTree(points, left, medianIndex - 1, axis);
node.right = this._buildTree(points, medianIndex + 1, right, axis);
}
return node;
};
KDTree.prototype.nearest = function (target, squaredDistance) {
var curr = this.root;
var stack = this._stack;
var idx = 0;
var minDist = Infinity;
var nearestNode = null;
if (curr.data !== target) {
minDist = squaredDistance(curr.data, target);
nearestNode = curr;
}
if (target.array[curr.axis] < curr.data.array[curr.axis]) {
curr.right && (stack[idx++] = curr.right);
curr.left && (stack[idx++] = curr.left);
} else {
curr.left && (stack[idx++] = curr.left);
curr.right && (stack[idx++] = curr.right);
}
while (idx--) {
curr = stack[idx];
var currDist = target.array[curr.axis] - curr.data.array[curr.axis];
var isLeft = currDist < 0;
var needsCheckOtherSide = false;
currDist = currDist * currDist;
if (currDist < minDist) {
currDist = squaredDistance(curr.data, target);
if (currDist < minDist && curr.data !== target) {
minDist = currDist;
nearestNode = curr;
}
needsCheckOtherSide = true;
}
if (isLeft) {
if (needsCheckOtherSide) {
curr.right && (stack[idx++] = curr.right);
}
curr.left && (stack[idx++] = curr.left);
} else {
if (needsCheckOtherSide) {
curr.left && (stack[idx++] = curr.left);
}
curr.right && (stack[idx++] = curr.right);
}
}
return nearestNode.data;
};
KDTree.prototype._addNearest = function (found, dist, node) {
var nearestNList = this._nearstNList;
for (var i = found - 1; i > 0; i--) {
if (dist >= nearestNList[i - 1].dist) {
break;
} else {
nearestNList[i].dist = nearestNList[i - 1].dist;
nearestNList[i].node = nearestNList[i - 1].node;
}
}
nearestNList[i].dist = dist;
nearestNList[i].node = node;
};
KDTree.prototype.nearestN = function (target, N, squaredDistance, output) {
if (N <= 0) {
output.length = 0;
return output;
}
var curr = this.root;
var stack = this._stack;
var idx = 0;
var nearestNList = this._nearstNList;
for (var i = 0; i < N; i++) {
if (!nearestNList[i]) {
nearestNList[i] = {};
}
nearestNList[i].dist = 0;
nearestNList[i].node = null;
}
var currDist = squaredDistance(curr.data, target);
var found = 0;
if (curr.data !== target) {
found++;
this._addNearest(found, currDist, curr);
}
if (target.array[curr.axis] < curr.data.array[curr.axis]) {
curr.right && (stack[idx++] = curr.right);
curr.left && (stack[idx++] = curr.left);
} else {
curr.left && (stack[idx++] = curr.left);
curr.right && (stack[idx++] = curr.right);
}
while (idx--) {
curr = stack[idx];
var currDist = target.array[curr.axis] - curr.data.array[curr.axis];
var isLeft = currDist < 0;
var needsCheckOtherSide = false;
currDist = currDist * currDist;
if (found < N || currDist < nearestNList[found - 1].dist) {
currDist = squaredDistance(curr.data, target);
if ((found < N || currDist < nearestNList[found - 1].dist) && curr.data !== target) {
if (found < N) {
found++;
}
this._addNearest(found, currDist, curr);
}
needsCheckOtherSide = true;
}
if (isLeft) {
if (needsCheckOtherSide) {
curr.right && (stack[idx++] = curr.right);
}
curr.left && (stack[idx++] = curr.left);
} else {
if (needsCheckOtherSide) {
curr.left && (stack[idx++] = curr.left);
}
curr.right && (stack[idx++] = curr.right);
}
}
for (var i = 0; i < found; i++) {
output[i] = nearestNList[i].node.data;
}
output.length = found;
return output;
};
return KDTree;
});define('echarts/data/quickSelect', ['require'], function (require) {
function defaultCompareFunc(a, b) {
return a - b;
}
function swapElement(list, idx0, idx1) {
var tmp = list[idx0];
list[idx0] = list[idx1];
list[idx1] = tmp;
}
function select(list, left, right, nth, compareFunc) {
var pivotIdx = left;
while (right > left) {
var pivotIdx = Math.round((right + left) / 2);
var pivotValue = list[pivotIdx];
swapElement(list, pivotIdx, right);
pivotIdx = left;
for (var i = left; i <= right - 1; i++) {
if (compareFunc(pivotValue, list[i]) >= 0) {
swapElement(list, i, pivotIdx);
pivotIdx++;
}
}
swapElement(list, right, pivotIdx);
if (pivotIdx === nth) {
return pivotIdx;
} else if (pivotIdx < nth) {
left = pivotIdx + 1;
} else {
right = pivotIdx - 1;
}
}
return left;
}
function quickSelect(list, left, right, nth, compareFunc) {
if (arguments.length <= 3) {
nth = left;
if (arguments.length == 2) {
compareFunc = defaultCompareFunc;
} else {
compareFunc = right;
}
left = 0;
right = list.length - 1;
}
return select(list, left, right, nth, compareFunc);
}
return quickSelect;
});define('echarts/component/dataView', [
'require',
'./base',
'../config',
'zrender/tool/util',
'../component'
], function (require) {
var Base = require('./base');
var ecConfig = require('../config');
var zrUtil = require('zrender/tool/util');
function DataView(ecTheme, messageCenter, zr, option, myChart) {
Base.call(this, ecTheme, messageCenter, zr, option, myChart);
this.dom = myChart.dom;
this._tDom = document.createElement('div');
this._textArea = document.createElement('textArea');
this._buttonRefresh = document.createElement('button');
this._buttonRefresh.setAttribute('type', 'button');
this._buttonClose = document.createElement('button');
this._buttonClose.setAttribute('type', 'button');
this._hasShow = false;
this._zrHeight = zr.getHeight();
this._zrWidth = zr.getWidth();
this._tDom.className = 'echarts-dataview';
this.hide();
this.dom.firstChild.appendChild(this._tDom);
if (window.addEventListener) {
this._tDom.addEventListener('click', this._stop);
this._tDom.addEventListener('mousewheel', this._stop);
this._tDom.addEventListener('mousemove', this._stop);
this._tDom.addEventListener('mousedown', this._stop);
this._tDom.addEventListener('mouseup', this._stop);
this._tDom.addEventListener('touchstart', this._stop);
this._tDom.addEventListener('touchmove', this._stop);
this._tDom.addEventListener('touchend', this._stop);
} else {
this._tDom.attachEvent('onclick', this._stop);
this._tDom.attachEvent('onmousewheel', this._stop);
this._tDom.attachEvent('onmousemove', this._stop);
this._tDom.attachEvent('onmousedown', this._stop);
this._tDom.attachEvent('onmouseup', this._stop);
}
}
DataView.prototype = {
type: ecConfig.COMPONENT_TYPE_DATAVIEW,
_lang: [
'Data View',
'close',
'refresh'
],
_gCssText: 'position:absolute;' + 'display:block;' + 'overflow:hidden;' + 'transition:height 0.8s,background-color 1s;' + '-moz-transition:height 0.8s,background-color 1s;' + '-webkit-transition:height 0.8s,background-color 1s;' + '-o-transition:height 0.8s,background-color 1s;' + 'z-index:1;' + 'left:0;' + 'top:0;',
hide: function () {
this._sizeCssText = 'width:' + this._zrWidth + 'px;' + 'height:' + 0 + 'px;' + 'background-color:#f0ffff;';
this._tDom.style.cssText = this._gCssText + this._sizeCssText;
},
show: function (newOption) {
this._hasShow = true;
var lang = this.query(this.option, 'toolbox.feature.dataView.lang') || this._lang;
this.option = newOption;
this._tDom.innerHTML = '<p style="padding:8px 0;margin:0 0 10px 0;' + 'border-bottom:1px solid #eee">' + (lang[0] || this._lang[0]) + '</p>';
var customContent = this.query(this.option, 'toolbox.feature.dataView.optionToContent');
if (typeof customContent != 'function') {
this._textArea.value = this._optionToContent();
} else {
this._textArea = document.createElement('div');
this._textArea.innerHTML = customContent(this.option);
}
this._textArea.style.cssText = 'display:block;margin:0 0 8px 0;padding:4px 6px;overflow:auto;' + 'width:100%;' + 'height:' + (this._zrHeight - 100) + 'px;';
this._tDom.appendChild(this._textArea);
this._buttonClose.style.cssText = 'float:right;padding:1px 6px;';
this._buttonClose.innerHTML = lang[1] || this._lang[1];
var self = this;
this._buttonClose.onclick = function () {
self.hide();
};
this._tDom.appendChild(this._buttonClose);
if (this.query(this.option, 'toolbox.feature.dataView.readOnly') === false) {
this._buttonRefresh.style.cssText = 'float:right;margin-right:10px;padding:1px 6px;';
this._buttonRefresh.innerHTML = lang[2] || this._lang[2];
this._buttonRefresh.onclick = function () {
self._save();
};
this._textArea.readOnly = false;
this._textArea.style.cursor = 'default';
} else {
this._buttonRefresh.style.cssText = 'display:none';
this._textArea.readOnly = true;
this._textArea.style.cursor = 'text';
}
this._tDom.appendChild(this._buttonRefresh);
this._sizeCssText = 'width:' + this._zrWidth + 'px;' + 'height:' + this._zrHeight + 'px;' + 'background-color:#fff;';
this._tDom.style.cssText = this._gCssText + this._sizeCssText;
},
_optionToContent: function () {
var i;
var j;
var k;
var len;
var data;
var valueList;
var axisList = [];
var content = '';
if (this.option.xAxis) {
if (this.option.xAxis instanceof Array) {
axisList = this.option.xAxis;
} else {
axisList = [this.option.xAxis];
}
for (i = 0, len = axisList.length; i < len; i++) {
if ((axisList[i].type || 'category') == 'category') {
valueList = [];
for (j = 0, k = axisList[i].data.length; j < k; j++) {
valueList.push(this.getDataFromOption(axisList[i].data[j]));
}
content += valueList.join(', ') + '\n\n';
}
}
}
if (this.option.yAxis) {
if (this.option.yAxis instanceof Array) {
axisList = this.option.yAxis;
} else {
axisList = [this.option.yAxis];
}
for (i = 0, len = axisList.length; i < len; i++) {
if (axisList[i].type == 'category') {
valueList = [];
for (j = 0, k = axisList[i].data.length; j < k; j++) {
valueList.push(this.getDataFromOption(axisList[i].data[j]));
}
content += valueList.join(', ') + '\n\n';
}
}
}
var series = this.option.series;
var itemName;
for (i = 0, len = series.length; i < len; i++) {
valueList = [];
for (j = 0, k = series[i].data.length; j < k; j++) {
data = series[i].data[j];
if (series[i].type == ecConfig.CHART_TYPE_PIE || series[i].type == ecConfig.CHART_TYPE_MAP) {
itemName = (data.name || '-') + ':';
} else {
itemName = '';
}
if (series[i].type == ecConfig.CHART_TYPE_SCATTER) {
data = this.getDataFromOption(data).join(', ');
}
valueList.push(itemName + this.getDataFromOption(data));
}
content += (series[i].name || '-') + ' : \n';
content += valueList.join(series[i].type == ecConfig.CHART_TYPE_SCATTER ? '\n' : ', ');
content += '\n\n';
}
return content;
},
_save: function () {
var customContent = this.query(this.option, 'toolbox.feature.dataView.contentToOption');
if (typeof customContent != 'function') {
var text = this._textArea.value.split('\n');
var content = [];
for (var i = 0, l = text.length; i < l; i++) {
text[i] = this._trim(text[i]);
if (text[i] !== '') {
content.push(text[i]);
}
}
this._contentToOption(content);
} else {
customContent(this._textArea, this.option);
}
this.hide();
var self = this;
setTimeout(function () {
self.messageCenter && self.messageCenter.dispatch(ecConfig.EVENT.DATA_VIEW_CHANGED, null, { option: self.option }, self.myChart);
}, self.canvasSupported ? 800 : 100);
},
_contentToOption: function (content) {
var i;
var j;
var k;
var len;
var data;
var axisList = [];
var contentIdx = 0;
var contentValueList;
var value;
if (this.option.xAxis) {
if (this.option.xAxis instanceof Array) {
axisList = this.option.xAxis;
} else {
axisList = [this.option.xAxis];
}
for (i = 0, len = axisList.length; i < len; i++) {
if ((axisList[i].type || 'category') == 'category') {
contentValueList = content[contentIdx].split(',');
for (j = 0, k = axisList[i].data.length; j < k; j++) {
value = this._trim(contentValueList[j] || '');
data = axisList[i].data[j];
if (typeof axisList[i].data[j].value != 'undefined') {
axisList[i].data[j].value = value;
} else {
axisList[i].data[j] = value;
}
}
contentIdx++;
}
}
}
if (this.option.yAxis) {
if (this.option.yAxis instanceof Array) {
axisList = this.option.yAxis;
} else {
axisList = [this.option.yAxis];
}
for (i = 0, len = axisList.length; i < len; i++) {
if (axisList[i].type == 'category') {
contentValueList = content[contentIdx].split(',');
for (j = 0, k = axisList[i].data.length; j < k; j++) {
value = this._trim(contentValueList[j] || '');
data = axisList[i].data[j];
if (typeof axisList[i].data[j].value != 'undefined') {
axisList[i].data[j].value = value;
} else {
axisList[i].data[j] = value;
}
}
contentIdx++;
}
}
}
var series = this.option.series;
for (i = 0, len = series.length; i < len; i++) {
contentIdx++;
if (series[i].type == ecConfig.CHART_TYPE_SCATTER) {
for (var j = 0, k = series[i].data.length; j < k; j++) {
contentValueList = content[contentIdx];
value = contentValueList.replace(' ', '').split(',');
if (typeof series[i].data[j].value != 'undefined') {
series[i].data[j].value = value;
} else {
series[i].data[j] = value;
}
contentIdx++;
}
} else {
contentValueList = content[contentIdx].split(',');
for (var j = 0, k = series[i].data.length; j < k; j++) {
value = (contentValueList[j] || '').replace(/.*:/, '');
value = this._trim(value);
value = value != '-' && value !== '' ? value - 0 : '-';
if (typeof series[i].data[j].value != 'undefined') {
series[i].data[j].value = value;
} else {
series[i].data[j] = value;
}
}
contentIdx++;
}
}
},
_trim: function (str) {
var trimer = new RegExp('(^[\\s\\t\\xa0\\u3000]+)|([\\u3000\\xa0\\s\\t]+$)', 'g');
return str.replace(trimer, '');
},
_stop: function (e) {
e = e || window.event;
if (e.stopPropagation) {
e.stopPropagation();
} else {
e.cancelBubble = true;
}
},
resize: function () {
this._zrHeight = this.zr.getHeight();
this._zrWidth = this.zr.getWidth();
if (this._tDom.offsetHeight > 10) {
this._sizeCssText = 'width:' + this._zrWidth + 'px;' + 'height:' + this._zrHeight + 'px;' + 'background-color:#fff;';
this._tDom.style.cssText = this._gCssText + this._sizeCssText;
this._textArea.style.cssText = 'display:block;margin:0 0 8px 0;' + 'padding:4px 6px;overflow:auto;' + 'width:100%;' + 'height:' + (this._zrHeight - 100) + 'px;';
}
},
dispose: function () {
if (window.removeEventListener) {
this._tDom.removeEventListener('click', this._stop);
this._tDom.removeEventListener('mousewheel', this._stop);
this._tDom.removeEventListener('mousemove', this._stop);
this._tDom.removeEventListener('mousedown', this._stop);
this._tDom.removeEventListener('mouseup', this._stop);
this._tDom.removeEventListener('touchstart', this._stop);
this._tDom.removeEventListener('touchmove', this._stop);
this._tDom.removeEventListener('touchend', this._stop);
} else {
this._tDom.detachEvent('onclick', this._stop);
this._tDom.detachEvent('onmousewheel', this._stop);
this._tDom.detachEvent('onmousemove', this._stop);
this._tDom.detachEvent('onmousedown', this._stop);
this._tDom.detachEvent('onmouseup', this._stop);
}
this._buttonRefresh.onclick = null;
this._buttonClose.onclick = null;
if (this._hasShow) {
this._tDom.removeChild(this._textArea);
this._tDom.removeChild(this._buttonRefresh);
this._tDom.removeChild(this._buttonClose);
}
this._textArea = null;
this._buttonRefresh = null;
this._buttonClose = null;
this.dom.firstChild.removeChild(this._tDom);
this._tDom = null;
}
};
zrUtil.inherits(DataView, Base);
require('../component').define('dataView', DataView);
return DataView;
});define('echarts/util/shape/Cross', [
'require',
'zrender/shape/Base',
'zrender/shape/Line',
'zrender/tool/util',
'./normalIsCover'
], function (require) {
var Base = require('zrender/shape/Base');
var LineShape = require('zrender/shape/Line');
var zrUtil = require('zrender/tool/util');
function Cross(options) {
Base.call(this, options);
}
Cross.prototype = {
type: 'cross',
buildPath: function (ctx, style) {
var rect = style.rect;
style.xStart = rect.x;
style.xEnd = rect.x + rect.width;
style.yStart = style.yEnd = style.y;
LineShape.prototype.buildPath(ctx, style);
style.xStart = style.xEnd = style.x;
style.yStart = rect.y;
style.yEnd = rect.y + rect.height;
LineShape.prototype.buildPath(ctx, style);
},
getRect: function (style) {
return style.rect;
},
isCover: require('./normalIsCover')
};
zrUtil.inherits(Cross, Base);
return Cross;
});define('zrender/shape/Sector', [
'require',
'../tool/math',
'../tool/computeBoundingBox',
'../tool/vector',
'./Base',
'../tool/util'
], function (require) {
var math = require('../tool/math');
var computeBoundingBox = require('../tool/computeBoundingBox');
var vec2 = require('../tool/vector');
var Base = require('./Base');
var min0 = vec2.create();
var min1 = vec2.create();
var max0 = vec2.create();
var max1 = vec2.create();
var Sector = function (options) {
Base.call(this, options);
};
Sector.prototype = {
type: 'sector',
buildPath: function (ctx, style) {
var x = style.x;
var y = style.y;
var r0 = style.r0 || 0;
var r = style.r;
var startAngle = style.startAngle;
var endAngle = style.endAngle;
var clockWise = style.clockWise || false;
startAngle = math.degreeToRadian(startAngle);
endAngle = math.degreeToRadian(endAngle);
if (!clockWise) {
startAngle = -startAngle;
endAngle = -endAngle;
}
var unitX = math.cos(startAngle);
var unitY = math.sin(startAngle);
ctx.moveTo(unitX * r0 + x, unitY * r0 + y);
ctx.lineTo(unitX * r + x, unitY * r + y);
ctx.arc(x, y, r, startAngle, endAngle, !clockWise);
ctx.lineTo(math.cos(endAngle) * r0 + x, math.sin(endAngle) * r0 + y);
if (r0 !== 0) {
ctx.arc(x, y, r0, endAngle, startAngle, clockWise);
}
ctx.closePath();
return;
},
getRect: function (style) {
if (style.__rect) {
return style.__rect;
}
var x = style.x;
var y = style.y;
var r0 = style.r0 || 0;
var r = style.r;
var startAngle = math.degreeToRadian(style.startAngle);
var endAngle = math.degreeToRadian(style.endAngle);
var clockWise = style.clockWise;
if (!clockWise) {
startAngle = -startAngle;
endAngle = -endAngle;
}
if (r0 > 1) {
computeBoundingBox.arc(x, y, r0, startAngle, endAngle, !clockWise, min0, max0);
} else {
min0[0] = max0[0] = x;
min0[1] = max0[1] = y;
}
computeBoundingBox.arc(x, y, r, startAngle, endAngle, !clockWise, min1, max1);
vec2.min(min0, min0, min1);
vec2.max(max0, max0, max1);
style.__rect = {
x: min0[0],
y: min0[1],
width: max0[0] - min0[0],
height: max0[1] - min0[1]
};
return style.__rect;
}
};
require('../tool/util').inherits(Sector, Base);
return Sector;
});define('echarts/util/shape/Candle', [
'require',
'zrender/shape/Base',
'zrender/tool/util',
'./normalIsCover'
], function (require) {
var Base = require('zrender/shape/Base');
var zrUtil = require('zrender/tool/util');
function Candle(options) {
Base.call(this, options);
}
Candle.prototype = {
type: 'candle',
_numberOrder: function (a, b) {
return b - a;
},
buildPath: function (ctx, style) {
var yList = zrUtil.clone(style.y).sort(this._numberOrder);
ctx.moveTo(style.x, yList[3]);
ctx.lineTo(style.x, yList[2]);
ctx.moveTo(style.x - style.width / 2, yList[2]);
ctx.rect(style.x - style.width / 2, yList[2], style.width, yList[1] - yList[2]);
ctx.moveTo(style.x, yList[1]);
ctx.lineTo(style.x, yList[0]);
},
getRect: function (style) {
if (!style.__rect) {
var lineWidth = 0;
if (style.brushType == 'stroke' || style.brushType == 'fill') {
lineWidth = style.lineWidth || 1;
}
var yList = zrUtil.clone(style.y).sort(this._numberOrder);
style.__rect = {
x: Math.round(style.x - style.width / 2 - lineWidth / 2),
y: Math.round(yList[3] - lineWidth / 2),
width: style.width + lineWidth,
height: yList[0] - yList[3] + lineWidth
};
}
return style.__rect;
},
isCover: require('./normalIsCover')
};
zrUtil.inherits(Candle, Base);
return Candle;
});define('zrender/tool/computeBoundingBox', [
'require',
'./vector',
'./curve'
], function (require) {
var vec2 = require('./vector');
var curve = require('./curve');
function computeBoundingBox(points, min, max) {
if (points.length === 0) {
return;
}
var left = points[0][0];
var right = points[0][0];
var top = points[0][1];
var bottom = points[0][1];
for (var i = 1; i < points.length; i++) {
var p = points[i];
if (p[0] < left) {
left = p[0];
}
if (p[0] > right) {
right = p[0];
}
if (p[1] < top) {
top = p[1];
}
if (p[1] > bottom) {
bottom = p[1];
}
}
min[0] = left;
min[1] = top;
max[0] = right;
max[1] = bottom;
}
function computeCubeBezierBoundingBox(p0, p1, p2, p3, min, max) {
var xDim = [];
curve.cubicExtrema(p0[0], p1[0], p2[0], p3[0], xDim);
for (var i = 0; i < xDim.length; i++) {
xDim[i] = curve.cubicAt(p0[0], p1[0], p2[0], p3[0], xDim[i]);
}
var yDim = [];
curve.cubicExtrema(p0[1], p1[1], p2[1], p3[1], yDim);
for (var i = 0; i < yDim.length; i++) {
yDim[i] = curve.cubicAt(p0[1], p1[1], p2[1], p3[1], yDim[i]);
}
xDim.push(p0[0], p3[0]);
yDim.push(p0[1], p3[1]);
var left = Math.min.apply(null, xDim);
var right = Math.max.apply(null, xDim);
var top = Math.min.apply(null, yDim);
var bottom = Math.max.apply(null, yDim);
min[0] = left;
min[1] = top;
max[0] = right;
max[1] = bottom;
}
function computeQuadraticBezierBoundingBox(p0, p1, p2, min, max) {
var t1 = curve.quadraticExtremum(p0[0], p1[0], p2[0]);
var t2 = curve.quadraticExtremum(p0[1], p1[1], p2[1]);
t1 = Math.max(Math.min(t1, 1), 0);
t2 = Math.max(Math.min(t2, 1), 0);
var ct1 = 1 - t1;
var ct2 = 1 - t2;
var x1 = ct1 * ct1 * p0[0] + 2 * ct1 * t1 * p1[0] + t1 * t1 * p2[0];
var y1 = ct1 * ct1 * p0[1] + 2 * ct1 * t1 * p1[1] + t1 * t1 * p2[1];
var x2 = ct2 * ct2 * p0[0] + 2 * ct2 * t2 * p1[0] + t2 * t2 * p2[0];
var y2 = ct2 * ct2 * p0[1] + 2 * ct2 * t2 * p1[1] + t2 * t2 * p2[1];
min[0] = Math.min(p0[0], p2[0], x1, x2);
min[1] = Math.min(p0[1], p2[1], y1, y2);
max[0] = Math.max(p0[0], p2[0], x1, x2);
max[1] = Math.max(p0[1], p2[1], y1, y2);
}
var start = vec2.create();
var end = vec2.create();
var extremity = vec2.create();
var computeArcBoundingBox = function (x, y, r, startAngle, endAngle, anticlockwise, min, max) {
if (Math.abs(startAngle - endAngle) >= Math.PI * 2) {
min[0] = x - r;
min[1] = y - r;
max[0] = x + r;
max[1] = y + r;
return;
}
start[0] = Math.cos(startAngle) * r + x;
start[1] = Math.sin(startAngle) * r + y;
end[0] = Math.cos(endAngle) * r + x;
end[1] = Math.sin(endAngle) * r + y;
vec2.min(min, start, end);
vec2.max(max, start, end);
startAngle = startAngle % (Math.PI * 2);
if (startAngle < 0) {
startAngle = startAngle + Math.PI * 2;
}
endAngle = endAngle % (Math.PI * 2);
if (endAngle < 0) {
endAngle = endAngle + Math.PI * 2;
}
if (startAngle > endAngle && !anticlockwise) {
endAngle += Math.PI * 2;
} else if (startAngle < endAngle && anticlockwise) {
startAngle += Math.PI * 2;
}
if (anticlockwise) {
var tmp = endAngle;
endAngle = startAngle;
startAngle = tmp;
}
for (var angle = 0; angle < endAngle; angle += Math.PI / 2) {
if (angle > startAngle) {
extremity[0] = Math.cos(angle) * r + x;
extremity[1] = Math.sin(angle) * r + y;
vec2.min(min, extremity, min);
vec2.max(max, extremity, max);
}
}
};
computeBoundingBox.cubeBezier = computeCubeBezierBoundingBox;
computeBoundingBox.quadraticBezier = computeQuadraticBezierBoundingBox;
computeBoundingBox.arc = computeArcBoundingBox;
return computeBoundingBox;
});define('echarts/util/shape/Chain', [
'require',
'zrender/shape/Base',
'./Icon',
'zrender/shape/util/dashedLineTo',
'zrender/tool/util',
'zrender/tool/matrix'
], function (require) {
var Base = require('zrender/shape/Base');
var IconShape = require('./Icon');
var dashedLineTo = require('zrender/shape/util/dashedLineTo');
var zrUtil = require('zrender/tool/util');
var matrix = require('zrender/tool/matrix');
function Chain(options) {
Base.call(this, options);
}
Chain.prototype = {
type: 'chain',
brush: function (ctx, isHighlight) {
var style = this.style;
if (isHighlight) {
style = this.getHighlightStyle(style, this.highlightStyle || {});
}
ctx.save();
this.setContext(ctx, style);
this.setTransform(ctx);
ctx.save();
ctx.beginPath();
this.buildLinePath(ctx, style);
ctx.stroke();
ctx.restore();
this.brushSymbol(ctx, style);
ctx.restore();
return;
},
buildLinePath: function (ctx, style) {
var x = style.x;
var y = style.y + 5;
var width = style.width;
var height = style.height / 2 - 10;
ctx.moveTo(x, y);
ctx.lineTo(x, y + height);
ctx.moveTo(x + width, y);
ctx.lineTo(x + width, y + height);
ctx.moveTo(x, y + height / 2);
if (!style.lineType || style.lineType == 'solid') {
ctx.lineTo(x + width, y + height / 2);
} else if (style.lineType == 'dashed' || style.lineType == 'dotted') {
var dashLength = (style.lineWidth || 1) * (style.lineType == 'dashed' ? 5 : 1);
dashedLineTo(ctx, x, y + height / 2, x + width, y + height / 2, dashLength);
}
},
brushSymbol: function (ctx, style) {
var y = style.y + style.height / 4;
ctx.save();
var chainPoint = style.chainPoint;
var curPoint;
for (var idx = 0, l = chainPoint.length; idx < l; idx++) {
curPoint = chainPoint[idx];
if (curPoint.symbol != 'none') {
ctx.beginPath();
var symbolSize = curPoint.symbolSize;
IconShape.prototype.buildPath(ctx, {
iconType: curPoint.symbol,
x: curPoint.x - symbolSize,
y: y - symbolSize,
width: symbolSize * 2,
height: symbolSize * 2,
n: curPoint.n
});
ctx.fillStyle = curPoint.isEmpty ? '#fff' : style.strokeColor;
ctx.closePath();
ctx.fill();
ctx.stroke();
}
if (curPoint.showLabel) {
ctx.font = curPoint.textFont;
ctx.fillStyle = curPoint.textColor;
ctx.textAlign = curPoint.textAlign;
ctx.textBaseline = curPoint.textBaseline;
if (curPoint.rotation) {
ctx.save();
this._updateTextTransform(ctx, curPoint.rotation);
ctx.fillText(curPoint.name, curPoint.textX, curPoint.textY);
ctx.restore();
} else {
ctx.fillText(curPoint.name, curPoint.textX, curPoint.textY);
}
}
}
ctx.restore();
},
_updateTextTransform: function (ctx, rotation) {
var _transform = matrix.create();
matrix.identity(_transform);
if (rotation[0] !== 0) {
var originX = rotation[1] || 0;
var originY = rotation[2] || 0;
if (originX || originY) {
matrix.translate(_transform, _transform, [
-originX,
-originY
]);
}
matrix.rotate(_transform, _transform, rotation[0]);
if (originX || originY) {
matrix.translate(_transform, _transform, [
originX,
originY
]);
}
}
ctx.transform.apply(ctx, _transform);
},
isCover: function (x, y) {
var rect = this.style;
if (x >= rect.x && x <= rect.x + rect.width && y >= rect.y && y <= rect.y + rect.height) {
return true;
} else {
return false;
}
}
};
zrUtil.inherits(Chain, Base);
return Chain;
});define('zrender/shape/Ring', [
'require',
'./Base',
'../tool/util'
], function (require) {
var Base = require('./Base');
var Ring = function (options) {
Base.call(this, options);
};
Ring.prototype = {
type: 'ring',
buildPath: function (ctx, style) {
ctx.arc(style.x, style.y, style.r, 0, Math.PI * 2, false);
ctx.moveTo(style.x + style.r0, style.y);
ctx.arc(style.x, style.y, style.r0, 0, Math.PI * 2, true);
return;
},
getRect: function (style) {
if (style.__rect) {
return style.__rect;
}
var lineWidth;
if (style.brushType == 'stroke' || style.brushType == 'fill') {
lineWidth = style.lineWidth || 1;
} else {
lineWidth = 0;
}
style.__rect = {
x: Math.round(style.x - style.r - lineWidth / 2),
y: Math.round(style.y - style.r - lineWidth / 2),
width: style.r * 2 + lineWidth,
height: style.r * 2 + lineWidth
};
return style.__rect;
}
};
require('../tool/util').inherits(Ring, Base);
return Ring;
});define('echarts/component/axis', [
'require',
'./base',
'zrender/shape/Line',
'../config',
'../util/ecData',
'zrender/tool/util',
'zrender/tool/color',
'./categoryAxis',
'./valueAxis',
'../component'
], function (require) {
var Base = require('./base');
var LineShape = require('zrender/shape/Line');
var ecConfig = require('../config');
var ecData = require('../util/ecData');
var zrUtil = require('zrender/tool/util');
var zrColor = require('zrender/tool/color');
function Axis(ecTheme, messageCenter, zr, option, myChart, axisType) {
Base.call(this, ecTheme, messageCenter, zr, option, myChart);
this.axisType = axisType;
this._axisList = [];
this.refresh(option);
}
Axis.prototype = {
type: ecConfig.COMPONENT_TYPE_AXIS,
axisBase: {
_buildAxisLine: function () {
var lineWidth = this.option.axisLine.lineStyle.width;
var halfLineWidth = lineWidth / 2;
var axShape = {
_axisShape: 'axisLine',
zlevel: this.getZlevelBase(),
z: this.getZBase() + 3,
hoverable: false
};
var grid = this.grid;
switch (this.option.position) {
case 'left':
axShape.style = {
xStart: grid.getX() - halfLineWidth,
yStart: grid.getYend(),
xEnd: grid.getX() - halfLineWidth,
yEnd: grid.getY(),
lineCap: 'round'
};
break;
case 'right':
axShape.style = {
xStart: grid.getXend() + halfLineWidth,
yStart: grid.getYend(),
xEnd: grid.getXend() + halfLineWidth,
yEnd: grid.getY(),
lineCap: 'round'
};
break;
case 'bottom':
axShape.style = {
xStart: grid.getX(),
yStart: grid.getYend() + halfLineWidth,
xEnd: grid.getXend(),
yEnd: grid.getYend() + halfLineWidth,
lineCap: 'round'
};
break;
case 'top':
axShape.style = {
xStart: grid.getX(),
yStart: grid.getY() - halfLineWidth,
xEnd: grid.getXend(),
yEnd: grid.getY() - halfLineWidth,
lineCap: 'round'
};
break;
}
var style = axShape.style;
if (this.option.name !== '') {
style.text = this.option.name;
style.textPosition = this.option.nameLocation;
style.textFont = this.getFont(this.option.nameTextStyle);
if (this.option.nameTextStyle.align) {
style.textAlign = this.option.nameTextStyle.align;
}
if (this.option.nameTextStyle.baseline) {
style.textBaseline = this.option.nameTextStyle.baseline;
}
if (this.option.nameTextStyle.color) {
style.textColor = this.option.nameTextStyle.color;
}
}
style.strokeColor = this.option.axisLine.lineStyle.color;
style.lineWidth = lineWidth;
if (this.isHorizontal()) {
style.yStart = style.yEnd = this.subPixelOptimize(style.yEnd, lineWidth);
} else {
style.xStart = style.xEnd = this.subPixelOptimize(style.xEnd, lineWidth);
}
style.lineType = this.option.axisLine.lineStyle.type;
axShape = new LineShape(axShape);
this.shapeList.push(axShape);
},
_axisLabelClickable: function (clickable, axShape) {
if (clickable) {
ecData.pack(axShape, undefined, -1, undefined, -1, axShape.style.text);
axShape.hoverable = true;
axShape.clickable = true;
axShape.highlightStyle = {
color: zrColor.lift(axShape.style.color, 1),
brushType: 'fill'
};
return axShape;
} else {
return axShape;
}
},
refixAxisShape: function (zeroX, zeroY) {
if (!this.option.axisLine.onZero) {
return;
}
var tickLength;
if (this.isHorizontal() && zeroY != null) {
for (var i = 0, l = this.shapeList.length; i < l; i++) {
if (this.shapeList[i]._axisShape === 'axisLine') {
this.shapeList[i].style.yStart = this.shapeList[i].style.yEnd = this.subPixelOptimize(zeroY, this.shapeList[i].stylelineWidth);
this.zr.modShape(this.shapeList[i].id);
} else if (this.shapeList[i]._axisShape === 'axisTick') {
tickLength = this.shapeList[i].style.yEnd - this.shapeList[i].style.yStart;
this.shapeList[i].style.yStart = zeroY - tickLength;
this.shapeList[i].style.yEnd = zeroY;
this.zr.modShape(this.shapeList[i].id);
}
}
}
if (!this.isHorizontal() && zeroX != null) {
for (var i = 0, l = this.shapeList.length; i < l; i++) {
if (this.shapeList[i]._axisShape === 'axisLine') {
this.shapeList[i].style.xStart = this.shapeList[i].style.xEnd = this.subPixelOptimize(zeroX, this.shapeList[i].stylelineWidth);
this.zr.modShape(this.shapeList[i].id);
} else if (this.shapeList[i]._axisShape === 'axisTick') {
tickLength = this.shapeList[i].style.xEnd - this.shapeList[i].style.xStart;
this.shapeList[i].style.xStart = zeroX;
this.shapeList[i].style.xEnd = zeroX + tickLength;
this.zr.modShape(this.shapeList[i].id);
}
}
}
},
getPosition: function () {
return this.option.position;
},
isHorizontal: function () {
return this.option.position === 'bottom' || this.option.position === 'top';
}
},
reformOption: function (opt) {
if (!opt || opt instanceof Array && opt.length === 0) {
opt = [{ type: ecConfig.COMPONENT_TYPE_AXIS_VALUE }];
} else if (!(opt instanceof Array)) {
opt = [opt];
}
if (opt.length > 2) {
opt = [
opt[0],
opt[1]
];
}
if (this.axisType === 'xAxis') {
if (!opt[0].position || opt[0].position != 'bottom' && opt[0].position != 'top') {
opt[0].position = 'bottom';
}
if (opt.length > 1) {
opt[1].position = opt[0].position === 'bottom' ? 'top' : 'bottom';
}
for (var i = 0, l = opt.length; i < l; i++) {
opt[i].type = opt[i].type || 'category';
opt[i].xAxisIndex = i;
opt[i].yAxisIndex = -1;
}
} else {
if (!opt[0].position || opt[0].position != 'left' && opt[0].position != 'right') {
opt[0].position = 'left';
}
if (opt.length > 1) {
opt[1].position = opt[0].position === 'left' ? 'right' : 'left';
}
for (var i = 0, l = opt.length; i < l; i++) {
opt[i].type = opt[i].type || 'value';
opt[i].xAxisIndex = -1;
opt[i].yAxisIndex = i;
}
}
return opt;
},
refresh: function (newOption) {
var axisOption;
if (newOption) {
this.option = newOption;
if (this.axisType === 'xAxis') {
this.option.xAxis = this.reformOption(newOption.xAxis);
axisOption = this.option.xAxis;
} else {
this.option.yAxis = this.reformOption(newOption.yAxis);
axisOption = this.option.yAxis;
}
this.series = newOption.series;
}
var CategoryAxis = require('./categoryAxis');
var ValueAxis = require('./valueAxis');
var len = Math.max(axisOption && axisOption.length || 0, this._axisList.length);
for (var i = 0; i < len; i++) {
if (this._axisList[i] && newOption && (!axisOption[i] || this._axisList[i].type != axisOption[i].type)) {
this._axisList[i].dispose && this._axisList[i].dispose();
this._axisList[i] = false;
}
if (this._axisList[i]) {
this._axisList[i].refresh && this._axisList[i].refresh(axisOption ? axisOption[i] : false, this.series);
} else if (axisOption && axisOption[i]) {
this._axisList[i] = axisOption[i].type === 'category' ? new CategoryAxis(this.ecTheme, this.messageCenter, this.zr, axisOption[i], this.myChart, this.axisBase) : new ValueAxis(this.ecTheme, this.messageCenter, this.zr, axisOption[i], this.myChart, this.axisBase, this.series);
}
}
},
getAxis: function (idx) {
return this._axisList[idx];
},
getAxisCount: function () {
return this._axisList.length;
},
clear: function () {
for (var i = 0, l = this._axisList.length; i < l; i++) {
this._axisList[i].dispose && this._axisList[i].dispose();
}
this._axisList = [];
}
};
zrUtil.inherits(Axis, Base);
require('../component').define('axis', Axis);
return Axis;
});define('echarts/component/grid', [
'require',
'./base',
'zrender/shape/Rectangle',
'../config',
'zrender/tool/util',
'../component'
], function (require) {
var Base = require('./base');
var RectangleShape = require('zrender/shape/Rectangle');
var ecConfig = require('../config');
ecConfig.grid = {
zlevel: 0,
z: 0,
x: 80,
y: 60,
x2: 80,
y2: 60,
backgroundColor: 'rgba(0,0,0,0)',
borderWidth: 1,
borderColor: '#ccc'
};
var zrUtil = require('zrender/tool/util');
function Grid(ecTheme, messageCenter, zr, option, myChart) {
Base.call(this, ecTheme, messageCenter, zr, option, myChart);
this.refresh(option);
}
Grid.prototype = {
type: ecConfig.COMPONENT_TYPE_GRID,
getX: function () {
return this._x;
},
getY: function () {
return this._y;
},
getWidth: function () {
return this._width;
},
getHeight: function () {
return this._height;
},
getXend: function () {
return this._x + this._width;
},
getYend: function () {
return this._y + this._height;
},
getArea: function () {
return {
x: this._x,
y: this._y,
width: this._width,
height: this._height
};
},
getBbox: function () {
return [
[
this._x,
this._y
],
[
this.getXend(),
this.getYend()
]
];
},
refixAxisShape: function (component) {
var zeroX;
var zeroY;
var axisList = component.xAxis._axisList.concat(component.yAxis ? component.yAxis._axisList : []);
var len = axisList.length;
var axis;
while (len--) {
axis = axisList[len];
if (axis.type == ecConfig.COMPONENT_TYPE_AXIS_VALUE && axis._min < 0 && axis._max >= 0) {
axis.isHorizontal() ? zeroX = axis.getCoord(0) : zeroY = axis.getCoord(0);
}
}
if (typeof zeroX != 'undefined' || typeof zeroY != 'undefined') {
len = axisList.length;
while (len--) {
axisList[len].refixAxisShape(zeroX, zeroY);
}
}
},
refresh: function (newOption) {
if (newOption || this._zrWidth != this.zr.getWidth() || this._zrHeight != this.zr.getHeight()) {
this.clear();
this.option = newOption || this.option;
this.option.grid = this.reformOption(this.option.grid);
var gridOption = this.option.grid;
this._zrWidth = this.zr.getWidth();
this._zrHeight = this.zr.getHeight();
this._x = this.parsePercent(gridOption.x, this._zrWidth);
this._y = this.parsePercent(gridOption.y, this._zrHeight);
var x2 = this.parsePercent(gridOption.x2, this._zrWidth);
var y2 = this.parsePercent(gridOption.y2, this._zrHeight);
if (typeof gridOption.width == 'undefined') {
this._width = this._zrWidth - this._x - x2;
} else {
this._width = this.parsePercent(gridOption.width, this._zrWidth);
}
this._width = this._width <= 0 ? 10 : this._width;
if (typeof gridOption.height == 'undefined') {
this._height = this._zrHeight - this._y - y2;
} else {
this._height = this.parsePercent(gridOption.height, this._zrHeight);
}
this._height = this._height <= 0 ? 10 : this._height;
this._x = this.subPixelOptimize(this._x, gridOption.borderWidth);
this._y = this.subPixelOptimize(this._y, gridOption.borderWidth);
this.shapeList.push(new RectangleShape({
zlevel: this.getZlevelBase(),
z: this.getZBase(),
hoverable: false,
style: {
x: this._x,
y: this._y,
width: this._width,
height: this._height,
brushType: gridOption.borderWidth > 0 ? 'both' : 'fill',
color: gridOption.backgroundColor,
strokeColor: gridOption.borderColor,
lineWidth: gridOption.borderWidth
}
}));
this.zr.addShape(this.shapeList[0]);
}
}
};
zrUtil.inherits(Grid, Base);
require('../component').define('grid', Grid);
return Grid;
});define('echarts/component/dataZoom', [
'require',
'./base',
'zrender/shape/Rectangle',
'zrender/shape/Polygon',
'../util/shape/Icon',
'../config',
'../util/date',
'zrender/tool/util',
'../component'
], function (require) {
var Base = require('./base');
var RectangleShape = require('zrender/shape/Rectangle');
var PolygonShape = require('zrender/shape/Polygon');
var IconShape = require('../util/shape/Icon');
var ecConfig = require('../config');
ecConfig.dataZoom = {
zlevel: 0,
z: 4,
show: false,
orient: 'horizontal',
backgroundColor: 'rgba(0,0,0,0)',
dataBackgroundColor: '#eee',
fillerColor: 'rgba(144,197,237,0.2)',
handleColor: 'rgba(70,130,180,0.8)',
handleSize: 8,
showDetail: true,
realtime: true
};
var ecDate = require('../util/date');
var zrUtil = require('zrender/tool/util');
function DataZoom(ecTheme, messageCenter, zr, option, myChart) {
Base.call(this, ecTheme, messageCenter, zr, option, myChart);
var self = this;
self._ondrift = function (dx, dy) {
return self.__ondrift(this, dx, dy);
};
self._ondragend = function () {
return self.__ondragend();
};
this._fillerSize = 30;
this._isSilence = false;
this._zoom = {};
this.option.dataZoom = this.reformOption(this.option.dataZoom);
this.zoomOption = this.option.dataZoom;
this._handleSize = this.zoomOption.handleSize;
if (!this.myChart.canvasSupported) {
this.zoomOption.realtime = false;
}
this._location = this._getLocation();
this._zoom = this._getZoom();
this._backupData();
if (this.option.dataZoom.show) {
this._buildShape();
}
this._syncData();
}
DataZoom.prototype = {
type: ecConfig.COMPONENT_TYPE_DATAZOOM,
_buildShape: function () {
this._buildBackground();
this._buildFiller();
this._buildHandle();
this._buildFrame();
for (var i = 0, l = this.shapeList.length; i < l; i++) {
this.zr.addShape(this.shapeList[i]);
}
this._syncFrameShape();
},
_getLocation: function () {
var x;
var y;
var width;
var height;
var grid = this.component.grid;
if (this.zoomOption.orient == 'horizontal') {
width = this.zoomOption.width || grid.getWidth();
height = this.zoomOption.height || this._fillerSize;
x = this.zoomOption.x != null ? this.zoomOption.x : grid.getX();
y = this.zoomOption.y != null ? this.zoomOption.y : this.zr.getHeight() - height - 2;
} else {
width = this.zoomOption.width || this._fillerSize;
height = this.zoomOption.height || grid.getHeight();
x = this.zoomOption.x != null ? this.zoomOption.x : 2;
y = this.zoomOption.y != null ? this.zoomOption.y : grid.getY();
}
return {
x: x,
y: y,
width: width,
height: height
};
},
_getZoom: function () {
var series = this.option.series;
var xAxis = this.option.xAxis;
if (xAxis && !(xAxis instanceof Array)) {
xAxis = [xAxis];
this.option.xAxis = xAxis;
}
var yAxis = this.option.yAxis;
if (yAxis && !(yAxis instanceof Array)) {
yAxis = [yAxis];
this.option.yAxis = yAxis;
}
var zoomSeriesIndex = [];
var xAxisIndex;
var yAxisIndex;
var zOptIdx = this.zoomOption.xAxisIndex;
if (xAxis && zOptIdx == null) {
xAxisIndex = [];
for (var i = 0, l = xAxis.length; i < l; i++) {
if (xAxis[i].type == 'category' || xAxis[i].type == null) {
xAxisIndex.push(i);
}
}
} else {
if (zOptIdx instanceof Array) {
xAxisIndex = zOptIdx;
} else if (zOptIdx != null) {
xAxisIndex = [zOptIdx];
} else {
xAxisIndex = [];
}
}
zOptIdx = this.zoomOption.yAxisIndex;
if (yAxis && zOptIdx == null) {
yAxisIndex = [];
for (var i = 0, l = yAxis.length; i < l; i++) {
if (yAxis[i].type == 'category') {
yAxisIndex.push(i);
}
}
} else {
if (zOptIdx instanceof Array) {
yAxisIndex = zOptIdx;
} else if (zOptIdx != null) {
yAxisIndex = [zOptIdx];
} else {
yAxisIndex = [];
}
}
var serie;
for (var i = 0, l = series.length; i < l; i++) {
serie = series[i];
if (serie.type != ecConfig.CHART_TYPE_LINE && serie.type != ecConfig.CHART_TYPE_BAR && serie.type != ecConfig.CHART_TYPE_SCATTER && serie.type != ecConfig.CHART_TYPE_K) {
continue;
}
for (var j = 0, k = xAxisIndex.length; j < k; j++) {
if (xAxisIndex[j] == (serie.xAxisIndex || 0)) {
zoomSeriesIndex.push(i);
break;
}
}
for (var j = 0, k = yAxisIndex.length; j < k; j++) {
if (yAxisIndex[j] == (serie.yAxisIndex || 0)) {
zoomSeriesIndex.push(i);
break;
}
}
if (this.zoomOption.xAxisIndex == null && this.zoomOption.yAxisIndex == null && serie.data && this.getDataFromOption(serie.data[0]) instanceof Array && (serie.type == ecConfig.CHART_TYPE_SCATTER || serie.type == ecConfig.CHART_TYPE_LINE || serie.type == ecConfig.CHART_TYPE_BAR)) {
zoomSeriesIndex.push(i);
}
}
var start = this._zoom.start != null ? this._zoom.start : this.zoomOption.start != null ? this.zoomOption.start : 0;
var end = this._zoom.end != null ? this._zoom.end : this.zoomOption.end != null ? this.zoomOption.end : 100;
if (start > end) {
start = start + end;
end = start - end;
start = start - end;
}
var size = Math.round((end - start) / 100 * (this.zoomOption.orient == 'horizontal' ? this._location.width : this._location.height));
return {
start: start,
end: end,
start2: 0,
end2: 100,
size: size,
xAxisIndex: xAxisIndex,
yAxisIndex: yAxisIndex,
seriesIndex: zoomSeriesIndex,
scatterMap: this._zoom.scatterMap || {}
};
},
_backupData: function () {
this._originalData = {
xAxis: {},
yAxis: {},
series: {}
};
var xAxis = this.option.xAxis;
var xAxisIndex = this._zoom.xAxisIndex;
for (var i = 0, l = xAxisIndex.length; i < l; i++) {
this._originalData.xAxis[xAxisIndex[i]] = xAxis[xAxisIndex[i]].data;
}
var yAxis = this.option.yAxis;
var yAxisIndex = this._zoom.yAxisIndex;
for (var i = 0, l = yAxisIndex.length; i < l; i++) {
this._originalData.yAxis[yAxisIndex[i]] = yAxis[yAxisIndex[i]].data;
}
var series = this.option.series;
var seriesIndex = this._zoom.seriesIndex;
var serie;
for (var i = 0, l = seriesIndex.length; i < l; i++) {
serie = series[seriesIndex[i]];
this._originalData.series[seriesIndex[i]] = serie.data;
if (serie.data && this.getDataFromOption(serie.data[0]) instanceof Array && (serie.type == ecConfig.CHART_TYPE_SCATTER || serie.type == ecConfig.CHART_TYPE_LINE || serie.type == ecConfig.CHART_TYPE_BAR)) {
this._backupScale();
this._calculScatterMap(seriesIndex[i]);
}
}
},
_calculScatterMap: function (seriesIndex) {
this._zoom.scatterMap = this._zoom.scatterMap || {};
this._zoom.scatterMap[seriesIndex] = this._zoom.scatterMap[seriesIndex] || {};
var componentLibrary = require('../component');
var Axis = componentLibrary.get('axis');
var axisOption = zrUtil.clone(this.option.xAxis);
if (axisOption[0].type == 'category') {
axisOption[0].type = 'value';
}
if (axisOption[1] && axisOption[1].type == 'category') {
axisOption[1].type = 'value';
}
var vAxis = new Axis(this.ecTheme, null, false, {
xAxis: axisOption,
series: this.option.series
}, this, 'xAxis');
var axisIndex = this.option.series[seriesIndex].xAxisIndex || 0;
this._zoom.scatterMap[seriesIndex].x = vAxis.getAxis(axisIndex).getExtremum();
vAxis.dispose();
axisOption = zrUtil.clone(this.option.yAxis);
if (axisOption[0].type == 'category') {
axisOption[0].type = 'value';
}
if (axisOption[1] && axisOption[1].type == 'category') {
axisOption[1].type = 'value';
}
vAxis = new Axis(this.ecTheme, null, false, {
yAxis: axisOption,
series: this.option.series
}, this, 'yAxis');
axisIndex = this.option.series[seriesIndex].yAxisIndex || 0;
this._zoom.scatterMap[seriesIndex].y = vAxis.getAxis(axisIndex).getExtremum();
vAxis.dispose();
},
_buildBackground: function () {
var width = this._location.width;
var height = this._location.height;
this.shapeList.push(new RectangleShape({
zlevel: this.getZlevelBase(),
z: this.getZBase(),
hoverable: false,
style: {
x: this._location.x,
y: this._location.y,
width: width,
height: height,
color: this.zoomOption.backgroundColor
}
}));
var maxLength = 0;
var xAxis = this._originalData.xAxis;
var xAxisIndex = this._zoom.xAxisIndex;
for (var i = 0, l = xAxisIndex.length; i < l; i++) {
maxLength = Math.max(maxLength, xAxis[xAxisIndex[i]].length);
}
var yAxis = this._originalData.yAxis;
var yAxisIndex = this._zoom.yAxisIndex;
for (var i = 0, l = yAxisIndex.length; i < l; i++) {
maxLength = Math.max(maxLength, yAxis[yAxisIndex[i]].length);
}
var seriesIndex = this._zoom.seriesIndex[0];
var data = this._originalData.series[seriesIndex];
var maxValue = Number.MIN_VALUE;
var minValue = Number.MAX_VALUE;
var value;
for (var i = 0, l = data.length; i < l; i++) {
value = this.getDataFromOption(data[i], 0);
if (this.option.series[seriesIndex].type == ecConfig.CHART_TYPE_K) {
value = value[1];
}
if (isNaN(value)) {
value = 0;
}
maxValue = Math.max(maxValue, value);
minValue = Math.min(minValue, value);
}
var valueRange = maxValue - minValue;
var pointList = [];
var x = width / (maxLength - (maxLength > 1 ? 1 : 0));
var y = height / (maxLength - (maxLength > 1 ? 1 : 0));
var step = 1;
if (this.zoomOption.orient == 'horizontal' && x < 1) {
step = Math.floor(maxLength * 3 / width);
} else if (this.zoomOption.orient == 'vertical' && y < 1) {
step = Math.floor(maxLength * 3 / height);
}
for (var i = 0, l = maxLength; i < l; i += step) {
value = this.getDataFromOption(data[i], 0);
if (this.option.series[seriesIndex].type == ecConfig.CHART_TYPE_K) {
value = value[1];
}
if (isNaN(value)) {
value = 0;
}
if (this.zoomOption.orient == 'horizontal') {
pointList.push([
this._location.x + x * i,
this._location.y + height - 1 - Math.round((value - minValue) / valueRange * (height - 10))
]);
} else {
pointList.push([
this._location.x + 1 + Math.round((value - minValue) / valueRange * (width - 10)),
this._location.y + y * (l - i - 1)
]);
}
}
if (this.zoomOption.orient == 'horizontal') {
pointList.push([
this._location.x + width,
this._location.y + height
]);
pointList.push([
this._location.x,
this._location.y + height
]);
} else {
pointList.push([
this._location.x,
this._location.y
]);
pointList.push([
this._location.x,
this._location.y + height
]);
}
this.shapeList.push(new PolygonShape({
zlevel: this.getZlevelBase(),
z: this.getZBase(),
style: {
pointList: pointList,
color: this.zoomOption.dataBackgroundColor
},
hoverable: false
}));
},
_buildFiller: function () {
this._fillerShae = {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
draggable: true,
ondrift: this._ondrift,
ondragend: this._ondragend,
_type: 'filler'
};
if (this.zoomOption.orient == 'horizontal') {
this._fillerShae.style = {
x: this._location.x + Math.round(this._zoom.start / 100 * this._location.width) + this._handleSize,
y: this._location.y,
width: this._zoom.size - this._handleSize * 2,
height: this._location.height,
color: this.zoomOption.fillerColor,
text: ':::',
textPosition: 'inside'
};
} else {
this._fillerShae.style = {
x: this._location.x,
y: this._location.y + Math.round(this._zoom.start / 100 * this._location.height) + this._handleSize,
width: this._location.width,
height: this._zoom.size - this._handleSize * 2,
color: this.zoomOption.fillerColor,
text: '::',
textPosition: 'inside'
};
}
this._fillerShae.highlightStyle = {
brushType: 'fill',
color: 'rgba(0,0,0,0)'
};
this._fillerShae = new RectangleShape(this._fillerShae);
this.shapeList.push(this._fillerShae);
},
_buildHandle: function () {
var detail = this.zoomOption.showDetail ? this._getDetail() : {
start: '',
end: ''
};
this._startShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
draggable: true,
style: {
iconType: 'rectangle',
x: this._location.x,
y: this._location.y,
width: this._handleSize,
height: this._handleSize,
color: this.zoomOption.handleColor,
text: '=',
textPosition: 'inside'
},
highlightStyle: {
text: detail.start,
brushType: 'fill',
textPosition: 'left'
},
ondrift: this._ondrift,
ondragend: this._ondragend
};
if (this.zoomOption.orient == 'horizontal') {
this._startShape.style.height = this._location.height;
this._endShape = zrUtil.clone(this._startShape);
this._startShape.style.x = this._fillerShae.style.x - this._handleSize, this._endShape.style.x = this._fillerShae.style.x + this._fillerShae.style.width;
this._endShape.highlightStyle.text = detail.end;
this._endShape.highlightStyle.textPosition = 'right';
} else {
this._startShape.style.width = this._location.width;
this._endShape = zrUtil.clone(this._startShape);
this._startShape.style.y = this._fillerShae.style.y + this._fillerShae.style.height;
this._startShape.highlightStyle.textPosition = 'bottom';
this._endShape.style.y = this._fillerShae.style.y - this._handleSize;
this._endShape.highlightStyle.text = detail.end;
this._endShape.highlightStyle.textPosition = 'top';
}
this._startShape = new IconShape(this._startShape);
this._endShape = new IconShape(this._endShape);
this.shapeList.push(this._startShape);
this.shapeList.push(this._endShape);
},
_buildFrame: function () {
var x = this.subPixelOptimize(this._location.x, 1);
var y = this.subPixelOptimize(this._location.y, 1);
this._startFrameShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
hoverable: false,
style: {
x: x,
y: y,
width: this._location.width - (x > this._location.x ? 1 : 0),
height: this._location.height - (y > this._location.y ? 1 : 0),
lineWidth: 1,
brushType: 'stroke',
strokeColor: this.zoomOption.handleColor
}
};
this._endFrameShape = zrUtil.clone(this._startFrameShape);
this._startFrameShape = new RectangleShape(this._startFrameShape);
this._endFrameShape = new RectangleShape(this._endFrameShape);
this.shapeList.push(this._startFrameShape);
this.shapeList.push(this._endFrameShape);
return;
},
_syncHandleShape: function () {
if (this.zoomOption.orient == 'horizontal') {
this._startShape.style.x = this._fillerShae.style.x - this._handleSize;
this._endShape.style.x = this._fillerShae.style.x + this._fillerShae.style.width;
this._zoom.start = (this._startShape.style.x - this._location.x) / this._location.width * 100;
this._zoom.end = (this._endShape.style.x + this._handleSize - this._location.x) / this._location.width * 100;
} else {
this._startShape.style.y = this._fillerShae.style.y + this._fillerShae.style.height;
this._endShape.style.y = this._fillerShae.style.y - this._handleSize;
this._zoom.start = (this._location.y + this._location.height - this._startShape.style.y) / this._location.height * 100;
this._zoom.end = (this._location.y + this._location.height - this._endShape.style.y - this._handleSize) / this._location.height * 100;
}
this.zr.modShape(this._startShape.id);
this.zr.modShape(this._endShape.id);
this._syncFrameShape();
this.zr.refreshNextFrame();
},
_syncFillerShape: function () {
var a;
var b;
if (this.zoomOption.orient == 'horizontal') {
a = this._startShape.style.x;
b = this._endShape.style.x;
this._fillerShae.style.x = Math.min(a, b) + this._handleSize;
this._fillerShae.style.width = Math.abs(a - b) - this._handleSize;
this._zoom.start = (Math.min(a, b) - this._location.x) / this._location.width * 100;
this._zoom.end = (Math.max(a, b) + this._handleSize - this._location.x) / this._location.width * 100;
} else {
a = this._startShape.style.y;
b = this._endShape.style.y;
this._fillerShae.style.y = Math.min(a, b) + this._handleSize;
this._fillerShae.style.height = Math.abs(a - b) - this._handleSize;
this._zoom.start = (this._location.y + this._location.height - Math.max(a, b)) / this._location.height * 100;
this._zoom.end = (this._location.y + this._location.height - Math.min(a, b) - this._handleSize) / this._location.height * 100;
}
this.zr.modShape(this._fillerShae.id);
this._syncFrameShape();
this.zr.refreshNextFrame();
},
_syncFrameShape: function () {
if (this.zoomOption.orient == 'horizontal') {
this._startFrameShape.style.width = this._fillerShae.style.x - this._location.x;
this._endFrameShape.style.x = this._fillerShae.style.x + this._fillerShae.style.width;
this._endFrameShape.style.width = this._location.x + this._location.width - this._endFrameShape.style.x;
} else {
this._startFrameShape.style.y = this._fillerShae.style.y + this._fillerShae.style.height;
this._startFrameShape.style.height = this._location.y + this._location.height - this._startFrameShape.style.y;
this._endFrameShape.style.height = this._fillerShae.style.y - this._location.y;
}
this.zr.modShape(this._startFrameShape.id);
this.zr.modShape(this._endFrameShape.id);
},
_syncShape: function () {
if (!this.zoomOption.show) {
return;
}
if (this.zoomOption.orient == 'horizontal') {
this._startShape.style.x = this._location.x + this._zoom.start / 100 * this._location.width;
this._endShape.style.x = this._location.x + this._zoom.end / 100 * this._location.width - this._handleSize;
this._fillerShae.style.x = this._startShape.style.x + this._handleSize;
this._fillerShae.style.width = this._endShape.style.x - this._startShape.style.x - this._handleSize;
} else {
this._startShape.style.y = this._location.y + this._location.height - this._zoom.start / 100 * this._location.height;
this._endShape.style.y = this._location.y + this._location.height - this._zoom.end / 100 * this._location.height - this._handleSize;
this._fillerShae.style.y = this._endShape.style.y + this._handleSize;
this._fillerShae.style.height = this._startShape.style.y - this._endShape.style.y - this._handleSize;
}
this.zr.modShape(this._startShape.id);
this.zr.modShape(this._endShape.id);
this.zr.modShape(this._fillerShae.id);
this._syncFrameShape();
this.zr.refresh();
},
_syncData: function (dispatchNow) {
var target;
var start;
var end;
var length;
var data;
for (var key in this._originalData) {
target = this._originalData[key];
for (var idx in target) {
data = target[idx];
if (data == null) {
continue;
}
length = data.length;
start = Math.floor(this._zoom.start / 100 * length);
end = Math.ceil(this._zoom.end / 100 * length);
if (!(this.getDataFromOption(data[0]) instanceof Array) || this.option[key][idx].type == ecConfig.CHART_TYPE_K) {
this.option[key][idx].data = data.slice(start, end);
} else {
this._setScale();
this.option[key][idx].data = this._synScatterData(idx, data);
}
}
}
if (!this._isSilence && (this.zoomOption.realtime || dispatchNow)) {
this.messageCenter.dispatch(ecConfig.EVENT.DATA_ZOOM, null, { zoom: this._zoom }, this.myChart);
}
},
_synScatterData: function (seriesIndex, data) {
if (this._zoom.start === 0 && this._zoom.end == 100 && this._zoom.start2 === 0 && this._zoom.end2 == 100) {
return data;
}
var newData = [];
var scale = this._zoom.scatterMap[seriesIndex];
var total;
var xStart;
var xEnd;
var yStart;
var yEnd;
if (this.zoomOption.orient == 'horizontal') {
total = scale.x.max - scale.x.min;
xStart = this._zoom.start / 100 * total + scale.x.min;
xEnd = this._zoom.end / 100 * total + scale.x.min;
total = scale.y.max - scale.y.min;
yStart = this._zoom.start2 / 100 * total + scale.y.min;
yEnd = this._zoom.end2 / 100 * total + scale.y.min;
} else {
total = scale.x.max - scale.x.min;
xStart = this._zoom.start2 / 100 * total + scale.x.min;
xEnd = this._zoom.end2 / 100 * total + scale.x.min;
total = scale.y.max - scale.y.min;
yStart = this._zoom.start / 100 * total + scale.y.min;
yEnd = this._zoom.end / 100 * total + scale.y.min;
}
var dataMappingMethods;
if (dataMappingMethods = scale.x.dataMappingMethods) {
xStart = dataMappingMethods.coord2Value(xStart);
xEnd = dataMappingMethods.coord2Value(xEnd);
}
if (dataMappingMethods = scale.y.dataMappingMethods) {
yStart = dataMappingMethods.coord2Value(yStart);
yEnd = dataMappingMethods.coord2Value(yEnd);
}
var value;
for (var i = 0, l = data.length; i < l; i++) {
value = data[i].value || data[i];
if (value[0] >= xStart && value[0] <= xEnd && value[1] >= yStart && value[1] <= yEnd) {
newData.push(data[i]);
}
}
return newData;
},
_setScale: function () {
var needScale = this._zoom.start !== 0 || this._zoom.end !== 100 || this._zoom.start2 !== 0 || this._zoom.end2 !== 100;
var axis = {
xAxis: this.option.xAxis,
yAxis: this.option.yAxis
};
for (var key in axis) {
for (var i = 0, l = axis[key].length; i < l; i++) {
axis[key][i].scale = needScale || axis[key][i]._scale;
}
}
},
_backupScale: function () {
var axis = {
xAxis: this.option.xAxis,
yAxis: this.option.yAxis
};
for (var key in axis) {
for (var i = 0, l = axis[key].length; i < l; i++) {
axis[key][i]._scale = axis[key][i].scale;
}
}
},
_getDetail: function () {
var key = [
'xAxis',
'yAxis'
];
for (var i = 0, l = key.length; i < l; i++) {
var target = this._originalData[key[i]];
for (var idx in target) {
var data = target[idx];
if (data == null) {
continue;
}
var length = data.length;
var start = Math.floor(this._zoom.start / 100 * length);
var end = Math.ceil(this._zoom.end / 100 * length);
end -= end > 0 ? 1 : 0;
return {
start: this.getDataFromOption(data[start]),
end: this.getDataFromOption(data[end])
};
}
}
key = this.zoomOption.orient == 'horizontal' ? 'xAxis' : 'yAxis';
var seriesIndex = this._zoom.seriesIndex[0];
var axisIndex = this.option.series[seriesIndex][key + 'Index'] || 0;
var axisType = this.option[key][axisIndex].type;
var min = this._zoom.scatterMap[seriesIndex][key.charAt(0)].min;
var max = this._zoom.scatterMap[seriesIndex][key.charAt(0)].max;
var gap = max - min;
if (axisType == 'value') {
return {
start: min + gap * this._zoom.start / 100,
end: min + gap * this._zoom.end / 100
};
} else if (axisType == 'time') {
max = min + gap * this._zoom.end / 100;
min = min + gap * this._zoom.start / 100;
var formatter = ecDate.getAutoFormatter(min, max).formatter;
return {
start: ecDate.format(formatter, min),
end: ecDate.format(formatter, max)
};
}
return {
start: '',
end: ''
};
},
__ondrift: function (shape, dx, dy) {
if (this.zoomOption.zoomLock) {
shape = this._fillerShae;
}
var detailSize = shape._type == 'filler' ? this._handleSize : 0;
if (this.zoomOption.orient == 'horizontal') {
if (shape.style.x + dx - detailSize <= this._location.x) {
shape.style.x = this._location.x + detailSize;
} else if (shape.style.x + dx + shape.style.width + detailSize >= this._location.x + this._location.width) {
shape.style.x = this._location.x + this._location.width - shape.style.width - detailSize;
} else {
shape.style.x += dx;
}
} else {
if (shape.style.y + dy - detailSize <= this._location.y) {
shape.style.y = this._location.y + detailSize;
} else if (shape.style.y + dy + shape.style.height + detailSize >= this._location.y + this._location.height) {
shape.style.y = this._location.y + this._location.height - shape.style.height - detailSize;
} else {
shape.style.y += dy;
}
}
if (shape._type == 'filler') {
this._syncHandleShape();
} else {
this._syncFillerShape();
}
if (this.zoomOption.realtime) {
this._syncData();
}
if (this.zoomOption.showDetail) {
var detail = this._getDetail();
this._startShape.style.text = this._startShape.highlightStyle.text = detail.start;
this._endShape.style.text = this._endShape.highlightStyle.text = detail.end;
this._startShape.style.textPosition = this._startShape.highlightStyle.textPosition;
this._endShape.style.textPosition = this._endShape.highlightStyle.textPosition;
}
return true;
},
__ondragend: function () {
if (this.zoomOption.showDetail) {
this._startShape.style.text = this._endShape.style.text = '=';
this._startShape.style.textPosition = this._endShape.style.textPosition = 'inside';
this.zr.modShape(this._startShape.id);
this.zr.modShape(this._endShape.id);
this.zr.refreshNextFrame();
}
this.isDragend = true;
},
ondragend: function (param, status) {
if (!this.isDragend || !param.target) {
return;
}
!this.zoomOption.realtime && this._syncData();
status.dragOut = true;
status.dragIn = true;
if (!this._isSilence && !this.zoomOption.realtime) {
this.messageCenter.dispatch(ecConfig.EVENT.DATA_ZOOM, null, { zoom: this._zoom }, this.myChart);
}
status.needRefresh = false;
this.isDragend = false;
return;
},
ondataZoom: function (param, status) {
status.needRefresh = true;
return;
},
absoluteZoom: function (param) {
this._zoom.start = param.start;
this._zoom.end = param.end;
this._zoom.start2 = param.start2;
this._zoom.end2 = param.end2;
this._syncShape();
this._syncData(true);
return;
},
rectZoom: function (param) {
if (!param) {
this._zoom.start = this._zoom.start2 = 0;
this._zoom.end = this._zoom.end2 = 100;
this._syncShape();
this._syncData(true);
return this._zoom;
}
var gridArea = this.component.grid.getArea();
var rect = {
x: param.x,
y: param.y,
width: param.width,
height: param.height
};
if (rect.width < 0) {
rect.x += rect.width;
rect.width = -rect.width;
}
if (rect.height < 0) {
rect.y += rect.height;
rect.height = -rect.height;
}
if (rect.x > gridArea.x + gridArea.width || rect.y > gridArea.y + gridArea.height) {
return false;
}
if (rect.x < gridArea.x) {
rect.x = gridArea.x;
}
if (rect.x + rect.width > gridArea.x + gridArea.width) {
rect.width = gridArea.x + gridArea.width - rect.x;
}
if (rect.y + rect.height > gridArea.y + gridArea.height) {
rect.height = gridArea.y + gridArea.height - rect.y;
}
var total;
var sdx = (rect.x - gridArea.x) / gridArea.width;
var edx = 1 - (rect.x + rect.width - gridArea.x) / gridArea.width;
var sdy = 1 - (rect.y + rect.height - gridArea.y) / gridArea.height;
var edy = (rect.y - gridArea.y) / gridArea.height;
if (this.zoomOption.orient == 'horizontal') {
total = this._zoom.end - this._zoom.start;
this._zoom.start += total * sdx;
this._zoom.end -= total * edx;
total = this._zoom.end2 - this._zoom.start2;
this._zoom.start2 += total * sdy;
this._zoom.end2 -= total * edy;
} else {
total = this._zoom.end - this._zoom.start;
this._zoom.start += total * sdy;
this._zoom.end -= total * edy;
total = this._zoom.end2 - this._zoom.start2;
this._zoom.start2 += total * sdx;
this._zoom.end2 -= total * edx;
}
this._syncShape();
this._syncData(true);
return this._zoom;
},
syncBackupData: function (curOption) {
var start;
var target = this._originalData['series'];
var curSeries = curOption.series;
var curData;
for (var i = 0, l = curSeries.length; i < l; i++) {
curData = curSeries[i].data || curSeries[i].eventList;
if (target[i]) {
start = Math.floor(this._zoom.start / 100 * target[i].length);
} else {
start = 0;
}
for (var j = 0, k = curData.length; j < k; j++) {
if (target[i]) {
target[i][j + start] = curData[j];
}
}
}
},
syncOption: function (magicOption) {
this.silence(true);
this.option = magicOption;
this.option.dataZoom = this.reformOption(this.option.dataZoom);
this.zoomOption = this.option.dataZoom;
if (!this.myChart.canvasSupported) {
this.zoomOption.realtime = false;
}
this.clear();
this._location = this._getLocation();
this._zoom = this._getZoom();
this._backupData();
if (this.option.dataZoom && this.option.dataZoom.show) {
this._buildShape();
}
this._syncData();
this.silence(false);
},
silence: function (s) {
this._isSilence = s;
},
getRealDataIndex: function (sIdx, dIdx) {
if (!this._originalData || this._zoom.start === 0 && this._zoom.end == 100) {
return dIdx;
}
var sreies = this._originalData.series;
if (sreies[sIdx]) {
return Math.floor(this._zoom.start / 100 * sreies[sIdx].length) + dIdx;
}
return -1;
},
resize: function () {
this.clear();
this._location = this._getLocation();
this._zoom = this._getZoom();
if (this.option.dataZoom.show) {
this._buildShape();
}
}
};
zrUtil.inherits(DataZoom, Base);
require('../component').define('dataZoom', DataZoom);
return DataZoom;
});define('echarts/component/categoryAxis', [
'require',
'./base',
'zrender/shape/Text',
'zrender/shape/Line',
'zrender/shape/Rectangle',
'../config',
'zrender/tool/util',
'zrender/tool/area',
'../component'
], function (require) {
var Base = require('./base');
var TextShape = require('zrender/shape/Text');
var LineShape = require('zrender/shape/Line');
var RectangleShape = require('zrender/shape/Rectangle');
var ecConfig = require('../config');
ecConfig.categoryAxis = {
zlevel: 0,
z: 0,
show: true,
position: 'bottom',
name: '',
nameLocation: 'end',
nameTextStyle: {},
boundaryGap: true,
axisLine: {
show: true,
onZero: true,
lineStyle: {
color: '#48b',
width: 2,
type: 'solid'
}
},
axisTick: {
show: true,
interval: 'auto',
inside: false,
length: 5,
lineStyle: {
color: '#333',
width: 1
}
},
axisLabel: {
show: true,
interval: 'auto',
rotate: 0,
margin: 8,
textStyle: { color: '#333' }
},
splitLine: {
show: true,
lineStyle: {
color: ['#ccc'],
width: 1,
type: 'solid'
}
},
splitArea: {
show: false,
areaStyle: {
color: [
'rgba(250,250,250,0.3)',
'rgba(200,200,200,0.3)'
]
}
}
};
var zrUtil = require('zrender/tool/util');
var zrArea = require('zrender/tool/area');
function CategoryAxis(ecTheme, messageCenter, zr, option, myChart, axisBase) {
if (option.data.length < 1) {
console.error('option.data.length < 1.');
return;
}
Base.call(this, ecTheme, messageCenter, zr, option, myChart);
this.grid = this.component.grid;
for (var method in axisBase) {
this[method] = axisBase[method];
}
this.refresh(option);
}
CategoryAxis.prototype = {
type: ecConfig.COMPONENT_TYPE_AXIS_CATEGORY,
_getReformedLabel: function (idx) {
var data = this.getDataFromOption(this.option.data[idx]);
var formatter = this.option.data[idx].formatter || this.option.axisLabel.formatter;
if (formatter) {
if (typeof formatter == 'function') {
data = formatter.call(this.myChart, data);
} else if (typeof formatter == 'string') {
data = formatter.replace('{value}', data);
}
}
return data;
},
_getInterval: function () {
var interval = this.option.axisLabel.interval;
if (interval == 'auto') {
var fontSize = this.option.axisLabel.textStyle.fontSize;
var data = this.option.data;
var dataLength = this.option.data.length;
if (this.isHorizontal()) {
if (dataLength > 3) {
var gap = this.getGap();
var isEnough = false;
var labelSpace;
var labelSize;
var step = Math.floor(0.5 / gap);
step = step < 1 ? 1 : step;
interval = Math.floor(15 / gap);
while (!isEnough && interval < dataLength) {
interval += step;
isEnough = true;
labelSpace = Math.floor(gap * interval);
for (var i = Math.floor((dataLength - 1) / interval) * interval; i >= 0; i -= interval) {
if (this.option.axisLabel.rotate !== 0) {
labelSize = fontSize;
} else if (data[i].textStyle) {
labelSize = zrArea.getTextWidth(this._getReformedLabel(i), this.getFont(zrUtil.merge(data[i].textStyle, this.option.axisLabel.textStyle)));
} else {
var label = this._getReformedLabel(i) + '';
var wLen = (label.match(/\w/g) || '').length;
var oLen = label.length - wLen;
labelSize = wLen * fontSize * 2 / 3 + oLen * fontSize;
}
if (labelSpace < labelSize) {
isEnough = false;
break;
}
}
}
} else {
interval = 1;
}
} else {
if (dataLength > 3) {
var gap = this.getGap();
interval = Math.floor(11 / gap);
while (gap * interval - 6 < fontSize && interval < dataLength) {
interval++;
}
} else {
interval = 1;
}
}
} else {
interval = typeof interval == 'function' ? 1 : interval - 0 + 1;
}
return interval;
},
_buildShape: function () {
this._interval = this._getInterval();
if (!this.option.show) {
return;
}
this.option.splitArea.show && this._buildSplitArea();
this.option.splitLine.show && this._buildSplitLine();
this.option.axisLine.show && this._buildAxisLine();
this.option.axisTick.show && this._buildAxisTick();
this.option.axisLabel.show && this._buildAxisLabel();
for (var i = 0, l = this.shapeList.length; i < l; i++) {
this.zr.addShape(this.shapeList[i]);
}
},
_buildAxisTick: function () {
var axShape;
var data = this.option.data;
var dataLength = this.option.data.length;
var tickOption = this.option.axisTick;
var length = tickOption.length;
var color = tickOption.lineStyle.color;
var lineWidth = tickOption.lineStyle.width;
var intervalFunction = typeof tickOption.interval == 'function' ? tickOption.interval : tickOption.interval == 'auto' ? typeof this.option.axisLabel.interval == 'function' ? this.option.axisLabel.interval : false : false;
var interval = intervalFunction ? 1 : tickOption.interval == 'auto' ? this._interval : tickOption.interval - 0 + 1;
var onGap = tickOption.onGap;
var optGap = onGap ? this.getGap() / 2 : typeof onGap == 'undefined' ? this.option.boundaryGap ? this.getGap() / 2 : 0 : 0;
var startIndex = optGap > 0 ? -interval : 0;
if (this.isHorizontal()) {
var yPosition = this.option.position == 'bottom' ? tickOption.inside ? this.grid.getYend() - length - 1 : this.grid.getYend() + 1 : tickOption.inside ? this.grid.getY() + 1 : this.grid.getY() - length - 1;
var x;
for (var i = startIndex; i < dataLength; i += interval) {
if (intervalFunction && !intervalFunction(i, data[i])) {
continue;
}
x = this.subPixelOptimize(this.getCoordByIndex(i) + (i >= 0 ? optGap : 0), lineWidth);
axShape = {
_axisShape: 'axisTick',
zlevel: this.getZlevelBase(),
z: this.getZBase(),
hoverable: false,
style: {
xStart: x,
yStart: yPosition,
xEnd: x,
yEnd: yPosition + length,
strokeColor: color,
lineWidth: lineWidth
}
};
this.shapeList.push(new LineShape(axShape));
}
} else {
var xPosition = this.option.position == 'left' ? tickOption.inside ? this.grid.getX() + 1 : this.grid.getX() - length - 1 : tickOption.inside ? this.grid.getXend() - length - 1 : this.grid.getXend() + 1;
var y;
for (var i = startIndex; i < dataLength; i += interval) {
if (intervalFunction && !intervalFunction(i, data[i])) {
continue;
}
y = this.subPixelOptimize(this.getCoordByIndex(i) - (i >= 0 ? optGap : 0), lineWidth);
axShape = {
_axisShape: 'axisTick',
zlevel: this.getZlevelBase(),
z: this.getZBase(),
hoverable: false,
style: {
xStart: xPosition,
yStart: y,
xEnd: xPosition + length,
yEnd: y,
strokeColor: color,
lineWidth: lineWidth
}
};
this.shapeList.push(new LineShape(axShape));
}
}
},
_buildAxisLabel: function () {
var axShape;
var data = this.option.data;
var dataLength = this.option.data.length;
var labelOption = this.option.axisLabel;
var rotate = labelOption.rotate;
var margin = labelOption.margin;
var clickable = labelOption.clickable;
var textStyle = labelOption.textStyle;
var intervalFunction = typeof labelOption.interval == 'function' ? labelOption.interval : false;
var dataTextStyle;
if (this.isHorizontal()) {
var yPosition;
var baseLine;
if (this.option.position == 'bottom') {
yPosition = this.grid.getYend() + margin;
baseLine = 'top';
} else {
yPosition = this.grid.getY() - margin;
baseLine = 'bottom';
}
for (var i = 0; i < dataLength; i += this._interval) {
if (intervalFunction && !intervalFunction(i, data[i]) || this._getReformedLabel(i) === '') {
continue;
}
dataTextStyle = zrUtil.merge(data[i].textStyle || {}, textStyle);
axShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase() + 3,
hoverable: false,
style: {
x: this.getCoordByIndex(i),
y: yPosition,
color: dataTextStyle.color,
text: this._getReformedLabel(i),
textFont: this.getFont(dataTextStyle),
textAlign: dataTextStyle.align || 'center',
textBaseline: dataTextStyle.baseline || baseLine
}
};
if (rotate) {
axShape.style.textAlign = rotate > 0 ? this.option.position == 'bottom' ? 'right' : 'left' : this.option.position == 'bottom' ? 'left' : 'right';
axShape.rotation = [
rotate * Math.PI / 180,
axShape.style.x,
axShape.style.y
];
}
this.shapeList.push(new TextShape(this._axisLabelClickable(clickable, axShape)));
}
} else {
var xPosition;
var align;
if (this.option.position == 'left') {
xPosition = this.grid.getX() - margin;
align = 'right';
} else {
xPosition = this.grid.getXend() + margin;
align = 'left';
}
for (var i = 0; i < dataLength; i += this._interval) {
if (intervalFunction && !intervalFunction(i, data[i]) || this._getReformedLabel(i) === '') {
continue;
}
dataTextStyle = zrUtil.merge(data[i].textStyle || {}, textStyle);
axShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase() + 3,
hoverable: false,
style: {
x: xPosition,
y: this.getCoordByIndex(i),
color: dataTextStyle.color,
text: this._getReformedLabel(i),
textFont: this.getFont(dataTextStyle),
textAlign: dataTextStyle.align || align,
textBaseline: dataTextStyle.baseline || i === 0 && this.option.name !== '' ? 'bottom' : i == dataLength - 1 && this.option.name !== '' ? 'top' : 'middle'
}
};
if (rotate) {
axShape.rotation = [
rotate * Math.PI / 180,
axShape.style.x,
axShape.style.y
];
}
this.shapeList.push(new TextShape(this._axisLabelClickable(clickable, axShape)));
}
}
},
_buildSplitLine: function () {
var axShape;
var data = this.option.data;
var dataLength = this.option.data.length;
var sLineOption = this.option.splitLine;
var lineType = sLineOption.lineStyle.type;
var lineWidth = sLineOption.lineStyle.width;
var color = sLineOption.lineStyle.color;
color = color instanceof Array ? color : [color];
var colorLength = color.length;
var intervalFunction = typeof this.option.axisLabel.interval == 'function' ? this.option.axisLabel.interval : false;
var onGap = sLineOption.onGap;
var optGap = onGap ? this.getGap() / 2 : typeof onGap == 'undefined' ? this.option.boundaryGap ? this.getGap() / 2 : 0 : 0;
dataLength -= onGap || typeof onGap == 'undefined' && this.option.boundaryGap ? 1 : 0;
if (this.isHorizontal()) {
var sy = this.grid.getY();
var ey = this.grid.getYend();
var x;
for (var i = 0; i < dataLength; i += this._interval) {
if (intervalFunction && !intervalFunction(i, data[i])) {
continue;
}
x = this.subPixelOptimize(this.getCoordByIndex(i) + optGap, lineWidth);
axShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
hoverable: false,
style: {
xStart: x,
yStart: sy,
xEnd: x,
yEnd: ey,
strokeColor: color[i / this._interval % colorLength],
lineType: lineType,
lineWidth: lineWidth
}
};
this.shapeList.push(new LineShape(axShape));
}
} else {
var sx = this.grid.getX();
var ex = this.grid.getXend();
var y;
for (var i = 0; i < dataLength; i += this._interval) {
if (intervalFunction && !intervalFunction(i, data[i])) {
continue;
}
y = this.subPixelOptimize(this.getCoordByIndex(i) - optGap, lineWidth);
axShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
hoverable: false,
style: {
xStart: sx,
yStart: y,
xEnd: ex,
yEnd: y,
strokeColor: color[i / this._interval % colorLength],
lineType: lineType,
lineWidth: lineWidth
}
};
this.shapeList.push(new LineShape(axShape));
}
}
},
_buildSplitArea: function () {
var axShape;
var data = this.option.data;
var sAreaOption = this.option.splitArea;
var color = sAreaOption.areaStyle.color;
if (!(color instanceof Array)) {
axShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
hoverable: false,
style: {
x: this.grid.getX(),
y: this.grid.getY(),
width: this.grid.getWidth(),
height: this.grid.getHeight(),
color: color
}
};
this.shapeList.push(new RectangleShape(axShape));
} else {
var colorLength = color.length;
var dataLength = this.option.data.length;
var intervalFunction = typeof this.option.axisLabel.interval == 'function' ? this.option.axisLabel.interval : false;
var onGap = sAreaOption.onGap;
var optGap = onGap ? this.getGap() / 2 : typeof onGap == 'undefined' ? this.option.boundaryGap ? this.getGap() / 2 : 0 : 0;
if (this.isHorizontal()) {
var y = this.grid.getY();
var height = this.grid.getHeight();
var lastX = this.grid.getX();
var curX;
for (var i = 0; i <= dataLength; i += this._interval) {
if (intervalFunction && !intervalFunction(i, data[i]) && i < dataLength) {
continue;
}
curX = i < dataLength ? this.getCoordByIndex(i) + optGap : this.grid.getXend();
axShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
hoverable: false,
style: {
x: lastX,
y: y,
width: curX - lastX,
height: height,
color: color[i / this._interval % colorLength]
}
};
this.shapeList.push(new RectangleShape(axShape));
lastX = curX;
}
} else {
var x = this.grid.getX();
var width = this.grid.getWidth();
var lastYend = this.grid.getYend();
var curY;
for (var i = 0; i <= dataLength; i += this._interval) {
if (intervalFunction && !intervalFunction(i, data[i]) && i < dataLength) {
continue;
}
curY = i < dataLength ? this.getCoordByIndex(i) - optGap : this.grid.getY();
axShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
hoverable: false,
style: {
x: x,
y: curY,
width: width,
height: lastYend - curY,
color: color[i / this._interval % colorLength]
}
};
this.shapeList.push(new RectangleShape(axShape));
lastYend = curY;
}
}
}
},
refresh: function (newOption) {
if (newOption) {
this.option = this.reformOption(newOption);
this.option.axisLabel.textStyle = this.getTextStyle(this.option.axisLabel.textStyle);
}
this.clear();
this._buildShape();
},
getGap: function () {
var dataLength = this.option.data.length;
var total = this.isHorizontal() ? this.grid.getWidth() : this.grid.getHeight();
if (this.option.boundaryGap) {
return total / dataLength;
} else {
return total / (dataLength > 1 ? dataLength - 1 : 1);
}
},
getCoord: function (value) {
var data = this.option.data;
var dataLength = data.length;
var gap = this.getGap();
var position = this.option.boundaryGap ? gap / 2 : 0;
for (var i = 0; i < dataLength; i++) {
if (this.getDataFromOption(data[i]) == value) {
if (this.isHorizontal()) {
position = this.grid.getX() + position;
} else {
position = this.grid.getYend() - position;
}
return position;
}
position += gap;
}
},
getCoordByIndex: function (dataIndex) {
if (dataIndex < 0) {
if (this.isHorizontal()) {
return this.grid.getX();
} else {
return this.grid.getYend();
}
} else if (dataIndex > this.option.data.length - 1) {
if (this.isHorizontal()) {
return this.grid.getXend();
} else {
return this.grid.getY();
}
} else {
var gap = this.getGap();
var position = this.option.boundaryGap ? gap / 2 : 0;
position += dataIndex * gap;
if (this.isHorizontal()) {
position = this.grid.getX() + position;
} else {
position = this.grid.getYend() - position;
}
return position;
}
},
getNameByIndex: function (dataIndex) {
return this.getDataFromOption(this.option.data[dataIndex]);
},
getIndexByName: function (name) {
var data = this.option.data;
var dataLength = data.length;
for (var i = 0; i < dataLength; i++) {
if (this.getDataFromOption(data[i]) == name) {
return i;
}
}
return -1;
},
getValueFromCoord: function () {
return '';
},
isMainAxis: function (dataIndex) {
return dataIndex % this._interval === 0;
}
};
zrUtil.inherits(CategoryAxis, Base);
require('../component').define('categoryAxis', CategoryAxis);
return CategoryAxis;
});define('echarts/component/valueAxis', [
'require',
'./base',
'zrender/shape/Text',
'zrender/shape/Line',
'zrender/shape/Rectangle',
'../config',
'../util/date',
'zrender/tool/util',
'../util/smartSteps',
'../util/accMath',
'../util/smartLogSteps',
'../component'
], function (require) {
var Base = require('./base');
var TextShape = require('zrender/shape/Text');
var LineShape = require('zrender/shape/Line');
var RectangleShape = require('zrender/shape/Rectangle');
var ecConfig = require('../config');
ecConfig.valueAxis = {
zlevel: 0,
z: 0,
show: true,
position: 'left',
name: '',
nameLocation: 'end',
nameTextStyle: {},
boundaryGap: [
0,
0
],
axisLine: {
show: true,
onZero: true,
lineStyle: {
color: '#48b',
width: 2,
type: 'solid'
}
},
axisTick: {
show: false,
inside: false,
length: 5,
lineStyle: {
color: '#333',
width: 1
}
},
axisLabel: {
show: true,
rotate: 0,
margin: 8,
textStyle: { color: '#333' }
},
splitLine: {
show: true,
lineStyle: {
color: ['#ccc'],
width: 1,
type: 'solid'
}
},
splitArea: {
show: false,
areaStyle: {
color: [
'rgba(250,250,250,0.3)',
'rgba(200,200,200,0.3)'
]
}
}
};
var ecDate = require('../util/date');
var zrUtil = require('zrender/tool/util');
function ValueAxis(ecTheme, messageCenter, zr, option, myChart, axisBase, series) {
if (!series || series.length === 0) {
console.err('option.series.length == 0.');
return;
}
Base.call(this, ecTheme, messageCenter, zr, option, myChart);
this.series = series;
this.grid = this.component.grid;
for (var method in axisBase) {
this[method] = axisBase[method];
}
this.refresh(option, series);
}
ValueAxis.prototype = {
type: ecConfig.COMPONENT_TYPE_AXIS_VALUE,
_buildShape: function () {
this._hasData = false;
this._calculateValue();
if (!this._hasData || !this.option.show) {
return;
}
this.option.splitArea.show && this._buildSplitArea();
this.option.splitLine.show && this._buildSplitLine();
this.option.axisLine.show && this._buildAxisLine();
this.option.axisTick.show && this._buildAxisTick();
this.option.axisLabel.show && this._buildAxisLabel();
for (var i = 0, l = this.shapeList.length; i < l; i++) {
this.zr.addShape(this.shapeList[i]);
}
},
_buildAxisTick: function () {
var axShape;
var data = this._valueList;
var dataLength = this._valueList.length;
var tickOption = this.option.axisTick;
var length = tickOption.length;
var color = tickOption.lineStyle.color;
var lineWidth = tickOption.lineStyle.width;
if (this.isHorizontal()) {
var yPosition = this.option.position === 'bottom' ? tickOption.inside ? this.grid.getYend() - length - 1 : this.grid.getYend() + 1 : tickOption.inside ? this.grid.getY() + 1 : this.grid.getY() - length - 1;
var x;
for (var i = 0; i < dataLength; i++) {
x = this.subPixelOptimize(this.getCoord(data[i]), lineWidth);
axShape = {
_axisShape: 'axisTick',
zlevel: this.getZlevelBase(),
z: this.getZBase(),
hoverable: false,
style: {
xStart: x,
yStart: yPosition,
xEnd: x,
yEnd: yPosition + length,
strokeColor: color,
lineWidth: lineWidth
}
};
this.shapeList.push(new LineShape(axShape));
}
} else {
var xPosition = this.option.position === 'left' ? tickOption.inside ? this.grid.getX() + 1 : this.grid.getX() - length - 1 : tickOption.inside ? this.grid.getXend() - length - 1 : this.grid.getXend() + 1;
var y;
for (var i = 0; i < dataLength; i++) {
y = this.subPixelOptimize(this.getCoord(data[i]), lineWidth);
axShape = {
_axisShape: 'axisTick',
zlevel: this.getZlevelBase(),
z: this.getZBase(),
hoverable: false,
style: {
xStart: xPosition,
yStart: y,
xEnd: xPosition + length,
yEnd: y,
strokeColor: color,
lineWidth: lineWidth
}
};
this.shapeList.push(new LineShape(axShape));
}
}
},
_buildAxisLabel: function () {
var axShape;
var data = this._valueList;
var dataLength = this._valueList.length;
var rotate = this.option.axisLabel.rotate;
var margin = this.option.axisLabel.margin;
var clickable = this.option.axisLabel.clickable;
var textStyle = this.option.axisLabel.textStyle;
if (this.isHorizontal()) {
var yPosition;
var baseLine;
if (this.option.position === 'bottom') {
yPosition = this.grid.getYend() + margin;
baseLine = 'top';
} else {
yPosition = this.grid.getY() - margin;
baseLine = 'bottom';
}
for (var i = 0; i < dataLength; i++) {
axShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase() + 3,
hoverable: false,
style: {
x: this.getCoord(data[i]),
y: yPosition,
color: typeof textStyle.color === 'function' ? textStyle.color(data[i]) : textStyle.color,
text: this._valueLabel[i],
textFont: this.getFont(textStyle),
textAlign: textStyle.align || 'center',
textBaseline: textStyle.baseline || baseLine
}
};
if (rotate) {
axShape.style.textAlign = rotate > 0 ? this.option.position === 'bottom' ? 'right' : 'left' : this.option.position === 'bottom' ? 'left' : 'right';
axShape.rotation = [
rotate * Math.PI / 180,
axShape.style.x,
axShape.style.y
];
}
this.shapeList.push(new TextShape(this._axisLabelClickable(clickable, axShape)));
}
} else {
var xPosition;
var align;
if (this.option.position === 'left') {
xPosition = this.grid.getX() - margin;
align = 'right';
} else {
xPosition = this.grid.getXend() + margin;
align = 'left';
}
for (var i = 0; i < dataLength; i++) {
axShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase() + 3,
hoverable: false,
style: {
x: xPosition,
y: this.getCoord(data[i]),
color: typeof textStyle.color === 'function' ? textStyle.color(data[i]) : textStyle.color,
text: this._valueLabel[i],
textFont: this.getFont(textStyle),
textAlign: textStyle.align || align,
textBaseline: textStyle.baseline || (i === 0 && this.option.name !== '' ? 'bottom' : i === dataLength - 1 && this.option.name !== '' ? 'top' : 'middle')
}
};
if (rotate) {
axShape.rotation = [
rotate * Math.PI / 180,
axShape.style.x,
axShape.style.y
];
}
this.shapeList.push(new TextShape(this._axisLabelClickable(clickable, axShape)));
}
}
},
_buildSplitLine: function () {
var axShape;
var data = this._valueList;
var dataLength = this._valueList.length;
var sLineOption = this.option.splitLine;
var lineType = sLineOption.lineStyle.type;
var lineWidth = sLineOption.lineStyle.width;
var color = sLineOption.lineStyle.color;
color = color instanceof Array ? color : [color];
var colorLength = color.length;
if (this.isHorizontal()) {
var sy = this.grid.getY();
var ey = this.grid.getYend();
var x;
for (var i = 0; i < dataLength; i++) {
x = this.subPixelOptimize(this.getCoord(data[i]), lineWidth);
axShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
hoverable: false,
style: {
xStart: x,
yStart: sy,
xEnd: x,
yEnd: ey,
strokeColor: color[i % colorLength],
lineType: lineType,
lineWidth: lineWidth
}
};
this.shapeList.push(new LineShape(axShape));
}
} else {
var sx = this.grid.getX();
var ex = this.grid.getXend();
var y;
for (var i = 0; i < dataLength; i++) {
y = this.subPixelOptimize(this.getCoord(data[i]), lineWidth);
axShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
hoverable: false,
style: {
xStart: sx,
yStart: y,
xEnd: ex,
yEnd: y,
strokeColor: color[i % colorLength],
lineType: lineType,
lineWidth: lineWidth
}
};
this.shapeList.push(new LineShape(axShape));
}
}
},
_buildSplitArea: function () {
var axShape;
var color = this.option.splitArea.areaStyle.color;
if (!(color instanceof Array)) {
axShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
hoverable: false,
style: {
x: this.grid.getX(),
y: this.grid.getY(),
width: this.grid.getWidth(),
height: this.grid.getHeight(),
color: color
}
};
this.shapeList.push(new RectangleShape(axShape));
} else {
var colorLength = color.length;
var data = this._valueList;
var dataLength = this._valueList.length;
if (this.isHorizontal()) {
var y = this.grid.getY();
var height = this.grid.getHeight();
var lastX = this.grid.getX();
var curX;
for (var i = 0; i <= dataLength; i++) {
curX = i < dataLength ? this.getCoord(data[i]) : this.grid.getXend();
axShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
hoverable: false,
style: {
x: lastX,
y: y,
width: curX - lastX,
height: height,
color: color[i % colorLength]
}
};
this.shapeList.push(new RectangleShape(axShape));
lastX = curX;
}
} else {
var x = this.grid.getX();
var width = this.grid.getWidth();
var lastYend = this.grid.getYend();
var curY;
for (var i = 0; i <= dataLength; i++) {
curY = i < dataLength ? this.getCoord(data[i]) : this.grid.getY();
axShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
hoverable: false,
style: {
x: x,
y: curY,
width: width,
height: lastYend - curY,
color: color[i % colorLength]
}
};
this.shapeList.push(new RectangleShape(axShape));
lastYend = curY;
}
}
}
},
_calculateValue: function () {
if (isNaN(this.option.min - 0) || isNaN(this.option.max - 0)) {
var data = {};
var xIdx;
var yIdx;
var legend = this.component.legend;
for (var i = 0, l = this.series.length; i < l; i++) {
if (this.series[i].type != ecConfig.CHART_TYPE_LINE && this.series[i].type != ecConfig.CHART_TYPE_BAR && this.series[i].type != ecConfig.CHART_TYPE_SCATTER && this.series[i].type != ecConfig.CHART_TYPE_K && this.series[i].type != ecConfig.CHART_TYPE_EVENTRIVER) {
continue;
}
if (legend && !legend.isSelected(this.series[i].name)) {
continue;
}
xIdx = this.series[i].xAxisIndex || 0;
yIdx = this.series[i].yAxisIndex || 0;
if (this.option.xAxisIndex != xIdx && this.option.yAxisIndex != yIdx) {
continue;
}
this._calculSum(data, i);
}
var oriData;
for (var i in data) {
oriData = data[i];
for (var j = 0, k = oriData.length; j < k; j++) {
if (!isNaN(oriData[j])) {
this._hasData = true;
this._min = oriData[j];
this._max = oriData[j];
break;
}
}
if (this._hasData) {
break;
}
}
for (var i in data) {
oriData = data[i];
for (var j = 0, k = oriData.length; j < k; j++) {
if (!isNaN(oriData[j])) {
this._min = Math.min(this._min, oriData[j]);
this._max = Math.max(this._max, oriData[j]);
}
}
}
var boundaryGap = this.option.type !== 'log' ? this.option.boundaryGap : [
0,
0
];
var gap = Math.abs(this._max - this._min);
this._min = isNaN(this.option.min - 0) ? this._min - Math.abs(gap * boundaryGap[0]) : this.option.min - 0;
this._max = isNaN(this.option.max - 0) ? this._max + Math.abs(gap * boundaryGap[1]) : this.option.max - 0;
if (this._min === this._max) {
if (this._max === 0) {
this._max = 1;
} else if (this._max > 0) {
this._min = this._max / this.option.splitNumber != null ? this.option.splitNumber : 5;
} else {
this._max = this._max / this.option.splitNumber != null ? this.option.splitNumber : 5;
}
}
if (this.option.type === 'time') {
this._reformTimeValue();
} else if (this.option.type === 'log') {
this._reformLogValue();
} else {
this._reformValue(this.option.scale);
}
} else {
this._hasData = true;
this._min = this.option.min - 0;
this._max = this.option.max - 0;
if (this.option.type === 'time') {
this._reformTimeValue();
} else if (this.option.type === 'log') {
this._reformLogValue();
} else {
this._customerValue();
}
}
},
_calculSum: function (data, i) {
var key = this.series[i].name || 'kener';
var value;
var oriData;
if (!this.series[i].stack) {
data[key] = data[key] || [];
if (this.series[i].type != ecConfig.CHART_TYPE_EVENTRIVER) {
oriData = this.series[i].data;
for (var j = 0, k = oriData.length; j < k; j++) {
value = this.getDataFromOption(oriData[j]);
if (this.series[i].type === ecConfig.CHART_TYPE_K) {
data[key].push(value[0]);
data[key].push(value[1]);
data[key].push(value[2]);
data[key].push(value[3]);
} else if (value instanceof Array) {
if (this.option.xAxisIndex != -1) {
data[key].push(this.option.type != 'time' ? value[0] : ecDate.getNewDate(value[0]));
}
if (this.option.yAxisIndex != -1) {
data[key].push(this.option.type != 'time' ? value[1] : ecDate.getNewDate(value[1]));
}
} else {
data[key].push(value);
}
}
} else {
oriData = this.series[i].data;
for (var j = 0, k = oriData.length; j < k; j++) {
var evolution = oriData[j].evolution;
for (var m = 0, n = evolution.length; m < n; m++) {
data[key].push(ecDate.getNewDate(evolution[m].time));
}
}
}
} else {
var keyP = '__Magic_Key_Positive__' + this.series[i].stack;
var keyN = '__Magic_Key_Negative__' + this.series[i].stack;
data[keyP] = data[keyP] || [];
data[keyN] = data[keyN] || [];
data[key] = data[key] || [];
oriData = this.series[i].data;
for (var j = 0, k = oriData.length; j < k; j++) {
value = this.getDataFromOption(oriData[j]);
if (value === '-') {
continue;
}
value = value - 0;
if (value >= 0) {
if (data[keyP][j] != null) {
data[keyP][j] += value;
} else {
data[keyP][j] = value;
}
} else {
if (data[keyN][j] != null) {
data[keyN][j] += value;
} else {
data[keyN][j] = value;
}
}
if (this.option.scale) {
data[key].push(value);
}
}
}
},
_reformValue: function (scale) {
var smartSteps = require('../util/smartSteps');
var splitNumber = this.option.splitNumber;
if (!scale && this._min >= 0 && this._max >= 0) {
this._min = 0;
}
if (!scale && this._min <= 0 && this._max <= 0) {
this._max = 0;
}
var stepOpt = smartSteps(this._min, this._max, splitNumber);
splitNumber = splitNumber != null ? splitNumber : stepOpt.secs;
this._min = stepOpt.min;
this._max = stepOpt.max;
this._valueList = stepOpt.pnts;
this._reformLabelData();
},
_reformTimeValue: function () {
var splitNumber = this.option.splitNumber != null ? this.option.splitNumber : 5;
var curValue = ecDate.getAutoFormatter(this._min, this._max, splitNumber);
var formatter = curValue.formatter;
var gapValue = curValue.gapValue;
this._valueList = [ecDate.getNewDate(this._min)];
var startGap;
switch (formatter) {
case 'week':
startGap = ecDate.nextMonday(this._min);
break;
case 'month':
startGap = ecDate.nextNthOnMonth(this._min, 1);
break;
case 'quarter':
startGap = ecDate.nextNthOnQuarterYear(this._min, 1);
break;
case 'half-year':
startGap = ecDate.nextNthOnHalfYear(this._min, 1);
break;
case 'year':
startGap = ecDate.nextNthOnYear(this._min, 1);
break;
default:
if (gapValue <= 3600000 * 2) {
startGap = (Math.floor(this._min / gapValue) + 1) * gapValue;
} else {
startGap = ecDate.getNewDate(this._min - -gapValue);
startGap.setHours(Math.round(startGap.getHours() / 6) * 6);
startGap.setMinutes(0);
startGap.setSeconds(0);
}
break;
}
if (startGap - this._min < gapValue / 2) {
startGap -= -gapValue;
}
curValue = ecDate.getNewDate(startGap);
splitNumber *= 1.5;
while (splitNumber-- >= 0) {
if (formatter == 'month' || formatter == 'quarter' || formatter == 'half-year' || formatter == 'year') {
curValue.setDate(1);
}
if (this._max - curValue < gapValue / 2) {
break;
}
this._valueList.push(curValue);
curValue = ecDate.getNewDate(curValue - -gapValue);
}
this._valueList.push(ecDate.getNewDate(this._max));
this._reformLabelData(function (formatterStr) {
return function (value) {
return ecDate.format(formatterStr, value);
};
}(formatter));
},
_customerValue: function () {
var accMath = require('../util/accMath');
var splitNumber = this.option.splitNumber != null ? this.option.splitNumber : 5;
var splitGap = (this._max - this._min) / splitNumber;
this._valueList = [];
for (var i = 0; i <= splitNumber; i++) {
this._valueList.push(accMath.accAdd(this._min, accMath.accMul(splitGap, i)));
}
this._reformLabelData();
},
_reformLogValue: function () {
var thisOption = this.option;
var result = require('../util/smartLogSteps')({
dataMin: this._min,
dataMax: this._max,
logPositive: thisOption.logPositive,
logLabelBase: thisOption.logLabelBase,
splitNumber: thisOption.splitNumber
});
this._min = result.dataMin;
this._max = result.dataMax;
this._valueList = result.tickList;
this._dataMappingMethods = result.dataMappingMethods;
this._reformLabelData(result.labelFormatter);
},
_reformLabelData: function (innerFormatter) {
this._valueLabel = [];
var formatter = this.option.axisLabel.formatter;
if (formatter) {
for (var i = 0, l = this._valueList.length; i < l; i++) {
if (typeof formatter === 'function') {
this._valueLabel.push(innerFormatter ? formatter.call(this.myChart, this._valueList[i], innerFormatter) : formatter.call(this.myChart, this._valueList[i]));
} else if (typeof formatter === 'string') {
this._valueLabel.push(innerFormatter ? ecDate.format(formatter, this._valueList[i]) : formatter.replace('{value}', this._valueList[i]));
}
}
} else {
for (var i = 0, l = this._valueList.length; i < l; i++) {
this._valueLabel.push(innerFormatter ? innerFormatter(this._valueList[i]) : this.numAddCommas(this._valueList[i]));
}
}
},
getExtremum: function () {
this._calculateValue();
var dataMappingMethods = this._dataMappingMethods;
return {
min: this._min,
max: this._max,
dataMappingMethods: dataMappingMethods ? zrUtil.merge({}, dataMappingMethods) : null
};
},
refresh: function (newOption, newSeries) {
if (newOption) {
this.option = this.reformOption(newOption);
this.option.axisLabel.textStyle = zrUtil.merge(this.option.axisLabel.textStyle || {}, this.ecTheme.textStyle);
this.series = newSeries;
}
if (this.zr) {
this.clear();
this._buildShape();
}
},
getCoord: function (value) {
if (this._dataMappingMethods) {
value = this._dataMappingMethods.value2Coord(value);
}
value = value < this._min ? this._min : value;
value = value > this._max ? this._max : value;
var result;
if (!this.isHorizontal()) {
result = this.grid.getYend() - (value - this._min) / (this._max - this._min) * this.grid.getHeight();
} else {
result = this.grid.getX() + (value - this._min) / (this._max - this._min) * this.grid.getWidth();
}
return result;
},
getCoordSize: function (value) {
if (!this.isHorizontal()) {
return Math.abs(value / (this._max - this._min) * this.grid.getHeight());
} else {
return Math.abs(value / (this._max - this._min) * this.grid.getWidth());
}
},
getValueFromCoord: function (coord) {
var result;
if (!this.isHorizontal()) {
coord = coord < this.grid.getY() ? this.grid.getY() : coord;
coord = coord > this.grid.getYend() ? this.grid.getYend() : coord;
result = this._max - (coord - this.grid.getY()) / this.grid.getHeight() * (this._max - this._min);
} else {
coord = coord < this.grid.getX() ? this.grid.getX() : coord;
coord = coord > this.grid.getXend() ? this.grid.getXend() : coord;
result = this._min + (coord - this.grid.getX()) / this.grid.getWidth() * (this._max - this._min);
}
if (this._dataMappingMethods) {
result = this._dataMappingMethods.coord2Value(result);
}
return result.toFixed(2) - 0;
},
isMaindAxis: function (value) {
for (var i = 0, l = this._valueList.length; i < l; i++) {
if (this._valueList[i] === value) {
return true;
}
}
return false;
}
};
zrUtil.inherits(ValueAxis, Base);
require('../component').define('valueAxis', ValueAxis);
return ValueAxis;
});define('echarts/util/date', [], function () {
var _timeGap = [
{
formatter: 'hh : mm : ss',
value: 1000
},
{
formatter: 'hh : mm : ss',
value: 1000 * 5
},
{
formatter: 'hh : mm : ss',
value: 1000 * 10
},
{
formatter: 'hh : mm : ss',
value: 1000 * 15
},
{
formatter: 'hh : mm : ss',
value: 1000 * 30
},
{
formatter: 'hh : mm\nMM - dd',
value: 60000
},
{
formatter: 'hh : mm\nMM - dd',
value: 60000 * 5
},
{
formatter: 'hh : mm\nMM - dd',
value: 60000 * 10
},
{
formatter: 'hh : mm\nMM - dd',
value: 60000 * 15
},
{
formatter: 'hh : mm\nMM - dd',
value: 60000 * 30
},
{
formatter: 'hh : mm\nMM - dd',
value: 3600000
},
{
formatter: 'hh : mm\nMM - dd',
value: 3600000 * 2
},
{
formatter: 'hh : mm\nMM - dd',
value: 3600000 * 6
},
{
formatter: 'hh : mm\nMM - dd',
value: 3600000 * 12
},
{
formatter: 'MM - dd\nyyyy',
value: 3600000 * 24
},
{
formatter: 'week',
value: 3600000 * 24 * 7
},
{
formatter: 'month',
value: 3600000 * 24 * 31
},
{
formatter: 'quarter',
value: 3600000 * 24 * 380 / 4
},
{
formatter: 'half-year',
value: 3600000 * 24 * 380 / 2
},
{
formatter: 'year',
value: 3600000 * 24 * 380
}
];
function getAutoFormatter(min, max, splitNumber) {
splitNumber = splitNumber > 1 ? splitNumber : 2;
var curValue;
var totalGap;
var formatter;
var gapValue;
for (var i = 0, l = _timeGap.length; i < l; i++) {
curValue = _timeGap[i].value;
totalGap = Math.ceil(max / curValue) * curValue - Math.floor(min / curValue) * curValue;
if (Math.round(totalGap / curValue) <= splitNumber * 1.2) {
formatter = _timeGap[i].formatter;
gapValue = _timeGap[i].value;
break;
}
}
if (formatter == null) {
formatter = 'year';
curValue = 3600000 * 24 * 367;
totalGap = Math.ceil(max / curValue) * curValue - Math.floor(min / curValue) * curValue;
gapValue = Math.round(totalGap / (splitNumber - 1) / curValue) * curValue;
}
return {
formatter: formatter,
gapValue: gapValue
};
}
function s2d(v) {
return v < 10 ? '0' + v : v;
}
function format(formatter, value) {
if (formatter == 'week' || formatter == 'month' || formatter == 'quarter' || formatter == 'half-year' || formatter == 'year') {
formatter = 'MM - dd\nyyyy';
}
var date = getNewDate(value);
var y = date.getFullYear();
var M = date.getMonth() + 1;
var d = date.getDate();
var h = date.getHours();
var m = date.getMinutes();
var s = date.getSeconds();
formatter = formatter.replace('MM', s2d(M));
formatter = formatter.toLowerCase();
formatter = formatter.replace('yyyy', y);
formatter = formatter.replace('yy', y % 100);
formatter = formatter.replace('dd', s2d(d));
formatter = formatter.replace('d', d);
formatter = formatter.replace('hh', s2d(h));
formatter = formatter.replace('h', h);
formatter = formatter.replace('mm', s2d(m));
formatter = formatter.replace('m', m);
formatter = formatter.replace('ss', s2d(s));
formatter = formatter.replace('s', s);
return formatter;
}
function nextMonday(value) {
value = getNewDate(value);
value.setDate(value.getDate() + 8 - value.getDay());
return value;
}
function nextNthPerNmonth(value, nth, nmon) {
value = getNewDate(value);
value.setMonth(Math.ceil((value.getMonth() + 1) / nmon) * nmon);
value.setDate(nth);
return value;
}
function nextNthOnMonth(value, nth) {
return nextNthPerNmonth(value, nth, 1);
}
function nextNthOnQuarterYear(value, nth) {
return nextNthPerNmonth(value, nth, 3);
}
function nextNthOnHalfYear(value, nth) {
return nextNthPerNmonth(value, nth, 6);
}
function nextNthOnYear(value, nth) {
return nextNthPerNmonth(value, nth, 12);
}
function getNewDate(value) {
return value instanceof Date ? value : new Date(typeof value == 'string' ? value.replace(/-/g, '/') : value);
}
return {
getAutoFormatter: getAutoFormatter,
getNewDate: getNewDate,
format: format,
nextMonday: nextMonday,
nextNthPerNmonth: nextNthPerNmonth,
nextNthOnMonth: nextNthOnMonth,
nextNthOnQuarterYear: nextNthOnQuarterYear,
nextNthOnHalfYear: nextNthOnHalfYear,
nextNthOnYear: nextNthOnYear
};
});define('echarts/util/smartSteps', [], function () {
var mySteps = [
10,
20,
25,
50
];
var mySections = [
4,
5,
6
];
var custOpts;
var custSteps;
var custSecs;
var minLocked;
var maxLocked;
var MT = Math;
var MATH_ROUND = MT.round;
var MATH_FLOOR = MT.floor;
var MATH_CEIL = MT.ceil;
var MATH_ABS = MT.abs;
function MATH_LOG(n) {
return MT.log(MATH_ABS(n)) / MT.LN10;
}
function MATH_POW(n) {
return MT.pow(10, n);
}
function MATH_ISINT(n) {
return n === MATH_FLOOR(n);
}
function smartSteps(min, max, section, opts) {
custOpts = opts || {};
custSteps = custOpts.steps || mySteps;
custSecs = custOpts.secs || mySections;
section = MATH_ROUND(+section || 0) % 99;
min = +min || 0;
max = +max || 0;
minLocked = maxLocked = 0;
if ('min' in custOpts) {
min = +custOpts.min || 0;
minLocked = 1;
}
if ('max' in custOpts) {
max = +custOpts.max || 0;
maxLocked = 1;
}
if (min > max) {
max = [
min,
min = max
][0];
}
var span = max - min;
if (minLocked && maxLocked) {
return bothLocked(min, max, section);
}
if (span < (section || 5)) {
if (MATH_ISINT(min) && MATH_ISINT(max)) {
return forInteger(min, max, section);
} else if (span === 0) {
return forSpan0(min, max, section);
}
}
return coreCalc(min, max, section);
}
function makeResult(newMin, newMax, section, expon) {
expon = expon || 0;
var expStep = expNum((newMax - newMin) / section, -1);
var expMin = expNum(newMin, -1, 1);
var expMax = expNum(newMax, -1);
var minExp = MT.min(expStep.e, expMin.e, expMax.e);
if (expMin.c === 0) {
minExp = MT.min(expStep.e, expMax.e);
} else if (expMax.c === 0) {
minExp = MT.min(expStep.e, expMin.e);
}
expFixTo(expStep, {
c: 0,
e: minExp
});
expFixTo(expMin, expStep, 1);
expFixTo(expMax, expStep);
expon += minExp;
newMin = expMin.c;
newMax = expMax.c;
var step = (newMax - newMin) / section;
var zoom = MATH_POW(expon);
var fixTo = 0;
var points = [];
for (var i = section + 1; i--;) {
points[i] = (newMin + step * i) * zoom;
}
if (expon < 0) {
fixTo = decimals(zoom);
step = +(step * zoom).toFixed(fixTo);
newMin = +(newMin * zoom).toFixed(fixTo);
newMax = +(newMax * zoom).toFixed(fixTo);
for (var i = points.length; i--;) {
points[i] = points[i].toFixed(fixTo);
+points[i] === 0 && (points[i] = '0');
}
} else {
newMin *= zoom;
newMax *= zoom;
step *= zoom;
}
custSecs = 0;
custSteps = 0;
custOpts = 0;
return {
min: newMin,
max: newMax,
secs: section,
step: step,
fix: fixTo,
exp: expon,
pnts: points
};
}
function expNum(num, digit, byFloor) {
digit = MATH_ROUND(digit % 10) || 2;
if (digit < 0) {
if (MATH_ISINT(num)) {
digit = ('' + MATH_ABS(num)).replace(/0+$/, '').length || 1;
} else {
num = num.toFixed(15).replace(/0+$/, '');
digit = num.replace('.', '').replace(/^[-0]+/, '').length;
num = +num;
}
}
var expon = MATH_FLOOR(MATH_LOG(num)) - digit + 1;
var cNum = +(num * MATH_POW(-expon)).toFixed(15) || 0;
cNum = byFloor ? MATH_FLOOR(cNum) : MATH_CEIL(cNum);
!cNum && (expon = 0);
if (('' + MATH_ABS(cNum)).length > digit) {
expon += 1;
cNum /= 10;
}
return {
c: cNum,
e: expon
};
}
function expFixTo(expnum1, expnum2, byFloor) {
var deltaExp = expnum2.e - expnum1.e;
if (deltaExp) {
expnum1.e += deltaExp;
expnum1.c *= MATH_POW(-deltaExp);
expnum1.c = byFloor ? MATH_FLOOR(expnum1.c) : MATH_CEIL(expnum1.c);
}
}
function expFixMin(expnum1, expnum2, byFloor) {
if (expnum1.e < expnum2.e) {
expFixTo(expnum2, expnum1, byFloor);
} else {
expFixTo(expnum1, expnum2, byFloor);
}
}
function getCeil(num, rounds) {
rounds = rounds || mySteps;
num = expNum(num);
var cNum = num.c;
var i = 0;
while (cNum > rounds[i]) {
i++;
}
if (!rounds[i]) {
cNum /= 10;
num.e += 1;
i = 0;
while (cNum > rounds[i]) {
i++;
}
}
num.c = rounds[i];
return num;
}
function coreCalc(min, max, section) {
var step;
var secs = section || +custSecs.slice(-1);
var expStep = getCeil((max - min) / secs, custSteps);
var expSpan = expNum(max - min);
var expMin = expNum(min, -1, 1);
var expMax = expNum(max, -1);
expFixTo(expSpan, expStep);
expFixTo(expMin, expStep, 1);
expFixTo(expMax, expStep);
if (!section) {
secs = look4sections(expMin, expMax);
} else {
step = look4step(expMin, expMax, secs);
}
if (MATH_ISINT(min) && MATH_ISINT(max) && min * max >= 0) {
if (max - min < secs) {
return forInteger(min, max, secs);
}
secs = tryForInt(min, max, section, expMin, expMax, secs);
}
var arrMM = cross0(min, max, expMin.c, expMax.c);
expMin.c = arrMM[0];
expMax.c = arrMM[1];
if (minLocked || maxLocked) {
singleLocked(min, max, expMin, expMax);
}
return makeResult(expMin.c, expMax.c, secs, expMax.e);
}
function look4sections(expMin, expMax) {
var section;
var tmpStep, tmpMin, tmpMax;
var reference = [];
for (var i = custSecs.length; i--;) {
section = custSecs[i];
tmpStep = getCeil((expMax.c - expMin.c) / section, custSteps);
tmpStep = tmpStep.c * MATH_POW(tmpStep.e);
tmpMin = MATH_FLOOR(expMin.c / tmpStep) * tmpStep;
tmpMax = MATH_CEIL(expMax.c / tmpStep) * tmpStep;
reference[i] = {
min: tmpMin,
max: tmpMax,
step: tmpStep,
span: tmpMax - tmpMin
};
}
reference.sort(function (a, b) {
var delta = a.span - b.span;
if (delta === 0) {
delta = a.step - b.step;
}
return delta;
});
reference = reference[0];
section = reference.span / reference.step;
expMin.c = reference.min;
expMax.c = reference.max;
return section < 3 ? section * 2 : section;
}
function look4step(expMin, expMax, secs) {
var span;
var tmpMax;
var tmpMin = expMax.c;
var tmpStep = (expMax.c - expMin.c) / secs - 1;
while (tmpMin > expMin.c) {
tmpStep = getCeil(tmpStep + 1, custSteps);
tmpStep = tmpStep.c * MATH_POW(tmpStep.e);
span = tmpStep * secs;
tmpMax = MATH_CEIL(expMax.c / tmpStep) * tmpStep;
tmpMin = tmpMax - span;
}
var deltaMin = expMin.c - tmpMin;
var deltaMax = tmpMax - expMax.c;
var deltaDelta = deltaMin - deltaMax;
if (deltaDelta > tmpStep * 1.1) {
deltaDelta = MATH_ROUND(deltaDelta / tmpStep / 2) * tmpStep;
tmpMin += deltaDelta;
tmpMax += deltaDelta;
}
expMin.c = tmpMin;
expMax.c = tmpMax;
return tmpStep;
}
function tryForInt(min, max, section, expMin, expMax, secs) {
var span = expMax.c - expMin.c;
var step = span / secs * MATH_POW(expMax.e);
if (!MATH_ISINT(step)) {
step = MATH_FLOOR(step);
span = step * secs;
if (span < max - min) {
step += 1;
span = step * secs;
if (!section && step * (secs - 1) >= max - min) {
secs -= 1;
span = step * secs;
}
}
if (span >= max - min) {
var delta = span - (max - min);
expMin.c = MATH_ROUND(min - delta / 2);
expMax.c = MATH_ROUND(max + delta / 2);
expMin.e = 0;
expMax.e = 0;
}
}
return secs;
}
function forInteger(min, max, section) {
section = section || 5;
if (minLocked) {
max = min + section;
} else if (maxLocked) {
min = max - section;
} else {
var delta = section - (max - min);
var newMin = MATH_ROUND(min - delta / 2);
var newMax = MATH_ROUND(max + delta / 2);
var arrMM = cross0(min, max, newMin, newMax);
min = arrMM[0];
max = arrMM[1];
}
return makeResult(min, max, section);
}
function forSpan0(min, max, section) {
section = section || 5;
var delta = MT.min(MATH_ABS(max / section), section) / 2.1;
if (minLocked) {
max = min + delta;
} else if (maxLocked) {
min = max - delta;
} else {
min = min - delta;
max = max + delta;
}
return coreCalc(min, max, section);
}
function cross0(min, max, newMin, newMax) {
if (min >= 0 && newMin < 0) {
newMax -= newMin;
newMin = 0;
} else if (max <= 0 && newMax > 0) {
newMin -= newMax;
newMax = 0;
}
return [
newMin,
newMax
];
}
function decimals(num) {
num = (+num).toFixed(15).split('.');
return num.pop().replace(/0+$/, '').length;
}
function singleLocked(min, max, emin, emax) {
if (minLocked) {
var expMin = expNum(min, 4, 1);
if (emin.e - expMin.e > 6) {
expMin = {
c: 0,
e: emin.e
};
}
expFixMin(emin, expMin);
expFixMin(emax, expMin);
emax.c += expMin.c - emin.c;
emin.c = expMin.c;
} else if (maxLocked) {
var expMax = expNum(max, 4);
if (emax.e - expMax.e > 6) {
expMax = {
c: 0,
e: emax.e
};
}
expFixMin(emin, expMax);
expFixMin(emax, expMax);
emin.c += expMax.c - emax.c;
emax.c = expMax.c;
}
}
function bothLocked(min, max, section) {
var trySecs = section ? [section] : custSecs;
var span = max - min;
if (span === 0) {
max = expNum(max, 3);
section = trySecs[0];
max.c = MATH_ROUND(max.c + section / 2);
return makeResult(max.c - section, max.c, section, max.e);
}
if (MATH_ABS(max / span) < 0.000001) {
max = 0;
}
if (MATH_ABS(min / span) < 0.000001) {
min = 0;
}
var step, deltaSpan, score;
var scoreS = [
[
5,
10
],
[
10,
2
],
[
50,
10
],
[
100,
2
]
];
var reference = [];
var debugLog = [];
var expSpan = expNum(max - min, 3);
var expMin = expNum(min, -1, 1);
var expMax = expNum(max, -1);
expFixTo(expMin, expSpan, 1);
expFixTo(expMax, expSpan);
span = expMax.c - expMin.c;
expSpan.c = span;
for (var i = trySecs.length; i--;) {
section = trySecs[i];
step = MATH_CEIL(span / section);
deltaSpan = step * section - span;
score = (deltaSpan + 3) * 3;
score += (section - trySecs[0] + 2) * 2;
if (section % 5 === 0) {
score -= 10;
}
for (var j = scoreS.length; j--;) {
if (step % scoreS[j][0] === 0) {
score /= scoreS[j][1];
}
}
debugLog[i] = [
section,
step,
deltaSpan,
score
].join();
reference[i] = {
secs: section,
step: step,
delta: deltaSpan,
score: score
};
}
reference.sort(function (a, b) {
return a.score - b.score;
});
reference = reference[0];
expMin.c = MATH_ROUND(expMin.c - reference.delta / 2);
expMax.c = MATH_ROUND(expMax.c + reference.delta / 2);
return makeResult(expMin.c, expMax.c, reference.secs, expSpan.e);
}
return smartSteps;
});define('echarts/util/smartLogSteps', [
'require',
'./number'
], function (require) {
var number = require('./number');
var Mt = Math;
var mathLog = Mt.log;
var mathPow = Mt.pow;
var mathAbs = Mt.abs;
var mathCeil = Mt.ceil;
var mathFloor = Mt.floor;
var LOG_BASE = Mt.E;
var LN10 = Mt.LN10;
var LN2 = Mt.LN2;
var LN2D10 = LN2 / LN10;
var EPSILON = 1e-9;
var DEFAULT_SPLIT_NUMBER = 5;
var MIN_BASE_10_SPLIT_NUMBER = 2;
var SUPERSCRIPTS = {
'0': '⁰',
'1': '¹',
'2': '²',
'3': '³',
'4': '⁴',
'5': '⁵',
'6': '⁶',
'7': '⁷',
'8': '⁸',
'9': '⁹',
'-': '⁻'
};
var logPositive;
var logLabelBase;
var logLabelMode;
var lnBase;
var custOpts;
var splitNumber;
var logMappingOffset;
var absMin;
var absMax;
var tickList;
function smartLogSteps(opts) {
clearStaticVariables();
custOpts = opts || {};
reformSetting();
makeTicksList();
return [
makeResult(),
clearStaticVariables()
][0];
}
function clearStaticVariables() {
logPositive = custOpts = logMappingOffset = lnBase = absMin = absMax = splitNumber = tickList = logLabelBase = logLabelMode = null;
}
function reformSetting() {
logLabelBase = custOpts.logLabelBase;
if (logLabelBase == null) {
logLabelMode = 'plain';
logLabelBase = 10;
lnBase = LN10;
} else {
logLabelBase = +logLabelBase;
if (logLabelBase < 1) {
logLabelBase = 10;
}
logLabelMode = 'exponent';
lnBase = mathLog(logLabelBase);
}
splitNumber = custOpts.splitNumber;
splitNumber == null && (splitNumber = DEFAULT_SPLIT_NUMBER);
var dataMin = parseFloat(custOpts.dataMin);
var dataMax = parseFloat(custOpts.dataMax);
if (!isFinite(dataMin) && !isFinite(dataMax)) {
dataMin = dataMax = 1;
} else if (!isFinite(dataMin)) {
dataMin = dataMax;
} else if (!isFinite(dataMax)) {
dataMax = dataMin;
} else if (dataMin > dataMax) {
dataMax = [
dataMin,
dataMin = dataMax
][0];
}
logPositive = custOpts.logPositive;
if (logPositive == null) {
logPositive = dataMax > 0 || dataMin === 0;
}
absMin = logPositive ? dataMin : -dataMax;
absMax = logPositive ? dataMax : -dataMin;
absMin < EPSILON && (absMin = EPSILON);
absMax < EPSILON && (absMax = EPSILON);
}
function makeTicksList() {
tickList = [];
var maxDataLog = fixAccurate(mathLog(absMax) / lnBase);
var minDataLog = fixAccurate(mathLog(absMin) / lnBase);
var maxExpon = mathCeil(maxDataLog);
var minExpon = mathFloor(minDataLog);
var spanExpon = maxExpon - minExpon;
var spanDataLog = maxDataLog - minDataLog;
if (logLabelMode === 'exponent') {
baseAnalysis();
} else {
!(spanExpon <= MIN_BASE_10_SPLIT_NUMBER && splitNumber > MIN_BASE_10_SPLIT_NUMBER) ? baseAnalysis() : detailAnalysis();
}
function baseAnalysis() {
if (spanExpon < splitNumber) {
splitNumber = spanExpon;
}
var stepExpon = mathFloor(fixAccurate(spanExpon / splitNumber));
var splitNumberAdjust = mathCeil(fixAccurate(spanExpon / stepExpon));
var spanExponAdjust = stepExpon * splitNumberAdjust;
var halfDiff = (spanExponAdjust - spanDataLog) / 2;
var minExponAdjust = mathFloor(fixAccurate(minDataLog - halfDiff));
if (aroundZero(minExponAdjust - minDataLog)) {
minExponAdjust -= 1;
}
logMappingOffset = -minExponAdjust * lnBase;
for (var n = minExponAdjust; n - stepExpon <= maxDataLog; n += stepExpon) {
tickList.push(mathPow(logLabelBase, n));
}
}
function detailAnalysis() {
var minDecimal = toDecimalFrom4Hex(minExpon, 0);
var endDecimal = minDecimal + 2;
while (minDecimal < endDecimal && toH(minDecimal + 1) + toK(minDecimal + 1) * LN2D10 < minDataLog) {
minDecimal++;
}
var maxDecimal = toDecimalFrom4Hex(maxExpon, 0);
var endDecimal = maxDecimal - 2;
while (maxDecimal > endDecimal && toH(maxDecimal - 1) + toK(maxDecimal - 1) * LN2D10 > maxDataLog) {
maxDecimal--;
}
logMappingOffset = -(toH(minDecimal) * LN10 + toK(minDecimal) * LN2);
for (var i = minDecimal; i <= maxDecimal; i++) {
var h = toH(i);
var k = toK(i);
tickList.push(mathPow(10, h) * mathPow(2, k));
}
}
function toDecimalFrom4Hex(h, k) {
return h * 3 + k;
}
function toK(decimal) {
return decimal - toH(decimal) * 3;
}
function toH(decimal) {
return mathFloor(fixAccurate(decimal / 3));
}
}
function makeResult() {
var resultTickList = [];
for (var i = 0, len = tickList.length; i < len; i++) {
resultTickList[i] = (logPositive ? 1 : -1) * tickList[i];
}
!logPositive && resultTickList.reverse();
var dataMappingMethods = makeDataMappingMethods();
var value2Coord = dataMappingMethods.value2Coord;
var newDataMin = value2Coord(resultTickList[0]);
var newDataMax = value2Coord(resultTickList[resultTickList.length - 1]);
if (newDataMin === newDataMax) {
newDataMin -= 1;
newDataMax += 1;
}
return {
dataMin: newDataMin,
dataMax: newDataMax,
tickList: resultTickList,
logPositive: logPositive,
labelFormatter: makeLabelFormatter(),
dataMappingMethods: dataMappingMethods
};
}
function makeLabelFormatter() {
if (logLabelMode === 'exponent') {
var myLogLabelBase = logLabelBase;
var myLnBase = lnBase;
return function (value) {
if (!isFinite(parseFloat(value))) {
return '';
}
var sign = '';
if (value < 0) {
value = -value;
sign = '-';
}
return sign + myLogLabelBase + makeSuperscriptExponent(mathLog(value) / myLnBase);
};
} else {
return function (value) {
if (!isFinite(parseFloat(value))) {
return '';
}
return number.addCommas(formatNumber(value));
};
}
}
function makeDataMappingMethods() {
var myLogPositive = logPositive;
var myLogMappingOffset = logMappingOffset;
return {
value2Coord: function (x) {
if (x == null || isNaN(x) || !isFinite(x)) {
return x;
}
x = parseFloat(x);
if (!isFinite(x)) {
x = EPSILON;
} else if (myLogPositive && x < EPSILON) {
x = EPSILON;
} else if (!myLogPositive && x > -EPSILON) {
x = -EPSILON;
}
x = mathAbs(x);
return (myLogPositive ? 1 : -1) * (mathLog(x) + myLogMappingOffset);
},
coord2Value: function (x) {
if (x == null || isNaN(x) || !isFinite(x)) {
return x;
}
x = parseFloat(x);
if (!isFinite(x)) {
x = EPSILON;
}
return myLogPositive ? mathPow(LOG_BASE, x - myLogMappingOffset) : -mathPow(LOG_BASE, -x + myLogMappingOffset);
}
};
}
function fixAccurate(result) {
return +Number(+result).toFixed(14);
}
function formatNumber(num) {
return Number(num).toFixed(15).replace(/\.?0*$/, '');
}
function makeSuperscriptExponent(exponent) {
exponent = formatNumber(Math.round(exponent));
var result = [];
for (var i = 0, len = exponent.length; i < len; i++) {
var cha = exponent.charAt(i);
result.push(SUPERSCRIPTS[cha] || '');
}
return result.join('');
}
function aroundZero(val) {
return val > -EPSILON && val < EPSILON;
}
return smartLogSteps;
});define('echarts/chart/line', [
'require',
'./base',
'zrender/shape/Polyline',
'../util/shape/Icon',
'../util/shape/HalfSmoothPolygon',
'../component/axis',
'../component/grid',
'../component/dataZoom',
'../config',
'../util/ecData',
'zrender/tool/util',
'zrender/tool/color',
'../chart'
], function (require) {
var ChartBase = require('./base');
var PolylineShape = require('zrender/shape/Polyline');
var IconShape = require('../util/shape/Icon');
var HalfSmoothPolygonShape = require('../util/shape/HalfSmoothPolygon');
require('../component/axis');
require('../component/grid');
require('../component/dataZoom');
var ecConfig = require('../config');
ecConfig.line = {
zlevel: 0,
z: 2,
clickable: true,
legendHoverLink: true,
xAxisIndex: 0,
yAxisIndex: 0,
dataFilter: 'nearest',
itemStyle: {
normal: {
label: { show: false },
lineStyle: {
width: 2,
type: 'solid',
shadowColor: 'rgba(0,0,0,0)',
shadowBlur: 0,
shadowOffsetX: 0,
shadowOffsetY: 0
}
},
emphasis: { label: { show: false } }
},
symbolSize: 2,
showAllSymbol: false
};
var ecData = require('../util/ecData');
var zrUtil = require('zrender/tool/util');
var zrColor = require('zrender/tool/color');
function Line(ecTheme, messageCenter, zr, option, myChart) {
ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
this.refresh(option);
}
Line.prototype = {
type: ecConfig.CHART_TYPE_LINE,
_buildShape: function () {
this.finalPLMap = {};
this._buildPosition();
},
_buildHorizontal: function (seriesArray, maxDataLength, locationMap, xMarkMap) {
var series = this.series;
var seriesIndex = locationMap[0][0];
var serie = series[seriesIndex];
var categoryAxis = this.component.xAxis.getAxis(serie.xAxisIndex || 0);
var valueAxis;
var x;
var y;
var lastYP;
var baseYP;
var lastYN;
var baseYN;
var curPLMap = {};
var data;
var value;
for (var i = 0, l = maxDataLength; i < l; i++) {
if (categoryAxis.getNameByIndex(i) == null) {
break;
}
x = categoryAxis.getCoordByIndex(i);
for (var j = 0, k = locationMap.length; j < k; j++) {
valueAxis = this.component.yAxis.getAxis(series[locationMap[j][0]].yAxisIndex || 0);
baseYP = lastYP = baseYN = lastYN = valueAxis.getCoord(0);
for (var m = 0, n = locationMap[j].length; m < n; m++) {
seriesIndex = locationMap[j][m];
serie = series[seriesIndex];
data = serie.data[i];
value = this.getDataFromOption(data, '-');
curPLMap[seriesIndex] = curPLMap[seriesIndex] || [];
xMarkMap[seriesIndex] = xMarkMap[seriesIndex] || {
min: Number.POSITIVE_INFINITY,
max: Number.NEGATIVE_INFINITY,
sum: 0,
counter: 0,
average: 0
};
if (value === '-') {
if (curPLMap[seriesIndex].length > 0) {
this.finalPLMap[seriesIndex] = this.finalPLMap[seriesIndex] || [];
this.finalPLMap[seriesIndex].push(curPLMap[seriesIndex]);
curPLMap[seriesIndex] = [];
}
continue;
}
if (value >= 0) {
lastYP -= m > 0 ? valueAxis.getCoordSize(value) : baseYP - valueAxis.getCoord(value);
y = lastYP;
} else if (value < 0) {
lastYN += m > 0 ? valueAxis.getCoordSize(value) : valueAxis.getCoord(value) - baseYN;
y = lastYN;
}
curPLMap[seriesIndex].push([
x,
y,
i,
categoryAxis.getNameByIndex(i),
x,
baseYP
]);
if (xMarkMap[seriesIndex].min > value) {
xMarkMap[seriesIndex].min = value;
xMarkMap[seriesIndex].minY = y;
xMarkMap[seriesIndex].minX = x;
}
if (xMarkMap[seriesIndex].max < value) {
xMarkMap[seriesIndex].max = value;
xMarkMap[seriesIndex].maxY = y;
xMarkMap[seriesIndex].maxX = x;
}
xMarkMap[seriesIndex].sum += value;
xMarkMap[seriesIndex].counter++;
}
}
lastYP = this.component.grid.getY();
var symbolSize;
for (var j = 0, k = locationMap.length; j < k; j++) {
for (var m = 0, n = locationMap[j].length; m < n; m++) {
seriesIndex = locationMap[j][m];
serie = series[seriesIndex];
data = serie.data[i];
value = this.getDataFromOption(data, '-');
if (value != '-') {
continue;
}
if (this.deepQuery([
data,
serie,
this.option
], 'calculable')) {
symbolSize = this.deepQuery([
data,
serie
], 'symbolSize');
lastYP += symbolSize * 2 + 5;
y = lastYP;
this.shapeList.push(this._getCalculableItem(seriesIndex, i, categoryAxis.getNameByIndex(i), x, y, 'horizontal'));
}
}
}
}
for (var sId in curPLMap) {
if (curPLMap[sId].length > 0) {
this.finalPLMap[sId] = this.finalPLMap[sId] || [];
this.finalPLMap[sId].push(curPLMap[sId]);
curPLMap[sId] = [];
}
}
this._calculMarkMapXY(xMarkMap, locationMap, 'y');
this._buildBorkenLine(seriesArray, this.finalPLMap, categoryAxis, 'horizontal');
},
_buildVertical: function (seriesArray, maxDataLength, locationMap, xMarkMap) {
var series = this.series;
var seriesIndex = locationMap[0][0];
var serie = series[seriesIndex];
var categoryAxis = this.component.yAxis.getAxis(serie.yAxisIndex || 0);
var valueAxis;
var x;
var y;
var lastXP;
var baseXP;
var lastXN;
var baseXN;
var curPLMap = {};
var data;
var value;
for (var i = 0, l = maxDataLength; i < l; i++) {
if (categoryAxis.getNameByIndex(i) == null) {
break;
}
y = categoryAxis.getCoordByIndex(i);
for (var j = 0, k = locationMap.length; j < k; j++) {
valueAxis = this.component.xAxis.getAxis(series[locationMap[j][0]].xAxisIndex || 0);
baseXP = lastXP = baseXN = lastXN = valueAxis.getCoord(0);
for (var m = 0, n = locationMap[j].length; m < n; m++) {
seriesIndex = locationMap[j][m];
serie = series[seriesIndex];
data = serie.data[i];
value = this.getDataFromOption(data, '-');
curPLMap[seriesIndex] = curPLMap[seriesIndex] || [];
xMarkMap[seriesIndex] = xMarkMap[seriesIndex] || {
min: Number.POSITIVE_INFINITY,
max: Number.NEGATIVE_INFINITY,
sum: 0,
counter: 0,
average: 0
};
if (value === '-') {
if (curPLMap[seriesIndex].length > 0) {
this.finalPLMap[seriesIndex] = this.finalPLMap[seriesIndex] || [];
this.finalPLMap[seriesIndex].push(curPLMap[seriesIndex]);
curPLMap[seriesIndex] = [];
}
continue;
}
if (value >= 0) {
lastXP += m > 0 ? valueAxis.getCoordSize(value) : valueAxis.getCoord(value) - baseXP;
x = lastXP;
} else if (value < 0) {
lastXN -= m > 0 ? valueAxis.getCoordSize(value) : baseXN - valueAxis.getCoord(value);
x = lastXN;
}
curPLMap[seriesIndex].push([
x,
y,
i,
categoryAxis.getNameByIndex(i),
baseXP,
y
]);
if (xMarkMap[seriesIndex].min > value) {
xMarkMap[seriesIndex].min = value;
xMarkMap[seriesIndex].minX = x;
xMarkMap[seriesIndex].minY = y;
}
if (xMarkMap[seriesIndex].max < value) {
xMarkMap[seriesIndex].max = value;
xMarkMap[seriesIndex].maxX = x;
xMarkMap[seriesIndex].maxY = y;
}
xMarkMap[seriesIndex].sum += value;
xMarkMap[seriesIndex].counter++;
}
}
lastXP = this.component.grid.getXend();
var symbolSize;
for (var j = 0, k = locationMap.length; j < k; j++) {
for (var m = 0, n = locationMap[j].length; m < n; m++) {
seriesIndex = locationMap[j][m];
serie = series[seriesIndex];
data = serie.data[i];
value = this.getDataFromOption(data, '-');
if (value != '-') {
continue;
}
if (this.deepQuery([
data,
serie,
this.option
], 'calculable')) {
symbolSize = this.deepQuery([
data,
serie
], 'symbolSize');
lastXP -= symbolSize * 2 + 5;
x = lastXP;
this.shapeList.push(this._getCalculableItem(seriesIndex, i, categoryAxis.getNameByIndex(i), x, y, 'vertical'));
}
}
}
}
for (var sId in curPLMap) {
if (curPLMap[sId].length > 0) {
this.finalPLMap[sId] = this.finalPLMap[sId] || [];
this.finalPLMap[sId].push(curPLMap[sId]);
curPLMap[sId] = [];
}
}
this._calculMarkMapXY(xMarkMap, locationMap, 'x');
this._buildBorkenLine(seriesArray, this.finalPLMap, categoryAxis, 'vertical');
},
_buildOther: function (seriesArray, maxDataLength, locationMap, xMarkMap) {
var series = this.series;
var curPLMap = {};
var xAxis;
for (var j = 0, k = locationMap.length; j < k; j++) {
for (var m = 0, n = locationMap[j].length; m < n; m++) {
var seriesIndex = locationMap[j][m];
var serie = series[seriesIndex];
xAxis = this.component.xAxis.getAxis(serie.xAxisIndex || 0);
var yAxis = this.component.yAxis.getAxis(serie.yAxisIndex || 0);
var baseY = yAxis.getCoord(0);
curPLMap[seriesIndex] = curPLMap[seriesIndex] || [];
xMarkMap[seriesIndex] = xMarkMap[seriesIndex] || {
min0: Number.POSITIVE_INFINITY,
min1: Number.POSITIVE_INFINITY,
max0: Number.NEGATIVE_INFINITY,
max1: Number.NEGATIVE_INFINITY,
sum0: 0,
sum1: 0,
counter0: 0,
counter1: 0,
average0: 0,
average1: 0
};
for (var i = 0, l = serie.data.length; i < l; i++) {
var data = serie.data[i];
var value = this.getDataFromOption(data, '-');
if (!(value instanceof Array)) {
continue;
}
var x = xAxis.getCoord(value[0]);
var y = yAxis.getCoord(value[1]);
curPLMap[seriesIndex].push([
x,
y,
i,
value[0],
x,
baseY
]);
if (xMarkMap[seriesIndex].min0 > value[0]) {
xMarkMap[seriesIndex].min0 = value[0];
xMarkMap[seriesIndex].minY0 = y;
xMarkMap[seriesIndex].minX0 = x;
}
if (xMarkMap[seriesIndex].max0 < value[0]) {
xMarkMap[seriesIndex].max0 = value[0];
xMarkMap[seriesIndex].maxY0 = y;
xMarkMap[seriesIndex].maxX0 = x;
}
xMarkMap[seriesIndex].sum0 += value[0];
xMarkMap[seriesIndex].counter0++;
if (xMarkMap[seriesIndex].min1 > value[1]) {
xMarkMap[seriesIndex].min1 = value[1];
xMarkMap[seriesIndex].minY1 = y;
xMarkMap[seriesIndex].minX1 = x;
}
if (xMarkMap[seriesIndex].max1 < value[1]) {
xMarkMap[seriesIndex].max1 = value[1];
xMarkMap[seriesIndex].maxY1 = y;
xMarkMap[seriesIndex].maxX1 = x;
}
xMarkMap[seriesIndex].sum1 += value[1];
xMarkMap[seriesIndex].counter1++;
}
}
}
for (var sId in curPLMap) {
if (curPLMap[sId].length > 0) {
this.finalPLMap[sId] = this.finalPLMap[sId] || [];
this.finalPLMap[sId].push(curPLMap[sId]);
curPLMap[sId] = [];
}
}
this._calculMarkMapXY(xMarkMap, locationMap, 'xy');
this._buildBorkenLine(seriesArray, this.finalPLMap, xAxis, 'other');
},
_buildBorkenLine: function (seriesArray, pointList, categoryAxis, curOrient) {
var orient = curOrient == 'other' ? 'horizontal' : curOrient;
var series = this.series;
var data;
for (var sIdx = seriesArray.length - 1; sIdx >= 0; sIdx--) {
var seriesIndex = seriesArray[sIdx];
var serie = series[seriesIndex];
var seriesPL = pointList[seriesIndex];
if (serie.type === this.type && seriesPL != null) {
var bbox = this._getBbox(seriesIndex, orient);
var defaultColor = this._sIndex2ColorMap[seriesIndex];
var lineWidth = this.query(serie, 'itemStyle.normal.lineStyle.width');
var lineType = this.query(serie, 'itemStyle.normal.lineStyle.type');
var lineColor = this.query(serie, 'itemStyle.normal.lineStyle.color');
var normalColor = this.getItemStyleColor(this.query(serie, 'itemStyle.normal.color'), seriesIndex, -1);
var isFill = this.query(serie, 'itemStyle.normal.areaStyle') != null;
var fillNormalColor = this.query(serie, 'itemStyle.normal.areaStyle.color');
for (var i = 0, l = seriesPL.length; i < l; i++) {
var singlePL = seriesPL[i];
var isLarge = curOrient != 'other' && this._isLarge(orient, singlePL);
if (!isLarge) {
for (var j = 0, k = singlePL.length; j < k; j++) {
data = serie.data[singlePL[j][2]];
if (this.deepQuery([
data,
serie,
this.option
], 'calculable') || this.deepQuery([
data,
serie
], 'showAllSymbol') || categoryAxis.type === 'categoryAxis' && categoryAxis.isMainAxis(singlePL[j][2]) && this.deepQuery([
data,
serie
], 'symbol') != 'none') {
this.shapeList.push(this._getSymbol(seriesIndex, singlePL[j][2], singlePL[j][3], singlePL[j][0], singlePL[j][1], orient));
}
}
} else {
singlePL = this._getLargePointList(orient, singlePL, serie.dataFilter);
}
var polylineShape = new PolylineShape({
zlevel: serie.zlevel,
z: serie.z,
style: {
miterLimit: lineWidth,
pointList: singlePL,
strokeColor: lineColor || normalColor || defaultColor,
lineWidth: lineWidth,
lineType: lineType,
smooth: this._getSmooth(serie.smooth),
smoothConstraint: bbox,
shadowColor: this.query(serie, 'itemStyle.normal.lineStyle.shadowColor'),
shadowBlur: this.query(serie, 'itemStyle.normal.lineStyle.shadowBlur'),
shadowOffsetX: this.query(serie, 'itemStyle.normal.lineStyle.shadowOffsetX'),
shadowOffsetY: this.query(serie, 'itemStyle.normal.lineStyle.shadowOffsetY')
},
hoverable: false,
_main: true,
_seriesIndex: seriesIndex,
_orient: orient
});
ecData.pack(polylineShape, series[seriesIndex], seriesIndex, 0, i, series[seriesIndex].name);
this.shapeList.push(polylineShape);
if (isFill) {
var halfSmoothPolygonShape = new HalfSmoothPolygonShape({
zlevel: serie.zlevel,
z: serie.z,
style: {
miterLimit: lineWidth,
pointList: zrUtil.clone(singlePL).concat([
[
singlePL[singlePL.length - 1][4],
singlePL[singlePL.length - 1][5]
],
[
singlePL[0][4],
singlePL[0][5]
]
]),
brushType: 'fill',
smooth: this._getSmooth(serie.smooth),
smoothConstraint: bbox,
color: fillNormalColor ? fillNormalColor : zrColor.alpha(defaultColor, 0.5)
},
highlightStyle: { brushType: 'fill' },
hoverable: false,
_main: true,
_seriesIndex: seriesIndex,
_orient: orient
});
ecData.pack(halfSmoothPolygonShape, series[seriesIndex], seriesIndex, 0, i, series[seriesIndex].name);
this.shapeList.push(halfSmoothPolygonShape);
}
}
}
}
},
_getBbox: function (seriesIndex, orient) {
var bbox = this.component.grid.getBbox();
var xMarkMap = this.xMarkMap[seriesIndex];
if (xMarkMap.minX0 != null) {
return [
[
Math.min(xMarkMap.minX0, xMarkMap.maxX0, xMarkMap.minX1, xMarkMap.maxX1),
Math.min(xMarkMap.minY0, xMarkMap.maxY0, xMarkMap.minY1, xMarkMap.maxY1)
],
[
Math.max(xMarkMap.minX0, xMarkMap.maxX0, xMarkMap.minX1, xMarkMap.maxX1),
Math.max(xMarkMap.minY0, xMarkMap.maxY0, xMarkMap.minY1, xMarkMap.maxY1)
]
];
} else if (orient === 'horizontal') {
bbox[0][1] = Math.min(xMarkMap.minY, xMarkMap.maxY);
bbox[1][1] = Math.max(xMarkMap.minY, xMarkMap.maxY);
} else {
bbox[0][0] = Math.min(xMarkMap.minX, xMarkMap.maxX);
bbox[1][0] = Math.max(xMarkMap.minX, xMarkMap.maxX);
}
return bbox;
},
_isLarge: function (orient, singlePL) {
if (singlePL.length < 2) {
return false;
} else {
return orient === 'horizontal' ? Math.abs(singlePL[0][0] - singlePL[1][0]) < 0.5 : Math.abs(singlePL[0][1] - singlePL[1][1]) < 0.5;
}
},
_getLargePointList: function (orient, singlePL, filter) {
var total;
if (orient === 'horizontal') {
total = this.component.grid.getWidth();
} else {
total = this.component.grid.getHeight();
}
var len = singlePL.length;
var newList = [];
if (typeof filter != 'function') {
switch (filter) {
case 'min':
filter = function (arr) {
return Math.max.apply(null, arr);
};
break;
case 'max':
filter = function (arr) {
return Math.min.apply(null, arr);
};
break;
case 'average':
filter = function (arr) {
var total = 0;
for (var i = 0; i < arr.length; i++) {
total += arr[i];
}
return total / arr.length;
};
break;
default:
filter = function (arr) {
return arr[0];
};
}
}
var windowData = [];
for (var i = 0; i < total; i++) {
var idx0 = Math.floor(len / total * i);
var idx1 = Math.min(Math.floor(len / total * (i + 1)), len);
if (idx1 <= idx0) {
continue;
}
for (var j = idx0; j < idx1; j++) {
windowData[j - idx0] = orient === 'horizontal' ? singlePL[j][1] : singlePL[j][0];
}
windowData.length = idx1 - idx0;
var filteredVal = filter(windowData);
var nearestIdx = -1;
var minDist = Infinity;
for (var j = idx0; j < idx1; j++) {
var val = orient === 'horizontal' ? singlePL[j][1] : singlePL[j][0];
var dist = Math.abs(val - filteredVal);
if (dist < minDist) {
nearestIdx = j;
minDist = dist;
}
}
var newItem = singlePL[nearestIdx].slice();
if (orient === 'horizontal') {
newItem[1] = filteredVal;
} else {
newItem[0] = filteredVal;
}
newList.push(newItem);
}
return newList;
},
_getSmooth: function (isSmooth) {
if (isSmooth) {
return 0.3;
} else {
return 0;
}
},
_getCalculableItem: function (seriesIndex, dataIndex, name, x, y, orient) {
var series = this.series;
var color = series[seriesIndex].calculableHolderColor || this.ecTheme.calculableHolderColor || ecConfig.calculableHolderColor;
var itemShape = this._getSymbol(seriesIndex, dataIndex, name, x, y, orient);
itemShape.style.color = color;
itemShape.style.strokeColor = color;
itemShape.rotation = [
0,
0
];
itemShape.hoverable = false;
itemShape.draggable = false;
itemShape.style.text = undefined;
return itemShape;
},
_getSymbol: function (seriesIndex, dataIndex, name, x, y, orient) {
var series = this.series;
var serie = series[seriesIndex];
var data = serie.data[dataIndex];
var itemShape = this.getSymbolShape(serie, seriesIndex, data, dataIndex, name, x, y, this._sIndex2ShapeMap[seriesIndex], this._sIndex2ColorMap[seriesIndex], '#fff', orient === 'vertical' ? 'horizontal' : 'vertical');
itemShape.zlevel = serie.zlevel;
itemShape.z = serie.z + 1;
if (this.deepQuery([
data,
serie,
this.option
], 'calculable')) {
this.setCalculable(itemShape);
itemShape.draggable = true;
}
return itemShape;
},
getMarkCoord: function (seriesIndex, mpData) {
var serie = this.series[seriesIndex];
var xMarkMap = this.xMarkMap[seriesIndex];
var xAxis = this.component.xAxis.getAxis(serie.xAxisIndex);
var yAxis = this.component.yAxis.getAxis(serie.yAxisIndex);
if (mpData.type && (mpData.type === 'max' || mpData.type === 'min' || mpData.type === 'average')) {
var valueIndex = mpData.valueIndex != null ? mpData.valueIndex : xMarkMap.maxX0 != null ? '1' : '';
return [
xMarkMap[mpData.type + 'X' + valueIndex],
xMarkMap[mpData.type + 'Y' + valueIndex],
xMarkMap[mpData.type + 'Line' + valueIndex],
xMarkMap[mpData.type + valueIndex]
];
}
return [
typeof mpData.xAxis != 'string' && xAxis.getCoordByIndex ? xAxis.getCoordByIndex(mpData.xAxis || 0) : xAxis.getCoord(mpData.xAxis || 0),
typeof mpData.yAxis != 'string' && yAxis.getCoordByIndex ? yAxis.getCoordByIndex(mpData.yAxis || 0) : yAxis.getCoord(mpData.yAxis || 0)
];
},
refresh: function (newOption) {
if (newOption) {
this.option = newOption;
this.series = newOption.series;
}
this.backupShapeList();
this._buildShape();
},
ontooltipHover: function (param, tipShape) {
var seriesIndex = param.seriesIndex;
var dataIndex = param.dataIndex;
var seriesPL;
var singlePL;
var len = seriesIndex.length;
while (len--) {
seriesPL = this.finalPLMap[seriesIndex[len]];
if (seriesPL) {
for (var i = 0, l = seriesPL.length; i < l; i++) {
singlePL = seriesPL[i];
for (var j = 0, k = singlePL.length; j < k; j++) {
if (dataIndex === singlePL[j][2]) {
tipShape.push(this._getSymbol(seriesIndex[len], singlePL[j][2], singlePL[j][3], singlePL[j][0], singlePL[j][1], 'horizontal'));
}
}
}
}
}
},
addDataAnimation: function (params, done) {
var series = this.series;
var aniMap = {};
for (var i = 0, l = params.length; i < l; i++) {
aniMap[params[i][0]] = params[i];
}
var x;
var dx;
var y;
var dy;
var seriesIndex;
var pointList;
var isHorizontal;
var aniCount = 0;
function animationDone() {
aniCount--;
if (aniCount === 0) {
done && done();
}
}
function animationDuring(target) {
target.style.controlPointList = null;
}
for (var i = this.shapeList.length - 1; i >= 0; i--) {
seriesIndex = this.shapeList[i]._seriesIndex;
if (aniMap[seriesIndex] && !aniMap[seriesIndex][3]) {
if (this.shapeList[i]._main && this.shapeList[i].style.pointList.length > 1) {
pointList = this.shapeList[i].style.pointList;
dx = Math.abs(pointList[0][0] - pointList[1][0]);
dy = Math.abs(pointList[0][1] - pointList[1][1]);
isHorizontal = this.shapeList[i]._orient === 'horizontal';
if (aniMap[seriesIndex][2]) {
if (this.shapeList[i].type === 'half-smooth-polygon') {
var len = pointList.length;
this.shapeList[i].style.pointList[len - 3] = pointList[len - 2];
this.shapeList[i].style.pointList[len - 3][isHorizontal ? 0 : 1] = pointList[len - 4][isHorizontal ? 0 : 1];
this.shapeList[i].style.pointList[len - 2] = pointList[len - 1];
}
this.shapeList[i].style.pointList.pop();
isHorizontal ? (x = dx, y = 0) : (x = 0, y = -dy);
} else {
this.shapeList[i].style.pointList.shift();
if (this.shapeList[i].type === 'half-smooth-polygon') {
var targetPoint = this.shapeList[i].style.pointList.pop();
isHorizontal ? targetPoint[0] = pointList[0][0] : targetPoint[1] = pointList[0][1];
this.shapeList[i].style.pointList.push(targetPoint);
}
isHorizontal ? (x = -dx, y = 0) : (x = 0, y = dy);
}
this.shapeList[i].style.controlPointList = null;
this.zr.modShape(this.shapeList[i]);
} else {
if (aniMap[seriesIndex][2] && this.shapeList[i]._dataIndex === series[seriesIndex].data.length - 1) {
this.zr.delShape(this.shapeList[i].id);
continue;
} else if (!aniMap[seriesIndex][2] && this.shapeList[i]._dataIndex === 0) {
this.zr.delShape(this.shapeList[i].id);
continue;
}
}
this.shapeList[i].position = [
0,
0
];
aniCount++;
this.zr.animate(this.shapeList[i].id, '').when(this.query(this.option, 'animationDurationUpdate'), {
position: [
x,
y
]
}).during(animationDuring).done(animationDone).start();
}
}
if (!aniCount) {
done && done();
}
}
};
function legendLineIcon(ctx, style, refreshNextFrame) {
var x = style.x;
var y = style.y;
var width = style.width;
var height = style.height;
var dy = height / 2;
if (style.symbol.match('empty')) {
ctx.fillStyle = '#fff';
}
style.brushType = 'both';
var symbol = style.symbol.replace('empty', '').toLowerCase();
if (symbol.match('star')) {
dy = symbol.replace('star', '') - 0 || 5;
y -= 1;
symbol = 'star';
} else if (symbol === 'rectangle' || symbol === 'arrow') {
x += (width - height) / 2;
width = height;
}
var imageLocation = '';
if (symbol.match('image')) {
imageLocation = symbol.replace(new RegExp('^image:\\/\\/'), '');
symbol = 'image';
x += Math.round((width - height) / 2) - 1;
width = height = height + 2;
}
symbol = IconShape.prototype.iconLibrary[symbol];
if (symbol) {
var x2 = style.x;
var y2 = style.y;
ctx.moveTo(x2, y2 + dy);
ctx.lineTo(x2 + 5, y2 + dy);
ctx.moveTo(x2 + style.width - 5, y2 + dy);
ctx.lineTo(x2 + style.width, y2 + dy);
var self = this;
symbol(ctx, {
x: x + 4,
y: y + 4,
width: width - 8,
height: height - 8,
n: dy,
image: imageLocation
}, function () {
self.modSelf();
refreshNextFrame();
});
} else {
ctx.moveTo(x, y + dy);
ctx.lineTo(x + width, y + dy);
}
}
IconShape.prototype.iconLibrary['legendLineIcon'] = legendLineIcon;
zrUtil.inherits(Line, ChartBase);
require('../chart').define('line', Line);
return Line;
});define('echarts/util/shape/HalfSmoothPolygon', [
'require',
'zrender/shape/Base',
'zrender/shape/util/smoothBezier',
'zrender/tool/util',
'zrender/shape/Polygon'
], function (require) {
var Base = require('zrender/shape/Base');
var smoothBezier = require('zrender/shape/util/smoothBezier');
var zrUtil = require('zrender/tool/util');
function HalfSmoothPolygon(options) {
Base.call(this, options);
}
HalfSmoothPolygon.prototype = {
type: 'half-smooth-polygon',
buildPath: function (ctx, style) {
var pointList = style.pointList;
if (pointList.length < 2) {
return;
}
if (style.smooth) {
var controlPoints = smoothBezier(pointList.slice(0, -2), style.smooth, false, style.smoothConstraint);
ctx.moveTo(pointList[0][0], pointList[0][1]);
var cp1;
var cp2;
var p;
var l = pointList.length;
for (var i = 0; i < l - 3; i++) {
cp1 = controlPoints[i * 2];
cp2 = controlPoints[i * 2 + 1];
p = pointList[i + 1];
ctx.bezierCurveTo(cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]);
}
ctx.lineTo(pointList[l - 2][0], pointList[l - 2][1]);
ctx.lineTo(pointList[l - 1][0], pointList[l - 1][1]);
ctx.lineTo(pointList[0][0], pointList[0][1]);
} else {
require('zrender/shape/Polygon').prototype.buildPath(ctx, style);
}
return;
}
};
zrUtil.inherits(HalfSmoothPolygon, Base);
return HalfSmoothPolygon;
});define('echarts/chart/bar', [
'require',
'./base',
'zrender/shape/Rectangle',
'../component/axis',
'../component/grid',
'../component/dataZoom',
'../config',
'../util/ecData',
'zrender/tool/util',
'zrender/tool/color',
'../chart'
], function (require) {
var ChartBase = require('./base');
var RectangleShape = require('zrender/shape/Rectangle');
require('../component/axis');
require('../component/grid');
require('../component/dataZoom');
var ecConfig = require('../config');
ecConfig.bar = {
zlevel: 0,
z: 2,
clickable: true,
legendHoverLink: true,
xAxisIndex: 0,
yAxisIndex: 0,
barMinHeight: 0,
barGap: '30%',
barCategoryGap: '20%',
itemStyle: {
normal: {
barBorderColor: '#fff',
barBorderRadius: 0,
barBorderWidth: 0,
label: { show: false }
},
emphasis: {
barBorderColor: '#fff',
barBorderRadius: 0,
barBorderWidth: 0,
label: { show: false }
}
}
};
var ecData = require('../util/ecData');
var zrUtil = require('zrender/tool/util');
var zrColor = require('zrender/tool/color');
function Bar(ecTheme, messageCenter, zr, option, myChart) {
ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
this.refresh(option);
}
Bar.prototype = {
type: ecConfig.CHART_TYPE_BAR,
_buildShape: function () {
this._buildPosition();
},
_buildNormal: function (seriesArray, maxDataLength, locationMap, xMarkMap, orient) {
var series = this.series;
var seriesIndex = locationMap[0][0];
var serie = series[seriesIndex];
var isHorizontal = orient == 'horizontal';
var xAxis = this.component.xAxis;
var yAxis = this.component.yAxis;
var categoryAxis = isHorizontal ? xAxis.getAxis(serie.xAxisIndex) : yAxis.getAxis(serie.yAxisIndex);
var valueAxis;
var size = this._mapSize(categoryAxis, locationMap);
var gap = size.gap;
var barGap = size.barGap;
var barWidthMap = size.barWidthMap;
var barMaxWidthMap = size.barMaxWidthMap;
var barWidth = size.barWidth;
var barMinHeightMap = size.barMinHeightMap;
var barHeight;
var curBarWidth;
var interval = size.interval;
var x;
var y;
var lastP;
var baseP;
var lastN;
var baseN;
var barShape;
var data;
var value;
var islandR = this.deepQuery([
this.ecTheme,
ecConfig
], 'island.r');
for (var i = 0, l = maxDataLength; i < l; i++) {
if (categoryAxis.getNameByIndex(i) == null) {
break;
}
isHorizontal ? x = categoryAxis.getCoordByIndex(i) - gap / 2 : y = categoryAxis.getCoordByIndex(i) + gap / 2;
for (var j = 0, k = locationMap.length; j < k; j++) {
var yAxisIndex = series[locationMap[j][0]].yAxisIndex || 0;
var xAxisIndex = series[locationMap[j][0]].xAxisIndex || 0;
valueAxis = isHorizontal ? yAxis.getAxis(yAxisIndex) : xAxis.getAxis(xAxisIndex);
baseP = lastP = baseN = lastN = valueAxis.getCoord(0);
for (var m = 0, n = locationMap[j].length; m < n; m++) {
seriesIndex = locationMap[j][m];
serie = series[seriesIndex];
data = serie.data[i];
value = this.getDataFromOption(data, '-');
xMarkMap[seriesIndex] = xMarkMap[seriesIndex] || {
min: Number.POSITIVE_INFINITY,
max: Number.NEGATIVE_INFINITY,
sum: 0,
counter: 0,
average: 0
};
curBarWidth = Math.min(barMaxWidthMap[seriesIndex] || Number.MAX_VALUE, barWidthMap[seriesIndex] || barWidth);
if (value === '-') {
continue;
}
if (value > 0) {
barHeight = m > 0 ? valueAxis.getCoordSize(value) : isHorizontal ? baseP - valueAxis.getCoord(value) : valueAxis.getCoord(value) - baseP;
if (n === 1 && barMinHeightMap[seriesIndex] > barHeight) {
barHeight = barMinHeightMap[seriesIndex];
}
if (isHorizontal) {
lastP -= barHeight;
y = lastP;
} else {
x = lastP;
lastP += barHeight;
}
} else if (value < 0) {
barHeight = m > 0 ? valueAxis.getCoordSize(value) : isHorizontal ? valueAxis.getCoord(value) - baseN : baseN - valueAxis.getCoord(value);
if (n === 1 && barMinHeightMap[seriesIndex] > barHeight) {
barHeight = barMinHeightMap[seriesIndex];
}
if (isHorizontal) {
y = lastN;
lastN += barHeight;
} else {
lastN -= barHeight;
x = lastN;
}
} else {
barHeight = 0;
if (isHorizontal) {
lastP -= barHeight;
y = lastP;
} else {
x = lastP;
lastP += barHeight;
}
}
xMarkMap[seriesIndex][i] = isHorizontal ? x + curBarWidth / 2 : y - curBarWidth / 2;
if (xMarkMap[seriesIndex].min > value) {
xMarkMap[seriesIndex].min = value;
if (isHorizontal) {
xMarkMap[seriesIndex].minY = y;
xMarkMap[seriesIndex].minX = xMarkMap[seriesIndex][i];
} else {
xMarkMap[seriesIndex].minX = x + barHeight;
xMarkMap[seriesIndex].minY = xMarkMap[seriesIndex][i];
}
}
if (xMarkMap[seriesIndex].max < value) {
xMarkMap[seriesIndex].max = value;
if (isHorizontal) {
xMarkMap[seriesIndex].maxY = y;
xMarkMap[seriesIndex].maxX = xMarkMap[seriesIndex][i];
} else {
xMarkMap[seriesIndex].maxX = x + barHeight;
xMarkMap[seriesIndex].maxY = xMarkMap[seriesIndex][i];
}
}
xMarkMap[seriesIndex].sum += value;
xMarkMap[seriesIndex].counter++;
if (i % interval === 0) {
barShape = this._getBarItem(seriesIndex, i, categoryAxis.getNameByIndex(i), x, y - (isHorizontal ? 0 : curBarWidth), isHorizontal ? curBarWidth : barHeight, isHorizontal ? barHeight : curBarWidth, isHorizontal ? 'vertical' : 'horizontal');
this.shapeList.push(new RectangleShape(barShape));
}
}
for (var m = 0, n = locationMap[j].length; m < n; m++) {
seriesIndex = locationMap[j][m];
serie = series[seriesIndex];
data = serie.data[i];
value = this.getDataFromOption(data, '-');
curBarWidth = Math.min(barMaxWidthMap[seriesIndex] || Number.MAX_VALUE, barWidthMap[seriesIndex] || barWidth);
if (value != '-') {
continue;
}
if (this.deepQuery([
data,
serie,
this.option
], 'calculable')) {
if (isHorizontal) {
lastP -= islandR;
y = lastP;
} else {
x = lastP;
lastP += islandR;
}
barShape = this._getBarItem(seriesIndex, i, categoryAxis.getNameByIndex(i), x, y - (isHorizontal ? 0 : curBarWidth), isHorizontal ? curBarWidth : islandR, isHorizontal ? islandR : curBarWidth, isHorizontal ? 'vertical' : 'horizontal');
barShape.hoverable = false;
barShape.draggable = false;
barShape.style.lineWidth = 1;
barShape.style.brushType = 'stroke';
barShape.style.strokeColor = serie.calculableHolderColor || this.ecTheme.calculableHolderColor || ecConfig.calculableHolderColor;
this.shapeList.push(new RectangleShape(barShape));
}
}
isHorizontal ? x += curBarWidth + barGap : y -= curBarWidth + barGap;
}
}
this._calculMarkMapXY(xMarkMap, locationMap, isHorizontal ? 'y' : 'x');
},
_buildHorizontal: function (seriesArray, maxDataLength, locationMap, xMarkMap) {
return this._buildNormal(seriesArray, maxDataLength, locationMap, xMarkMap, 'horizontal');
},
_buildVertical: function (seriesArray, maxDataLength, locationMap, xMarkMap) {
return this._buildNormal(seriesArray, maxDataLength, locationMap, xMarkMap, 'vertical');
},
_buildOther: function (seriesArray, maxDataLength, locationMap, xMarkMap) {
var series = this.series;
for (var j = 0, k = locationMap.length; j < k; j++) {
for (var m = 0, n = locationMap[j].length; m < n; m++) {
var seriesIndex = locationMap[j][m];
var serie = series[seriesIndex];
var xAxisIndex = serie.xAxisIndex || 0;
var xAxis = this.component.xAxis.getAxis(xAxisIndex);
var baseX = xAxis.getCoord(0);
var yAxisIndex = serie.yAxisIndex || 0;
var yAxis = this.component.yAxis.getAxis(yAxisIndex);
var baseY = yAxis.getCoord(0);
xMarkMap[seriesIndex] = xMarkMap[seriesIndex] || {
min0: Number.POSITIVE_INFINITY,
min1: Number.POSITIVE_INFINITY,
max0: Number.NEGATIVE_INFINITY,
max1: Number.NEGATIVE_INFINITY,
sum0: 0,
sum1: 0,
counter0: 0,
counter1: 0,
average0: 0,
average1: 0
};
for (var i = 0, l = serie.data.length; i < l; i++) {
var data = serie.data[i];
var value = this.getDataFromOption(data, '-');
if (!(value instanceof Array)) {
continue;
}
var x = xAxis.getCoord(value[0]);
var y = yAxis.getCoord(value[1]);
var queryTarget = [
data,
serie
];
var barWidth = this.deepQuery(queryTarget, 'barWidth') || 10;
var barHeight = this.deepQuery(queryTarget, 'barHeight');
var orient;
var barShape;
if (barHeight != null) {
orient = 'horizontal';
if (value[0] > 0) {
barWidth = x - baseX;
x -= barWidth;
} else if (value[0] < 0) {
barWidth = baseX - x;
} else {
barWidth = 0;
}
barShape = this._getBarItem(seriesIndex, i, value[0], x, y - barHeight / 2, barWidth, barHeight, orient);
} else {
orient = 'vertical';
if (value[1] > 0) {
barHeight = baseY - y;
} else if (value[1] < 0) {
barHeight = y - baseY;
y -= barHeight;
} else {
barHeight = 0;
}
barShape = this._getBarItem(seriesIndex, i, value[0], x - barWidth / 2, y, barWidth, barHeight, orient);
}
this.shapeList.push(new RectangleShape(barShape));
x = xAxis.getCoord(value[0]);
y = yAxis.getCoord(value[1]);
if (xMarkMap[seriesIndex].min0 > value[0]) {
xMarkMap[seriesIndex].min0 = value[0];
xMarkMap[seriesIndex].minY0 = y;
xMarkMap[seriesIndex].minX0 = x;
}
if (xMarkMap[seriesIndex].max0 < value[0]) {
xMarkMap[seriesIndex].max0 = value[0];
xMarkMap[seriesIndex].maxY0 = y;
xMarkMap[seriesIndex].maxX0 = x;
}
xMarkMap[seriesIndex].sum0 += value[0];
xMarkMap[seriesIndex].counter0++;
if (xMarkMap[seriesIndex].min1 > value[1]) {
xMarkMap[seriesIndex].min1 = value[1];
xMarkMap[seriesIndex].minY1 = y;
xMarkMap[seriesIndex].minX1 = x;
}
if (xMarkMap[seriesIndex].max1 < value[1]) {
xMarkMap[seriesIndex].max1 = value[1];
xMarkMap[seriesIndex].maxY1 = y;
xMarkMap[seriesIndex].maxX1 = x;
}
xMarkMap[seriesIndex].sum1 += value[1];
xMarkMap[seriesIndex].counter1++;
}
}
}
this._calculMarkMapXY(xMarkMap, locationMap, 'xy');
},
_mapSize: function (categoryAxis, locationMap, ignoreUserDefined) {
var res = this._findSpecialBarSzie(locationMap, ignoreUserDefined);
var barWidthMap = res.barWidthMap;
var barMaxWidthMap = res.barMaxWidthMap;
var barMinHeightMap = res.barMinHeightMap;
var sBarWidthCounter = res.sBarWidthCounter;
var sBarWidthTotal = res.sBarWidthTotal;
var barGap = res.barGap;
var barCategoryGap = res.barCategoryGap;
var gap;
var barWidth;
var interval = 1;
if (locationMap.length != sBarWidthCounter) {
if (!ignoreUserDefined) {
gap = typeof barCategoryGap === 'string' && barCategoryGap.match(/%$/) ? (categoryAxis.getGap() * (100 - parseFloat(barCategoryGap)) / 100).toFixed(2) - 0 : categoryAxis.getGap() - barCategoryGap;
if (typeof barGap === 'string' && barGap.match(/%$/)) {
barGap = parseFloat(barGap) / 100;
barWidth = +((gap - sBarWidthTotal) / ((locationMap.length - 1) * barGap + locationMap.length - sBarWidthCounter)).toFixed(2);
barGap = barWidth * barGap;
} else {
barGap = parseFloat(barGap);
barWidth = +((gap - sBarWidthTotal - barGap * (locationMap.length - 1)) / (locationMap.length - sBarWidthCounter)).toFixed(2);
}
if (barWidth <= 0) {
return this._mapSize(categoryAxis, locationMap, true);
}
} else {
gap = categoryAxis.getGap();
barGap = 0;
barWidth = +(gap / locationMap.length).toFixed(2);
if (barWidth <= 0) {
interval = Math.floor(locationMap.length / gap);
barWidth = 1;
}
}
} else {
gap = sBarWidthCounter > 1 ? typeof barCategoryGap === 'string' && barCategoryGap.match(/%$/) ? +(categoryAxis.getGap() * (100 - parseFloat(barCategoryGap)) / 100).toFixed(2) : categoryAxis.getGap() - barCategoryGap : sBarWidthTotal;
barWidth = 0;
barGap = sBarWidthCounter > 1 ? +((gap - sBarWidthTotal) / (sBarWidthCounter - 1)).toFixed(2) : 0;
if (barGap < 0) {
return this._mapSize(categoryAxis, locationMap, true);
}
}
return this._recheckBarMaxWidth(locationMap, barWidthMap, barMaxWidthMap, barMinHeightMap, gap, barWidth, barGap, interval);
},
_findSpecialBarSzie: function (locationMap, ignoreUserDefined) {
var series = this.series;
var barWidthMap = {};
var barMaxWidthMap = {};
var barMinHeightMap = {};
var sBarWidth;
var sBarMaxWidth;
var sBarWidthCounter = 0;
var sBarWidthTotal = 0;
var barGap;
var barCategoryGap;
for (var j = 0, k = locationMap.length; j < k; j++) {
var hasFound = {
barWidth: false,
barMaxWidth: false
};
for (var m = 0, n = locationMap[j].length; m < n; m++) {
var seriesIndex = locationMap[j][m];
var queryTarget = series[seriesIndex];
if (!ignoreUserDefined) {
if (!hasFound.barWidth) {
sBarWidth = this.query(queryTarget, 'barWidth');
if (sBarWidth != null) {
barWidthMap[seriesIndex] = sBarWidth;
sBarWidthTotal += sBarWidth;
sBarWidthCounter++;
hasFound.barWidth = true;
for (var ii = 0, ll = m; ii < ll; ii++) {
var pSeriesIndex = locationMap[j][ii];
barWidthMap[pSeriesIndex] = sBarWidth;
}
}
} else {
barWidthMap[seriesIndex] = sBarWidth;
}
if (!hasFound.barMaxWidth) {
sBarMaxWidth = this.query(queryTarget, 'barMaxWidth');
if (sBarMaxWidth != null) {
barMaxWidthMap[seriesIndex] = sBarMaxWidth;
hasFound.barMaxWidth = true;
for (var ii = 0, ll = m; ii < ll; ii++) {
var pSeriesIndex = locationMap[j][ii];
barMaxWidthMap[pSeriesIndex] = sBarMaxWidth;
}
}
} else {
barMaxWidthMap[seriesIndex] = sBarMaxWidth;
}
}
barMinHeightMap[seriesIndex] = this.query(queryTarget, 'barMinHeight');
barGap = barGap != null ? barGap : this.query(queryTarget, 'barGap');
barCategoryGap = barCategoryGap != null ? barCategoryGap : this.query(queryTarget, 'barCategoryGap');
}
}
return {
barWidthMap: barWidthMap,
barMaxWidthMap: barMaxWidthMap,
barMinHeightMap: barMinHeightMap,
sBarWidth: sBarWidth,
sBarMaxWidth: sBarMaxWidth,
sBarWidthCounter: sBarWidthCounter,
sBarWidthTotal: sBarWidthTotal,
barGap: barGap,
barCategoryGap: barCategoryGap
};
},
_recheckBarMaxWidth: function (locationMap, barWidthMap, barMaxWidthMap, barMinHeightMap, gap, barWidth, barGap, interval) {
for (var j = 0, k = locationMap.length; j < k; j++) {
var seriesIndex = locationMap[j][0];
if (barMaxWidthMap[seriesIndex] && barMaxWidthMap[seriesIndex] < barWidth) {
gap -= barWidth - barMaxWidthMap[seriesIndex];
}
}
return {
barWidthMap: barWidthMap,
barMaxWidthMap: barMaxWidthMap,
barMinHeightMap: barMinHeightMap,
gap: gap,
barWidth: barWidth,
barGap: barGap,
interval: interval
};
},
_getBarItem: function (seriesIndex, dataIndex, name, x, y, width, height, orient) {
var series = this.series;
var barShape;
var serie = series[seriesIndex];
var data = serie.data[dataIndex];
var defaultColor = this._sIndex2ColorMap[seriesIndex];
var queryTarget = [
data,
serie
];
var normal = this.deepMerge(queryTarget, 'itemStyle.normal');
var emphasis = this.deepMerge(queryTarget, 'itemStyle.emphasis');
var normalBorderWidth = normal.barBorderWidth;
barShape = {
zlevel: serie.zlevel,
z: serie.z,
clickable: this.deepQuery(queryTarget, 'clickable'),
style: {
x: x,
y: y,
width: width,
height: height,
brushType: 'both',
color: this.getItemStyleColor(this.deepQuery(queryTarget, 'itemStyle.normal.color') || defaultColor, seriesIndex, dataIndex, data),
radius: normal.barBorderRadius,
lineWidth: normalBorderWidth,
strokeColor: normal.barBorderColor
},
highlightStyle: {
color: this.getItemStyleColor(this.deepQuery(queryTarget, 'itemStyle.emphasis.color'), seriesIndex, dataIndex, data),
radius: emphasis.barBorderRadius,
lineWidth: emphasis.barBorderWidth,
strokeColor: emphasis.barBorderColor
},
_orient: orient
};
var barShapeStyle = barShape.style;
barShape.highlightStyle.color = barShape.highlightStyle.color || (typeof barShapeStyle.color === 'string' ? zrColor.lift(barShapeStyle.color, -0.3) : barShapeStyle.color);
barShapeStyle.x = Math.floor(barShapeStyle.x);
barShapeStyle.y = Math.floor(barShapeStyle.y);
barShapeStyle.height = Math.ceil(barShapeStyle.height);
barShapeStyle.width = Math.ceil(barShapeStyle.width);
if (normalBorderWidth > 0 && barShapeStyle.height > normalBorderWidth && barShapeStyle.width > normalBorderWidth) {
barShapeStyle.y += normalBorderWidth / 2;
barShapeStyle.height -= normalBorderWidth;
barShapeStyle.x += normalBorderWidth / 2;
barShapeStyle.width -= normalBorderWidth;
} else {
barShapeStyle.brushType = 'fill';
}
barShape.highlightStyle.textColor = barShape.highlightStyle.color;
barShape = this.addLabel(barShape, serie, data, name, orient);
var barShapeStyleList = [
barShapeStyle,
barShape.highlightStyle
];
for (var i = 0, l = barShapeStyleList.length; i < l; i++) {
var textPosition = barShapeStyleList[i].textPosition;
if (textPosition === 'insideLeft' || textPosition === 'insideRight' || textPosition === 'insideTop' || textPosition === 'insideBottom') {
var gap = 5;
switch (textPosition) {
case 'insideLeft':
barShapeStyleList[i].textX = barShapeStyle.x + gap;
barShapeStyleList[i].textY = barShapeStyle.y + barShapeStyle.height / 2;
barShapeStyleList[i].textAlign = 'left';
barShapeStyleList[i].textBaseline = 'middle';
break;
case 'insideRight':
barShapeStyleList[i].textX = barShapeStyle.x + barShapeStyle.width - gap;
barShapeStyleList[i].textY = barShapeStyle.y + barShapeStyle.height / 2;
barShapeStyleList[i].textAlign = 'right';
barShapeStyleList[i].textBaseline = 'middle';
break;
case 'insideTop':
barShapeStyleList[i].textX = barShapeStyle.x + barShapeStyle.width / 2;
barShapeStyleList[i].textY = barShapeStyle.y + gap / 2;
barShapeStyleList[i].textAlign = 'center';
barShapeStyleList[i].textBaseline = 'top';
break;
case 'insideBottom':
barShapeStyleList[i].textX = barShapeStyle.x + barShapeStyle.width / 2;
barShapeStyleList[i].textY = barShapeStyle.y + barShapeStyle.height - gap / 2;
barShapeStyleList[i].textAlign = 'center';
barShapeStyleList[i].textBaseline = 'bottom';
break;
}
barShapeStyleList[i].textPosition = 'specific';
barShapeStyleList[i].textColor = barShapeStyleList[i].textColor || '#fff';
}
}
if (this.deepQuery([
data,
serie,
this.option
], 'calculable')) {
this.setCalculable(barShape);
barShape.draggable = true;
}
ecData.pack(barShape, series[seriesIndex], seriesIndex, series[seriesIndex].data[dataIndex], dataIndex, name);
return barShape;
},
getMarkCoord: function (seriesIndex, mpData) {
var serie = this.series[seriesIndex];
var xMarkMap = this.xMarkMap[seriesIndex];
var xAxis = this.component.xAxis.getAxis(serie.xAxisIndex);
var yAxis = this.component.yAxis.getAxis(serie.yAxisIndex);
var dataIndex;
var pos;
if (mpData.type && (mpData.type === 'max' || mpData.type === 'min' || mpData.type === 'average')) {
var valueIndex = mpData.valueIndex != null ? mpData.valueIndex : xMarkMap.maxX0 != null ? '1' : '';
pos = [
xMarkMap[mpData.type + 'X' + valueIndex],
xMarkMap[mpData.type + 'Y' + valueIndex],
xMarkMap[mpData.type + 'Line' + valueIndex],
xMarkMap[mpData.type + valueIndex]
];
} else if (xMarkMap.isHorizontal) {
dataIndex = typeof mpData.xAxis === 'string' && xAxis.getIndexByName ? xAxis.getIndexByName(mpData.xAxis) : mpData.xAxis || 0;
var x = xMarkMap[dataIndex];
x = x != null ? x : typeof mpData.xAxis != 'string' && xAxis.getCoordByIndex ? xAxis.getCoordByIndex(mpData.xAxis || 0) : xAxis.getCoord(mpData.xAxis || 0);
pos = [
x,
yAxis.getCoord(mpData.yAxis || 0)
];
} else {
dataIndex = typeof mpData.yAxis === 'string' && yAxis.getIndexByName ? yAxis.getIndexByName(mpData.yAxis) : mpData.yAxis || 0;
var y = xMarkMap[dataIndex];
y = y != null ? y : typeof mpData.yAxis != 'string' && yAxis.getCoordByIndex ? yAxis.getCoordByIndex(mpData.yAxis || 0) : yAxis.getCoord(mpData.yAxis || 0);
pos = [
xAxis.getCoord(mpData.xAxis || 0),
y
];
}
return pos;
},
refresh: function (newOption) {
if (newOption) {
this.option = newOption;
this.series = newOption.series;
}
this.backupShapeList();
this._buildShape();
},
addDataAnimation: function (params, done) {
var series = this.series;
var aniMap = {};
for (var i = 0, l = params.length; i < l; i++) {
aniMap[params[i][0]] = params[i];
}
var x;
var dx;
var y;
var dy;
var serie;
var seriesIndex;
var dataIndex;
var aniCount = 0;
function animationDone() {
aniCount--;
if (aniCount === 0) {
done && done();
}
}
for (var i = this.shapeList.length - 1; i >= 0; i--) {
seriesIndex = ecData.get(this.shapeList[i], 'seriesIndex');
if (aniMap[seriesIndex] && !aniMap[seriesIndex][3]) {
if (this.shapeList[i].type === 'rectangle') {
dataIndex = ecData.get(this.shapeList[i], 'dataIndex');
serie = series[seriesIndex];
if (aniMap[seriesIndex][2] && dataIndex === serie.data.length - 1) {
this.zr.delShape(this.shapeList[i].id);
continue;
} else if (!aniMap[seriesIndex][2] && dataIndex === 0) {
this.zr.delShape(this.shapeList[i].id);
continue;
}
if (this.shapeList[i]._orient === 'horizontal') {
dy = this.component.yAxis.getAxis(serie.yAxisIndex || 0).getGap();
y = aniMap[seriesIndex][2] ? -dy : dy;
x = 0;
} else {
dx = this.component.xAxis.getAxis(serie.xAxisIndex || 0).getGap();
x = aniMap[seriesIndex][2] ? dx : -dx;
y = 0;
}
this.shapeList[i].position = [
0,
0
];
aniCount++;
this.zr.animate(this.shapeList[i].id, '').when(this.query(this.option, 'animationDurationUpdate'), {
position: [
x,
y
]
}).done(animationDone).start();
}
}
}
if (!aniCount) {
done && done();
}
}
};
zrUtil.inherits(Bar, ChartBase);
require('../chart').define('bar', Bar);
return Bar;
});define('echarts/chart/scatter', [
'require',
'./base',
'../util/shape/Symbol',
'../component/axis',
'../component/grid',
'../component/dataZoom',
'../component/dataRange',
'../config',
'zrender/tool/util',
'zrender/tool/color',
'../chart'
], function (require) {
var ChartBase = require('./base');
var SymbolShape = require('../util/shape/Symbol');
require('../component/axis');
require('../component/grid');
require('../component/dataZoom');
require('../component/dataRange');
var ecConfig = require('../config');
ecConfig.scatter = {
zlevel: 0,
z: 2,
clickable: true,
legendHoverLink: true,
xAxisIndex: 0,
yAxisIndex: 0,
symbolSize: 4,
large: false,
largeThreshold: 2000,
itemStyle: {
normal: { label: { show: false } },
emphasis: { label: { show: false } }
}
};
var zrUtil = require('zrender/tool/util');
var zrColor = require('zrender/tool/color');
function Scatter(ecTheme, messageCenter, zr, option, myChart) {
ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
this.refresh(option);
}
Scatter.prototype = {
type: ecConfig.CHART_TYPE_SCATTER,
_buildShape: function () {
var series = this.series;
this._sIndex2ColorMap = {};
this._symbol = this.option.symbolList;
this._sIndex2ShapeMap = {};
this.selectedMap = {};
this.xMarkMap = {};
var legend = this.component.legend;
var seriesArray = [];
var serie;
var serieName;
var iconShape;
var iconType;
for (var i = 0, l = series.length; i < l; i++) {
serie = series[i];
serieName = serie.name;
if (serie.type === ecConfig.CHART_TYPE_SCATTER) {
series[i] = this.reformOption(series[i]);
this.legendHoverLink = series[i].legendHoverLink || this.legendHoverLink;
this._sIndex2ShapeMap[i] = this.query(serie, 'symbol') || this._symbol[i % this._symbol.length];
if (legend) {
this.selectedMap[serieName] = legend.isSelected(serieName);
this._sIndex2ColorMap[i] = zrColor.alpha(legend.getColor(serieName), 0.5);
iconShape = legend.getItemShape(serieName);
if (iconShape) {
var iconType = this._sIndex2ShapeMap[i];
iconShape.style.brushType = iconType.match('empty') ? 'stroke' : 'both';
iconType = iconType.replace('empty', '').toLowerCase();
if (iconType.match('rectangle')) {
iconShape.style.x += Math.round((iconShape.style.width - iconShape.style.height) / 2);
iconShape.style.width = iconShape.style.height;
}
if (iconType.match('star')) {
iconShape.style.n = iconType.replace('star', '') - 0 || 5;
iconType = 'star';
}
if (iconType.match('image')) {
iconShape.style.image = iconType.replace(new RegExp('^image:\\/\\/'), '');
iconShape.style.x += Math.round((iconShape.style.width - iconShape.style.height) / 2);
iconShape.style.width = iconShape.style.height;
iconType = 'image';
}
iconShape.style.iconType = iconType;
legend.setItemShape(serieName, iconShape);
}
} else {
this.selectedMap[serieName] = true;
this._sIndex2ColorMap[i] = zrColor.alpha(this.zr.getColor(i), 0.5);
}
if (this.selectedMap[serieName]) {
seriesArray.push(i);
}
}
}
this._buildSeries(seriesArray);
this.addShapeList();
},
_buildSeries: function (seriesArray) {
if (seriesArray.length === 0) {
return;
}
var series = this.series;
var seriesIndex;
var serie;
var data;
var value;
var xAxis;
var yAxis;
var pointList = {};
var x;
var y;
for (var j = 0, k = seriesArray.length; j < k; j++) {
seriesIndex = seriesArray[j];
serie = series[seriesIndex];
if (serie.data.length === 0) {
continue;
}
xAxis = this.component.xAxis.getAxis(serie.xAxisIndex || 0);
yAxis = this.component.yAxis.getAxis(serie.yAxisIndex || 0);
pointList[seriesIndex] = [];
for (var i = 0, l = serie.data.length; i < l; i++) {
data = serie.data[i];
value = this.getDataFromOption(data, '-');
if (value === '-' || value.length < 2) {
continue;
}
x = xAxis.getCoord(value[0]);
y = yAxis.getCoord(value[1]);
pointList[seriesIndex].push([
x,
y,
i,
data.name || ''
]);
}
this.xMarkMap[seriesIndex] = this._markMap(xAxis, yAxis, serie.data, pointList[seriesIndex]);
this.buildMark(seriesIndex);
}
this._buildPointList(pointList);
},
_markMap: function (xAxis, yAxis, data, pointList) {
var xMarkMap = {
min0: Number.POSITIVE_INFINITY,
max0: Number.NEGATIVE_INFINITY,
sum0: 0,
counter0: 0,
average0: 0,
min1: Number.POSITIVE_INFINITY,
max1: Number.NEGATIVE_INFINITY,
sum1: 0,
counter1: 0,
average1: 0
};
var value;
for (var i = 0, l = pointList.length; i < l; i++) {
value = data[pointList[i][2]].value || data[pointList[i][2]];
if (xMarkMap.min0 > value[0]) {
xMarkMap.min0 = value[0];
xMarkMap.minY0 = pointList[i][1];
xMarkMap.minX0 = pointList[i][0];
}
if (xMarkMap.max0 < value[0]) {
xMarkMap.max0 = value[0];
xMarkMap.maxY0 = pointList[i][1];
xMarkMap.maxX0 = pointList[i][0];
}
xMarkMap.sum0 += value[0];
xMarkMap.counter0++;
if (xMarkMap.min1 > value[1]) {
xMarkMap.min1 = value[1];
xMarkMap.minY1 = pointList[i][1];
xMarkMap.minX1 = pointList[i][0];
}
if (xMarkMap.max1 < value[1]) {
xMarkMap.max1 = value[1];
xMarkMap.maxY1 = pointList[i][1];
xMarkMap.maxX1 = pointList[i][0];
}
xMarkMap.sum1 += value[1];
xMarkMap.counter1++;
}
var gridX = this.component.grid.getX();
var gridXend = this.component.grid.getXend();
var gridY = this.component.grid.getY();
var gridYend = this.component.grid.getYend();
xMarkMap.average0 = xMarkMap.sum0 / xMarkMap.counter0;
var x = xAxis.getCoord(xMarkMap.average0);
xMarkMap.averageLine0 = [
[
x,
gridYend
],
[
x,
gridY
]
];
xMarkMap.minLine0 = [
[
xMarkMap.minX0,
gridYend
],
[
xMarkMap.minX0,
gridY
]
];
xMarkMap.maxLine0 = [
[
xMarkMap.maxX0,
gridYend
],
[
xMarkMap.maxX0,
gridY
]
];
xMarkMap.average1 = xMarkMap.sum1 / xMarkMap.counter1;
var y = yAxis.getCoord(xMarkMap.average1);
xMarkMap.averageLine1 = [
[
gridX,
y
],
[
gridXend,
y
]
];
xMarkMap.minLine1 = [
[
gridX,
xMarkMap.minY1
],
[
gridXend,
xMarkMap.minY1
]
];
xMarkMap.maxLine1 = [
[
gridX,
xMarkMap.maxY1
],
[
gridXend,
xMarkMap.maxY1
]
];
return xMarkMap;
},
_buildPointList: function (pointList) {
var series = this.series;
var serie;
var seriesPL;
var singlePoint;
var shape;
for (var seriesIndex in pointList) {
serie = series[seriesIndex];
seriesPL = pointList[seriesIndex];
if (serie.large && serie.data.length > serie.largeThreshold) {
this.shapeList.push(this._getLargeSymbol(serie, seriesPL, this.getItemStyleColor(this.query(serie, 'itemStyle.normal.color'), seriesIndex, -1) || this._sIndex2ColorMap[seriesIndex]));
continue;
}
for (var i = 0, l = seriesPL.length; i < l; i++) {
singlePoint = seriesPL[i];
shape = this._getSymbol(seriesIndex, singlePoint[2], singlePoint[3], singlePoint[0], singlePoint[1]);
shape && this.shapeList.push(shape);
}
}
},
_getSymbol: function (seriesIndex, dataIndex, name, x, y) {
var series = this.series;
var serie = series[seriesIndex];
var data = serie.data[dataIndex];
var dataRange = this.component.dataRange;
var rangColor;
if (dataRange) {
rangColor = isNaN(data[2]) ? this._sIndex2ColorMap[seriesIndex] : dataRange.getColor(data[2]);
if (!rangColor) {
return null;
}
} else {
rangColor = this._sIndex2ColorMap[seriesIndex];
}
var itemShape = this.getSymbolShape(serie, seriesIndex, data, dataIndex, name, x, y, this._sIndex2ShapeMap[seriesIndex], rangColor, 'rgba(0,0,0,0)', 'vertical');
itemShape.zlevel = serie.zlevel;
itemShape.z = serie.z;
itemShape._main = true;
return itemShape;
},
_getLargeSymbol: function (serie, pointList, nColor) {
return new SymbolShape({
zlevel: serie.zlevel,
z: serie.z,
_main: true,
hoverable: false,
style: {
pointList: pointList,
color: nColor,
strokeColor: nColor
},
highlightStyle: { pointList: [] }
});
},
getMarkCoord: function (seriesIndex, mpData) {
var serie = this.series[seriesIndex];
var xMarkMap = this.xMarkMap[seriesIndex];
var xAxis = this.component.xAxis.getAxis(serie.xAxisIndex);
var yAxis = this.component.yAxis.getAxis(serie.yAxisIndex);
var pos;
if (mpData.type && (mpData.type === 'max' || mpData.type === 'min' || mpData.type === 'average')) {
var valueIndex = mpData.valueIndex != null ? mpData.valueIndex : 1;
pos = [
xMarkMap[mpData.type + 'X' + valueIndex],
xMarkMap[mpData.type + 'Y' + valueIndex],
xMarkMap[mpData.type + 'Line' + valueIndex],
xMarkMap[mpData.type + valueIndex]
];
} else {
pos = [
typeof mpData.xAxis != 'string' && xAxis.getCoordByIndex ? xAxis.getCoordByIndex(mpData.xAxis || 0) : xAxis.getCoord(mpData.xAxis || 0),
typeof mpData.yAxis != 'string' && yAxis.getCoordByIndex ? yAxis.getCoordByIndex(mpData.yAxis || 0) : yAxis.getCoord(mpData.yAxis || 0)
];
}
return pos;
},
refresh: function (newOption) {
if (newOption) {
this.option = newOption;
this.series = newOption.series;
}
this.backupShapeList();
this._buildShape();
},
ondataRange: function (param, status) {
if (this.component.dataRange) {
this.refresh();
status.needRefresh = true;
}
return;
}
};
zrUtil.inherits(Scatter, ChartBase);
require('../chart').define('scatter', Scatter);
return Scatter;
});define('echarts/component/dataRange', [
'require',
'./base',
'zrender/shape/Text',
'zrender/shape/Rectangle',
'../util/shape/HandlePolygon',
'../config',
'zrender/tool/util',
'zrender/tool/event',
'zrender/tool/area',
'zrender/tool/color',
'../component'
], function (require) {
var Base = require('./base');
var TextShape = require('zrender/shape/Text');
var RectangleShape = require('zrender/shape/Rectangle');
var HandlePolygonShape = require('../util/shape/HandlePolygon');
var ecConfig = require('../config');
ecConfig.dataRange = {
zlevel: 0,
z: 4,
show: true,
orient: 'vertical',
x: 'left',
y: 'bottom',
backgroundColor: 'rgba(0,0,0,0)',
borderColor: '#ccc',
borderWidth: 0,
padding: 5,
itemGap: 10,
itemWidth: 20,
itemHeight: 14,
precision: 0,
splitNumber: 5,
splitList: null,
calculable: false,
selectedMode: true,
hoverLink: true,
realtime: true,
color: [
'#006edd',
'#e0ffff'
],
textStyle: { color: '#333' }
};
var zrUtil = require('zrender/tool/util');
var zrEvent = require('zrender/tool/event');
var zrArea = require('zrender/tool/area');
var zrColor = require('zrender/tool/color');
function DataRange(ecTheme, messageCenter, zr, option, myChart) {
Base.call(this, ecTheme, messageCenter, zr, option, myChart);
var self = this;
self._ondrift = function (dx, dy) {
return self.__ondrift(this, dx, dy);
};
self._ondragend = function () {
return self.__ondragend();
};
self._dataRangeSelected = function (param) {
return self.__dataRangeSelected(param);
};
self._dispatchHoverLink = function (param) {
return self.__dispatchHoverLink(param);
};
self._onhoverlink = function (params) {
return self.__onhoverlink(params);
};
this._selectedMap = {};
this._range = {};
this.refresh(option);
messageCenter.bind(ecConfig.EVENT.HOVER, this._onhoverlink);
}
DataRange.prototype = {
type: ecConfig.COMPONENT_TYPE_DATARANGE,
_textGap: 10,
_buildShape: function () {
this._itemGroupLocation = this._getItemGroupLocation();
this._buildBackground();
if (this._isContinuity()) {
this._buildGradient();
} else {
this._buildItem();
}
if (this.dataRangeOption.show) {
for (var i = 0, l = this.shapeList.length; i < l; i++) {
this.zr.addShape(this.shapeList[i]);
}
}
this._syncShapeFromRange();
},
_buildItem: function () {
var data = this._valueTextList;
var dataLength = data.length;
var itemName;
var itemShape;
var textShape;
var font = this.getFont(this.dataRangeOption.textStyle);
var lastX = this._itemGroupLocation.x;
var lastY = this._itemGroupLocation.y;
var itemWidth = this.dataRangeOption.itemWidth;
var itemHeight = this.dataRangeOption.itemHeight;
var itemGap = this.dataRangeOption.itemGap;
var textHeight = zrArea.getTextHeight('国', font);
var color;
if (this.dataRangeOption.orient == 'vertical' && this.dataRangeOption.x == 'right') {
lastX = this._itemGroupLocation.x + this._itemGroupLocation.width - itemWidth;
}
var needValueText = true;
if (this.dataRangeOption.text) {
needValueText = false;
if (this.dataRangeOption.text[0]) {
textShape = this._getTextShape(lastX, lastY, this.dataRangeOption.text[0]);
if (this.dataRangeOption.orient == 'horizontal') {
lastX += zrArea.getTextWidth(this.dataRangeOption.text[0], font) + this._textGap;
} else {
lastY += textHeight + this._textGap;
textShape.style.y += textHeight / 2 + this._textGap;
textShape.style.textBaseline = 'bottom';
}
this.shapeList.push(new TextShape(textShape));
}
}
for (var i = 0; i < dataLength; i++) {
itemName = data[i];
color = this.getColorByIndex(i);
itemShape = this._getItemShape(lastX, lastY, itemWidth, itemHeight, this._selectedMap[i] ? color : '#ccc');
itemShape._idx = i;
itemShape.onmousemove = this._dispatchHoverLink;
if (this.dataRangeOption.selectedMode) {
itemShape.clickable = true;
itemShape.onclick = this._dataRangeSelected;
}
this.shapeList.push(new RectangleShape(itemShape));
if (needValueText) {
textShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
style: {
x: lastX + itemWidth + 5,
y: lastY,
color: this._selectedMap[i] ? this.dataRangeOption.textStyle.color : '#ccc',
text: data[i],
textFont: font,
textBaseline: 'top'
},
highlightStyle: { brushType: 'fill' }
};
if (this.dataRangeOption.orient == 'vertical' && this.dataRangeOption.x == 'right') {
textShape.style.x -= itemWidth + 10;
textShape.style.textAlign = 'right';
}
textShape._idx = i;
textShape.onmousemove = this._dispatchHoverLink;
if (this.dataRangeOption.selectedMode) {
textShape.clickable = true;
textShape.onclick = this._dataRangeSelected;
}
this.shapeList.push(new TextShape(textShape));
}
if (this.dataRangeOption.orient == 'horizontal') {
lastX += itemWidth + (needValueText ? 5 : 0) + (needValueText ? zrArea.getTextWidth(itemName, font) : 0) + itemGap;
} else {
lastY += itemHeight + itemGap;
}
}
if (!needValueText && this.dataRangeOption.text[1]) {
if (this.dataRangeOption.orient == 'horizontal') {
lastX = lastX - itemGap + this._textGap;
} else {
lastY = lastY - itemGap + this._textGap;
}
textShape = this._getTextShape(lastX, lastY, this.dataRangeOption.text[1]);
if (this.dataRangeOption.orient != 'horizontal') {
textShape.style.y -= 5;
textShape.style.textBaseline = 'top';
}
this.shapeList.push(new TextShape(textShape));
}
},
_buildGradient: function () {
var itemShape;
var textShape;
var font = this.getFont(this.dataRangeOption.textStyle);
var lastX = this._itemGroupLocation.x;
var lastY = this._itemGroupLocation.y;
var itemWidth = this.dataRangeOption.itemWidth;
var itemHeight = this.dataRangeOption.itemHeight;
var textHeight = zrArea.getTextHeight('国', font);
var mSize = 10;
var needValueText = true;
if (this.dataRangeOption.text) {
needValueText = false;
if (this.dataRangeOption.text[0]) {
textShape = this._getTextShape(lastX, lastY, this.dataRangeOption.text[0]);
if (this.dataRangeOption.orient == 'horizontal') {
lastX += zrArea.getTextWidth(this.dataRangeOption.text[0], font) + this._textGap;
} else {
lastY += textHeight + this._textGap;
textShape.style.y += textHeight / 2 + this._textGap;
textShape.style.textBaseline = 'bottom';
}
this.shapeList.push(new TextShape(textShape));
}
}
var zrColor = require('zrender/tool/color');
var per = 1 / (this.dataRangeOption.color.length - 1);
var colorList = [];
for (var i = 0, l = this.dataRangeOption.color.length; i < l; i++) {
colorList.push([
i * per,
this.dataRangeOption.color[i]
]);
}
if (this.dataRangeOption.orient == 'horizontal') {
itemShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
style: {
x: lastX,
y: lastY,
width: itemWidth * mSize,
height: itemHeight,
color: zrColor.getLinearGradient(lastX, lastY, lastX + itemWidth * mSize, lastY, colorList)
},
hoverable: false
};
lastX += itemWidth * mSize + this._textGap;
} else {
itemShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
style: {
x: lastX,
y: lastY,
width: itemWidth,
height: itemHeight * mSize,
color: zrColor.getLinearGradient(lastX, lastY, lastX, lastY + itemHeight * mSize, colorList)
},
hoverable: false
};
lastY += itemHeight * mSize + this._textGap;
}
this.shapeList.push(new RectangleShape(itemShape));
this._calculableLocation = itemShape.style;
if (this.dataRangeOption.calculable) {
this._buildFiller();
this._bulidMask();
this._bulidHandle();
}
this._buildIndicator();
if (!needValueText && this.dataRangeOption.text[1]) {
textShape = this._getTextShape(lastX, lastY, this.dataRangeOption.text[1]);
this.shapeList.push(new TextShape(textShape));
}
},
_buildIndicator: function () {
var x = this._calculableLocation.x;
var y = this._calculableLocation.y;
var width = this._calculableLocation.width;
var height = this._calculableLocation.height;
var size = 5;
var pointList;
var textPosition;
if (this.dataRangeOption.orient == 'horizontal') {
if (this.dataRangeOption.y != 'bottom') {
pointList = [
[
x,
y + height
],
[
x - size,
y + height + size
],
[
x + size,
y + height + size
]
];
textPosition = 'bottom';
} else {
pointList = [
[
x,
y
],
[
x - size,
y - size
],
[
x + size,
y - size
]
];
textPosition = 'top';
}
} else {
if (this.dataRangeOption.x != 'right') {
pointList = [
[
x + width,
y
],
[
x + width + size,
y - size
],
[
x + width + size,
y + size
]
];
textPosition = 'right';
} else {
pointList = [
[
x,
y
],
[
x - size,
y - size
],
[
x - size,
y + size
]
];
textPosition = 'left';
}
}
this._indicatorShape = {
style: {
pointList: pointList,
color: '#fff',
__rect: {
x: Math.min(pointList[0][0], pointList[1][0]),
y: Math.min(pointList[0][1], pointList[1][1]),
width: size * (this.dataRangeOption.orient == 'horizontal' ? 2 : 1),
height: size * (this.dataRangeOption.orient == 'horizontal' ? 1 : 2)
}
},
highlightStyle: {
brushType: 'fill',
textPosition: textPosition,
textColor: this.dataRangeOption.textStyle.color
},
hoverable: false
};
this._indicatorShape = new HandlePolygonShape(this._indicatorShape);
},
_buildFiller: function () {
this._fillerShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase() + 1,
style: {
x: this._calculableLocation.x,
y: this._calculableLocation.y,
width: this._calculableLocation.width,
height: this._calculableLocation.height,
color: 'rgba(255,255,255,0)'
},
highlightStyle: {
strokeColor: 'rgba(255,255,255,0.5)',
lineWidth: 1
},
draggable: true,
ondrift: this._ondrift,
ondragend: this._ondragend,
onmousemove: this._dispatchHoverLink,
_type: 'filler'
};
this._fillerShape = new RectangleShape(this._fillerShape);
this.shapeList.push(this._fillerShape);
},
_bulidHandle: function () {
var x = this._calculableLocation.x;
var y = this._calculableLocation.y;
var width = this._calculableLocation.width;
var height = this._calculableLocation.height;
var font = this.getFont(this.dataRangeOption.textStyle);
var textHeight = zrArea.getTextHeight('国', font);
var textWidth = Math.max(zrArea.getTextWidth(this._textFormat(this.dataRangeOption.max), font), zrArea.getTextWidth(this._textFormat(this.dataRangeOption.min), font)) + 2;
var pointListStart;
var textXStart;
var textYStart;
var coverRectStart;
var pointListEnd;
var textXEnd;
var textYEnd;
var coverRectEnd;
if (this.dataRangeOption.orient == 'horizontal') {
if (this.dataRangeOption.y != 'bottom') {
pointListStart = [
[
x,
y
],
[
x,
y + height + textHeight
],
[
x - textHeight,
y + height + textHeight
],
[
x - 1,
y + height
],
[
x - 1,
y
]
];
textXStart = x - textWidth / 2 - textHeight;
textYStart = y + height + textHeight / 2 + 2;
coverRectStart = {
x: x - textWidth - textHeight,
y: y + height,
width: textWidth + textHeight,
height: textHeight
};
pointListEnd = [
[
x + width,
y
],
[
x + width,
y + height + textHeight
],
[
x + width + textHeight,
y + height + textHeight
],
[
x + width + 1,
y + height
],
[
x + width + 1,
y
]
];
textXEnd = x + width + textWidth / 2 + textHeight;
textYEnd = textYStart;
coverRectEnd = {
x: x + width,
y: y + height,
width: textWidth + textHeight,
height: textHeight
};
} else {
pointListStart = [
[
x,
y + height
],
[
x,
y - textHeight
],
[
x - textHeight,
y - textHeight
],
[
x - 1,
y
],
[
x - 1,
y + height
]
];
textXStart = x - textWidth / 2 - textHeight;
textYStart = y - textHeight / 2 - 2;
coverRectStart = {
x: x - textWidth - textHeight,
y: y - textHeight,
width: textWidth + textHeight,
height: textHeight
};
pointListEnd = [
[
x + width,
y + height
],
[
x + width,
y - textHeight
],
[
x + width + textHeight,
y - textHeight
],
[
x + width + 1,
y
],
[
x + width + 1,
y + height
]
];
textXEnd = x + width + textWidth / 2 + textHeight;
textYEnd = textYStart;
coverRectEnd = {
x: x + width,
y: y - textHeight,
width: textWidth + textHeight,
height: textHeight
};
}
} else {
textWidth += textHeight;
if (this.dataRangeOption.x != 'right') {
pointListStart = [
[
x,
y
],
[
x + width + textHeight,
y
],
[
x + width + textHeight,
y - textHeight
],
[
x + width,
y - 1
],
[
x,
y - 1
]
];
textXStart = x + width + textWidth / 2 + textHeight / 2;
textYStart = y - textHeight / 2;
coverRectStart = {
x: x + width,
y: y - textHeight,
width: textWidth + textHeight,
height: textHeight
};
pointListEnd = [
[
x,
y + height
],
[
x + width + textHeight,
y + height
],
[
x + width + textHeight,
y + textHeight + height
],
[
x + width,
y + 1 + height
],
[
x,
y + height + 1
]
];
textXEnd = textXStart;
textYEnd = y + height + textHeight / 2;
coverRectEnd = {
x: x + width,
y: y + height,
width: textWidth + textHeight,
height: textHeight
};
} else {
pointListStart = [
[
x + width,
y
],
[
x - textHeight,
y
],
[
x - textHeight,
y - textHeight
],
[
x,
y - 1
],
[
x + width,
y - 1
]
];
textXStart = x - textWidth / 2 - textHeight / 2;
textYStart = y - textHeight / 2;
coverRectStart = {
x: x - textWidth - textHeight,
y: y - textHeight,
width: textWidth + textHeight,
height: textHeight
};
pointListEnd = [
[
x + width,
y + height
],
[
x - textHeight,
y + height
],
[
x - textHeight,
y + textHeight + height
],
[
x,
y + 1 + height
],
[
x + width,
y + height + 1
]
];
textXEnd = textXStart;
textYEnd = y + height + textHeight / 2;
coverRectEnd = {
x: x - textWidth - textHeight,
y: y + height,
width: textWidth + textHeight,
height: textHeight
};
}
}
this._startShape = {
style: {
pointList: pointListStart,
text: this._textFormat(this.dataRangeOption.max),
textX: textXStart,
textY: textYStart,
textFont: font,
color: this.getColor(this.dataRangeOption.max),
rect: coverRectStart,
x: pointListStart[0][0],
y: pointListStart[0][1],
_x: pointListStart[0][0],
_y: pointListStart[0][1]
}
};
this._startShape.highlightStyle = {
strokeColor: this._startShape.style.color,
lineWidth: 1
};
this._endShape = {
style: {
pointList: pointListEnd,
text: this._textFormat(this.dataRangeOption.min),
textX: textXEnd,
textY: textYEnd,
textFont: font,
color: this.getColor(this.dataRangeOption.min),
rect: coverRectEnd,
x: pointListEnd[0][0],
y: pointListEnd[0][1],
_x: pointListEnd[0][0],
_y: pointListEnd[0][1]
}
};
this._endShape.highlightStyle = {
strokeColor: this._endShape.style.color,
lineWidth: 1
};
this._startShape.zlevel = this._endShape.zlevel = this.getZlevelBase();
this._startShape.z = this._endShape.z = this.getZBase() + 1;
this._startShape.draggable = this._endShape.draggable = true;
this._startShape.ondrift = this._endShape.ondrift = this._ondrift;
this._startShape.ondragend = this._endShape.ondragend = this._ondragend;
this._startShape.style.textColor = this._endShape.style.textColor = this.dataRangeOption.textStyle.color;
this._startShape.style.textAlign = this._endShape.style.textAlign = 'center';
this._startShape.style.textPosition = this._endShape.style.textPosition = 'specific';
this._startShape.style.textBaseline = this._endShape.style.textBaseline = 'middle';
this._startShape.style.width = this._endShape.style.width = 0;
this._startShape.style.height = this._endShape.style.height = 0;
this._startShape.style.textPosition = this._endShape.style.textPosition = 'specific';
this._startShape = new HandlePolygonShape(this._startShape);
this._endShape = new HandlePolygonShape(this._endShape);
this.shapeList.push(this._startShape);
this.shapeList.push(this._endShape);
},
_bulidMask: function () {
var x = this._calculableLocation.x;
var y = this._calculableLocation.y;
var width = this._calculableLocation.width;
var height = this._calculableLocation.height;
this._startMask = {
zlevel: this.getZlevelBase(),
z: this.getZBase() + 1,
style: {
x: x,
y: y,
width: this.dataRangeOption.orient == 'horizontal' ? 0 : width,
height: this.dataRangeOption.orient == 'horizontal' ? height : 0,
color: '#ccc'
},
hoverable: false
};
this._endMask = {
zlevel: this.getZlevelBase(),
z: this.getZBase() + 1,
style: {
x: this.dataRangeOption.orient == 'horizontal' ? x + width : x,
y: this.dataRangeOption.orient == 'horizontal' ? y : y + height,
width: this.dataRangeOption.orient == 'horizontal' ? 0 : width,
height: this.dataRangeOption.orient == 'horizontal' ? height : 0,
color: '#ccc'
},
hoverable: false
};
this._startMask = new RectangleShape(this._startMask);
this._endMask = new RectangleShape(this._endMask);
this.shapeList.push(this._startMask);
this.shapeList.push(this._endMask);
},
_buildBackground: function () {
var padding = this.reformCssArray(this.dataRangeOption.padding);
this.shapeList.push(new RectangleShape({
zlevel: this.getZlevelBase(),
z: this.getZBase(),
hoverable: false,
style: {
x: this._itemGroupLocation.x - padding[3],
y: this._itemGroupLocation.y - padding[0],
width: this._itemGroupLocation.width + padding[3] + padding[1],
height: this._itemGroupLocation.height + padding[0] + padding[2],
brushType: this.dataRangeOption.borderWidth === 0 ? 'fill' : 'both',
color: this.dataRangeOption.backgroundColor,
strokeColor: this.dataRangeOption.borderColor,
lineWidth: this.dataRangeOption.borderWidth
}
}));
},
_getItemGroupLocation: function () {
var data = this._valueTextList;
var dataLength = data.length;
var itemGap = this.dataRangeOption.itemGap;
var itemWidth = this.dataRangeOption.itemWidth;
var itemHeight = this.dataRangeOption.itemHeight;
var totalWidth = 0;
var totalHeight = 0;
var font = this.getFont(this.dataRangeOption.textStyle);
var textHeight = zrArea.getTextHeight('国', font);
var mSize = 10;
if (this.dataRangeOption.orient == 'horizontal') {
if (this.dataRangeOption.text || this._isContinuity()) {
totalWidth = (this._isContinuity() ? itemWidth * mSize + itemGap : dataLength * (itemWidth + itemGap)) + (this.dataRangeOption.text && typeof this.dataRangeOption.text[0] != 'undefined' ? zrArea.getTextWidth(this.dataRangeOption.text[0], font) + this._textGap : 0) + (this.dataRangeOption.text && typeof this.dataRangeOption.text[1] != 'undefined' ? zrArea.getTextWidth(this.dataRangeOption.text[1], font) + this._textGap : 0);
} else {
itemWidth += 5;
for (var i = 0; i < dataLength; i++) {
totalWidth += itemWidth + zrArea.getTextWidth(data[i], font) + itemGap;
}
}
totalWidth -= itemGap;
totalHeight = Math.max(textHeight, itemHeight);
} else {
var maxWidth;
if (this.dataRangeOption.text || this._isContinuity()) {
totalHeight = (this._isContinuity() ? itemHeight * mSize + itemGap : dataLength * (itemHeight + itemGap)) + (this.dataRangeOption.text && typeof this.dataRangeOption.text[0] != 'undefined' ? this._textGap + textHeight : 0) + (this.dataRangeOption.text && typeof this.dataRangeOption.text[1] != 'undefined' ? this._textGap + textHeight : 0);
maxWidth = Math.max(zrArea.getTextWidth(this.dataRangeOption.text && this.dataRangeOption.text[0] || '', font), zrArea.getTextWidth(this.dataRangeOption.text && this.dataRangeOption.text[1] || '', font));
totalWidth = Math.max(itemWidth, maxWidth);
} else {
totalHeight = (itemHeight + itemGap) * dataLength;
itemWidth += 5;
maxWidth = 0;
for (var i = 0; i < dataLength; i++) {
maxWidth = Math.max(maxWidth, zrArea.getTextWidth(data[i], font));
}
totalWidth = itemWidth + maxWidth;
}
totalHeight -= itemGap;
}
var padding = this.reformCssArray(this.dataRangeOption.padding);
var x;
var zrWidth = this.zr.getWidth();
switch (this.dataRangeOption.x) {
case 'center':
x = Math.floor((zrWidth - totalWidth) / 2);
break;
case 'left':
x = padding[3] + this.dataRangeOption.borderWidth;
break;
case 'right':
x = zrWidth - totalWidth - padding[1] - this.dataRangeOption.borderWidth;
break;
default:
x = this.parsePercent(this.dataRangeOption.x, zrWidth);
x = isNaN(x) ? 0 : x;
break;
}
var y;
var zrHeight = this.zr.getHeight();
switch (this.dataRangeOption.y) {
case 'top':
y = padding[0] + this.dataRangeOption.borderWidth;
break;
case 'bottom':
y = zrHeight - totalHeight - padding[2] - this.dataRangeOption.borderWidth;
break;
case 'center':
y = Math.floor((zrHeight - totalHeight) / 2);
break;
default:
y = this.parsePercent(this.dataRangeOption.y, zrHeight);
y = isNaN(y) ? 0 : y;
break;
}
if (this.dataRangeOption.calculable) {
var handlerWidth = Math.max(zrArea.getTextWidth(this.dataRangeOption.max, font), zrArea.getTextWidth(this.dataRangeOption.min, font)) + textHeight;
if (this.dataRangeOption.orient == 'horizontal') {
if (x < handlerWidth) {
x = handlerWidth;
}
if (x + totalWidth + handlerWidth > zrWidth) {
x -= handlerWidth;
}
} else {
if (y < textHeight) {
y = textHeight;
}
if (y + totalHeight + textHeight > zrHeight) {
y -= textHeight;
}
}
}
return {
x: x,
y: y,
width: totalWidth,
height: totalHeight
};
},
_getTextShape: function (x, y, text) {
return {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
style: {
x: this.dataRangeOption.orient == 'horizontal' ? x : this._itemGroupLocation.x + this._itemGroupLocation.width / 2,
y: this.dataRangeOption.orient == 'horizontal' ? this._itemGroupLocation.y + this._itemGroupLocation.height / 2 : y,
color: this.dataRangeOption.textStyle.color,
text: text,
textFont: this.getFont(this.dataRangeOption.textStyle),
textBaseline: this.dataRangeOption.orient == 'horizontal' ? 'middle' : 'top',
textAlign: this.dataRangeOption.orient == 'horizontal' ? 'left' : 'center'
},
hoverable: false
};
},
_getItemShape: function (x, y, width, height, color) {
return {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
style: {
x: x,
y: y + 1,
width: width,
height: height - 2,
color: color
},
highlightStyle: {
strokeColor: color,
lineWidth: 1
}
};
},
__ondrift: function (shape, dx, dy) {
var x = this._calculableLocation.x;
var y = this._calculableLocation.y;
var width = this._calculableLocation.width;
var height = this._calculableLocation.height;
if (this.dataRangeOption.orient == 'horizontal') {
if (shape.style.x + dx <= x) {
shape.style.x = x;
} else if (shape.style.x + dx + shape.style.width >= x + width) {
shape.style.x = x + width - shape.style.width;
} else {
shape.style.x += dx;
}
} else {
if (shape.style.y + dy <= y) {
shape.style.y = y;
} else if (shape.style.y + dy + shape.style.height >= y + height) {
shape.style.y = y + height - shape.style.height;
} else {
shape.style.y += dy;
}
}
if (shape._type == 'filler') {
this._syncHandleShape();
} else {
this._syncFillerShape(shape);
}
if (this.dataRangeOption.realtime) {
this._dispatchDataRange();
}
return true;
},
__ondragend: function () {
this.isDragend = true;
},
ondragend: function (param, status) {
if (!this.isDragend || !param.target) {
return;
}
status.dragOut = true;
status.dragIn = true;
if (!this.dataRangeOption.realtime) {
this._dispatchDataRange();
}
status.needRefresh = false;
this.isDragend = false;
return;
},
_syncShapeFromRange: function () {
var range = this.dataRangeOption.range || {};
var optRangeStart = range.start;
var optRangeEnd = range.end;
if (optRangeEnd < optRangeStart) {
optRangeStart = [
optRangeEnd,
optRangeEnd = optRangeStart
][0];
}
this._range.end = optRangeStart != null ? optRangeStart : this._range.end != null ? this._range.end : 0;
this._range.start = optRangeEnd != null ? optRangeEnd : this._range.start != null ? this._range.start : 100;
if (this._range.start != 100 || this._range.end !== 0) {
if (this.dataRangeOption.orient == 'horizontal') {
var width = this._fillerShape.style.width;
this._fillerShape.style.x += width * (100 - this._range.start) / 100;
this._fillerShape.style.width = width * (this._range.start - this._range.end) / 100;
} else {
var height = this._fillerShape.style.height;
this._fillerShape.style.y += height * (100 - this._range.start) / 100;
this._fillerShape.style.height = height * (this._range.start - this._range.end) / 100;
}
this.zr.modShape(this._fillerShape.id);
this._syncHandleShape();
}
},
_syncHandleShape: function () {
var x = this._calculableLocation.x;
var y = this._calculableLocation.y;
var width = this._calculableLocation.width;
var height = this._calculableLocation.height;
if (this.dataRangeOption.orient == 'horizontal') {
this._startShape.style.x = this._fillerShape.style.x;
this._startMask.style.width = this._startShape.style.x - x;
this._endShape.style.x = this._fillerShape.style.x + this._fillerShape.style.width;
this._endMask.style.x = this._endShape.style.x;
this._endMask.style.width = x + width - this._endShape.style.x;
this._range.start = Math.ceil(100 - (this._startShape.style.x - x) / width * 100);
this._range.end = Math.floor(100 - (this._endShape.style.x - x) / width * 100);
} else {
this._startShape.style.y = this._fillerShape.style.y;
this._startMask.style.height = this._startShape.style.y - y;
this._endShape.style.y = this._fillerShape.style.y + this._fillerShape.style.height;
this._endMask.style.y = this._endShape.style.y;
this._endMask.style.height = y + height - this._endShape.style.y;
this._range.start = Math.ceil(100 - (this._startShape.style.y - y) / height * 100);
this._range.end = Math.floor(100 - (this._endShape.style.y - y) / height * 100);
}
this._syncShape();
},
_syncFillerShape: function (e) {
var x = this._calculableLocation.x;
var y = this._calculableLocation.y;
var width = this._calculableLocation.width;
var height = this._calculableLocation.height;
var a;
var b;
if (this.dataRangeOption.orient == 'horizontal') {
a = this._startShape.style.x;
b = this._endShape.style.x;
if (e.id == this._startShape.id && a >= b) {
b = a;
this._endShape.style.x = a;
} else if (e.id == this._endShape.id && a >= b) {
a = b;
this._startShape.style.x = a;
}
this._fillerShape.style.x = a;
this._fillerShape.style.width = b - a;
this._startMask.style.width = a - x;
this._endMask.style.x = b;
this._endMask.style.width = x + width - b;
this._range.start = Math.ceil(100 - (a - x) / width * 100);
this._range.end = Math.floor(100 - (b - x) / width * 100);
} else {
a = this._startShape.style.y;
b = this._endShape.style.y;
if (e.id == this._startShape.id && a >= b) {
b = a;
this._endShape.style.y = a;
} else if (e.id == this._endShape.id && a >= b) {
a = b;
this._startShape.style.y = a;
}
this._fillerShape.style.y = a;
this._fillerShape.style.height = b - a;
this._startMask.style.height = a - y;
this._endMask.style.y = b;
this._endMask.style.height = y + height - b;
this._range.start = Math.ceil(100 - (a - y) / height * 100);
this._range.end = Math.floor(100 - (b - y) / height * 100);
}
this._syncShape();
},
_syncShape: function () {
this._startShape.position = [
this._startShape.style.x - this._startShape.style._x,
this._startShape.style.y - this._startShape.style._y
];
this._startShape.style.text = this._textFormat(this._gap * this._range.start + this.dataRangeOption.min);
this._startShape.style.color = this._startShape.highlightStyle.strokeColor = this.getColor(this._gap * this._range.start + this.dataRangeOption.min);
this._endShape.position = [
this._endShape.style.x - this._endShape.style._x,
this._endShape.style.y - this._endShape.style._y
];
this._endShape.style.text = this._textFormat(this._gap * this._range.end + this.dataRangeOption.min);
this._endShape.style.color = this._endShape.highlightStyle.strokeColor = this.getColor(this._gap * this._range.end + this.dataRangeOption.min);
this.zr.modShape(this._startShape.id);
this.zr.modShape(this._endShape.id);
this.zr.modShape(this._startMask.id);
this.zr.modShape(this._endMask.id);
this.zr.modShape(this._fillerShape.id);
this.zr.refreshNextFrame();
},
_dispatchDataRange: function () {
this.messageCenter.dispatch(ecConfig.EVENT.DATA_RANGE, null, {
range: {
start: this._range.end,
end: this._range.start
}
}, this.myChart);
},
__dataRangeSelected: function (param) {
if (this.dataRangeOption.selectedMode === 'single') {
for (var k in this._selectedMap) {
this._selectedMap[k] = false;
}
}
var idx = param.target._idx;
this._selectedMap[idx] = !this._selectedMap[idx];
var valueMax;
var valueMin;
if (this._useCustomizedSplit()) {
valueMax = this._splitList[idx].max;
valueMin = this._splitList[idx].min;
} else {
valueMax = (this._colorList.length - idx) * this._gap + this.dataRangeOption.min;
valueMin = valueMax - this._gap;
}
this.messageCenter.dispatch(ecConfig.EVENT.DATA_RANGE_SELECTED, param.event, {
selected: this._selectedMap,
target: idx,
valueMax: valueMax,
valueMin: valueMin
}, this.myChart);
this.messageCenter.dispatch(ecConfig.EVENT.REFRESH, null, null, this.myChart);
},
__dispatchHoverLink: function (param) {
var valueMin;
var valueMax;
if (this.dataRangeOption.calculable) {
var totalValue = this.dataRangeOption.max - this.dataRangeOption.min;
var curValue;
if (this.dataRangeOption.orient == 'horizontal') {
curValue = (1 - (zrEvent.getX(param.event) - this._calculableLocation.x) / this._calculableLocation.width) * totalValue;
} else {
curValue = (1 - (zrEvent.getY(param.event) - this._calculableLocation.y) / this._calculableLocation.height) * totalValue;
}
valueMin = curValue - totalValue * 0.05;
valueMax = curValue + totalValue * 0.05;
} else if (this._useCustomizedSplit()) {
var idx = param.target._idx;
valueMax = this._splitList[idx].max;
valueMin = this._splitList[idx].min;
} else {
var idx = param.target._idx;
valueMax = (this._colorList.length - idx) * this._gap + this.dataRangeOption.min;
valueMin = valueMax - this._gap;
}
this.messageCenter.dispatch(ecConfig.EVENT.DATA_RANGE_HOVERLINK, param.event, {
valueMin: valueMin,
valueMax: valueMax
}, this.myChart);
},
__onhoverlink: function (param) {
if (this.dataRangeOption.show && this.dataRangeOption.hoverLink && this._indicatorShape && param && param.seriesIndex != null && param.dataIndex != null) {
var curValue = param.value;
if (curValue === '' || isNaN(curValue)) {
return;
}
if (curValue < this.dataRangeOption.min) {
curValue = this.dataRangeOption.min;
} else if (curValue > this.dataRangeOption.max) {
curValue = this.dataRangeOption.max;
}
if (this.dataRangeOption.orient == 'horizontal') {
this._indicatorShape.position = [
(this.dataRangeOption.max - curValue) / (this.dataRangeOption.max - this.dataRangeOption.min) * this._calculableLocation.width,
0
];
} else {
this._indicatorShape.position = [
0,
(this.dataRangeOption.max - curValue) / (this.dataRangeOption.max - this.dataRangeOption.min) * this._calculableLocation.height
];
}
this._indicatorShape.style.text = this._textFormat(param.value);
this._indicatorShape.style.color = this.getColor(curValue);
this.zr.addHoverShape(this._indicatorShape);
}
},
_textFormat: function (valueStart, valueEnd) {
var dataRangeOption = this.dataRangeOption;
if (valueStart !== -Number.MAX_VALUE) {
valueStart = (+valueStart).toFixed(dataRangeOption.precision);
}
if (valueEnd != null && valueEnd !== Number.MAX_VALUE) {
valueEnd = (+valueEnd).toFixed(dataRangeOption.precision);
}
if (dataRangeOption.formatter) {
if (typeof dataRangeOption.formatter == 'string') {
return dataRangeOption.formatter.replace('{value}', valueStart === -Number.MAX_VALUE ? 'min' : valueStart).replace('{value2}', valueEnd === Number.MAX_VALUE ? 'max' : valueEnd);
} else if (typeof dataRangeOption.formatter == 'function') {
return dataRangeOption.formatter.call(this.myChart, valueStart, valueEnd);
}
}
if (valueEnd == null) {
return valueStart;
} else {
if (valueStart === -Number.MAX_VALUE) {
return '< ' + valueEnd;
} else if (valueEnd === Number.MAX_VALUE) {
return '> ' + valueStart;
} else {
return valueStart + ' - ' + valueEnd;
}
}
},
_isContinuity: function () {
var dataRangeOption = this.dataRangeOption;
return !(dataRangeOption.splitList ? dataRangeOption.splitList.length > 0 : dataRangeOption.splitNumber > 0) || dataRangeOption.calculable;
},
_useCustomizedSplit: function () {
var dataRangeOption = this.dataRangeOption;
return dataRangeOption.splitList && dataRangeOption.splitList.length > 0;
},
_buildColorList: function (splitNumber) {
this._colorList = zrColor.getGradientColors(this.dataRangeOption.color, Math.max((splitNumber - this.dataRangeOption.color.length) / (this.dataRangeOption.color.length - 1), 0) + 1);
if (this._colorList.length > splitNumber) {
var len = this._colorList.length;
var newColorList = [this._colorList[0]];
var step = len / (splitNumber - 1);
for (var i = 1; i < splitNumber - 1; i++) {
newColorList.push(this._colorList[Math.floor(i * step)]);
}
newColorList.push(this._colorList[len - 1]);
this._colorList = newColorList;
}
if (this._useCustomizedSplit()) {
var splitList = this._splitList;
for (var i = 0, len = splitList.length; i < len; i++) {
if (splitList[i].color) {
this._colorList[i] = splitList[i].color;
}
}
}
},
_buildGap: function (splitNumber) {
if (!this._useCustomizedSplit()) {
var precision = this.dataRangeOption.precision;
this._gap = (this.dataRangeOption.max - this.dataRangeOption.min) / splitNumber;
while (this._gap.toFixed(precision) - 0 != this._gap && precision < 5) {
precision++;
}
this.dataRangeOption.precision = precision;
this._gap = ((this.dataRangeOption.max - this.dataRangeOption.min) / splitNumber).toFixed(precision) - 0;
}
},
_buildDataList: function (splitNumber) {
var valueTextList = this._valueTextList = [];
var dataRangeOption = this.dataRangeOption;
var useCustomizedSplit = this._useCustomizedSplit();
for (var i = 0; i < splitNumber; i++) {
this._selectedMap[i] = true;
var text = '';
if (useCustomizedSplit) {
var splitListItem = this._splitList[splitNumber - 1 - i];
if (splitListItem.label != null) {
text = splitListItem.label;
} else if (splitListItem.single != null) {
text = this._textFormat(splitListItem.single);
} else {
text = this._textFormat(splitListItem.min, splitListItem.max);
}
} else {
text = this._textFormat(i * this._gap + dataRangeOption.min, (i + 1) * this._gap + dataRangeOption.min);
}
valueTextList.unshift(text);
}
},
_buildSplitList: function () {
if (!this._useCustomizedSplit()) {
return;
}
var splitList = this.dataRangeOption.splitList;
var splitRangeList = this._splitList = [];
for (var i = 0, len = splitList.length; i < len; i++) {
var splitListItem = splitList[i];
if (!splitListItem || splitListItem.start == null && splitListItem.end == null) {
throw new Error('Empty item exists in splitList!');
}
var reformedItem = {
label: splitListItem.label,
color: splitListItem.color
};
reformedItem.min = splitListItem.start;
reformedItem.max = splitListItem.end;
if (reformedItem.min > reformedItem.max) {
reformedItem.min = [
reformedItem.max,
reformedItem.max = reformedItem.min
][0];
}
if (reformedItem.min === reformedItem.max) {
reformedItem.single = reformedItem.max;
}
if (reformedItem.min == null) {
reformedItem.min = -Number.MAX_VALUE;
}
if (reformedItem.max == null) {
reformedItem.max = Number.MAX_VALUE;
}
splitRangeList.push(reformedItem);
}
},
refresh: function (newOption) {
if (newOption) {
this.option = newOption;
this.option.dataRange = this.reformOption(this.option.dataRange);
var dataRangeOption = this.dataRangeOption = this.option.dataRange;
if (!this._useCustomizedSplit() && (dataRangeOption.min == null || dataRangeOption.max == null)) {
throw new Error('option.dataRange.min or option.dataRange.max has not been defined.');
}
if (!this.myChart.canvasSupported) {
dataRangeOption.realtime = false;
}
var splitNumber = this._isContinuity() ? 100 : this._useCustomizedSplit() ? dataRangeOption.splitList.length : dataRangeOption.splitNumber;
this._buildSplitList();
this._buildColorList(splitNumber);
this._buildGap(splitNumber);
this._buildDataList(splitNumber);
}
this.clear();
this._buildShape();
},
getColor: function (value) {
if (isNaN(value)) {
return null;
}
var idx;
if (!this._useCustomizedSplit()) {
if (this.dataRangeOption.min == this.dataRangeOption.max) {
return this._colorList[0];
}
if (value < this.dataRangeOption.min) {
value = this.dataRangeOption.min;
} else if (value > this.dataRangeOption.max) {
value = this.dataRangeOption.max;
}
if (this.dataRangeOption.calculable) {
if (value - (this._gap * this._range.start + this.dataRangeOption.min) > 0.00005 || value - (this._gap * this._range.end + this.dataRangeOption.min) < -0.00005) {
return null;
}
}
idx = this._colorList.length - Math.ceil((value - this.dataRangeOption.min) / (this.dataRangeOption.max - this.dataRangeOption.min) * this._colorList.length);
if (idx == this._colorList.length) {
idx--;
}
} else {
var splitRangeList = this._splitList;
for (var i = 0, len = splitRangeList.length; i < len; i++) {
if (splitRangeList[i].min <= value && splitRangeList[i].max >= value) {
idx = i;
break;
}
}
}
if (this._selectedMap[idx]) {
return this._colorList[idx];
} else {
return null;
}
},
getColorByIndex: function (idx) {
if (idx >= this._colorList.length) {
idx = this._colorList.length - 1;
} else if (idx < 0) {
idx = 0;
}
return this._colorList[idx];
},
onbeforDispose: function () {
this.messageCenter.unbind(ecConfig.EVENT.HOVER, this._onhoverlink);
}
};
zrUtil.inherits(DataRange, Base);
require('../component').define('dataRange', DataRange);
return DataRange;
});define('echarts/util/shape/HandlePolygon', [
'require',
'zrender/shape/Base',
'zrender/shape/Polygon',
'zrender/tool/util'
], function (require) {
var Base = require('zrender/shape/Base');
var PolygonShape = require('zrender/shape/Polygon');
var zrUtil = require('zrender/tool/util');
function HandlePolygon(options) {
Base.call(this, options);
}
HandlePolygon.prototype = {
type: 'handle-polygon',
buildPath: function (ctx, style) {
PolygonShape.prototype.buildPath(ctx, style);
},
isCover: function (x, y) {
var originPos = this.transformCoordToLocal(x, y);
x = originPos[0];
y = originPos[1];
var rect = this.style.rect;
if (x >= rect.x && x <= rect.x + rect.width && y >= rect.y && y <= rect.y + rect.height) {
return true;
} else {
return false;
}
}
};
zrUtil.inherits(HandlePolygon, Base);
return HandlePolygon;
});define('echarts/chart/k', [
'require',
'./base',
'../util/shape/Candle',
'../component/axis',
'../component/grid',
'../component/dataZoom',
'../config',
'../util/ecData',
'zrender/tool/util',
'../chart'
], function (require) {
var ChartBase = require('./base');
var CandleShape = require('../util/shape/Candle');
require('../component/axis');
require('../component/grid');
require('../component/dataZoom');
var ecConfig = require('../config');
ecConfig.k = {
zlevel: 0,
z: 2,
clickable: true,
hoverable: true,
legendHoverLink: false,
xAxisIndex: 0,
yAxisIndex: 0,
itemStyle: {
normal: {
color: '#fff',
color0: '#00aa11',
lineStyle: {
width: 1,
color: '#ff3200',
color0: '#00aa11'
},
label: { show: false }
},
emphasis: { label: { show: false } }
}
};
var ecData = require('../util/ecData');
var zrUtil = require('zrender/tool/util');
function K(ecTheme, messageCenter, zr, option, myChart) {
ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
this.refresh(option);
}
K.prototype = {
type: ecConfig.CHART_TYPE_K,
_buildShape: function () {
var series = this.series;
this.selectedMap = {};
var _position2sIndexMap = {
top: [],
bottom: []
};
var xAxis;
for (var i = 0, l = series.length; i < l; i++) {
if (series[i].type === ecConfig.CHART_TYPE_K) {
series[i] = this.reformOption(series[i]);
this.legendHoverLink = series[i].legendHoverLink || this.legendHoverLink;
xAxis = this.component.xAxis.getAxis(series[i].xAxisIndex);
if (xAxis.type === ecConfig.COMPONENT_TYPE_AXIS_CATEGORY) {
_position2sIndexMap[xAxis.getPosition()].push(i);
}
}
}
for (var position in _position2sIndexMap) {
if (_position2sIndexMap[position].length > 0) {
this._buildSinglePosition(position, _position2sIndexMap[position]);
}
}
this.addShapeList();
},
_buildSinglePosition: function (position, seriesArray) {
var mapData = this._mapData(seriesArray);
var locationMap = mapData.locationMap;
var maxDataLength = mapData.maxDataLength;
if (maxDataLength === 0 || locationMap.length === 0) {
return;
}
this._buildHorizontal(seriesArray, maxDataLength, locationMap);
for (var i = 0, l = seriesArray.length; i < l; i++) {
this.buildMark(seriesArray[i]);
}
},
_mapData: function (seriesArray) {
var series = this.series;
var serie;
var serieName;
var legend = this.component.legend;
var locationMap = [];
var maxDataLength = 0;
for (var i = 0, l = seriesArray.length; i < l; i++) {
serie = series[seriesArray[i]];
serieName = serie.name;
this.selectedMap[serieName] = legend ? legend.isSelected(serieName) : true;
if (this.selectedMap[serieName]) {
locationMap.push(seriesArray[i]);
}
maxDataLength = Math.max(maxDataLength, serie.data.length);
}
return {
locationMap: locationMap,
maxDataLength: maxDataLength
};
},
_buildHorizontal: function (seriesArray, maxDataLength, locationMap) {
var series = this.series;
var seriesIndex;
var serie;
var xAxisIndex;
var categoryAxis;
var yAxisIndex;
var valueAxis;
var pointList = {};
var candleWidth;
var data;
var value;
var barMaxWidth;
for (var j = 0, k = locationMap.length; j < k; j++) {
seriesIndex = locationMap[j];
serie = series[seriesIndex];
xAxisIndex = serie.xAxisIndex || 0;
categoryAxis = this.component.xAxis.getAxis(xAxisIndex);
candleWidth = serie.barWidth || Math.floor(categoryAxis.getGap() / 2);
barMaxWidth = serie.barMaxWidth;
if (barMaxWidth && barMaxWidth < candleWidth) {
candleWidth = barMaxWidth;
}
yAxisIndex = serie.yAxisIndex || 0;
valueAxis = this.component.yAxis.getAxis(yAxisIndex);
pointList[seriesIndex] = [];
for (var i = 0, l = maxDataLength; i < l; i++) {
if (categoryAxis.getNameByIndex(i) == null) {
break;
}
data = serie.data[i];
value = this.getDataFromOption(data, '-');
if (value === '-' || value.length != 4) {
continue;
}
pointList[seriesIndex].push([
categoryAxis.getCoordByIndex(i),
candleWidth,
valueAxis.getCoord(value[0]),
valueAxis.getCoord(value[1]),
valueAxis.getCoord(value[2]),
valueAxis.getCoord(value[3]),
i,
categoryAxis.getNameByIndex(i)
]);
}
}
this._buildKLine(seriesArray, pointList);
},
_buildKLine: function (seriesArray, pointList) {
var series = this.series;
var nLineWidth;
var nLineColor;
var nLineColor0;
var nColor;
var nColor0;
var eLineWidth;
var eLineColor;
var eLineColor0;
var eColor;
var eColor0;
var serie;
var queryTarget;
var data;
var seriesPL;
var singlePoint;
var candleType;
var seriesIndex;
for (var sIdx = 0, len = seriesArray.length; sIdx < len; sIdx++) {
seriesIndex = seriesArray[sIdx];
serie = series[seriesIndex];
seriesPL = pointList[seriesIndex];
if (this._isLarge(seriesPL)) {
seriesPL = this._getLargePointList(seriesPL);
}
if (serie.type === ecConfig.CHART_TYPE_K && seriesPL != null) {
queryTarget = serie;
nLineWidth = this.query(queryTarget, 'itemStyle.normal.lineStyle.width');
nLineColor = this.query(queryTarget, 'itemStyle.normal.lineStyle.color');
nLineColor0 = this.query(queryTarget, 'itemStyle.normal.lineStyle.color0');
nColor = this.query(queryTarget, 'itemStyle.normal.color');
nColor0 = this.query(queryTarget, 'itemStyle.normal.color0');
eLineWidth = this.query(queryTarget, 'itemStyle.emphasis.lineStyle.width');
eLineColor = this.query(queryTarget, 'itemStyle.emphasis.lineStyle.color');
eLineColor0 = this.query(queryTarget, 'itemStyle.emphasis.lineStyle.color0');
eColor = this.query(queryTarget, 'itemStyle.emphasis.color');
eColor0 = this.query(queryTarget, 'itemStyle.emphasis.color0');
for (var i = 0, l = seriesPL.length; i < l; i++) {
singlePoint = seriesPL[i];
data = serie.data[singlePoint[6]];
queryTarget = data;
candleType = singlePoint[3] < singlePoint[2];
this.shapeList.push(this._getCandle(seriesIndex, singlePoint[6], singlePoint[7], singlePoint[0], singlePoint[1], singlePoint[2], singlePoint[3], singlePoint[4], singlePoint[5], candleType ? this.query(queryTarget, 'itemStyle.normal.color') || nColor : this.query(queryTarget, 'itemStyle.normal.color0') || nColor0, this.query(queryTarget, 'itemStyle.normal.lineStyle.width') || nLineWidth, candleType ? this.query(queryTarget, 'itemStyle.normal.lineStyle.color') || nLineColor : this.query(queryTarget, 'itemStyle.normal.lineStyle.color0') || nLineColor0, candleType ? this.query(queryTarget, 'itemStyle.emphasis.color') || eColor || nColor : this.query(queryTarget, 'itemStyle.emphasis.color0') || eColor0 || nColor0, this.query(queryTarget, 'itemStyle.emphasis.lineStyle.width') || eLineWidth || nLineWidth, candleType ? this.query(queryTarget, 'itemStyle.emphasis.lineStyle.color') || eLineColor || nLineColor : this.query(queryTarget, 'itemStyle.emphasis.lineStyle.color0') || eLineColor0 || nLineColor0));
}
}
}
},
_isLarge: function (singlePL) {
return singlePL[0][1] < 0.5;
},
_getLargePointList: function (singlePL) {
var total = this.component.grid.getWidth();
var len = singlePL.length;
var newList = [];
for (var i = 0; i < total; i++) {
newList[i] = singlePL[Math.floor(len / total * i)];
}
return newList;
},
_getCandle: function (seriesIndex, dataIndex, name, x, width, y0, y1, y2, y3, nColor, nLinewidth, nLineColor, eColor, eLinewidth, eLineColor) {
var series = this.series;
var serie = series[seriesIndex];
var data = serie.data[dataIndex];
var queryTarget = [
data,
serie
];
var itemShape = {
zlevel: serie.zlevel,
z: serie.z,
clickable: this.deepQuery(queryTarget, 'clickable'),
hoverable: this.deepQuery(queryTarget, 'hoverable'),
style: {
x: x,
y: [
y0,
y1,
y2,
y3
],
width: width,
color: nColor,
strokeColor: nLineColor,
lineWidth: nLinewidth,
brushType: 'both'
},
highlightStyle: {
color: eColor,
strokeColor: eLineColor,
lineWidth: eLinewidth
},
_seriesIndex: seriesIndex
};
itemShape = this.addLabel(itemShape, serie, data, name);
ecData.pack(itemShape, serie, seriesIndex, data, dataIndex, name);
itemShape = new CandleShape(itemShape);
return itemShape;
},
getMarkCoord: function (seriesIndex, mpData) {
var serie = this.series[seriesIndex];
var xAxis = this.component.xAxis.getAxis(serie.xAxisIndex);
var yAxis = this.component.yAxis.getAxis(serie.yAxisIndex);
return [
typeof mpData.xAxis != 'string' && xAxis.getCoordByIndex ? xAxis.getCoordByIndex(mpData.xAxis || 0) : xAxis.getCoord(mpData.xAxis || 0),
typeof mpData.yAxis != 'string' && yAxis.getCoordByIndex ? yAxis.getCoordByIndex(mpData.yAxis || 0) : yAxis.getCoord(mpData.yAxis || 0)
];
},
refresh: function (newOption) {
if (newOption) {
this.option = newOption;
this.series = newOption.series;
}
this.backupShapeList();
this._buildShape();
},
addDataAnimation: function (params, done) {
var series = this.series;
var aniMap = {};
for (var i = 0, l = params.length; i < l; i++) {
aniMap[params[i][0]] = params[i];
}
var x;
var dx;
var y;
var serie;
var seriesIndex;
var dataIndex;
var aniCount = 0;
function animationDone() {
aniCount--;
if (aniCount === 0) {
done && done();
}
}
for (var i = 0, l = this.shapeList.length; i < l; i++) {
seriesIndex = this.shapeList[i]._seriesIndex;
if (aniMap[seriesIndex] && !aniMap[seriesIndex][3]) {
if (this.shapeList[i].type === 'candle') {
dataIndex = ecData.get(this.shapeList[i], 'dataIndex');
serie = series[seriesIndex];
if (aniMap[seriesIndex][2] && dataIndex === serie.data.length - 1) {
this.zr.delShape(this.shapeList[i].id);
continue;
} else if (!aniMap[seriesIndex][2] && dataIndex === 0) {
this.zr.delShape(this.shapeList[i].id);
continue;
}
dx = this.component.xAxis.getAxis(serie.xAxisIndex || 0).getGap();
x = aniMap[seriesIndex][2] ? dx : -dx;
y = 0;
aniCount++;
this.zr.animate(this.shapeList[i].id, '').when(this.query(this.option, 'animationDurationUpdate'), {
position: [
x,
y
]
}).done(animationDone).start();
}
}
}
if (!aniCount) {
done && done();
}
}
};
zrUtil.inherits(K, ChartBase);
require('../chart').define('k', K);
return K;
});define('echarts/chart/pie', [
'require',
'./base',
'zrender/shape/Text',
'zrender/shape/Ring',
'zrender/shape/Circle',
'zrender/shape/Sector',
'zrender/shape/Polyline',
'../config',
'../util/ecData',
'zrender/tool/util',
'zrender/tool/math',
'zrender/tool/color',
'../chart'
], function (require) {
var ChartBase = require('./base');
var TextShape = require('zrender/shape/Text');
var RingShape = require('zrender/shape/Ring');
var CircleShape = require('zrender/shape/Circle');
var SectorShape = require('zrender/shape/Sector');
var PolylineShape = require('zrender/shape/Polyline');
var ecConfig = require('../config');
ecConfig.pie = {
zlevel: 0,
z: 2,
clickable: true,
legendHoverLink: true,
center: [
'50%',
'50%'
],
radius: [
0,
'75%'
],
clockWise: true,
startAngle: 90,
minAngle: 0,
selectedOffset: 10,
itemStyle: {
normal: {
borderColor: 'rgba(0,0,0,0)',
borderWidth: 1,
label: {
show: true,
position: 'outer'
},
labelLine: {
show: true,
length: 20,
lineStyle: {
width: 1,
type: 'solid'
}
}
},
emphasis: {
borderColor: 'rgba(0,0,0,0)',
borderWidth: 1,
label: { show: false },
labelLine: {
show: false,
length: 20,
lineStyle: {
width: 1,
type: 'solid'
}
}
}
}
};
var ecData = require('../util/ecData');
var zrUtil = require('zrender/tool/util');
var zrMath = require('zrender/tool/math');
var zrColor = require('zrender/tool/color');
function Pie(ecTheme, messageCenter, zr, option, myChart) {
ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
var self = this;
self.shapeHandler.onmouseover = function (param) {
var shape = param.target;
var seriesIndex = ecData.get(shape, 'seriesIndex');
var dataIndex = ecData.get(shape, 'dataIndex');
var percent = ecData.get(shape, 'special');
var center = [
shape.style.x,
shape.style.y
];
var startAngle = shape.style.startAngle;
var endAngle = shape.style.endAngle;
var midAngle = ((endAngle + startAngle) / 2 + 360) % 360;
var defaultColor = shape.highlightStyle.color;
var label = self.getLabel(seriesIndex, dataIndex, percent, center, midAngle, defaultColor, true);
if (label) {
self.zr.addHoverShape(label);
}
var labelLine = self.getLabelLine(seriesIndex, dataIndex, center, shape.style.r0, shape.style.r, midAngle, defaultColor, true);
if (labelLine) {
self.zr.addHoverShape(labelLine);
}
};
this.refresh(option);
}
Pie.prototype = {
type: ecConfig.CHART_TYPE_PIE,
_buildShape: function () {
var series = this.series;
var legend = this.component.legend;
this.selectedMap = {};
this._selected = {};
var center;
var radius;
var pieCase;
this._selectedMode = false;
var serieName;
for (var i = 0, l = series.length; i < l; i++) {
if (series[i].type === ecConfig.CHART_TYPE_PIE) {
series[i] = this.reformOption(series[i]);
this.legendHoverLink = series[i].legendHoverLink || this.legendHoverLink;
serieName = series[i].name || '';
this.selectedMap[serieName] = legend ? legend.isSelected(serieName) : true;
if (!this.selectedMap[serieName]) {
continue;
}
center = this.parseCenter(this.zr, series[i].center);
radius = this.parseRadius(this.zr, series[i].radius);
this._selectedMode = this._selectedMode || series[i].selectedMode;
this._selected[i] = [];
if (this.deepQuery([
series[i],
this.option
], 'calculable')) {
pieCase = {
zlevel: series[i].zlevel,
z: series[i].z,
hoverable: false,
style: {
x: center[0],
y: center[1],
r0: radius[0] <= 10 ? 0 : radius[0] - 10,
r: radius[1] + 10,
brushType: 'stroke',
lineWidth: 1,
strokeColor: series[i].calculableHolderColor || this.ecTheme.calculableHolderColor || ecConfig.calculableHolderColor
}
};
ecData.pack(pieCase, series[i], i, undefined, -1);
this.setCalculable(pieCase);
pieCase = radius[0] <= 10 ? new CircleShape(pieCase) : new RingShape(pieCase);
this.shapeList.push(pieCase);
}
this._buildSinglePie(i);
this.buildMark(i);
}
}
this.addShapeList();
},
_buildSinglePie: function (seriesIndex) {
var series = this.series;
var serie = series[seriesIndex];
var data = serie.data;
var legend = this.component.legend;
var itemName;
var totalSelected = 0;
var totalSelectedValue0 = 0;
var totalValue = 0;
var maxValue = Number.NEGATIVE_INFINITY;
var singleShapeList = [];
for (var i = 0, l = data.length; i < l; i++) {
itemName = data[i].name;
this.selectedMap[itemName] = legend ? legend.isSelected(itemName) : true;
if (this.selectedMap[itemName] && !isNaN(data[i].value)) {
if (+data[i].value !== 0) {
totalSelected++;
} else {
totalSelectedValue0++;
}
totalValue += +data[i].value;
maxValue = Math.max(maxValue, +data[i].value);
}
}
if (totalValue === 0) {
return;
}
var percent = 100;
var clockWise = serie.clockWise;
var startAngle = (serie.startAngle.toFixed(2) - 0 + 360) % 360;
var endAngle;
var minAngle = serie.minAngle || 0.01;
var totalAngle = 360 - minAngle * totalSelected - 0.01 * totalSelectedValue0;
var defaultColor;
var roseType = serie.roseType;
var center;
var radius;
var r0;
var r1;
for (var i = 0, l = data.length; i < l; i++) {
itemName = data[i].name;
if (!this.selectedMap[itemName] || isNaN(data[i].value)) {
continue;
}
defaultColor = legend ? legend.getColor(itemName) : this.zr.getColor(i);
percent = data[i].value / totalValue;
if (roseType != 'area') {
endAngle = clockWise ? startAngle - percent * totalAngle - (percent !== 0 ? minAngle : 0.01) : percent * totalAngle + startAngle + (percent !== 0 ? minAngle : 0.01);
} else {
endAngle = clockWise ? startAngle - 360 / l : 360 / l + startAngle;
}
endAngle = endAngle.toFixed(2) - 0;
percent = (percent * 100).toFixed(2);
center = this.parseCenter(this.zr, serie.center);
radius = this.parseRadius(this.zr, serie.radius);
r0 = +radius[0];
r1 = +radius[1];
if (roseType === 'radius') {
r1 = data[i].value / maxValue * (r1 - r0) * 0.8 + (r1 - r0) * 0.2 + r0;
} else if (roseType === 'area') {
r1 = Math.sqrt(data[i].value / maxValue) * (r1 - r0) + r0;
}
if (clockWise) {
var temp;
temp = startAngle;
startAngle = endAngle;
endAngle = temp;
}
this._buildItem(singleShapeList, seriesIndex, i, percent, data[i].selected, center, r0, r1, startAngle, endAngle, defaultColor);
if (!clockWise) {
startAngle = endAngle;
}
}
this._autoLabelLayout(singleShapeList, center, r1);
for (var i = 0, l = singleShapeList.length; i < l; i++) {
this.shapeList.push(singleShapeList[i]);
}
singleShapeList = null;
},
_buildItem: function (singleShapeList, seriesIndex, dataIndex, percent, isSelected, center, r0, r1, startAngle, endAngle, defaultColor) {
var series = this.series;
var midAngle = ((endAngle + startAngle) / 2 + 360) % 360;
var sector = this.getSector(seriesIndex, dataIndex, percent, isSelected, center, r0, r1, startAngle, endAngle, defaultColor);
ecData.pack(sector, series[seriesIndex], seriesIndex, series[seriesIndex].data[dataIndex], dataIndex, series[seriesIndex].data[dataIndex].name, percent);
singleShapeList.push(sector);
var label = this.getLabel(seriesIndex, dataIndex, percent, center, midAngle, defaultColor, false);
var labelLine = this.getLabelLine(seriesIndex, dataIndex, center, r0, r1, midAngle, defaultColor, false);
if (labelLine) {
ecData.pack(labelLine, series[seriesIndex], seriesIndex, series[seriesIndex].data[dataIndex], dataIndex, series[seriesIndex].data[dataIndex].name, percent);
singleShapeList.push(labelLine);
}
if (label) {
ecData.pack(label, series[seriesIndex], seriesIndex, series[seriesIndex].data[dataIndex], dataIndex, series[seriesIndex].data[dataIndex].name, percent);
label._labelLine = labelLine;
singleShapeList.push(label);
}
},
getSector: function (seriesIndex, dataIndex, percent, isSelected, center, r0, r1, startAngle, endAngle, defaultColor) {
var series = this.series;
var serie = series[seriesIndex];
var data = serie.data[dataIndex];
var queryTarget = [
data,
serie
];
var normal = this.deepMerge(queryTarget, 'itemStyle.normal') || {};
var emphasis = this.deepMerge(queryTarget, 'itemStyle.emphasis') || {};
var normalColor = this.getItemStyleColor(normal.color, seriesIndex, dataIndex, data) || defaultColor;
var emphasisColor = this.getItemStyleColor(emphasis.color, seriesIndex, dataIndex, data) || (typeof normalColor === 'string' ? zrColor.lift(normalColor, -0.2) : normalColor);
var sector = {
zlevel: serie.zlevel,
z: serie.z,
clickable: this.deepQuery(queryTarget, 'clickable'),
style: {
x: center[0],
y: center[1],
r0: r0,
r: r1,
startAngle: startAngle,
endAngle: endAngle,
brushType: 'both',
color: normalColor,
lineWidth: normal.borderWidth,
strokeColor: normal.borderColor,
lineJoin: 'round'
},
highlightStyle: {
color: emphasisColor,
lineWidth: emphasis.borderWidth,
strokeColor: emphasis.borderColor,
lineJoin: 'round'
},
_seriesIndex: seriesIndex,
_dataIndex: dataIndex
};
if (isSelected) {
var midAngle = ((sector.style.startAngle + sector.style.endAngle) / 2).toFixed(2) - 0;
sector.style._hasSelected = true;
sector.style._x = sector.style.x;
sector.style._y = sector.style.y;
var offset = this.query(serie, 'selectedOffset');
sector.style.x += zrMath.cos(midAngle, true) * offset;
sector.style.y -= zrMath.sin(midAngle, true) * offset;
this._selected[seriesIndex][dataIndex] = true;
} else {
this._selected[seriesIndex][dataIndex] = false;
}
if (this._selectedMode) {
sector.onclick = this.shapeHandler.onclick;
}
if (this.deepQuery([
data,
serie,
this.option
], 'calculable')) {
this.setCalculable(sector);
sector.draggable = true;
}
if (this._needLabel(serie, data, true) || this._needLabelLine(serie, data, true)) {
sector.onmouseover = this.shapeHandler.onmouseover;
}
sector = new SectorShape(sector);
return sector;
},
getLabel: function (seriesIndex, dataIndex, percent, center, midAngle, defaultColor, isEmphasis) {
var series = this.series;
var serie = series[seriesIndex];
var data = serie.data[dataIndex];
if (!this._needLabel(serie, data, isEmphasis)) {
return;
}
var status = isEmphasis ? 'emphasis' : 'normal';
var itemStyle = zrUtil.merge(zrUtil.clone(data.itemStyle) || {}, serie.itemStyle);
var labelControl = itemStyle[status].label;
var textStyle = labelControl.textStyle || {};
var centerX = center[0];
var centerY = center[1];
var x;
var y;
var radius = this.parseRadius(this.zr, serie.radius);
var textAlign;
var textBaseline = 'middle';
labelControl.position = labelControl.position || itemStyle.normal.label.position;
if (labelControl.position === 'center') {
x = centerX;
y = centerY;
textAlign = 'center';
} else if (labelControl.position === 'inner' || labelControl.position === 'inside') {
radius = (radius[0] + radius[1]) * (labelControl.distance || 0.5);
x = Math.round(centerX + radius * zrMath.cos(midAngle, true));
y = Math.round(centerY - radius * zrMath.sin(midAngle, true));
defaultColor = '#fff';
textAlign = 'center';
} else {
radius = radius[1] - -itemStyle[status].labelLine.length;
x = Math.round(centerX + radius * zrMath.cos(midAngle, true));
y = Math.round(centerY - radius * zrMath.sin(midAngle, true));
textAlign = midAngle >= 90 && midAngle <= 270 ? 'right' : 'left';
}
if (labelControl.position != 'center' && labelControl.position != 'inner' && labelControl.position != 'inside') {
x += textAlign === 'left' ? 20 : -20;
}
data.__labelX = x - (textAlign === 'left' ? 5 : -5);
data.__labelY = y;
var ts = new TextShape({
zlevel: serie.zlevel,
z: serie.z + 1,
hoverable: false,
style: {
x: x,
y: y,
color: textStyle.color || defaultColor,
text: this.getLabelText(seriesIndex, dataIndex, percent, status),
textAlign: textStyle.align || textAlign,
textBaseline: textStyle.baseline || textBaseline,
textFont: this.getFont(textStyle)
},
highlightStyle: { brushType: 'fill' }
});
ts._radius = radius;
ts._labelPosition = labelControl.position || 'outer';
ts._rect = ts.getRect(ts.style);
ts._seriesIndex = seriesIndex;
ts._dataIndex = dataIndex;
return ts;
},
getLabelText: function (seriesIndex, dataIndex, percent, status) {
var series = this.series;
var serie = series[seriesIndex];
var data = serie.data[dataIndex];
var formatter = this.deepQuery([
data,
serie
], 'itemStyle.' + status + '.label.formatter');
if (formatter) {
if (typeof formatter === 'function') {
return formatter.call(this.myChart, {
seriesIndex: seriesIndex,
seriesName: serie.name || '',
series: serie,
dataIndex: dataIndex,
data: data,
name: data.name,
value: data.value,
percent: percent
});
} else if (typeof formatter === 'string') {
formatter = formatter.replace('{a}', '{a0}').replace('{b}', '{b0}').replace('{c}', '{c0}').replace('{d}', '{d0}');
formatter = formatter.replace('{a0}', serie.name).replace('{b0}', data.name).replace('{c0}', data.value).replace('{d0}', percent);
return formatter;
}
} else {
return data.name;
}
},
getLabelLine: function (seriesIndex, dataIndex, center, r0, r1, midAngle, defaultColor, isEmphasis) {
var series = this.series;
var serie = series[seriesIndex];
var data = serie.data[dataIndex];
if (this._needLabelLine(serie, data, isEmphasis)) {
var status = isEmphasis ? 'emphasis' : 'normal';
var itemStyle = zrUtil.merge(zrUtil.clone(data.itemStyle) || {}, serie.itemStyle);
var labelLineControl = itemStyle[status].labelLine;
var lineStyle = labelLineControl.lineStyle || {};
var centerX = center[0];
var centerY = center[1];
var minRadius = r1;
var maxRadius = this.parseRadius(this.zr, serie.radius)[1] - -labelLineControl.length;
var cosValue = zrMath.cos(midAngle, true);
var sinValue = zrMath.sin(midAngle, true);
return new PolylineShape({
zlevel: serie.zlevel,
z: serie.z + 1,
hoverable: false,
style: {
pointList: [
[
centerX + minRadius * cosValue,
centerY - minRadius * sinValue
],
[
centerX + maxRadius * cosValue,
centerY - maxRadius * sinValue
],
[
data.__labelX,
data.__labelY
]
],
strokeColor: lineStyle.color || defaultColor,
lineType: lineStyle.type,
lineWidth: lineStyle.width
},
_seriesIndex: seriesIndex,
_dataIndex: dataIndex
});
} else {
return;
}
},
_needLabel: function (serie, data, isEmphasis) {
return this.deepQuery([
data,
serie
], 'itemStyle.' + (isEmphasis ? 'emphasis' : 'normal') + '.label.show');
},
_needLabelLine: function (serie, data, isEmphasis) {
return this.deepQuery([
data,
serie
], 'itemStyle.' + (isEmphasis ? 'emphasis' : 'normal') + '.labelLine.show');
},
_autoLabelLayout: function (sList, center, r) {
var leftList = [];
var rightList = [];
for (var i = 0, l = sList.length; i < l; i++) {
if (sList[i]._labelPosition === 'outer' || sList[i]._labelPosition === 'outside') {
sList[i]._rect._y = sList[i]._rect.y;
if (sList[i]._rect.x < center[0]) {
leftList.push(sList[i]);
} else {
rightList.push(sList[i]);
}
}
}
this._layoutCalculate(leftList, center, r, -1);
this._layoutCalculate(rightList, center, r, 1);
},
_layoutCalculate: function (tList, center, r, direction) {
tList.sort(function (a, b) {
return a._rect.y - b._rect.y;
});
function _changeDown(start, end, delta, direction) {
for (var j = start; j < end; j++) {
tList[j]._rect.y += delta;
tList[j].style.y += delta;
if (tList[j]._labelLine) {
tList[j]._labelLine.style.pointList[1][1] += delta;
tList[j]._labelLine.style.pointList[2][1] += delta;
}
if (j > start && j + 1 < end && tList[j + 1]._rect.y > tList[j]._rect.y + tList[j]._rect.height) {
_changeUp(j, delta / 2);
return;
}
}
_changeUp(end - 1, delta / 2);
}
function _changeUp(end, delta) {
for (var j = end; j >= 0; j--) {
tList[j]._rect.y -= delta;
tList[j].style.y -= delta;
if (tList[j]._labelLine) {
tList[j]._labelLine.style.pointList[1][1] -= delta;
tList[j]._labelLine.style.pointList[2][1] -= delta;
}
if (j > 0 && tList[j]._rect.y > tList[j - 1]._rect.y + tList[j - 1]._rect.height) {
break;
}
}
}
function _changeX(sList, isDownList, center, r, direction) {
var x = center[0];
var y = center[1];
var deltaX;
var deltaY;
var length;
var lastDeltaX = direction > 0 ? isDownList ? Number.MAX_VALUE : 0 : isDownList ? Number.MAX_VALUE : 0;
for (var i = 0, l = sList.length; i < l; i++) {
deltaY = Math.abs(sList[i]._rect.y - y);
length = sList[i]._radius - r;
deltaX = deltaY < r + length ? Math.sqrt((r + length + 20) * (r + length + 20) - Math.pow(sList[i]._rect.y - y, 2)) : Math.abs(sList[i]._rect.x + (direction > 0 ? 0 : sList[i]._rect.width) - x);
if (isDownList && deltaX >= lastDeltaX) {
deltaX = lastDeltaX - 10;
}
if (!isDownList && deltaX <= lastDeltaX) {
deltaX = lastDeltaX + 10;
}
sList[i]._rect.x = sList[i].style.x = x + deltaX * direction;
if (sList[i]._labelLine) {
sList[i]._labelLine.style.pointList[2][0] = x + (deltaX - 5) * direction;
sList[i]._labelLine.style.pointList[1][0] = x + (deltaX - 20) * direction;
}
lastDeltaX = deltaX;
}
}
var lastY = 0;
var delta;
var len = tList.length;
var upList = [];
var downList = [];
for (var i = 0; i < len; i++) {
delta = tList[i]._rect.y - lastY;
if (delta < 0) {
_changeDown(i, len, -delta, direction);
}
lastY = tList[i]._rect.y + tList[i]._rect.height;
}
if (this.zr.getHeight() - lastY < 0) {
_changeUp(len - 1, lastY - this.zr.getHeight());
}
for (var i = 0; i < len; i++) {
if (tList[i]._rect.y >= center[1]) {
downList.push(tList[i]);
} else {
upList.push(tList[i]);
}
}
_changeX(downList, true, center, r, direction);
_changeX(upList, false, center, r, direction);
},
reformOption: function (opt) {
var _merge = zrUtil.merge;
opt = _merge(_merge(opt || {}, zrUtil.clone(this.ecTheme.pie || {})), zrUtil.clone(ecConfig.pie));
opt.itemStyle.normal.label.textStyle = this.getTextStyle(opt.itemStyle.normal.label.textStyle);
opt.itemStyle.emphasis.label.textStyle = this.getTextStyle(opt.itemStyle.emphasis.label.textStyle);
this.z = opt.z;
this.zlevel = opt.zlevel;
return opt;
},
refresh: function (newOption) {
if (newOption) {
this.option = newOption;
this.series = newOption.series;
}
this.backupShapeList();
this._buildShape();
},
addDataAnimation: function (params, done) {
var series = this.series;
var aniMap = {};
for (var i = 0, l = params.length; i < l; i++) {
aniMap[params[i][0]] = params[i];
}
var aniCount = 0;
function animationDone() {
aniCount--;
if (aniCount === 0) {
done && done();
}
}
var sectorMap = {};
var textMap = {};
var lineMap = {};
var backupShapeList = this.shapeList;
this.shapeList = [];
var seriesIndex;
var isHead;
var dataGrow;
var deltaIdxMap = {};
for (var i = 0, l = params.length; i < l; i++) {
seriesIndex = params[i][0];
isHead = params[i][2];
dataGrow = params[i][3];
if (series[seriesIndex] && series[seriesIndex].type === ecConfig.CHART_TYPE_PIE) {
if (isHead) {
if (!dataGrow) {
sectorMap[seriesIndex + '_' + series[seriesIndex].data.length] = 'delete';
}
deltaIdxMap[seriesIndex] = 1;
} else {
if (!dataGrow) {
sectorMap[seriesIndex + '_-1'] = 'delete';
deltaIdxMap[seriesIndex] = -1;
} else {
deltaIdxMap[seriesIndex] = 0;
}
}
this._buildSinglePie(seriesIndex);
}
}
var dataIndex;
var key;
for (var i = 0, l = this.shapeList.length; i < l; i++) {
seriesIndex = this.shapeList[i]._seriesIndex;
dataIndex = this.shapeList[i]._dataIndex;
key = seriesIndex + '_' + dataIndex;
switch (this.shapeList[i].type) {
case 'sector':
sectorMap[key] = this.shapeList[i];
break;
case 'text':
textMap[key] = this.shapeList[i];
break;
case 'polyline':
lineMap[key] = this.shapeList[i];
break;
}
}
this.shapeList = [];
var targeSector;
for (var i = 0, l = backupShapeList.length; i < l; i++) {
seriesIndex = backupShapeList[i]._seriesIndex;
if (aniMap[seriesIndex]) {
dataIndex = backupShapeList[i]._dataIndex + deltaIdxMap[seriesIndex];
key = seriesIndex + '_' + dataIndex;
targeSector = sectorMap[key];
if (!targeSector) {
continue;
}
if (backupShapeList[i].type === 'sector') {
if (targeSector != 'delete') {
aniCount++;
this.zr.animate(backupShapeList[i].id, 'style').when(400, {
startAngle: targeSector.style.startAngle,
endAngle: targeSector.style.endAngle
}).done(animationDone).start();
} else {
aniCount++;
this.zr.animate(backupShapeList[i].id, 'style').when(400, deltaIdxMap[seriesIndex] < 0 ? { startAngle: backupShapeList[i].style.startAngle } : { endAngle: backupShapeList[i].style.endAngle }).done(animationDone).start();
}
} else if (backupShapeList[i].type === 'text' || backupShapeList[i].type === 'polyline') {
if (targeSector === 'delete') {
this.zr.delShape(backupShapeList[i].id);
} else {
switch (backupShapeList[i].type) {
case 'text':
aniCount++;
targeSector = textMap[key];
this.zr.animate(backupShapeList[i].id, 'style').when(400, {
x: targeSector.style.x,
y: targeSector.style.y
}).done(animationDone).start();
break;
case 'polyline':
aniCount++;
targeSector = lineMap[key];
this.zr.animate(backupShapeList[i].id, 'style').when(400, { pointList: targeSector.style.pointList }).done(animationDone).start();
break;
}
}
}
}
}
this.shapeList = backupShapeList;
if (!aniCount) {
done && done();
}
},
onclick: function (param) {
var series = this.series;
if (!this.isClick || !param.target) {
return;
}
this.isClick = false;
var offset;
var target = param.target;
var style = target.style;
var seriesIndex = ecData.get(target, 'seriesIndex');
var dataIndex = ecData.get(target, 'dataIndex');
for (var i = 0, len = this.shapeList.length; i < len; i++) {
if (this.shapeList[i].id === target.id) {
seriesIndex = ecData.get(target, 'seriesIndex');
dataIndex = ecData.get(target, 'dataIndex');
if (!style._hasSelected) {
var midAngle = ((style.startAngle + style.endAngle) / 2).toFixed(2) - 0;
target.style._hasSelected = true;
this._selected[seriesIndex][dataIndex] = true;
target.style._x = target.style.x;
target.style._y = target.style.y;
offset = this.query(series[seriesIndex], 'selectedOffset');
target.style.x += zrMath.cos(midAngle, true) * offset;
target.style.y -= zrMath.sin(midAngle, true) * offset;
} else {
target.style.x = target.style._x;
target.style.y = target.style._y;
target.style._hasSelected = false;
this._selected[seriesIndex][dataIndex] = false;
}
this.zr.modShape(target.id);
} else if (this.shapeList[i].style._hasSelected && this._selectedMode === 'single') {
seriesIndex = ecData.get(this.shapeList[i], 'seriesIndex');
dataIndex = ecData.get(this.shapeList[i], 'dataIndex');
this.shapeList[i].style.x = this.shapeList[i].style._x;
this.shapeList[i].style.y = this.shapeList[i].style._y;
this.shapeList[i].style._hasSelected = false;
this._selected[seriesIndex][dataIndex] = false;
this.zr.modShape(this.shapeList[i].id);
}
}
this.messageCenter.dispatch(ecConfig.EVENT.PIE_SELECTED, param.event, {
selected: this._selected,
target: ecData.get(target, 'name')
}, this.myChart);
this.zr.refreshNextFrame();
}
};
zrUtil.inherits(Pie, ChartBase);
require('../chart').define('pie', Pie);
return Pie;
});define('echarts/chart/radar', [
'require',
'./base',
'zrender/shape/Polygon',
'../component/polar',
'../config',
'../util/ecData',
'zrender/tool/util',
'zrender/tool/color',
'../util/accMath',
'../chart'
], function (require) {
var ChartBase = require('./base');
var PolygonShape = require('zrender/shape/Polygon');
require('../component/polar');
var ecConfig = require('../config');
ecConfig.radar = {
zlevel: 0,
z: 2,
clickable: true,
legendHoverLink: true,
polarIndex: 0,
itemStyle: {
normal: {
label: { show: false },
lineStyle: {
width: 2,
type: 'solid'
}
},
emphasis: { label: { show: false } }
},
symbolSize: 2
};
var ecData = require('../util/ecData');
var zrUtil = require('zrender/tool/util');
var zrColor = require('zrender/tool/color');
function Radar(ecTheme, messageCenter, zr, option, myChart) {
ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
this.refresh(option);
}
Radar.prototype = {
type: ecConfig.CHART_TYPE_RADAR,
_buildShape: function () {
this.selectedMap = {};
this._symbol = this.option.symbolList;
this._queryTarget;
this._dropBoxList = [];
this._radarDataCounter = 0;
var series = this.series;
var legend = this.component.legend;
var serieName;
for (var i = 0, l = series.length; i < l; i++) {
if (series[i].type === ecConfig.CHART_TYPE_RADAR) {
this.serie = this.reformOption(series[i]);
this.legendHoverLink = series[i].legendHoverLink || this.legendHoverLink;
serieName = this.serie.name || '';
this.selectedMap[serieName] = legend ? legend.isSelected(serieName) : true;
if (this.selectedMap[serieName]) {
this._queryTarget = [
this.serie,
this.option
];
if (this.deepQuery(this._queryTarget, 'calculable')) {
this._addDropBox(i);
}
this._buildSingleRadar(i);
this.buildMark(i);
}
}
}
this.addShapeList();
},
_buildSingleRadar: function (index) {
var legend = this.component.legend;
var iconShape;
var data = this.serie.data;
var defaultColor;
var name;
var pointList;
var calculable = this.deepQuery(this._queryTarget, 'calculable');
for (var i = 0; i < data.length; i++) {
name = data[i].name || '';
this.selectedMap[name] = legend ? legend.isSelected(name) : true;
if (!this.selectedMap[name]) {
continue;
}
if (legend) {
defaultColor = legend.getColor(name);
iconShape = legend.getItemShape(name);
if (iconShape) {
iconShape.style.brushType = this.deepQuery([
data[i],
this.serie
], 'itemStyle.normal.areaStyle') ? 'both' : 'stroke';
legend.setItemShape(name, iconShape);
}
} else {
defaultColor = this.zr.getColor(i);
}
pointList = this._getPointList(this.serie.polarIndex, data[i]);
this._addSymbol(pointList, defaultColor, i, index, this.serie.polarIndex);
this._addDataShape(pointList, defaultColor, data[i], index, i, calculable);
this._radarDataCounter++;
}
},
_getPointList: function (polarIndex, dataArr) {
var pointList = [];
var vector;
var polar = this.component.polar;
var value;
for (var i = 0, l = dataArr.value.length; i < l; i++) {
value = this.getDataFromOption(dataArr.value[i]);
vector = value != '-' ? polar.getVector(polarIndex, i, value) : false;
if (vector) {
pointList.push(vector);
}
}
return pointList;
},
_addSymbol: function (pointList, defaultColor, dataIndex, seriesIndex, polarIndex) {
var series = this.series;
var itemShape;
var polar = this.component.polar;
for (var i = 0, l = pointList.length; i < l; i++) {
itemShape = this.getSymbolShape(this.deepMerge([
series[seriesIndex].data[dataIndex],
series[seriesIndex]
]), seriesIndex, series[seriesIndex].data[dataIndex].value[i], i, polar.getIndicatorText(polarIndex, i), pointList[i][0], pointList[i][1], this._symbol[this._radarDataCounter % this._symbol.length], defaultColor, '#fff', 'vertical');
itemShape.zlevel = this.getZlevelBase();
itemShape.z = this.getZBase() + 1;
ecData.set(itemShape, 'data', series[seriesIndex].data[dataIndex]);
ecData.set(itemShape, 'value', series[seriesIndex].data[dataIndex].value);
ecData.set(itemShape, 'dataIndex', dataIndex);
ecData.set(itemShape, 'special', i);
this.shapeList.push(itemShape);
}
},
_addDataShape: function (pointList, defaultColor, data, seriesIndex, dataIndex, calculable) {
var series = this.series;
var queryTarget = [
data,
this.serie
];
var nColor = this.getItemStyleColor(this.deepQuery(queryTarget, 'itemStyle.normal.color'), seriesIndex, dataIndex, data);
var nLineWidth = this.deepQuery(queryTarget, 'itemStyle.normal.lineStyle.width');
var nLineType = this.deepQuery(queryTarget, 'itemStyle.normal.lineStyle.type');
var nAreaColor = this.deepQuery(queryTarget, 'itemStyle.normal.areaStyle.color');
var nIsAreaFill = this.deepQuery(queryTarget, 'itemStyle.normal.areaStyle');
var shape = {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
style: {
pointList: pointList,
brushType: nIsAreaFill ? 'both' : 'stroke',
color: nAreaColor || nColor || (typeof defaultColor === 'string' ? zrColor.alpha(defaultColor, 0.5) : defaultColor),
strokeColor: nColor || defaultColor,
lineWidth: nLineWidth,
lineType: nLineType
},
highlightStyle: {
brushType: this.deepQuery(queryTarget, 'itemStyle.emphasis.areaStyle') || nIsAreaFill ? 'both' : 'stroke',
color: this.deepQuery(queryTarget, 'itemStyle.emphasis.areaStyle.color') || nAreaColor || nColor || (typeof defaultColor === 'string' ? zrColor.alpha(defaultColor, 0.5) : defaultColor),
strokeColor: this.getItemStyleColor(this.deepQuery(queryTarget, 'itemStyle.emphasis.color'), seriesIndex, dataIndex, data) || nColor || defaultColor,
lineWidth: this.deepQuery(queryTarget, 'itemStyle.emphasis.lineStyle.width') || nLineWidth,
lineType: this.deepQuery(queryTarget, 'itemStyle.emphasis.lineStyle.type') || nLineType
}
};
ecData.pack(shape, series[seriesIndex], seriesIndex, data, dataIndex, data.name, this.component.polar.getIndicator(series[seriesIndex].polarIndex));
if (calculable) {
shape.draggable = true;
this.setCalculable(shape);
}
shape = new PolygonShape(shape);
this.shapeList.push(shape);
},
_addDropBox: function (index) {
var series = this.series;
var polarIndex = this.deepQuery(this._queryTarget, 'polarIndex');
if (!this._dropBoxList[polarIndex]) {
var shape = this.component.polar.getDropBox(polarIndex);
shape.zlevel = this.getZlevelBase();
shape.z = this.getZBase();
this.setCalculable(shape);
ecData.pack(shape, series, index, undefined, -1);
this.shapeList.push(shape);
this._dropBoxList[polarIndex] = true;
}
},
ondragend: function (param, status) {
var series = this.series;
if (!this.isDragend || !param.target) {
return;
}
var target = param.target;
var seriesIndex = ecData.get(target, 'seriesIndex');
var dataIndex = ecData.get(target, 'dataIndex');
this.component.legend && this.component.legend.del(series[seriesIndex].data[dataIndex].name);
series[seriesIndex].data.splice(dataIndex, 1);
status.dragOut = true;
status.needRefresh = true;
this.isDragend = false;
return;
},
ondrop: function (param, status) {
var series = this.series;
if (!this.isDrop || !param.target) {
return;
}
var target = param.target;
var dragged = param.dragged;
var seriesIndex = ecData.get(target, 'seriesIndex');
var dataIndex = ecData.get(target, 'dataIndex');
var data;
var legend = this.component.legend;
var value;
if (dataIndex === -1) {
data = {
value: ecData.get(dragged, 'value'),
name: ecData.get(dragged, 'name')
};
series[seriesIndex].data.push(data);
legend && legend.add(data.name, dragged.style.color || dragged.style.strokeColor);
} else {
var accMath = require('../util/accMath');
data = series[seriesIndex].data[dataIndex];
legend && legend.del(data.name);
data.name += this.option.nameConnector + ecData.get(dragged, 'name');
value = ecData.get(dragged, 'value');
for (var i = 0; i < value.length; i++) {
data.value[i] = accMath.accAdd(data.value[i], value[i]);
}
legend && legend.add(data.name, dragged.style.color || dragged.style.strokeColor);
}
status.dragIn = status.dragIn || true;
this.isDrop = false;
return;
},
refresh: function (newOption) {
if (newOption) {
this.option = newOption;
this.series = newOption.series;
}
this.backupShapeList();
this._buildShape();
}
};
zrUtil.inherits(Radar, ChartBase);
require('../chart').define('radar', Radar);
return Radar;
});define('echarts/component/polar', [
'require',
'./base',
'zrender/shape/Text',
'zrender/shape/Line',
'zrender/shape/Polygon',
'zrender/shape/Circle',
'zrender/shape/Ring',
'../config',
'zrender/tool/util',
'../util/coordinates',
'../util/accMath',
'../util/smartSteps',
'../component'
], function (require) {
var Base = require('./base');
var TextShape = require('zrender/shape/Text');
var LineShape = require('zrender/shape/Line');
var PolygonShape = require('zrender/shape/Polygon');
var Circle = require('zrender/shape/Circle');
var Ring = require('zrender/shape/Ring');
var ecConfig = require('../config');
ecConfig.polar = {
zlevel: 0,
z: 0,
center: [
'50%',
'50%'
],
radius: '75%',
startAngle: 90,
boundaryGap: [
0,
0
],
splitNumber: 5,
name: {
show: true,
textStyle: { color: '#333' }
},
axisLine: {
show: true,
lineStyle: {
color: '#ccc',
width: 1,
type: 'solid'
}
},
axisLabel: {
show: false,
textStyle: { color: '#333' }
},
splitArea: {
show: true,
areaStyle: {
color: [
'rgba(250,250,250,0.3)',
'rgba(200,200,200,0.3)'
]
}
},
splitLine: {
show: true,
lineStyle: {
width: 1,
color: '#ccc'
}
},
type: 'polygon'
};
var zrUtil = require('zrender/tool/util');
var ecCoordinates = require('../util/coordinates');
function Polar(ecTheme, messageCenter, zr, option, myChart) {
Base.call(this, ecTheme, messageCenter, zr, option, myChart);
this.refresh(option);
}
Polar.prototype = {
type: ecConfig.COMPONENT_TYPE_POLAR,
_buildShape: function () {
for (var i = 0; i < this.polar.length; i++) {
this._index = i;
this.reformOption(this.polar[i]);
this._queryTarget = [
this.polar[i],
this.option
];
this._createVector(i);
this._buildSpiderWeb(i);
this._buildText(i);
this._adjustIndicatorValue(i);
this._addAxisLabel(i);
}
for (var i = 0; i < this.shapeList.length; i++) {
this.zr.addShape(this.shapeList[i]);
}
},
_createVector: function (index) {
var item = this.polar[index];
var indicator = this.deepQuery(this._queryTarget, 'indicator');
var length = indicator.length;
var startAngle = item.startAngle;
var dStep = 2 * Math.PI / length;
var radius = this._getRadius();
var __ecIndicator = item.__ecIndicator = [];
var vector;
for (var i = 0; i < length; i++) {
vector = ecCoordinates.polar2cartesian(radius, startAngle * Math.PI / 180 + dStep * i);
__ecIndicator.push({
vector: [
vector[1],
-vector[0]
]
});
}
},
_getRadius: function () {
var item = this.polar[this._index];
return this.parsePercent(item.radius, Math.min(this.zr.getWidth(), this.zr.getHeight()) / 2);
},
_buildSpiderWeb: function (index) {
var item = this.polar[index];
var __ecIndicator = item.__ecIndicator;
var splitArea = item.splitArea;
var splitLine = item.splitLine;
var center = this.getCenter(index);
var splitNumber = item.splitNumber;
var strokeColor = splitLine.lineStyle.color;
var lineWidth = splitLine.lineStyle.width;
var show = splitLine.show;
var axisLine = this.deepQuery(this._queryTarget, 'axisLine');
this._addArea(__ecIndicator, splitNumber, center, splitArea, strokeColor, lineWidth, show);
axisLine.show && this._addLine(__ecIndicator, center, axisLine);
},
_addAxisLabel: function (index) {
var accMath = require('../util/accMath');
var item = this.polar[index];
var indicator = this.deepQuery(this._queryTarget, 'indicator');
var __ecIndicator = item.__ecIndicator;
var axisLabel;
var vector;
var style;
var newStyle;
var splitNumber = this.deepQuery(this._queryTarget, 'splitNumber');
var center = this.getCenter(index);
var vector;
var value;
var text;
var theta;
var offset;
var interval;
for (var i = 0; i < indicator.length; i++) {
axisLabel = this.deepQuery([
indicator[i],
item,
this.option
], 'axisLabel');
if (axisLabel.show) {
var textStyle = this.deepQuery([
axisLabel,
item,
this.option
], 'textStyle');
var formatter = this.deepQuery([
axisLabel,
item
], 'formatter');
style = {};
style.textFont = this.getFont(textStyle);
style.color = textStyle.color;
style = zrUtil.merge(style, axisLabel);
style.lineWidth = style.width;
vector = __ecIndicator[i].vector;
value = __ecIndicator[i].value;
theta = i / indicator.length * 2 * Math.PI;
offset = axisLabel.offset || 10;
interval = axisLabel.interval || 0;
if (!value) {
return;
}
for (var j = 1; j <= splitNumber; j += interval + 1) {
newStyle = zrUtil.merge({}, style);
text = accMath.accAdd(value.min, accMath.accMul(value.step, j));
if (typeof formatter === 'function') {
text = formatter(text);
} else if (typeof formatter === 'string') {
text = formatter.replace('{a}', '{a0}').replace('{a0}', text);
} else {
text = this.numAddCommas(text);
}
newStyle.text = text;
newStyle.x = j * vector[0] / splitNumber + Math.cos(theta) * offset + center[0];
newStyle.y = j * vector[1] / splitNumber + Math.sin(theta) * offset + center[1];
this.shapeList.push(new TextShape({
zlevel: this.getZlevelBase(),
z: this.getZBase(),
style: newStyle,
draggable: false,
hoverable: false
}));
}
}
}
},
_buildText: function (index) {
var item = this.polar[index];
var __ecIndicator = item.__ecIndicator;
var vector;
var indicator = this.deepQuery(this._queryTarget, 'indicator');
var center = this.getCenter(index);
var style;
var textAlign;
var name;
var rotation;
var x = 0;
var y = 0;
var margin;
var textStyle;
for (var i = 0; i < indicator.length; i++) {
name = this.deepQuery([
indicator[i],
item,
this.option
], 'name');
if (!name.show) {
continue;
}
textStyle = this.deepQuery([
name,
item,
this.option
], 'textStyle');
style = {};
style.textFont = this.getFont(textStyle);
style.color = textStyle.color;
if (typeof name.formatter == 'function') {
style.text = name.formatter.call(this.myChart, indicator[i].text, i);
} else if (typeof name.formatter == 'string') {
style.text = name.formatter.replace('{value}', indicator[i].text);
} else {
style.text = indicator[i].text;
}
__ecIndicator[i].text = style.text;
vector = __ecIndicator[i].vector;
if (Math.round(vector[0]) > 0) {
textAlign = 'left';
} else if (Math.round(vector[0]) < 0) {
textAlign = 'right';
} else {
textAlign = 'center';
}
if (name.margin == null) {
vector = this._mapVector(vector, center, 1.1);
} else {
margin = name.margin;
x = vector[0] > 0 ? margin : -margin;
y = vector[1] > 0 ? margin : -margin;
x = vector[0] === 0 ? 0 : x;
y = vector[1] === 0 ? 0 : y;
vector = this._mapVector(vector, center, 1);
}
style.textAlign = textAlign;
style.x = vector[0] + x;
style.y = vector[1] + y;
if (name.rotate) {
rotation = [
name.rotate / 180 * Math.PI,
vector[0],
vector[1]
];
} else {
rotation = [
0,
0,
0
];
}
this.shapeList.push(new TextShape({
zlevel: this.getZlevelBase(),
z: this.getZBase(),
style: style,
draggable: false,
hoverable: false,
rotation: rotation
}));
}
},
getIndicatorText: function (polarIndex, indicatorIndex) {
return this.polar[polarIndex] && this.polar[polarIndex].__ecIndicator[indicatorIndex] && this.polar[polarIndex].__ecIndicator[indicatorIndex].text;
},
getDropBox: function (index) {
var index = index || 0;
var item = this.polar[index];
var center = this.getCenter(index);
var __ecIndicator = item.__ecIndicator;
var len = __ecIndicator.length;
var pointList = [];
var vector;
var shape;
var type = item.type;
if (type == 'polygon') {
for (var i = 0; i < len; i++) {
vector = __ecIndicator[i].vector;
pointList.push(this._mapVector(vector, center, 1.2));
}
shape = this._getShape(pointList, 'fill', 'rgba(0,0,0,0)', '', 1);
} else if (type == 'circle') {
shape = this._getCircle('', 1, 1.2, center, 'fill', 'rgba(0,0,0,0)');
}
return shape;
},
_addArea: function (__ecIndicator, splitNumber, center, splitArea, strokeColor, lineWidth, show) {
var shape;
var scale;
var scale1;
var pointList;
var type = this.deepQuery(this._queryTarget, 'type');
for (var i = 0; i < splitNumber; i++) {
scale = (splitNumber - i) / splitNumber;
if (show) {
if (type == 'polygon') {
pointList = this._getPointList(__ecIndicator, scale, center);
shape = this._getShape(pointList, 'stroke', '', strokeColor, lineWidth);
} else if (type == 'circle') {
shape = this._getCircle(strokeColor, lineWidth, scale, center, 'stroke');
}
this.shapeList.push(shape);
}
if (splitArea.show) {
scale1 = (splitNumber - i - 1) / splitNumber;
this._addSplitArea(__ecIndicator, splitArea, scale, scale1, center, i);
}
}
},
_getCircle: function (strokeColor, lineWidth, scale, center, brushType, color) {
var radius = this._getRadius();
return new Circle({
zlevel: this.getZlevelBase(),
z: this.getZBase(),
style: {
x: center[0],
y: center[1],
r: radius * scale,
brushType: brushType,
strokeColor: strokeColor,
lineWidth: lineWidth,
color: color
},
hoverable: false,
draggable: false
});
},
_getRing: function (color, scale0, scale1, center) {
var radius = this._getRadius();
return new Ring({
zlevel: this.getZlevelBase(),
z: this.getZBase(),
style: {
x: center[0],
y: center[1],
r: scale0 * radius,
r0: scale1 * radius,
color: color,
brushType: 'fill'
},
hoverable: false,
draggable: false
});
},
_getPointList: function (__ecIndicator, scale, center) {
var pointList = [];
var len = __ecIndicator.length;
var vector;
for (var i = 0; i < len; i++) {
vector = __ecIndicator[i].vector;
pointList.push(this._mapVector(vector, center, scale));
}
return pointList;
},
_getShape: function (pointList, brushType, color, strokeColor, lineWidth) {
return new PolygonShape({
zlevel: this.getZlevelBase(),
z: this.getZBase(),
style: {
pointList: pointList,
brushType: brushType,
color: color,
strokeColor: strokeColor,
lineWidth: lineWidth
},
hoverable: false,
draggable: false
});
},
_addSplitArea: function (__ecIndicator, splitArea, scale, scale1, center, colorInd) {
var indLen = __ecIndicator.length;
var color;
var colorArr = splitArea.areaStyle.color;
var colorLen;
var vector;
var vector1;
var pointList = [];
var indLen = __ecIndicator.length;
var shape;
var type = this.deepQuery(this._queryTarget, 'type');
if (typeof colorArr == 'string') {
colorArr = [colorArr];
}
colorLen = colorArr.length;
color = colorArr[colorInd % colorLen];
if (type == 'polygon') {
for (var i = 0; i < indLen; i++) {
pointList = [];
vector = __ecIndicator[i].vector;
vector1 = __ecIndicator[(i + 1) % indLen].vector;
pointList.push(this._mapVector(vector, center, scale));
pointList.push(this._mapVector(vector, center, scale1));
pointList.push(this._mapVector(vector1, center, scale1));
pointList.push(this._mapVector(vector1, center, scale));
shape = this._getShape(pointList, 'fill', color, '', 1);
this.shapeList.push(shape);
}
} else if (type == 'circle') {
shape = this._getRing(color, scale, scale1, center);
this.shapeList.push(shape);
}
},
_mapVector: function (vector, center, scale) {
return [
vector[0] * scale + center[0],
vector[1] * scale + center[1]
];
},
getCenter: function (index) {
var index = index || 0;
return this.parseCenter(this.zr, this.polar[index].center);
},
_addLine: function (__ecIndicator, center, axisLine) {
var indLen = __ecIndicator.length;
var line;
var vector;
var lineStyle = axisLine.lineStyle;
var strokeColor = lineStyle.color;
var lineWidth = lineStyle.width;
var lineType = lineStyle.type;
for (var i = 0; i < indLen; i++) {
vector = __ecIndicator[i].vector;
line = this._getLine(center[0], center[1], vector[0] + center[0], vector[1] + center[1], strokeColor, lineWidth, lineType);
this.shapeList.push(line);
}
},
_getLine: function (xStart, yStart, xEnd, yEnd, strokeColor, lineWidth, lineType) {
return new LineShape({
zlevel: this.getZlevelBase(),
z: this.getZBase(),
style: {
xStart: xStart,
yStart: yStart,
xEnd: xEnd,
yEnd: yEnd,
strokeColor: strokeColor,
lineWidth: lineWidth,
lineType: lineType
},
hoverable: false
});
},
_adjustIndicatorValue: function (index) {
var item = this.polar[index];
var indicator = this.deepQuery(this._queryTarget, 'indicator');
var len = indicator.length;
var __ecIndicator = item.__ecIndicator;
var max;
var min;
var data = this._getSeriesData(index);
var boundaryGap = item.boundaryGap;
var splitNumber = item.splitNumber;
var scale = item.scale;
var opts;
var smartSteps = require('../util/smartSteps');
for (var i = 0; i < len; i++) {
if (typeof indicator[i].max == 'number') {
max = indicator[i].max;
min = indicator[i].min || 0;
opts = {
max: max,
min: min
};
} else {
var value = this._findValue(data, i, splitNumber, boundaryGap);
min = value.min;
max = value.max;
}
if (!scale && min >= 0 && max >= 0) {
min = 0;
}
if (!scale && min <= 0 && max <= 0) {
max = 0;
}
var stepOpt = smartSteps(min, max, splitNumber, opts);
__ecIndicator[i].value = {
min: stepOpt.min,
max: stepOpt.max,
step: stepOpt.step
};
}
},
_getSeriesData: function (index) {
var data = [];
var serie;
var serieData;
var legend = this.component.legend;
var polarIndex;
for (var i = 0; i < this.series.length; i++) {
serie = this.series[i];
if (serie.type != ecConfig.CHART_TYPE_RADAR) {
continue;
}
serieData = serie.data || [];
for (var j = 0; j < serieData.length; j++) {
polarIndex = this.deepQuery([
serieData[j],
serie,
this.option
], 'polarIndex') || 0;
if (polarIndex == index && (!legend || legend.isSelected(serieData[j].name))) {
data.push(serieData[j]);
}
}
}
return data;
},
_findValue: function (data, index, splitNumber, boundaryGap) {
var max;
var min;
var one;
if (!data || data.length === 0) {
return;
}
function _compare(item) {
(item > max || max === undefined) && (max = item);
(item < min || min === undefined) && (min = item);
}
if (data.length == 1) {
min = 0;
}
if (data.length != 1) {
for (var i = 0; i < data.length; i++) {
_compare(this.getDataFromOption(data[i].value[index]));
}
} else {
one = data[0];
for (var i = 0; i < one.value.length; i++) {
_compare(this.getDataFromOption(one.value[i]));
}
}
var gap = Math.abs(max - min);
min = min - Math.abs(gap * boundaryGap[0]);
max = max + Math.abs(gap * boundaryGap[1]);
if (min === max) {
if (max === 0) {
max = 1;
} else if (max > 0) {
min = max / splitNumber;
} else {
max = max / splitNumber;
}
}
return {
max: max,
min: min
};
},
getVector: function (polarIndex, indicatorIndex, value) {
polarIndex = polarIndex || 0;
indicatorIndex = indicatorIndex || 0;
var __ecIndicator = this.polar[polarIndex].__ecIndicator;
if (indicatorIndex >= __ecIndicator.length) {
return;
}
var indicator = this.polar[polarIndex].__ecIndicator[indicatorIndex];
var center = this.getCenter(polarIndex);
var vector = indicator.vector;
var max = indicator.value.max;
var min = indicator.value.min;
var alpha;
if (typeof value == 'undefined') {
return center;
}
switch (value) {
case 'min':
value = min;
break;
case 'max':
value = max;
break;
case 'center':
value = (max + min) / 2;
break;
}
if (max != min) {
alpha = (value - min) / (max - min);
} else {
alpha = 0.5;
}
return this._mapVector(vector, center, alpha);
},
isInside: function (vector) {
var polar = this.getNearestIndex(vector);
if (polar) {
return polar.polarIndex;
}
return -1;
},
getNearestIndex: function (vector) {
var item;
var center;
var radius;
var polarVector;
var startAngle;
var indicator;
var len;
var angle;
var finalAngle;
for (var i = 0; i < this.polar.length; i++) {
item = this.polar[i];
center = this.getCenter(i);
if (vector[0] == center[0] && vector[1] == center[1]) {
return {
polarIndex: i,
valueIndex: 0
};
}
radius = this._getRadius();
startAngle = item.startAngle;
indicator = item.indicator;
len = indicator.length;
angle = 2 * Math.PI / len;
polarVector = ecCoordinates.cartesian2polar(vector[0] - center[0], center[1] - vector[1]);
if (vector[0] - center[0] < 0) {
polarVector[1] += Math.PI;
}
if (polarVector[1] < 0) {
polarVector[1] += 2 * Math.PI;
}
finalAngle = polarVector[1] - startAngle / 180 * Math.PI + Math.PI * 2;
if (Math.abs(Math.cos(finalAngle % (angle / 2))) * radius > polarVector[0]) {
return {
polarIndex: i,
valueIndex: Math.floor((finalAngle + angle / 2) / angle) % len
};
}
}
},
getIndicator: function (index) {
var index = index || 0;
return this.polar[index].indicator;
},
refresh: function (newOption) {
if (newOption) {
this.option = newOption;
this.polar = this.option.polar;
this.series = this.option.series;
}
this.clear();
this._buildShape();
}
};
zrUtil.inherits(Polar, Base);
require('../component').define('polar', Polar);
return Polar;
});define('echarts/util/coordinates', [
'require',
'zrender/tool/math'
], function (require) {
var zrMath = require('zrender/tool/math');
function polar2cartesian(r, theta) {
return [
r * zrMath.sin(theta),
r * zrMath.cos(theta)
];
}
function cartesian2polar(x, y) {
return [
Math.sqrt(x * x + y * y),
Math.atan(y / x)
];
}
return {
polar2cartesian: polar2cartesian,
cartesian2polar: cartesian2polar
};
});define('echarts/chart/chord', [
'require',
'./base',
'zrender/shape/Text',
'zrender/shape/Line',
'zrender/shape/Sector',
'../util/shape/Ribbon',
'../util/shape/Icon',
'zrender/shape/BezierCurve',
'../config',
'../util/ecData',
'zrender/tool/util',
'zrender/tool/vector',
'../data/Graph',
'../layout/Chord',
'../chart'
], function (require) {
'use strict';
var ChartBase = require('./base');
var TextShape = require('zrender/shape/Text');
var LineShape = require('zrender/shape/Line');
var SectorShape = require('zrender/shape/Sector');
var RibbonShape = require('../util/shape/Ribbon');
var IconShape = require('../util/shape/Icon');
var BezierCurveShape = require('zrender/shape/BezierCurve');
var ecConfig = require('../config');
ecConfig.chord = {
zlevel: 0,
z: 2,
clickable: true,
radius: [
'65%',
'75%'
],
center: [
'50%',
'50%'
],
padding: 2,
sort: 'none',
sortSub: 'none',
startAngle: 90,
clockWise: true,
ribbonType: true,
minRadius: 10,
maxRadius: 20,
symbol: 'circle',
showScale: false,
showScaleText: false,
itemStyle: {
normal: {
borderWidth: 0,
borderColor: '#000',
label: {
show: true,
rotate: false,
distance: 5
},
chordStyle: {
width: 1,
color: 'black',
borderWidth: 1,
borderColor: '#999',
opacity: 0.5
}
},
emphasis: {
borderWidth: 0,
borderColor: '#000',
chordStyle: {
width: 1,
color: 'black',
borderWidth: 1,
borderColor: '#999'
}
}
}
};
var ecData = require('../util/ecData');
var zrUtil = require('zrender/tool/util');
var vec2 = require('zrender/tool/vector');
var Graph = require('../data/Graph');
var ChordLayout = require('../layout/Chord');
function Chord(ecTheme, messageCenter, zr, option, myChart) {
ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
this.scaleLineLength = 4;
this.scaleUnitAngle = 4;
this.refresh(option);
}
Chord.prototype = {
type: ecConfig.CHART_TYPE_CHORD,
_init: function () {
var series = this.series;
this.selectedMap = {};
var chordSeriesMap = {};
var chordSeriesGroups = {};
for (var i = 0, l = series.length; i < l; i++) {
if (series[i].type === this.type) {
var _isSelected = this.isSelected(series[i].name);
this.selectedMap[series[i].name] = _isSelected;
if (_isSelected) {
this.buildMark(i);
}
this.reformOption(series[i]);
chordSeriesMap[series[i].name] = series[i];
}
}
for (var i = 0, l = series.length; i < l; i++) {
if (series[i].type === this.type) {
if (series[i].insertToSerie) {
var referenceSerie = chordSeriesMap[series[i].insertToSerie];
series[i]._referenceSerie = referenceSerie;
} else {
chordSeriesGroups[series[i].name] = [series[i]];
}
}
}
for (var i = 0, l = series.length; i < l; i++) {
if (series[i].type === this.type) {
if (series[i].insertToSerie) {
var mainSerie = series[i]._referenceSerie;
while (mainSerie && mainSerie._referenceSerie) {
mainSerie = mainSerie._referenceSerie;
}
if (chordSeriesGroups[mainSerie.name] && this.selectedMap[series[i].name]) {
chordSeriesGroups[mainSerie.name].push(series[i]);
}
}
}
}
for (var name in chordSeriesGroups) {
this._buildChords(chordSeriesGroups[name]);
}
this.addShapeList();
},
_getNodeCategory: function (serie, group) {
return serie.categories && serie.categories[group.category || 0];
},
_getNodeQueryTarget: function (serie, group) {
var category = this._getNodeCategory(serie, group);
return [
group,
category,
serie
];
},
_getEdgeQueryTarget: function (serie, edge, type) {
type = type || 'normal';
return [
edge.itemStyle && edge.itemStyle[type],
serie.itemStyle[type].chordStyle
];
},
_buildChords: function (series) {
var graphs = [];
var mainSerie = series[0];
var nodeFilter = function (n) {
return n.layout.size > 0;
};
var createEdgeFilter = function (graph) {
return function (e) {
return graph.getEdge(e.node2, e.node1);
};
};
for (var i = 0; i < series.length; i++) {
var serie = series[i];
if (this.selectedMap[serie.name]) {
var graph;
if (serie.matrix) {
graph = this._getSerieGraphFromDataMatrix(serie, mainSerie);
} else if (serie.links) {
graph = this._getSerieGraphFromNodeLinks(serie, mainSerie);
}
graph.filterNode(nodeFilter, this);
if (serie.ribbonType) {
graph.filterEdge(createEdgeFilter(graph));
}
graphs.push(graph);
graph.__serie = serie;
}
}
if (!graphs.length) {
return;
}
var mainGraph = graphs[0];
if (!mainSerie.ribbonType) {
var minRadius = mainSerie.minRadius;
var maxRadius = mainSerie.maxRadius;
var min = Infinity, max = -Infinity;
mainGraph.eachNode(function (node) {
max = Math.max(node.layout.size, max);
min = Math.min(node.layout.size, min);
});
var multiplier = (maxRadius - minRadius) / (max - min);
mainGraph.eachNode(function (node) {
var queryTarget = this._getNodeQueryTarget(mainSerie, node);
var symbolSize = this.query(queryTarget, 'symbolSize');
if (max === min) {
node.layout.size = symbolSize || min;
} else {
node.layout.size = symbolSize || (node.layout.size - min) * multiplier + minRadius;
}
}, this);
}
var layout = new ChordLayout();
layout.clockWise = mainSerie.clockWise;
layout.startAngle = mainSerie.startAngle * Math.PI / 180;
if (!layout.clockWise) {
layout.startAngle = -layout.startAngle;
}
layout.padding = mainSerie.padding * Math.PI / 180;
layout.sort = mainSerie.sort;
layout.sortSub = mainSerie.sortSub;
layout.directed = mainSerie.ribbonType;
layout.run(graphs);
var showLabel = this.query(mainSerie, 'itemStyle.normal.label.show');
if (mainSerie.ribbonType) {
this._buildSectors(mainSerie, 0, mainGraph, mainSerie, graphs);
if (showLabel) {
this._buildLabels(mainSerie, 0, mainGraph, mainSerie, graphs);
}
for (var i = 0, j = 0; i < series.length; i++) {
if (this.selectedMap[series[i].name]) {
this._buildRibbons(series, i, graphs[j++], mainSerie);
}
}
if (mainSerie.showScale) {
this._buildScales(mainSerie, 0, mainGraph);
}
} else {
this._buildNodeIcons(mainSerie, 0, mainGraph, mainSerie, graphs);
if (showLabel) {
this._buildLabels(mainSerie, 0, mainGraph, mainSerie, graphs);
}
for (var i = 0, j = 0; i < series.length; i++) {
if (this.selectedMap[series[i].name]) {
this._buildEdgeCurves(series, i, graphs[j++], mainSerie, mainGraph);
}
}
}
this._initHoverHandler(series, graphs);
},
_getSerieGraphFromDataMatrix: function (serie, mainSerie) {
var nodesData = [];
var count = 0;
var matrix = [];
for (var i = 0; i < serie.matrix.length; i++) {
matrix[i] = serie.matrix[i].slice();
}
var data = serie.data || serie.nodes;
for (var i = 0; i < data.length; i++) {
var node = {};
var group = data[i];
group.rawIndex = i;
for (var key in group) {
if (key === 'name') {
node['id'] = group['name'];
} else {
node[key] = group[key];
}
}
var category = this._getNodeCategory(mainSerie, group);
var name = category ? category.name : group.name;
this.selectedMap[name] = this.isSelected(name);
if (this.selectedMap[name]) {
nodesData.push(node);
count++;
} else {
matrix.splice(count, 1);
for (var j = 0; j < matrix.length; j++) {
matrix[j].splice(count, 1);
}
}
}
var graph = Graph.fromMatrix(nodesData, matrix, true);
graph.eachNode(function (n, idx) {
n.layout = { size: n.data.outValue };
n.rawIndex = n.data.rawIndex;
});
graph.eachEdge(function (e) {
e.layout = { weight: e.data.weight };
});
return graph;
},
_getSerieGraphFromNodeLinks: function (serie, mainSerie) {
var graph = new Graph(true);
var nodes = serie.data || serie.nodes;
for (var i = 0, len = nodes.length; i < len; i++) {
var n = nodes[i];
if (!n || n.ignore) {
continue;
}
var category = this._getNodeCategory(mainSerie, n);
var name = category ? category.name : n.name;
this.selectedMap[name] = this.isSelected(name);
if (this.selectedMap[name]) {
var node = graph.addNode(n.name, n);
node.rawIndex = i;
}
}
for (var i = 0, len = serie.links.length; i < len; i++) {
var e = serie.links[i];
var n1 = e.source;
var n2 = e.target;
if (typeof n1 === 'number') {
n1 = nodes[n1];
if (n1) {
n1 = n1.name;
}
}
if (typeof n2 === 'number') {
n2 = nodes[n2];
if (n2) {
n2 = n2.name;
}
}
var edge = graph.addEdge(n1, n2, e);
if (edge) {
edge.rawIndex = i;
}
}
graph.eachNode(function (n) {
var value = n.data.value;
if (value == null) {
value = 0;
if (mainSerie.ribbonType) {
for (var i = 0; i < n.outEdges.length; i++) {
value += n.outEdges[i].data.weight || 0;
}
} else {
for (var i = 0; i < n.edges.length; i++) {
value += n.edges[i].data.weight || 0;
}
}
}
n.layout = { size: value };
});
graph.eachEdge(function (e) {
e.layout = { weight: e.data.weight == null ? 1 : e.data.weight };
});
return graph;
},
_initHoverHandler: function (series, graphs) {
var mainSerie = series[0];
var mainGraph = graphs[0];
var self = this;
mainGraph.eachNode(function (node) {
node.shape.onmouseover = function () {
mainGraph.eachNode(function (n) {
n.shape.style.opacity = 0.1;
if (n.labelShape) {
n.labelShape.style.opacity = 0.1;
n.labelShape.modSelf();
}
n.shape.modSelf();
});
for (var i = 0; i < graphs.length; i++) {
for (var j = 0; j < graphs[i].edges.length; j++) {
var e = graphs[i].edges[j];
var queryTarget = self._getEdgeQueryTarget(graphs[i].__serie, e.data);
e.shape.style.opacity = self.deepQuery(queryTarget, 'opacity') * 0.1;
e.shape.modSelf();
}
}
node.shape.style.opacity = 1;
if (node.labelShape) {
node.labelShape.style.opacity = 1;
}
for (var i = 0; i < graphs.length; i++) {
var n = graphs[i].getNodeById(node.id);
if (n) {
for (var j = 0; j < n.outEdges.length; j++) {
var e = n.outEdges[j];
var queryTarget = self._getEdgeQueryTarget(graphs[i].__serie, e.data);
e.shape.style.opacity = self.deepQuery(queryTarget, 'opacity');
var other = graphs[0].getNodeById(e.node2.id);
if (other) {
if (other.shape) {
other.shape.style.opacity = 1;
}
if (other.labelShape) {
other.labelShape.style.opacity = 1;
}
}
}
}
}
self.zr.refreshNextFrame();
};
node.shape.onmouseout = function () {
mainGraph.eachNode(function (n) {
n.shape.style.opacity = 1;
if (n.labelShape) {
n.labelShape.style.opacity = 1;
n.labelShape.modSelf();
}
n.shape.modSelf();
});
for (var i = 0; i < graphs.length; i++) {
for (var j = 0; j < graphs[i].edges.length; j++) {
var e = graphs[i].edges[j];
var queryTarget = [
e.data,
mainSerie
];
e.shape.style.opacity = self.deepQuery(queryTarget, 'itemStyle.normal.chordStyle.opacity');
e.shape.modSelf();
}
}
self.zr.refreshNextFrame();
};
});
},
_buildSectors: function (serie, serieIdx, graph, mainSerie) {
var center = this.parseCenter(this.zr, mainSerie.center);
var radius = this.parseRadius(this.zr, mainSerie.radius);
var clockWise = mainSerie.clockWise;
var sign = clockWise ? 1 : -1;
graph.eachNode(function (node) {
var category = this._getNodeCategory(mainSerie, node.data);
var color = category ? this.getColor(category.name) : this.getColor(node.id);
var startAngle = node.layout.startAngle / Math.PI * 180 * sign;
var endAngle = node.layout.endAngle / Math.PI * 180 * sign;
var sector = new SectorShape({
zlevel: serie.zlevel,
z: serie.z,
style: {
x: center[0],
y: center[1],
r0: radius[0],
r: radius[1],
startAngle: startAngle,
endAngle: endAngle,
brushType: 'fill',
opacity: 1,
color: color,
clockWise: clockWise
},
clickable: mainSerie.clickable,
highlightStyle: { brushType: 'fill' }
});
sector.style.lineWidth = this.deepQuery([
node.data,
mainSerie
], 'itemStyle.normal.borderWidth');
sector.highlightStyle.lineWidth = this.deepQuery([
node.data,
mainSerie
], 'itemStyle.emphasis.borderWidth');
sector.style.strokeColor = this.deepQuery([
node.data,
mainSerie
], 'itemStyle.normal.borderColor');
sector.highlightStyle.strokeColor = this.deepQuery([
node.data,
mainSerie
], 'itemStyle.emphasis.borderColor');
if (sector.style.lineWidth > 0) {
sector.style.brushType = 'both';
}
if (sector.highlightStyle.lineWidth > 0) {
sector.highlightStyle.brushType = 'both';
}
ecData.pack(sector, serie, serieIdx, node.data, node.rawIndex, node.id, node.category);
this.shapeList.push(sector);
node.shape = sector;
}, this);
},
_buildNodeIcons: function (serie, serieIdx, graph, mainSerie) {
var center = this.parseCenter(this.zr, mainSerie.center);
var radius = this.parseRadius(this.zr, mainSerie.radius);
var r = radius[1];
graph.eachNode(function (node) {
var startAngle = node.layout.startAngle;
var endAngle = node.layout.endAngle;
var angle = (startAngle + endAngle) / 2;
var x = r * Math.cos(angle);
var y = r * Math.sin(angle);
var queryTarget = this._getNodeQueryTarget(mainSerie, node.data);
var category = this._getNodeCategory(mainSerie, node.data);
var color = this.deepQuery(queryTarget, 'itemStyle.normal.color');
if (!color) {
color = category ? this.getColor(category.name) : this.getColor(node.id);
}
var iconShape = new IconShape({
zlevel: serie.zlevel,
z: serie.z + 1,
style: {
x: -node.layout.size,
y: -node.layout.size,
width: node.layout.size * 2,
height: node.layout.size * 2,
iconType: this.deepQuery(queryTarget, 'symbol'),
color: color,
brushType: 'both',
lineWidth: this.deepQuery(queryTarget, 'itemStyle.normal.borderWidth'),
strokeColor: this.deepQuery(queryTarget, 'itemStyle.normal.borderColor')
},
highlightStyle: {
color: this.deepQuery(queryTarget, 'itemStyle.emphasis.color'),
lineWidth: this.deepQuery(queryTarget, 'itemStyle.emphasis.borderWidth'),
strokeColor: this.deepQuery(queryTarget, 'itemStyle.emphasis.borderColor')
},
clickable: mainSerie.clickable,
position: [
x + center[0],
y + center[1]
]
});
ecData.pack(iconShape, serie, serieIdx, node.data, node.rawIndex, node.id, node.category);
this.shapeList.push(iconShape);
node.shape = iconShape;
}, this);
},
_buildLabels: function (serie, serieIdx, graph, mainSerie) {
var rotateLabel = this.query(mainSerie, 'itemStyle.normal.label.rotate');
var labelDistance = this.query(mainSerie, 'itemStyle.normal.label.distance');
var center = this.parseCenter(this.zr, mainSerie.center);
var radius = this.parseRadius(this.zr, mainSerie.radius);
var clockWise = mainSerie.clockWise;
var sign = clockWise ? 1 : -1;
graph.eachNode(function (node) {
var startAngle = node.layout.startAngle / Math.PI * 180 * sign;
var endAngle = node.layout.endAngle / Math.PI * 180 * sign;
var angle = (startAngle * -sign + endAngle * -sign) / 2;
angle %= 360;
if (angle < 0) {
angle += 360;
}
var isRightSide = angle <= 90 || angle >= 270;
angle = angle * Math.PI / 180;
var v = [
Math.cos(angle),
-Math.sin(angle)
];
var distance = 0;
if (mainSerie.ribbonType) {
distance = mainSerie.showScaleText ? 35 + labelDistance : labelDistance;
} else {
distance = labelDistance + node.layout.size;
}
var start = vec2.scale([], v, radius[1] + distance);
vec2.add(start, start, center);
var labelShape = {
zlevel: serie.zlevel,
z: serie.z + 1,
hoverable: false,
style: {
text: node.data.label == null ? node.id : node.data.label,
textAlign: isRightSide ? 'left' : 'right'
}
};
if (rotateLabel) {
labelShape.rotation = isRightSide ? angle : Math.PI + angle;
if (isRightSide) {
labelShape.style.x = radius[1] + distance;
} else {
labelShape.style.x = -radius[1] - distance;
}
labelShape.style.y = 0;
labelShape.position = center.slice();
} else {
labelShape.style.x = start[0];
labelShape.style.y = start[1];
}
labelShape.style.color = this.deepQuery([
node.data,
mainSerie
], 'itemStyle.normal.label.textStyle.color') || '#000000';
labelShape.style.textFont = this.getFont(this.deepQuery([
node.data,
mainSerie
], 'itemStyle.normal.label.textStyle'));
labelShape = new TextShape(labelShape);
this.shapeList.push(labelShape);
node.labelShape = labelShape;
}, this);
},
_buildRibbons: function (series, serieIdx, graph, mainSerie) {
var serie = series[serieIdx];
var center = this.parseCenter(this.zr, mainSerie.center);
var radius = this.parseRadius(this.zr, mainSerie.radius);
graph.eachEdge(function (edge, idx) {
var color;
var other = graph.getEdge(edge.node2, edge.node1);
if (!other || edge.shape) {
return;
}
if (other.shape) {
edge.shape = other.shape;
return;
}
var s0 = edge.layout.startAngle / Math.PI * 180;
var s1 = edge.layout.endAngle / Math.PI * 180;
var t0 = other.layout.startAngle / Math.PI * 180;
var t1 = other.layout.endAngle / Math.PI * 180;
if (series.length === 1) {
if (edge.layout.weight <= other.layout.weight) {
color = this.getColor(edge.node1.id);
} else {
color = this.getColor(edge.node2.id);
}
} else {
color = this.getColor(serie.name);
}
var queryTarget = this._getEdgeQueryTarget(serie, edge.data);
var queryTargetEmphasis = this._getEdgeQueryTarget(serie, edge.data, 'emphasis');
var ribbon = new RibbonShape({
zlevel: serie.zlevel,
z: serie.z,
style: {
x: center[0],
y: center[1],
r: radius[0],
source0: s0,
source1: s1,
target0: t0,
target1: t1,
brushType: 'both',
opacity: this.deepQuery(queryTarget, 'opacity'),
color: color,
lineWidth: this.deepQuery(queryTarget, 'borderWidth'),
strokeColor: this.deepQuery(queryTarget, 'borderColor'),
clockWise: mainSerie.clockWise
},
clickable: mainSerie.clickable,
highlightStyle: {
brushType: 'both',
opacity: this.deepQuery(queryTargetEmphasis, 'opacity'),
lineWidth: this.deepQuery(queryTargetEmphasis, 'borderWidth'),
strokeColor: this.deepQuery(queryTargetEmphasis, 'borderColor')
}
});
var node1, node2;
if (edge.layout.weight <= other.layout.weight) {
node1 = other.node1;
node2 = other.node2;
} else {
node1 = edge.node1;
node2 = edge.node2;
}
ecData.pack(ribbon, serie, serieIdx, edge.data, edge.rawIndex == null ? idx : edge.rawIndex, edge.data.name || node1.id + '-' + node2.id, node1.id, node2.id);
this.shapeList.push(ribbon);
edge.shape = ribbon;
}, this);
},
_buildEdgeCurves: function (series, serieIdx, graph, mainSerie, mainGraph) {
var serie = series[serieIdx];
var center = this.parseCenter(this.zr, mainSerie.center);
graph.eachEdge(function (e, idx) {
var node1 = mainGraph.getNodeById(e.node1.id);
var node2 = mainGraph.getNodeById(e.node2.id);
var shape1 = node1.shape;
var shape2 = node2.shape;
var queryTarget = this._getEdgeQueryTarget(serie, e.data);
var queryTargetEmphasis = this._getEdgeQueryTarget(serie, e.data, 'emphasis');
var curveShape = new BezierCurveShape({
zlevel: serie.zlevel,
z: serie.z,
style: {
xStart: shape1.position[0],
yStart: shape1.position[1],
xEnd: shape2.position[0],
yEnd: shape2.position[1],
cpX1: center[0],
cpY1: center[1],
lineWidth: this.deepQuery(queryTarget, 'width'),
strokeColor: this.deepQuery(queryTarget, 'color'),
opacity: this.deepQuery(queryTarget, 'opacity')
},
highlightStyle: {
lineWidth: this.deepQuery(queryTargetEmphasis, 'width'),
strokeColor: this.deepQuery(queryTargetEmphasis, 'color'),
opacity: this.deepQuery(queryTargetEmphasis, 'opacity')
}
});
ecData.pack(curveShape, serie, serieIdx, e.data, e.rawIndex == null ? idx : e.rawIndex, e.data.name || e.node1.id + '-' + e.node2.id, e.node1.id, e.node2.id);
this.shapeList.push(curveShape);
e.shape = curveShape;
}, this);
},
_buildScales: function (serie, serieIdx, graph) {
var clockWise = serie.clockWise;
var center = this.parseCenter(this.zr, serie.center);
var radius = this.parseRadius(this.zr, serie.radius);
var sign = clockWise ? 1 : -1;
var sumValue = 0;
var maxValue = -Infinity;
var unitPostfix;
var unitScale;
if (serie.showScaleText) {
graph.eachNode(function (node) {
var val = node.data.value;
if (val > maxValue) {
maxValue = val;
}
sumValue += val;
});
if (maxValue > 10000000000) {
unitPostfix = 'b';
unitScale = 1e-9;
} else if (maxValue > 10000000) {
unitPostfix = 'm';
unitScale = 0.000001;
} else if (maxValue > 10000) {
unitPostfix = 'k';
unitScale = 0.001;
} else {
unitPostfix = '';
unitScale = 1;
}
}
var unitValue = sumValue / (360 - serie.padding);
graph.eachNode(function (node) {
var startAngle = node.layout.startAngle / Math.PI * 180;
var endAngle = node.layout.endAngle / Math.PI * 180;
var scaleAngle = startAngle;
while (true) {
if (clockWise && scaleAngle > endAngle || !clockWise && scaleAngle < endAngle) {
break;
}
var theta = scaleAngle / 180 * Math.PI;
var v = [
Math.cos(theta),
Math.sin(theta)
];
var start = vec2.scale([], v, radius[1] + 1);
vec2.add(start, start, center);
var end = vec2.scale([], v, radius[1] + this.scaleLineLength);
vec2.add(end, end, center);
var scaleShape = new LineShape({
zlevel: serie.zlevel,
z: serie.z - 1,
hoverable: false,
style: {
xStart: start[0],
yStart: start[1],
xEnd: end[0],
yEnd: end[1],
lineCap: 'round',
brushType: 'stroke',
strokeColor: '#666',
lineWidth: 1
}
});
this.shapeList.push(scaleShape);
scaleAngle += sign * this.scaleUnitAngle;
}
if (!serie.showScaleText) {
return;
}
var scaleTextAngle = startAngle;
var step = unitValue * 5 * this.scaleUnitAngle;
var scaleValue = 0;
while (true) {
if (clockWise && scaleTextAngle > endAngle || !clockWise && scaleTextAngle < endAngle) {
break;
}
var theta = scaleTextAngle;
theta = theta % 360;
if (theta < 0) {
theta += 360;
}
var isRightSide = theta <= 90 || theta >= 270;
var textShape = new TextShape({
zlevel: serie.zlevel,
z: serie.z - 1,
hoverable: false,
style: {
x: isRightSide ? radius[1] + this.scaleLineLength + 4 : -radius[1] - this.scaleLineLength - 4,
y: 0,
text: Math.round(scaleValue * 10) / 10 + unitPostfix,
textAlign: isRightSide ? 'left' : 'right'
},
position: center.slice(),
rotation: isRightSide ? [
-theta / 180 * Math.PI,
0,
0
] : [
-(theta + 180) / 180 * Math.PI,
0,
0
]
});
this.shapeList.push(textShape);
scaleValue += step * unitScale;
scaleTextAngle += sign * this.scaleUnitAngle * 5;
}
}, this);
},
refresh: function (newOption) {
if (newOption) {
this.option = newOption;
this.series = newOption.series;
}
this.legend = this.component.legend;
if (this.legend) {
this.getColor = function (param) {
return this.legend.getColor(param);
};
this.isSelected = function (param) {
return this.legend.isSelected(param);
};
} else {
var colorMap = {};
var count = 0;
this.getColor = function (key) {
if (colorMap[key]) {
return colorMap[key];
}
if (!colorMap[key]) {
colorMap[key] = this.zr.getColor(count++);
}
return colorMap[key];
};
this.isSelected = function () {
return true;
};
}
this.backupShapeList();
this._init();
},
reformOption: function (opt) {
var _merge = zrUtil.merge;
opt = _merge(_merge(opt || {}, this.ecTheme.chord), ecConfig.chord);
opt.itemStyle.normal.label.textStyle = this.getTextStyle(opt.itemStyle.normal.label.textStyle);
this.z = opt.z;
this.zlevel = opt.zlevel;
}
};
zrUtil.inherits(Chord, ChartBase);
require('../chart').define('chord', Chord);
return Chord;
});define('echarts/util/shape/Ribbon', [
'require',
'zrender/shape/Base',
'zrender/shape/util/PathProxy',
'zrender/tool/util',
'zrender/tool/area'
], function (require) {
var Base = require('zrender/shape/Base');
var PathProxy = require('zrender/shape/util/PathProxy');
var zrUtil = require('zrender/tool/util');
var area = require('zrender/tool/area');
function RibbonShape(options) {
Base.call(this, options);
this._pathProxy = new PathProxy();
}
RibbonShape.prototype = {
type: 'ribbon',
buildPath: function (ctx, style) {
var clockWise = style.clockWise || false;
var path = this._pathProxy;
path.begin(ctx);
var cx = style.x;
var cy = style.y;
var r = style.r;
var s0 = style.source0 / 180 * Math.PI;
var s1 = style.source1 / 180 * Math.PI;
var t0 = style.target0 / 180 * Math.PI;
var t1 = style.target1 / 180 * Math.PI;
var sx0 = cx + Math.cos(s0) * r;
var sy0 = cy + Math.sin(s0) * r;
var sx1 = cx + Math.cos(s1) * r;
var sy1 = cy + Math.sin(s1) * r;
var tx0 = cx + Math.cos(t0) * r;
var ty0 = cy + Math.sin(t0) * r;
var tx1 = cx + Math.cos(t1) * r;
var ty1 = cy + Math.sin(t1) * r;
path.moveTo(sx0, sy0);
path.arc(cx, cy, style.r, s0, s1, !clockWise);
path.bezierCurveTo((cx - sx1) * 0.7 + sx1, (cy - sy1) * 0.7 + sy1, (cx - tx0) * 0.7 + tx0, (cy - ty0) * 0.7 + ty0, tx0, ty0);
if (style.source0 === style.target0 && style.source1 === style.target1) {
return;
}
path.arc(cx, cy, style.r, t0, t1, !clockWise);
path.bezierCurveTo((cx - tx1) * 0.7 + tx1, (cy - ty1) * 0.7 + ty1, (cx - sx0) * 0.7 + sx0, (cy - sy0) * 0.7 + sy0, sx0, sy0);
},
getRect: function (style) {
if (style.__rect) {
return style.__rect;
}
if (!this._pathProxy.isEmpty()) {
this.buildPath(null, style);
}
return this._pathProxy.fastBoundingRect();
},
isCover: function (x, y) {
var rect = this.getRect(this.style);
if (x >= rect.x && x <= rect.x + rect.width && y >= rect.y && y <= rect.y + rect.height) {
return area.isInsidePath(this._pathProxy.pathCommands, 0, 'fill', x, y);
}
}
};
zrUtil.inherits(RibbonShape, Base);
return RibbonShape;
});define('echarts/data/Graph', [
'require',
'zrender/tool/util'
], function (require) {
var util = require('zrender/tool/util');
'use strict';
var Graph = function (directed) {
this._directed = directed || false;
this.nodes = [];
this.edges = [];
this._nodesMap = {};
this._edgesMap = {};
};
Graph.prototype.isDirected = function () {
return this._directed;
};
Graph.prototype.addNode = function (id, data) {
if (this._nodesMap[id]) {
return this._nodesMap[id];
}
var node = new Graph.Node(id, data);
this.nodes.push(node);
this._nodesMap[id] = node;
return node;
};
Graph.prototype.getNodeById = function (id) {
return this._nodesMap[id];
};
Graph.prototype.addEdge = function (n1, n2, data) {
if (typeof n1 == 'string') {
n1 = this._nodesMap[n1];
}
if (typeof n2 == 'string') {
n2 = this._nodesMap[n2];
}
if (!n1 || !n2) {
return;
}
var key = n1.id + '-' + n2.id;
if (this._edgesMap[key]) {
return this._edgesMap[key];
}
var edge = new Graph.Edge(n1, n2, data);
if (this._directed) {
n1.outEdges.push(edge);
n2.inEdges.push(edge);
}
n1.edges.push(edge);
if (n1 !== n2) {
n2.edges.push(edge);
}
this.edges.push(edge);
this._edgesMap[key] = edge;
return edge;
};
Graph.prototype.removeEdge = function (edge) {
var n1 = edge.node1;
var n2 = edge.node2;
var key = n1.id + '-' + n2.id;
if (this._directed) {
n1.outEdges.splice(util.indexOf(n1.outEdges, edge), 1);
n2.inEdges.splice(util.indexOf(n2.inEdges, edge), 1);
}
n1.edges.splice(util.indexOf(n1.edges, edge), 1);
if (n1 !== n2) {
n2.edges.splice(util.indexOf(n2.edges, edge), 1);
}
delete this._edgesMap[key];
this.edges.splice(util.indexOf(this.edges, edge), 1);
};
Graph.prototype.getEdge = function (n1, n2) {
if (typeof n1 !== 'string') {
n1 = n1.id;
}
if (typeof n2 !== 'string') {
n2 = n2.id;
}
if (this._directed) {
return this._edgesMap[n1 + '-' + n2];
} else {
return this._edgesMap[n1 + '-' + n2] || this._edgesMap[n2 + '-' + n1];
}
};
Graph.prototype.removeNode = function (node) {
if (typeof node === 'string') {
node = this._nodesMap[node];
if (!node) {
return;
}
}
delete this._nodesMap[node.id];
this.nodes.splice(util.indexOf(this.nodes, node), 1);
for (var i = 0; i < this.edges.length;) {
var edge = this.edges[i];
if (edge.node1 === node || edge.node2 === node) {
this.removeEdge(edge);
} else {
i++;
}
}
};
Graph.prototype.filterNode = function (cb, context) {
var len = this.nodes.length;
for (var i = 0; i < len;) {
if (cb.call(context, this.nodes[i], i)) {
i++;
} else {
this.removeNode(this.nodes[i]);
len--;
}
}
};
Graph.prototype.filterEdge = function (cb, context) {
var len = this.edges.length;
for (var i = 0; i < len;) {
if (cb.call(context, this.edges[i], i)) {
i++;
} else {
this.removeEdge(this.edges[i]);
len--;
}
}
};
Graph.prototype.eachNode = function (cb, context) {
var len = this.nodes.length;
for (var i = 0; i < len; i++) {
if (this.nodes[i]) {
cb.call(context, this.nodes[i], i);
}
}
};
Graph.prototype.eachEdge = function (cb, context) {
var len = this.edges.length;
for (var i = 0; i < len; i++) {
if (this.edges[i]) {
cb.call(context, this.edges[i], i);
}
}
};
Graph.prototype.clear = function () {
this.nodes.length = 0;
this.edges.length = 0;
this._nodesMap = {};
this._edgesMap = {};
};
Graph.prototype.breadthFirstTraverse = function (cb, startNode, direction, context) {
if (typeof startNode === 'string') {
startNode = this._nodesMap[startNode];
}
if (!startNode) {
return;
}
var edgeType = 'edges';
if (direction === 'out') {
edgeType = 'outEdges';
} else if (direction === 'in') {
edgeType = 'inEdges';
}
for (var i = 0; i < this.nodes.length; i++) {
this.nodes[i].__visited = false;
}
if (cb.call(context, startNode, null)) {
return;
}
var queue = [startNode];
while (queue.length) {
var currentNode = queue.shift();
var edges = currentNode[edgeType];
for (var i = 0; i < edges.length; i++) {
var e = edges[i];
var otherNode = e.node1 === currentNode ? e.node2 : e.node1;
if (!otherNode.__visited) {
if (cb.call(otherNode, otherNode, currentNode)) {
return;
}
queue.push(otherNode);
otherNode.__visited = true;
}
}
}
};
Graph.prototype.clone = function () {
var graph = new Graph(this._directed);
for (var i = 0; i < this.nodes.length; i++) {
graph.addNode(this.nodes[i].id, this.nodes[i].data);
}
for (var i = 0; i < this.edges.length; i++) {
var e = this.edges[i];
graph.addEdge(e.node1.id, e.node2.id, e.data);
}
return graph;
};
var Node = function (id, data) {
this.id = id;
this.data = data || null;
this.inEdges = [];
this.outEdges = [];
this.edges = [];
};
Node.prototype.degree = function () {
return this.edges.length;
};
Node.prototype.inDegree = function () {
return this.inEdges.length;
};
Node.prototype.outDegree = function () {
return this.outEdges.length;
};
var Edge = function (node1, node2, data) {
this.node1 = node1;
this.node2 = node2;
this.data = data || null;
};
Graph.Node = Node;
Graph.Edge = Edge;
Graph.fromMatrix = function (nodesData, matrix, directed) {
if (!matrix || !matrix.length || matrix[0].length !== matrix.length || nodesData.length !== matrix.length) {
return;
}
var size = matrix.length;
var graph = new Graph(directed);
for (var i = 0; i < size; i++) {
var node = graph.addNode(nodesData[i].id, nodesData[i]);
node.data.value = 0;
if (directed) {
node.data.outValue = node.data.inValue = 0;
}
}
for (var i = 0; i < size; i++) {
for (var j = 0; j < size; j++) {
var item = matrix[i][j];
if (directed) {
graph.nodes[i].data.outValue += item;
graph.nodes[j].data.inValue += item;
}
graph.nodes[i].data.value += item;
graph.nodes[j].data.value += item;
}
}
for (var i = 0; i < size; i++) {
for (var j = i; j < size; j++) {
var item = matrix[i][j];
if (item === 0) {
continue;
}
var n1 = graph.nodes[i];
var n2 = graph.nodes[j];
var edge = graph.addEdge(n1, n2, {});
edge.data.weight = item;
if (i !== j) {
if (directed && matrix[j][i]) {
var inEdge = graph.addEdge(n2, n1, {});
inEdge.data.weight = matrix[j][i];
}
}
}
}
return graph;
};
return Graph;
});define('echarts/layout/Chord', ['require'], function (require) {
var ChordLayout = function (opts) {
opts = opts || {};
this.sort = opts.sort || null;
this.sortSub = opts.sortSub || null;
this.padding = 0.05;
this.startAngle = opts.startAngle || 0;
this.clockWise = opts.clockWise == null ? false : opts.clockWise;
this.center = opts.center || [
0,
0
];
this.directed = true;
};
ChordLayout.prototype.run = function (graphs) {
if (!(graphs instanceof Array)) {
graphs = [graphs];
}
var gl = graphs.length;
if (!gl) {
return;
}
var graph0 = graphs[0];
var nl = graph0.nodes.length;
var groups = [];
var sumSize = 0;
for (var i = 0; i < nl; i++) {
var g0node = graph0.nodes[i];
var group = {
size: 0,
subGroups: [],
node: g0node
};
groups.push(group);
var sumWeight = 0;
for (var k = 0; k < graphs.length; k++) {
var graph = graphs[k];
var node = graph.getNodeById(g0node.id);
if (!node) {
continue;
}
group.size += node.layout.size;
var edges = this.directed ? node.outEdges : node.edges;
for (var j = 0; j < edges.length; j++) {
var e = edges[j];
var w = e.layout.weight;
group.subGroups.push({
weight: w,
edge: e,
graph: graph
});
sumWeight += w;
}
}
sumSize += group.size;
var multiplier = group.size / sumWeight;
for (var j = 0; j < group.subGroups.length; j++) {
group.subGroups[j].weight *= multiplier;
}
if (this.sortSub === 'ascending') {
group.subGroups.sort(compareSubGroups);
} else if (this.sort === 'descending') {
group.subGroups.sort(compareSubGroups);
group.subGroups.reverse();
}
}
if (this.sort === 'ascending') {
groups.sort(compareGroups);
} else if (this.sort === 'descending') {
groups.sort(compareGroups);
groups.reverse();
}
var multiplier = (Math.PI * 2 - this.padding * nl) / sumSize;
var angle = this.startAngle;
var sign = this.clockWise ? 1 : -1;
for (var i = 0; i < nl; i++) {
var group = groups[i];
group.node.layout.startAngle = angle;
group.node.layout.endAngle = angle + sign * group.size * multiplier;
group.node.layout.subGroups = [];
for (var j = 0; j < group.subGroups.length; j++) {
var subGroup = group.subGroups[j];
subGroup.edge.layout.startAngle = angle;
angle += sign * subGroup.weight * multiplier;
subGroup.edge.layout.endAngle = angle;
}
angle = group.node.layout.endAngle + sign * this.padding;
}
};
var compareSubGroups = function (a, b) {
return a.weight - b.weight;
};
var compareGroups = function (a, b) {
return a.size - b.size;
};
return ChordLayout;
});define('echarts/chart/force', [
'require',
'./base',
'../data/Graph',
'../layout/Force',
'zrender/shape/Line',
'zrender/shape/BezierCurve',
'zrender/shape/Image',
'../util/shape/Icon',
'../config',
'../util/ecData',
'zrender/tool/util',
'zrender/config',
'zrender/tool/vector',
'../chart'
], function (require) {
'use strict';
var ChartBase = require('./base');
var Graph = require('../data/Graph');
var ForceLayout = require('../layout/Force');
var LineShape = require('zrender/shape/Line');
var BezierCurveShape = require('zrender/shape/BezierCurve');
var ImageShape = require('zrender/shape/Image');
var IconShape = require('../util/shape/Icon');
var ecConfig = require('../config');
ecConfig.force = {
zlevel: 1,
z: 2,
center: [
'50%',
'50%'
],
size: '100%',
preventOverlap: false,
coolDown: 0.99,
minRadius: 10,
maxRadius: 20,
ratioScaling: false,
large: false,
useWorker: false,
steps: 1,
scaling: 1,
gravity: 1,
symbol: 'circle',
symbolSize: 0,
linkSymbol: null,
linkSymbolSize: [
10,
15
],
draggable: true,
clickable: true,
roam: false,
itemStyle: {
normal: {
label: {
show: false,
position: 'inside'
},
nodeStyle: {
brushType: 'both',
borderColor: '#5182ab',
borderWidth: 1
},
linkStyle: {
color: '#5182ab',
width: 1,
type: 'line'
}
},
emphasis: {
label: { show: false },
nodeStyle: {},
linkStyle: { opacity: 0 }
}
}
};
var ecData = require('../util/ecData');
var zrUtil = require('zrender/tool/util');
var zrConfig = require('zrender/config');
var vec2 = require('zrender/tool/vector');
function Force(ecTheme, messageCenter, zr, option, myChart) {
var self = this;
ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
this.__nodePositionMap = {};
this._graph = new Graph(true);
this._layout = new ForceLayout();
this._layout.onupdate = function () {
self._step();
};
this._steps = 1;
this.ondragstart = function () {
ondragstart.apply(self, arguments);
};
this.ondragend = function () {
ondragend.apply(self, arguments);
};
this.ondrop = function () {
};
this.shapeHandler.ondragstart = function () {
self.isDragstart = true;
};
this.onmousemove = function () {
onmousemove.apply(self, arguments);
};
this.refresh(option);
}
Force.prototype = {
constructor: Force,
type: ecConfig.CHART_TYPE_FORCE,
_init: function () {
this.selectedMap = {};
var legend = this.component.legend;
var series = this.series;
var serieName;
this.clear();
for (var i = 0, l = series.length; i < l; i++) {
var serie = series[i];
if (serie.type === ecConfig.CHART_TYPE_FORCE) {
series[i] = this.reformOption(series[i]);
serieName = series[i].name || '';
this.selectedMap[serieName] = legend ? legend.isSelected(serieName) : true;
if (!this.selectedMap[serieName]) {
continue;
}
this.buildMark(i);
this._initSerie(serie, i);
break;
}
}
this.animationEffect();
},
_getNodeCategory: function (serie, node) {
return serie.categories && serie.categories[node.category || 0];
},
_getNodeQueryTarget: function (serie, node, type) {
type = type || 'normal';
var category = this._getNodeCategory(serie, node) || {};
return [
node.itemStyle && node.itemStyle[type],
category && category.itemStyle && category.itemStyle[type],
serie.itemStyle[type].nodeStyle
];
},
_getEdgeQueryTarget: function (serie, edge, type) {
type = type || 'normal';
return [
edge.itemStyle && edge.itemStyle[type],
serie.itemStyle[type].linkStyle
];
},
_initSerie: function (serie, serieIdx) {
this._temperature = 1;
if (serie.matrix) {
this._graph = this._getSerieGraphFromDataMatrix(serie);
} else if (serie.links) {
this._graph = this._getSerieGraphFromNodeLinks(serie);
}
this._buildLinkShapes(serie, serieIdx);
this._buildNodeShapes(serie, serieIdx);
var panable = serie.roam === true || serie.roam === 'move';
var zoomable = serie.roam === true || serie.roam === 'scale';
this.zr.modLayer(this.getZlevelBase(), {
panable: panable,
zoomable: zoomable
});
if (this.query('markPoint.effect.show') || this.query('markLine.effect.show')) {
this.zr.modLayer(ecConfig.EFFECT_ZLEVEL, {
panable: panable,
zoomable: zoomable
});
}
this._initLayout(serie);
this._step();
},
_getSerieGraphFromDataMatrix: function (serie) {
var nodesData = [];
var count = 0;
var matrix = [];
for (var i = 0; i < serie.matrix.length; i++) {
matrix[i] = serie.matrix[i].slice();
}
var data = serie.data || serie.nodes;
for (var i = 0; i < data.length; i++) {
var node = {};
var group = data[i];
for (var key in group) {
if (key === 'name') {
node['id'] = group['name'];
} else {
node[key] = group[key];
}
}
var category = this._getNodeCategory(serie, group);
var name = category ? category.name : group.name;
this.selectedMap[name] = this.isSelected(name);
if (this.selectedMap[name]) {
nodesData.push(node);
count++;
} else {
matrix.splice(count, 1);
for (var j = 0; j < matrix.length; j++) {
matrix[j].splice(count, 1);
}
}
}
var graph = Graph.fromMatrix(nodesData, matrix, true);
graph.eachNode(function (n, idx) {
n.layout = {
size: n.data.value,
mass: 0
};
n.rawIndex = idx;
});
graph.eachEdge(function (e) {
e.layout = { weight: e.data.weight };
});
return graph;
},
_getSerieGraphFromNodeLinks: function (serie) {
var graph = new Graph(true);
var nodes = serie.data || serie.nodes;
for (var i = 0, len = nodes.length; i < len; i++) {
var n = nodes[i];
if (!n || n.ignore) {
continue;
}
var category = this._getNodeCategory(serie, n);
var name = category ? category.name : n.name;
this.selectedMap[name] = this.isSelected(name);
if (this.selectedMap[name]) {
var node = graph.addNode(n.name, n);
node.rawIndex = i;
}
}
for (var i = 0, len = serie.links.length; i < len; i++) {
var e = serie.links[i];
var n1 = e.source;
var n2 = e.target;
if (typeof n1 === 'number') {
n1 = nodes[n1];
if (n1) {
n1 = n1.name;
}
}
if (typeof n2 === 'number') {
n2 = nodes[n2];
if (n2) {
n2 = n2.name;
}
}
var edge = graph.addEdge(n1, n2, e);
if (edge) {
edge.rawIndex = i;
}
}
graph.eachNode(function (n) {
var value = n.data.value;
if (value == null) {
value = 0;
for (var i = 0; i < n.edges.length; i++) {
value += n.edges[i].data.weight || 0;
}
}
n.layout = {
size: value,
mass: 0
};
});
graph.eachEdge(function (e) {
e.layout = { weight: e.data.weight == null ? 1 : e.data.weight };
});
return graph;
},
_initLayout: function (serie) {
var graph = this._graph;
var len = graph.nodes.length;
var minRadius = this.query(serie, 'minRadius');
var maxRadius = this.query(serie, 'maxRadius');
this._steps = serie.steps || 1;
var layout = this._layout;
layout.center = this.parseCenter(this.zr, serie.center);
layout.width = this.parsePercent(serie.size, this.zr.getWidth());
layout.height = this.parsePercent(serie.size, this.zr.getHeight());
layout.large = serie.large;
layout.scaling = serie.scaling;
layout.ratioScaling = serie.ratioScaling;
layout.gravity = serie.gravity;
layout.temperature = 1;
layout.coolDown = serie.coolDown;
layout.preventNodeEdgeOverlap = serie.preventOverlap;
layout.preventNodeOverlap = serie.preventOverlap;
var min = Infinity;
var max = -Infinity;
for (var i = 0; i < len; i++) {
var gNode = graph.nodes[i];
max = Math.max(gNode.layout.size, max);
min = Math.min(gNode.layout.size, min);
}
var divider = max - min;
for (var i = 0; i < len; i++) {
var gNode = graph.nodes[i];
if (divider > 0) {
gNode.layout.size = (gNode.layout.size - min) * (maxRadius - minRadius) / divider + minRadius;
gNode.layout.mass = gNode.layout.size / maxRadius;
} else {
gNode.layout.size = (maxRadius - minRadius) / 2;
gNode.layout.mass = 0.5;
}
}
for (var i = 0; i < len; i++) {
var gNode = graph.nodes[i];
if (typeof this.__nodePositionMap[gNode.id] !== 'undefined') {
gNode.layout.position = vec2.create();
vec2.copy(gNode.layout.position, this.__nodePositionMap[gNode.id]);
} else if (typeof gNode.data.initial !== 'undefined') {
gNode.layout.position = vec2.create();
vec2.copy(gNode.layout.position, gNode.data.initial);
} else {
var center = this._layout.center;
var size = Math.min(this._layout.width, this._layout.height);
gNode.layout.position = _randomInSquare(center[0], center[1], size * 0.8);
}
var style = gNode.shape.style;
var radius = gNode.layout.size;
style.width = style.width || radius * 2;
style.height = style.height || radius * 2;
style.x = -style.width / 2;
style.y = -style.height / 2;
vec2.copy(gNode.shape.position, gNode.layout.position);
}
len = graph.edges.length;
max = -Infinity;
for (var i = 0; i < len; i++) {
var e = graph.edges[i];
if (e.layout.weight > max) {
max = e.layout.weight;
}
}
for (var i = 0; i < len; i++) {
var e = graph.edges[i];
e.layout.weight /= max;
}
this._layout.init(graph, serie.useWorker);
},
_buildNodeShapes: function (serie, serieIdx) {
var graph = this._graph;
var categories = this.query(serie, 'categories');
graph.eachNode(function (node) {
var category = this._getNodeCategory(serie, node.data);
var queryTarget = [
node.data,
category,
serie
];
var styleQueryTarget = this._getNodeQueryTarget(serie, node.data);
var emphasisStyleQueryTarget = this._getNodeQueryTarget(serie, node.data, 'emphasis');
var shape = new IconShape({
style: {
x: 0,
y: 0,
color: this.deepQuery(styleQueryTarget, 'color'),
brushType: 'both',
strokeColor: this.deepQuery(styleQueryTarget, 'strokeColor') || this.deepQuery(styleQueryTarget, 'borderColor'),
lineWidth: this.deepQuery(styleQueryTarget, 'lineWidth') || this.deepQuery(styleQueryTarget, 'borderWidth')
},
highlightStyle: {
color: this.deepQuery(emphasisStyleQueryTarget, 'color'),
strokeColor: this.deepQuery(emphasisStyleQueryTarget, 'strokeColor') || this.deepQuery(emphasisStyleQueryTarget, 'borderColor'),
lineWidth: this.deepQuery(emphasisStyleQueryTarget, 'lineWidth') || this.deepQuery(emphasisStyleQueryTarget, 'borderWidth')
},
clickable: serie.clickable,
zlevel: this.getZlevelBase(),
z: this.getZBase()
});
if (!shape.style.color) {
shape.style.color = category ? this.getColor(category.name) : this.getColor(node.id);
}
shape.style.iconType = this.deepQuery(queryTarget, 'symbol');
var symbolSize = this.deepQuery(queryTarget, 'symbolSize') || 0;
if (typeof symbolSize === 'number') {
symbolSize = [
symbolSize,
symbolSize
];
}
shape.style.width = symbolSize[0] * 2;
shape.style.height = symbolSize[1] * 2;
if (shape.style.iconType.match('image')) {
shape.style.image = shape.style.iconType.replace(new RegExp('^image:\\/\\/'), '');
shape = new ImageShape({
style: shape.style,
highlightStyle: shape.highlightStyle,
clickable: shape.clickable,
zlevel: this.getZlevelBase(),
z: this.getZBase()
});
}
if (this.deepQuery(queryTarget, 'itemStyle.normal.label.show')) {
shape.style.text = node.data.label == null ? node.id : node.data.label;
shape.style.textPosition = this.deepQuery(queryTarget, 'itemStyle.normal.label.position');
shape.style.textColor = this.deepQuery(queryTarget, 'itemStyle.normal.label.textStyle.color');
shape.style.textFont = this.getFont(this.deepQuery(queryTarget, 'itemStyle.normal.label.textStyle') || {});
}
if (this.deepQuery(queryTarget, 'itemStyle.emphasis.label.show')) {
shape.highlightStyle.textPosition = this.deepQuery(queryTarget, 'itemStyle.emphasis.label.position');
shape.highlightStyle.textColor = this.deepQuery(queryTarget, 'itemStyle.emphasis.label.textStyle.color');
shape.highlightStyle.textFont = this.getFont(this.deepQuery(queryTarget, 'itemStyle.emphasis.label.textStyle') || {});
}
if (this.deepQuery(queryTarget, 'draggable')) {
this.setCalculable(shape);
shape.dragEnableTime = 0;
shape.draggable = true;
shape.ondragstart = this.shapeHandler.ondragstart;
shape.ondragover = null;
}
var categoryName = '';
if (typeof node.category !== 'undefined') {
var category = categories[node.category];
categoryName = category && category.name || '';
}
ecData.pack(shape, serie, serieIdx, node.data, node.rawIndex, node.data.name || '', node.category);
this.shapeList.push(shape);
this.zr.addShape(shape);
node.shape = shape;
}, this);
},
_buildLinkShapes: function (serie, serieIdx) {
var graph = this._graph;
var len = graph.edges.length;
for (var i = 0; i < len; i++) {
var gEdge = graph.edges[i];
var link = gEdge.data;
var source = gEdge.node1;
var target = gEdge.node2;
var otherEdge = graph.getEdge(target, source);
var queryTarget = this._getEdgeQueryTarget(serie, link);
var linkType = this.deepQuery(queryTarget, 'type');
if (serie.linkSymbol && serie.linkSymbol !== 'none') {
linkType = 'line';
}
var LinkShapeCtor = linkType === 'line' ? LineShape : BezierCurveShape;
var linkShape = new LinkShapeCtor({
style: {
xStart: 0,
yStart: 0,
xEnd: 0,
yEnd: 0
},
clickable: this.query(serie, 'clickable'),
highlightStyle: {},
zlevel: this.getZlevelBase(),
z: this.getZBase()
});
if (otherEdge && otherEdge.shape) {
linkShape.style.offset = 4;
otherEdge.shape.style.offset = 4;
}
zrUtil.merge(linkShape.style, this.query(serie, 'itemStyle.normal.linkStyle'), true);
zrUtil.merge(linkShape.highlightStyle, this.query(serie, 'itemStyle.emphasis.linkStyle'), true);
if (typeof link.itemStyle !== 'undefined') {
if (link.itemStyle.normal) {
zrUtil.merge(linkShape.style, link.itemStyle.normal, true);
}
if (link.itemStyle.emphasis) {
zrUtil.merge(linkShape.highlightStyle, link.itemStyle.emphasis, true);
}
}
linkShape.style.lineWidth = linkShape.style.lineWidth || linkShape.style.width;
linkShape.style.strokeColor = linkShape.style.strokeColor || linkShape.style.color;
linkShape.highlightStyle.lineWidth = linkShape.highlightStyle.lineWidth || linkShape.highlightStyle.width;
linkShape.highlightStyle.strokeColor = linkShape.highlightStyle.strokeColor || linkShape.highlightStyle.color;
ecData.pack(linkShape, serie, serieIdx, gEdge.data, gEdge.rawIndex == null ? i : gEdge.rawIndex, gEdge.data.name || source.id + ' - ' + target.id, source.id, target.id);
this.shapeList.push(linkShape);
this.zr.addShape(linkShape);
gEdge.shape = linkShape;
if (serie.linkSymbol && serie.linkSymbol !== 'none') {
var symbolShape = new IconShape({
style: {
x: -5,
y: 0,
width: serie.linkSymbolSize[0],
height: serie.linkSymbolSize[1],
iconType: serie.linkSymbol,
brushType: 'fill',
color: linkShape.style.strokeColor
},
highlightStyle: { brushType: 'fill' },
position: [
0,
0
],
rotation: 0,
zlevel: this.getZlevelBase(),
z: this.getZBase()
});
linkShape._symbolShape = symbolShape;
this.shapeList.push(symbolShape);
this.zr.addShape(symbolShape);
}
}
},
_updateLinkShapes: function () {
var v = vec2.create();
var n = vec2.create();
var p1 = vec2.create();
var p2 = vec2.create();
var edges = this._graph.edges;
for (var i = 0, len = edges.length; i < len; i++) {
var edge = edges[i];
var sourceShape = edge.node1.shape;
var targetShape = edge.node2.shape;
vec2.copy(p1, sourceShape.position);
vec2.copy(p2, targetShape.position);
var edgeShapeStyle = edge.shape.style;
vec2.sub(v, p1, p2);
vec2.normalize(v, v);
if (edgeShapeStyle.offset) {
n[0] = v[1];
n[1] = -v[0];
vec2.scaleAndAdd(p1, p1, n, edgeShapeStyle.offset);
vec2.scaleAndAdd(p2, p2, n, edgeShapeStyle.offset);
} else if (edge.shape.type === 'bezier-curve') {
edgeShapeStyle.cpX1 = (p1[0] + p2[0]) / 2 - (p2[1] - p1[1]) / 4;
edgeShapeStyle.cpY1 = (p1[1] + p2[1]) / 2 - (p1[0] - p2[0]) / 4;
}
edgeShapeStyle.xStart = p1[0];
edgeShapeStyle.yStart = p1[1];
edgeShapeStyle.xEnd = p2[0];
edgeShapeStyle.yEnd = p2[1];
edge.shape.modSelf();
if (edge.shape._symbolShape) {
var symbolShape = edge.shape._symbolShape;
vec2.copy(symbolShape.position, p2);
vec2.scaleAndAdd(symbolShape.position, symbolShape.position, v, targetShape.style.width / 2 + 2);
var angle = Math.atan2(v[1], v[0]);
symbolShape.rotation = Math.PI / 2 - angle;
symbolShape.modSelf();
}
}
},
_syncNodePositions: function () {
var graph = this._graph;
for (var i = 0; i < graph.nodes.length; i++) {
var gNode = graph.nodes[i];
var position = gNode.layout.position;
var node = gNode.data;
var shape = gNode.shape;
var fixX = shape.fixed || node.fixX;
var fixY = shape.fixed || node.fixY;
if (fixX === true) {
fixX = 1;
} else if (isNaN(fixX)) {
fixX = 0;
}
if (fixY === true) {
fixY = 1;
} else if (isNaN(fixY)) {
fixY = 0;
}
shape.position[0] += (position[0] - shape.position[0]) * (1 - fixX);
shape.position[1] += (position[1] - shape.position[1]) * (1 - fixY);
vec2.copy(position, shape.position);
var nodeName = node.name;
if (nodeName) {
var gPos = this.__nodePositionMap[nodeName];
if (!gPos) {
gPos = this.__nodePositionMap[nodeName] = vec2.create();
}
vec2.copy(gPos, position);
}
shape.modSelf();
}
},
_step: function (e) {
this._syncNodePositions();
this._updateLinkShapes();
this.zr.refreshNextFrame();
if (this._layout.temperature > 0.01) {
this._layout.step(this._steps);
} else {
this.messageCenter.dispatch(ecConfig.EVENT.FORCE_LAYOUT_END, {}, {}, this.myChart);
}
},
refresh: function (newOption) {
if (newOption) {
this.option = newOption;
this.series = this.option.series;
}
this.legend = this.component.legend;
if (this.legend) {
this.getColor = function (param) {
return this.legend.getColor(param);
};
this.isSelected = function (param) {
return this.legend.isSelected(param);
};
} else {
var colorMap = {};
var count = 0;
this.getColor = function (key) {
if (colorMap[key]) {
return colorMap[key];
}
if (!colorMap[key]) {
colorMap[key] = this.zr.getColor(count++);
}
return colorMap[key];
};
this.isSelected = function () {
return true;
};
}
this._init();
},
dispose: function () {
this.clear();
this.shapeList = null;
this.effectList = null;
this._layout.dispose();
this._layout = null;
this.__nodePositionMap = {};
},
getPosition: function () {
var position = [];
this._graph.eachNode(function (n) {
if (n.layout) {
position.push({
name: n.data.name,
position: Array.prototype.slice.call(n.layout.position)
});
}
});
return position;
}
};
function ondragstart(param) {
if (!this.isDragstart || !param.target) {
return;
}
var shape = param.target;
shape.fixed = true;
this.isDragstart = false;
this.zr.on(zrConfig.EVENT.MOUSEMOVE, this.onmousemove);
}
function onmousemove() {
this._layout.temperature = 0.8;
this._step();
}
function ondragend(param, status) {
if (!this.isDragend || !param.target) {
return;
}
var shape = param.target;
shape.fixed = false;
status.dragIn = true;
status.needRefresh = false;
this.isDragend = false;
this.zr.un(zrConfig.EVENT.MOUSEMOVE, this.onmousemove);
}
function _randomInSquare(x, y, size) {
var v = vec2.create();
v[0] = (Math.random() - 0.5) * size + x;
v[1] = (Math.random() - 0.5) * size + y;
return v;
}
zrUtil.inherits(Force, ChartBase);
require('../chart').define('force', Force);
return Force;
});define('echarts/layout/Force', [
'require',
'./forceLayoutWorker',
'zrender/tool/vector'
], function (require) {
var ForceLayoutWorker = require('./forceLayoutWorker');
var vec2 = require('zrender/tool/vector');
var requestAnimationFrame = window.requestAnimationFrame || window.msRequestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function (func) {
setTimeout(func, 16);
};
var ArrayCtor = typeof Float32Array == 'undefined' ? Array : Float32Array;
var workerUrl;
function createWorkerUrl() {
if (typeof Worker !== 'undefined' && typeof Blob !== 'undefined') {
try {
var blob = new Blob([ForceLayoutWorker.getWorkerCode()]);
workerUrl = window.URL.createObjectURL(blob);
} catch (e) {
workerUrl = '';
}
}
return workerUrl;
}
var ForceLayout = function (opts) {
if (typeof workerUrl === 'undefined') {
createWorkerUrl();
}
opts = opts || {};
this.width = opts.width || 500;
this.height = opts.height || 500;
this.center = opts.center || [
this.width / 2,
this.height / 2
];
this.ratioScaling = opts.ratioScaling || false;
this.scaling = opts.scaling || 1;
this.gravity = typeof opts.gravity !== 'undefined' ? opts.gravity : 1;
this.large = opts.large || false;
this.preventNodeOverlap = opts.preventNodeOverlap || false;
this.preventNodeEdgeOverlap = opts.preventNodeEdgeOverlap || false;
this.maxSpeedIncrease = opts.maxSpeedIncrease || 1;
this.onupdate = opts.onupdate || function () {
};
this.temperature = opts.temperature || 1;
this.coolDown = opts.coolDown || 0.99;
this._layout = null;
this._layoutWorker = null;
var self = this;
var _$onupdate = this._$onupdate;
this._$onupdate = function (e) {
_$onupdate.call(self, e);
};
};
ForceLayout.prototype.updateConfig = function () {
var width = this.width;
var height = this.height;
var size = Math.min(width, height);
var config = {
center: this.center,
width: this.ratioScaling ? width : size,
height: this.ratioScaling ? height : size,
scaling: this.scaling || 1,
gravity: this.gravity || 1,
barnesHutOptimize: this.large,
preventNodeOverlap: this.preventNodeOverlap,
preventNodeEdgeOverlap: this.preventNodeEdgeOverlap,
maxSpeedIncrease: this.maxSpeedIncrease
};
if (this._layoutWorker) {
this._layoutWorker.postMessage({
cmd: 'updateConfig',
config: config
});
} else {
for (var name in config) {
this._layout[name] = config[name];
}
}
};
ForceLayout.prototype.init = function (graph, useWorker) {
if (this._layoutWorker) {
this._layoutWorker.terminate();
this._layoutWorker = null;
}
if (workerUrl && useWorker) {
try {
if (!this._layoutWorker) {
this._layoutWorker = new Worker(workerUrl);
this._layoutWorker.onmessage = this._$onupdate;
}
this._layout = null;
} catch (e) {
this._layoutWorker = null;
if (!this._layout) {
this._layout = new ForceLayoutWorker();
}
}
} else {
if (!this._layout) {
this._layout = new ForceLayoutWorker();
}
}
this.temperature = 1;
this.graph = graph;
var len = graph.nodes.length;
var positionArr = new ArrayCtor(len * 2);
var massArr = new ArrayCtor(len);
var sizeArr = new ArrayCtor(len);
for (var i = 0; i < len; i++) {
var n = graph.nodes[i];
positionArr[i * 2] = n.layout.position[0];
positionArr[i * 2 + 1] = n.layout.position[1];
massArr[i] = typeof n.layout.mass === 'undefined' ? 1 : n.layout.mass;
sizeArr[i] = typeof n.layout.size === 'undefined' ? 1 : n.layout.size;
n.layout.__index = i;
}
len = graph.edges.length;
var edgeArr = new ArrayCtor(len * 2);
var edgeWeightArr = new ArrayCtor(len);
for (var i = 0; i < len; i++) {
var edge = graph.edges[i];
edgeArr[i * 2] = edge.node1.layout.__index;
edgeArr[i * 2 + 1] = edge.node2.layout.__index;
edgeWeightArr[i] = edge.layout.weight || 1;
}
if (this._layoutWorker) {
this._layoutWorker.postMessage({
cmd: 'init',
nodesPosition: positionArr,
nodesMass: massArr,
nodesSize: sizeArr,
edges: edgeArr,
edgesWeight: edgeWeightArr
});
} else {
this._layout.initNodes(positionArr, massArr, sizeArr);
this._layout.initEdges(edgeArr, edgeWeightArr);
}
this.updateConfig();
};
ForceLayout.prototype.step = function (steps) {
var nodes = this.graph.nodes;
if (this._layoutWorker) {
var positionArr = new ArrayCtor(nodes.length * 2);
for (var i = 0; i < nodes.length; i++) {
var n = nodes[i];
positionArr[i * 2] = n.layout.position[0];
positionArr[i * 2 + 1] = n.layout.position[1];
}
this._layoutWorker.postMessage(positionArr.buffer, [positionArr.buffer]);
this._layoutWorker.postMessage({
cmd: 'update',
steps: steps,
temperature: this.temperature,
coolDown: this.coolDown
});
for (var i = 0; i < steps; i++) {
this.temperature *= this.coolDown;
}
} else {
requestAnimationFrame(this._$onupdate);
for (var i = 0; i < nodes.length; i++) {
var n = nodes[i];
vec2.copy(this._layout.nodes[i].position, n.layout.position);
}
for (var i = 0; i < steps; i++) {
this._layout.temperature = this.temperature;
this._layout.update();
this.temperature *= this.coolDown;
}
}
};
ForceLayout.prototype._$onupdate = function (e) {
if (this._layoutWorker) {
var positionArr = new Float32Array(e.data);
for (var i = 0; i < this.graph.nodes.length; i++) {
var n = this.graph.nodes[i];
n.layout.position[0] = positionArr[i * 2];
n.layout.position[1] = positionArr[i * 2 + 1];
}
this.onupdate && this.onupdate();
} else if (this._layout) {
for (var i = 0; i < this.graph.nodes.length; i++) {
var n = this.graph.nodes[i];
vec2.copy(n.layout.position, this._layout.nodes[i].position);
}
this.onupdate && this.onupdate();
}
};
ForceLayout.prototype.dispose = function () {
if (this._layoutWorker) {
this._layoutWorker.terminate();
}
this._layoutWorker = null;
this._layout = null;
};
return ForceLayout;
});define('echarts/layout/forceLayoutWorker', [
'require',
'zrender/tool/vector'
], function __echartsForceLayoutWorker(require) {
'use strict';
var vec2;
var inWorker = typeof window === 'undefined' && typeof require === 'undefined';
if (inWorker) {
vec2 = {
create: function (x, y) {
var out = new Float32Array(2);
out[0] = x || 0;
out[1] = y || 0;
return out;
},
dist: function (a, b) {
var x = b[0] - a[0];
var y = b[1] - a[1];
return Math.sqrt(x * x + y * y);
},
len: function (a) {
var x = a[0];
var y = a[1];
return Math.sqrt(x * x + y * y);
},
scaleAndAdd: function (out, a, b, scale) {
out[0] = a[0] + b[0] * scale;
out[1] = a[1] + b[1] * scale;
return out;
},
scale: function (out, a, b) {
out[0] = a[0] * b;
out[1] = a[1] * b;
return out;
},
add: function (out, a, b) {
out[0] = a[0] + b[0];
out[1] = a[1] + b[1];
return out;
},
sub: function (out, a, b) {
out[0] = a[0] - b[0];
out[1] = a[1] - b[1];
return out;
},
dot: function (v1, v2) {
return v1[0] * v2[0] + v1[1] * v2[1];
},
normalize: function (out, a) {
var x = a[0];
var y = a[1];
var len = x * x + y * y;
if (len > 0) {
len = 1 / Math.sqrt(len);
out[0] = a[0] * len;
out[1] = a[1] * len;
}
return out;
},
negate: function (out, a) {
out[0] = -a[0];
out[1] = -a[1];
return out;
},
copy: function (out, a) {
out[0] = a[0];
out[1] = a[1];
return out;
},
set: function (out, x, y) {
out[0] = x;
out[1] = y;
return out;
}
};
} else {
vec2 = require('zrender/tool/vector');
}
var ArrayCtor = typeof Float32Array == 'undefined' ? Array : Float32Array;
function Region() {
this.subRegions = [];
this.nSubRegions = 0;
this.node = null;
this.mass = 0;
this.centerOfMass = null;
this.bbox = new ArrayCtor(4);
this.size = 0;
}
Region.prototype.beforeUpdate = function () {
for (var i = 0; i < this.nSubRegions; i++) {
this.subRegions[i].beforeUpdate();
}
this.mass = 0;
if (this.centerOfMass) {
this.centerOfMass[0] = 0;
this.centerOfMass[1] = 0;
}
this.nSubRegions = 0;
this.node = null;
};
Region.prototype.afterUpdate = function () {
this.subRegions.length = this.nSubRegions;
for (var i = 0; i < this.nSubRegions; i++) {
this.subRegions[i].afterUpdate();
}
};
Region.prototype.addNode = function (node) {
if (this.nSubRegions === 0) {
if (this.node == null) {
this.node = node;
return;
} else {
this._addNodeToSubRegion(this.node);
this.node = null;
}
}
this._addNodeToSubRegion(node);
this._updateCenterOfMass(node);
};
Region.prototype.findSubRegion = function (x, y) {
for (var i = 0; i < this.nSubRegions; i++) {
var region = this.subRegions[i];
if (region.contain(x, y)) {
return region;
}
}
};
Region.prototype.contain = function (x, y) {
return this.bbox[0] <= x && this.bbox[2] >= x && this.bbox[1] <= y && this.bbox[3] >= y;
};
Region.prototype.setBBox = function (minX, minY, maxX, maxY) {
this.bbox[0] = minX;
this.bbox[1] = minY;
this.bbox[2] = maxX;
this.bbox[3] = maxY;
this.size = (maxX - minX + maxY - minY) / 2;
};
Region.prototype._newSubRegion = function () {
var subRegion = this.subRegions[this.nSubRegions];
if (!subRegion) {
subRegion = new Region();
this.subRegions[this.nSubRegions] = subRegion;
}
this.nSubRegions++;
return subRegion;
};
Region.prototype._addNodeToSubRegion = function (node) {
var subRegion = this.findSubRegion(node.position[0], node.position[1]);
var bbox = this.bbox;
if (!subRegion) {
var cx = (bbox[0] + bbox[2]) / 2;
var cy = (bbox[1] + bbox[3]) / 2;
var w = (bbox[2] - bbox[0]) / 2;
var h = (bbox[3] - bbox[1]) / 2;
var xi = node.position[0] >= cx ? 1 : 0;
var yi = node.position[1] >= cy ? 1 : 0;
var subRegion = this._newSubRegion();
subRegion.setBBox(xi * w + bbox[0], yi * h + bbox[1], (xi + 1) * w + bbox[0], (yi + 1) * h + bbox[1]);
}
subRegion.addNode(node);
};
Region.prototype._updateCenterOfMass = function (node) {
if (this.centerOfMass == null) {
this.centerOfMass = vec2.create();
}
var x = this.centerOfMass[0] * this.mass;
var y = this.centerOfMass[1] * this.mass;
x += node.position[0] * node.mass;
y += node.position[1] * node.mass;
this.mass += node.mass;
this.centerOfMass[0] = x / this.mass;
this.centerOfMass[1] = y / this.mass;
};
function GraphNode() {
this.position = vec2.create();
this.force = vec2.create();
this.forcePrev = vec2.create();
this.speed = vec2.create();
this.speedPrev = vec2.create();
this.mass = 1;
this.inDegree = 0;
this.outDegree = 0;
}
function GraphEdge(node1, node2) {
this.node1 = node1;
this.node2 = node2;
this.weight = 1;
}
function ForceLayout() {
this.barnesHutOptimize = false;
this.barnesHutTheta = 1.5;
this.repulsionByDegree = false;
this.preventNodeOverlap = false;
this.preventNodeEdgeOverlap = false;
this.strongGravity = true;
this.gravity = 1;
this.scaling = 1;
this.edgeWeightInfluence = 1;
this.center = [
0,
0
];
this.width = 500;
this.height = 500;
this.maxSpeedIncrease = 1;
this.nodes = [];
this.edges = [];
this.bbox = new ArrayCtor(4);
this._rootRegion = new Region();
this._rootRegion.centerOfMass = vec2.create();
this._massArr = null;
this._k = 0;
}
ForceLayout.prototype.nodeToNodeRepulsionFactor = function (mass, d, k) {
return k * k * mass / d;
};
ForceLayout.prototype.edgeToNodeRepulsionFactor = function (mass, d, k) {
return k * mass / d;
};
ForceLayout.prototype.attractionFactor = function (w, d, k) {
return w * d / k;
};
ForceLayout.prototype.initNodes = function (positionArr, massArr, sizeArr) {
this.temperature = 1;
var nNodes = positionArr.length / 2;
this.nodes.length = 0;
var haveSize = typeof sizeArr !== 'undefined';
for (var i = 0; i < nNodes; i++) {
var node = new GraphNode();
node.position[0] = positionArr[i * 2];
node.position[1] = positionArr[i * 2 + 1];
node.mass = massArr[i];
if (haveSize) {
node.size = sizeArr[i];
}
this.nodes.push(node);
}
this._massArr = massArr;
if (haveSize) {
this._sizeArr = sizeArr;
}
};
ForceLayout.prototype.initEdges = function (edgeArr, edgeWeightArr) {
var nEdges = edgeArr.length / 2;
this.edges.length = 0;
var edgeHaveWeight = typeof edgeWeightArr !== 'undefined';
for (var i = 0; i < nEdges; i++) {
var sIdx = edgeArr[i * 2];
var tIdx = edgeArr[i * 2 + 1];
var sNode = this.nodes[sIdx];
var tNode = this.nodes[tIdx];
if (!sNode || !tNode) {
continue;
}
sNode.outDegree++;
tNode.inDegree++;
var edge = new GraphEdge(sNode, tNode);
if (edgeHaveWeight) {
edge.weight = edgeWeightArr[i];
}
this.edges.push(edge);
}
};
ForceLayout.prototype.update = function () {
var nNodes = this.nodes.length;
this.updateBBox();
this._k = 0.4 * this.scaling * Math.sqrt(this.width * this.height / nNodes);
if (this.barnesHutOptimize) {
this._rootRegion.setBBox(this.bbox[0], this.bbox[1], this.bbox[2], this.bbox[3]);
this._rootRegion.beforeUpdate();
for (var i = 0; i < nNodes; i++) {
this._rootRegion.addNode(this.nodes[i]);
}
this._rootRegion.afterUpdate();
} else {
var mass = 0;
var centerOfMass = this._rootRegion.centerOfMass;
vec2.set(centerOfMass, 0, 0);
for (var i = 0; i < nNodes; i++) {
var node = this.nodes[i];
mass += node.mass;
vec2.scaleAndAdd(centerOfMass, centerOfMass, node.position, node.mass);
}
if (mass > 0) {
vec2.scale(centerOfMass, centerOfMass, 1 / mass);
}
}
this.updateForce();
this.updatePosition();
};
ForceLayout.prototype.updateForce = function () {
var nNodes = this.nodes.length;
for (var i = 0; i < nNodes; i++) {
var node = this.nodes[i];
vec2.copy(node.forcePrev, node.force);
vec2.copy(node.speedPrev, node.speed);
vec2.set(node.force, 0, 0);
}
this.updateNodeNodeForce();
if (this.gravity > 0) {
this.updateGravityForce();
}
this.updateEdgeForce();
if (this.preventNodeEdgeOverlap) {
this.updateNodeEdgeForce();
}
};
ForceLayout.prototype.updatePosition = function () {
var nNodes = this.nodes.length;
var v = vec2.create();
for (var i = 0; i < nNodes; i++) {
var node = this.nodes[i];
var speed = node.speed;
vec2.scale(node.force, node.force, 1 / 30);
var df = vec2.len(node.force) + 0.1;
var scale = Math.min(df, 500) / df;
vec2.scale(node.force, node.force, scale);
vec2.add(speed, speed, node.force);
vec2.scale(speed, speed, this.temperature);
vec2.sub(v, speed, node.speedPrev);
var swing = vec2.len(v);
if (swing > 0) {
vec2.scale(v, v, 1 / swing);
var base = vec2.len(node.speedPrev);
if (base > 0) {
swing = Math.min(swing / base, this.maxSpeedIncrease) * base;
vec2.scaleAndAdd(speed, node.speedPrev, v, swing);
}
}
var ds = vec2.len(speed);
var scale = Math.min(ds, 100) / (ds + 0.1);
vec2.scale(speed, speed, scale);
vec2.add(node.position, node.position, speed);
}
};
ForceLayout.prototype.updateNodeNodeForce = function () {
var nNodes = this.nodes.length;
for (var i = 0; i < nNodes; i++) {
var na = this.nodes[i];
if (this.barnesHutOptimize) {
this.applyRegionToNodeRepulsion(this._rootRegion, na);
} else {
for (var j = i + 1; j < nNodes; j++) {
var nb = this.nodes[j];
this.applyNodeToNodeRepulsion(na, nb, false);
}
}
}
};
ForceLayout.prototype.updateGravityForce = function () {
for (var i = 0; i < this.nodes.length; i++) {
this.applyNodeGravity(this.nodes[i]);
}
};
ForceLayout.prototype.updateEdgeForce = function () {
for (var i = 0; i < this.edges.length; i++) {
this.applyEdgeAttraction(this.edges[i]);
}
};
ForceLayout.prototype.updateNodeEdgeForce = function () {
for (var i = 0; i < this.nodes.length; i++) {
for (var j = 0; j < this.edges.length; j++) {
this.applyEdgeToNodeRepulsion(this.edges[j], this.nodes[i]);
}
}
};
ForceLayout.prototype.applyRegionToNodeRepulsion = function () {
var v = vec2.create();
return function applyRegionToNodeRepulsion(region, node) {
if (region.node) {
this.applyNodeToNodeRepulsion(region.node, node, true);
} else {
if (region.mass === 0 && node.mass === 0) {
return;
}
vec2.sub(v, node.position, region.centerOfMass);
var d2 = v[0] * v[0] + v[1] * v[1];
if (d2 > this.barnesHutTheta * region.size * region.size) {
var factor = this._k * this._k * (node.mass + region.mass) / (d2 + 1);
vec2.scaleAndAdd(node.force, node.force, v, factor * 2);
} else {
for (var i = 0; i < region.nSubRegions; i++) {
this.applyRegionToNodeRepulsion(region.subRegions[i], node);
}
}
}
};
}();
ForceLayout.prototype.applyNodeToNodeRepulsion = function () {
var v = vec2.create();
return function applyNodeToNodeRepulsion(na, nb, oneWay) {
if (na === nb) {
return;
}
if (na.mass === 0 && nb.mass === 0) {
return;
}
vec2.sub(v, na.position, nb.position);
var d2 = v[0] * v[0] + v[1] * v[1];
if (d2 === 0) {
return;
}
var factor;
var mass = na.mass + nb.mass;
var d = Math.sqrt(d2);
vec2.scale(v, v, 1 / d);
if (this.preventNodeOverlap) {
d = d - na.size - nb.size;
if (d > 0) {
factor = this.nodeToNodeRepulsionFactor(mass, d, this._k);
} else if (d <= 0) {
factor = this._k * this._k * 10 * mass;
}
} else {
factor = this.nodeToNodeRepulsionFactor(mass, d, this._k);
}
if (!oneWay) {
vec2.scaleAndAdd(na.force, na.force, v, factor * 2);
}
vec2.scaleAndAdd(nb.force, nb.force, v, -factor * 2);
};
}();
ForceLayout.prototype.applyEdgeAttraction = function () {
var v = vec2.create();
return function applyEdgeAttraction(edge) {
var na = edge.node1;
var nb = edge.node2;
vec2.sub(v, na.position, nb.position);
var d = vec2.len(v);
var w;
if (this.edgeWeightInfluence === 0) {
w = 1;
} else if (this.edgeWeightInfluence == 1) {
w = edge.weight;
} else {
w = Math.pow(edge.weight, this.edgeWeightInfluence);
}
var factor;
if (this.preventOverlap) {
d = d - na.size - nb.size;
if (d <= 0) {
return;
}
}
var factor = this.attractionFactor(w, d, this._k);
vec2.scaleAndAdd(na.force, na.force, v, -factor);
vec2.scaleAndAdd(nb.force, nb.force, v, factor);
};
}();
ForceLayout.prototype.applyNodeGravity = function () {
var v = vec2.create();
return function (node) {
vec2.sub(v, this.center, node.position);
if (this.width > this.height) {
v[1] *= this.width / this.height;
} else {
v[0] *= this.height / this.width;
}
var d = vec2.len(v) / 100;
if (this.strongGravity) {
vec2.scaleAndAdd(node.force, node.force, v, d * this.gravity * node.mass);
} else {
vec2.scaleAndAdd(node.force, node.force, v, this.gravity * node.mass / (d + 1));
}
};
}();
ForceLayout.prototype.applyEdgeToNodeRepulsion = function () {
var v12 = vec2.create();
var v13 = vec2.create();
var p = vec2.create();
return function (e, n3) {
var n1 = e.node1;
var n2 = e.node2;
if (n1 === n3 || n2 === n3) {
return;
}
vec2.sub(v12, n2.position, n1.position);
vec2.sub(v13, n3.position, n1.position);
var len12 = vec2.len(v12);
vec2.scale(v12, v12, 1 / len12);
var len = vec2.dot(v12, v13);
if (len < 0 || len > len12) {
return;
}
vec2.scaleAndAdd(p, n1.position, v12, len);
var dist = vec2.dist(p, n3.position) - n3.size;
var factor = this.edgeToNodeRepulsionFactor(n3.mass, Math.max(dist, 0.1), 100);
vec2.sub(v12, n3.position, p);
vec2.normalize(v12, v12);
vec2.scaleAndAdd(n3.force, n3.force, v12, factor);
vec2.scaleAndAdd(n1.force, n1.force, v12, -factor);
vec2.scaleAndAdd(n2.force, n2.force, v12, -factor);
};
}();
ForceLayout.prototype.updateBBox = function () {
var minX = Infinity;
var minY = Infinity;
var maxX = -Infinity;
var maxY = -Infinity;
for (var i = 0; i < this.nodes.length; i++) {
var pos = this.nodes[i].position;
minX = Math.min(minX, pos[0]);
minY = Math.min(minY, pos[1]);
maxX = Math.max(maxX, pos[0]);
maxY = Math.max(maxY, pos[1]);
}
this.bbox[0] = minX;
this.bbox[1] = minY;
this.bbox[2] = maxX;
this.bbox[3] = maxY;
};
ForceLayout.getWorkerCode = function () {
var str = __echartsForceLayoutWorker.toString();
return str.slice(str.indexOf('{') + 1, str.lastIndexOf('return'));
};
if (inWorker) {
var forceLayout = null;
self.onmessage = function (e) {
if (e.data instanceof ArrayBuffer) {
if (!forceLayout)
return;
var positionArr = new Float32Array(e.data);
var nNodes = positionArr.length / 2;
for (var i = 0; i < nNodes; i++) {
var node = forceLayout.nodes[i];
node.position[0] = positionArr[i * 2];
node.position[1] = positionArr[i * 2 + 1];
}
return;
}
switch (e.data.cmd) {
case 'init':
if (!forceLayout) {
forceLayout = new ForceLayout();
}
forceLayout.initNodes(e.data.nodesPosition, e.data.nodesMass, e.data.nodesSize);
forceLayout.initEdges(e.data.edges, e.data.edgesWeight);
break;
case 'updateConfig':
if (forceLayout) {
for (var name in e.data.config) {
forceLayout[name] = e.data.config[name];
}
}
break;
case 'update':
var steps = e.data.steps;
if (forceLayout) {
var nNodes = forceLayout.nodes.length;
var positionArr = new Float32Array(nNodes * 2);
forceLayout.temperature = e.data.temperature;
for (var i = 0; i < steps; i++) {
forceLayout.update();
forceLayout.temperature *= e.data.coolDown;
}
for (var i = 0; i < nNodes; i++) {
var node = forceLayout.nodes[i];
positionArr[i * 2] = node.position[0];
positionArr[i * 2 + 1] = node.position[1];
}
self.postMessage(positionArr.buffer, [positionArr.buffer]);
} else {
var emptyArr = new Float32Array();
self.postMessage(emptyArr.buffer, [emptyArr.buffer]);
}
break;
}
};
}
return ForceLayout;
});define('echarts/chart/map', [
'require',
'./base',
'zrender/shape/Text',
'zrender/shape/Path',
'zrender/shape/Circle',
'zrender/shape/Rectangle',
'zrender/shape/Line',
'zrender/shape/Polygon',
'zrender/shape/Ellipse',
'zrender/shape/Image',
'../component/dataRange',
'../component/roamController',
'../layer/heatmap',
'../config',
'../util/ecData',
'zrender/tool/util',
'zrender/config',
'zrender/tool/event',
'../util/mapData/params',
'../util/mapData/textFixed',
'../util/mapData/geoCoord',
'../util/projection/svg',
'../util/projection/normal',
'../chart'
], function (require) {
var ChartBase = require('./base');
var TextShape = require('zrender/shape/Text');
var PathShape = require('zrender/shape/Path');
var CircleShape = require('zrender/shape/Circle');
var RectangleShape = require('zrender/shape/Rectangle');
var LineShape = require('zrender/shape/Line');
var PolygonShape = require('zrender/shape/Polygon');
var EllipseShape = require('zrender/shape/Ellipse');
var ZrImage = require('zrender/shape/Image');
require('../component/dataRange');
require('../component/roamController');
var HeatmapLayer = require('../layer/heatmap');
var ecConfig = require('../config');
ecConfig.map = {
zlevel: 0,
z: 2,
mapType: 'china',
showLegendSymbol: true,
dataRangeHoverLink: true,
hoverable: true,
clickable: true,
itemStyle: {
normal: {
borderColor: 'rgba(0,0,0,0)',
borderWidth: 1,
areaStyle: { color: '#ccc' },
label: {
show: false,
textStyle: { color: 'rgb(139,69,19)' }
}
},
emphasis: {
borderColor: 'rgba(0,0,0,0)',
borderWidth: 1,
areaStyle: { color: 'rgba(255,215,0,0.8)' },
label: {
show: false,
textStyle: { color: 'rgb(100,0,0)' }
}
}
}
};
var ecData = require('../util/ecData');
var zrUtil = require('zrender/tool/util');
var zrConfig = require('zrender/config');
var zrEvent = require('zrender/tool/event');
var _mapParams = require('../util/mapData/params').params;
var _textFixed = require('../util/mapData/textFixed');
var _geoCoord = require('../util/mapData/geoCoord');
function Map(ecTheme, messageCenter, zr, option, myChart) {
ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
var self = this;
self._onmousewheel = function (params) {
return self.__onmousewheel(params);
};
self._onmousedown = function (params) {
return self.__onmousedown(params);
};
self._onmousemove = function (params) {
return self.__onmousemove(params);
};
self._onmouseup = function (params) {
return self.__onmouseup(params);
};
self._onroamcontroller = function (params) {
return self.__onroamcontroller(params);
};
self._ondrhoverlink = function (params) {
return self.__ondrhoverlink(params);
};
this._isAlive = true;
this._selectedMode = {};
this._activeMapType = {};
this._clickable = {};
this._hoverable = {};
this._showLegendSymbol = {};
this._selected = {};
this._mapTypeMap = {};
this._mapDataMap = {};
this._nameMap = {};
this._specialArea = {};
this._refreshDelayTicket;
this._mapDataRequireCounter;
this._markAnimation = false;
this._hoverLinkMap = {};
this._roamMap = {};
this._scaleLimitMap = {};
this._mx;
this._my;
this._mousedown;
this._justMove;
this._curMapType;
this.refresh(option);
this.zr.on(zrConfig.EVENT.MOUSEWHEEL, this._onmousewheel);
this.zr.on(zrConfig.EVENT.MOUSEDOWN, this._onmousedown);
messageCenter.bind(ecConfig.EVENT.ROAMCONTROLLER, this._onroamcontroller);
messageCenter.bind(ecConfig.EVENT.DATA_RANGE_HOVERLINK, this._ondrhoverlink);
}
Map.prototype = {
type: ecConfig.CHART_TYPE_MAP,
_buildShape: function () {
var series = this.series;
this.selectedMap = {};
this._activeMapType = {};
var legend = this.component.legend;
var seriesName;
var valueData = {};
var mapType;
var data;
var name;
var mapSeries = {};
var mapValuePrecision = {};
var valueCalculation = {};
for (var i = 0, l = series.length; i < l; i++) {
if (series[i].type == ecConfig.CHART_TYPE_MAP) {
series[i] = this.reformOption(series[i]);
mapType = series[i].mapType;
mapSeries[mapType] = mapSeries[mapType] || {};
mapSeries[mapType][i] = true;
mapValuePrecision[mapType] = mapValuePrecision[mapType] || series[i].mapValuePrecision;
this._scaleLimitMap[mapType] = this._scaleLimitMap[mapType] || {};
series[i].scaleLimit && zrUtil.merge(this._scaleLimitMap[mapType], series[i].scaleLimit, true);
this._roamMap[mapType] = series[i].roam || this._roamMap[mapType];
if (this._hoverLinkMap[mapType] == null || this._hoverLinkMap[mapType]) {
this._hoverLinkMap[mapType] = series[i].dataRangeHoverLink;
}
this._nameMap[mapType] = this._nameMap[mapType] || {};
series[i].nameMap && zrUtil.merge(this._nameMap[mapType], series[i].nameMap, true);
this._activeMapType[mapType] = true;
if (series[i].textFixed) {
zrUtil.merge(_textFixed, series[i].textFixed, true);
}
if (series[i].geoCoord) {
zrUtil.merge(_geoCoord, series[i].geoCoord, true);
}
this._selectedMode[mapType] = this._selectedMode[mapType] || series[i].selectedMode;
if (this._hoverable[mapType] == null || this._hoverable[mapType]) {
this._hoverable[mapType] = series[i].hoverable;
}
if (this._clickable[mapType] == null || this._clickable[mapType]) {
this._clickable[mapType] = series[i].clickable;
}
if (this._showLegendSymbol[mapType] == null || this._showLegendSymbol[mapType]) {
this._showLegendSymbol[mapType] = series[i].showLegendSymbol;
}
valueCalculation[mapType] = valueCalculation[mapType] || series[i].mapValueCalculation;
seriesName = series[i].name;
this.selectedMap[seriesName] = legend ? legend.isSelected(seriesName) : true;
if (this.selectedMap[seriesName]) {
valueData[mapType] = valueData[mapType] || {};
data = series[i].data;
for (var j = 0, k = data.length; j < k; j++) {
name = this._nameChange(mapType, data[j].name);
valueData[mapType][name] = valueData[mapType][name] || {
seriesIndex: [],
valueMap: {},
precision: 0
};
for (var key in data[j]) {
if (key != 'value') {
valueData[mapType][name][key] = data[j][key];
} else if (!isNaN(data[j].value)) {
valueData[mapType][name].value == null && (valueData[mapType][name].value = 0);
valueData[mapType][name].precision = Math.max(this.getPrecision(+data[j].value), valueData[mapType][name].precision);
valueData[mapType][name].value += +data[j].value;
valueData[mapType][name].valueMap[i] = +data[j].value;
}
}
valueData[mapType][name].seriesIndex.push(i);
}
}
}
}
this._mapDataRequireCounter = 0;
for (var mt in valueData) {
this._mapDataRequireCounter++;
}
this._clearSelected();
if (this._mapDataRequireCounter === 0) {
this.clear();
this.zr && this.zr.delShape(this.lastShapeList);
this.lastShapeList = [];
}
for (var mt in valueData) {
for (var k in valueData[mt]) {
if (valueCalculation[mt] == 'average') {
valueData[mt][k].value /= valueData[mt][k].seriesIndex.length;
}
var value = valueData[mt][k].value;
if (value != null) {
valueData[mt][k].value = value.toFixed(mapValuePrecision[mt] == null ? valueData[mt][k].precision : mapValuePrecision[mt]) - 0;
}
}
this._mapDataMap[mt] = this._mapDataMap[mt] || {};
if (this._mapDataMap[mt].mapData) {
this._mapDataCallback(mt, valueData[mt], mapSeries[mt])(this._mapDataMap[mt].mapData);
} else if (_mapParams[mt.replace(/\|.*/, '')].getGeoJson) {
this._specialArea[mt] = _mapParams[mt.replace(/\|.*/, '')].specialArea || this._specialArea[mt];
_mapParams[mt.replace(/\|.*/, '')].getGeoJson(this._mapDataCallback(mt, valueData[mt], mapSeries[mt]));
}
}
},
_mapDataCallback: function (mt, vd, ms) {
var self = this;
return function (md) {
if (!self._isAlive || self._activeMapType[mt] == null) {
return;
}
if (mt.indexOf('|') != -1) {
md = self._getSubMapData(mt, md);
}
self._mapDataMap[mt].mapData = md;
if (md.firstChild) {
self._mapDataMap[mt].rate = 1;
self._mapDataMap[mt].projection = require('../util/projection/svg');
} else {
self._mapDataMap[mt].rate = 0.75;
self._mapDataMap[mt].projection = require('../util/projection/normal');
}
self._buildMap(mt, self._getProjectionData(mt, md, ms), vd, ms);
self._buildMark(mt, ms);
if (--self._mapDataRequireCounter <= 0) {
self.addShapeList();
self.zr.refreshNextFrame();
}
self._buildHeatmap(mt);
};
},
_clearSelected: function () {
for (var k in this._selected) {
if (!this._activeMapType[this._mapTypeMap[k]]) {
delete this._selected[k];
delete this._mapTypeMap[k];
}
}
},
_getSubMapData: function (mapType, mapData) {
var subType = mapType.replace(/^.*\|/, '');
var features = mapData.features;
for (var i = 0, l = features.length; i < l; i++) {
if (features[i].properties && features[i].properties.name == subType) {
features = features[i];
if (subType == 'United States of America' && features.geometry.coordinates.length > 1) {
features = {
geometry: {
coordinates: features.geometry.coordinates.slice(5, 6),
type: features.geometry.type
},
id: features.id,
properties: features.properties,
type: features.type
};
}
break;
}
}
return {
'type': 'FeatureCollection',
'features': [features]
};
},
_getProjectionData: function (mapType, mapData, mapSeries) {
var normalProjection = this._mapDataMap[mapType].projection;
var province = [];
var bbox = this._mapDataMap[mapType].bbox || normalProjection.getBbox(mapData, this._specialArea[mapType]);
var transform;
if (!this._mapDataMap[mapType].hasRoam) {
transform = this._getTransform(bbox, mapSeries, this._mapDataMap[mapType].rate);
} else {
transform = this._mapDataMap[mapType].transform;
}
var lastTransform = this._mapDataMap[mapType].lastTransform || { scale: {} };
var pathArray;
if (transform.left != lastTransform.left || transform.top != lastTransform.top || transform.scale.x != lastTransform.scale.x || transform.scale.y != lastTransform.scale.y) {
pathArray = normalProjection.geoJson2Path(mapData, transform, this._specialArea[mapType]);
lastTransform = zrUtil.clone(transform);
} else {
transform = this._mapDataMap[mapType].transform;
pathArray = this._mapDataMap[mapType].pathArray;
}
this._mapDataMap[mapType].bbox = bbox;
this._mapDataMap[mapType].transform = transform;
this._mapDataMap[mapType].lastTransform = lastTransform;
this._mapDataMap[mapType].pathArray = pathArray;
var position = [
transform.left,
transform.top
];
for (var i = 0, l = pathArray.length; i < l; i++) {
province.push(this._getSingleProvince(mapType, pathArray[i], position));
}
if (this._specialArea[mapType]) {
for (var area in this._specialArea[mapType]) {
province.push(this._getSpecialProjectionData(mapType, mapData, area, this._specialArea[mapType][area], position));
}
}
if (mapType == 'china') {
var leftTop = this.geo2pos(mapType, _geoCoord['南海诸岛'] || _mapParams['南海诸岛'].textCoord);
var scale = transform.scale.x / 10.5;
var textPosition = [
32 * scale + leftTop[0],
83 * scale + leftTop[1]
];
if (_textFixed['南海诸岛']) {
textPosition[0] += _textFixed['南海诸岛'][0];
textPosition[1] += _textFixed['南海诸岛'][1];
}
province.push({
name: this._nameChange(mapType, '南海诸岛'),
path: _mapParams['南海诸岛'].getPath(leftTop, scale),
position: position,
textX: textPosition[0],
textY: textPosition[1]
});
}
return province;
},
_getSpecialProjectionData: function (mapType, mapData, areaName, mapSize, position) {
mapData = this._getSubMapData('x|' + areaName, mapData);
var normalProjection = require('../util/projection/normal');
var bbox = normalProjection.getBbox(mapData);
var leftTop = this.geo2pos(mapType, [
mapSize.left,
mapSize.top
]);
var rightBottom = this.geo2pos(mapType, [
mapSize.left + mapSize.width,
mapSize.top + mapSize.height
]);
var width = Math.abs(rightBottom[0] - leftTop[0]);
var height = Math.abs(rightBottom[1] - leftTop[1]);
var mapWidth = bbox.width;
var mapHeight = bbox.height;
var xScale = width / 0.75 / mapWidth;
var yScale = height / mapHeight;
if (xScale > yScale) {
xScale = yScale * 0.75;
width = mapWidth * xScale;
} else {
yScale = xScale;
xScale = yScale * 0.75;
height = mapHeight * yScale;
}
var transform = {
OffsetLeft: leftTop[0],
OffsetTop: leftTop[1],
scale: {
x: xScale,
y: yScale
}
};
var pathArray = normalProjection.geoJson2Path(mapData, transform);
return this._getSingleProvince(mapType, pathArray[0], position);
},
_getSingleProvince: function (mapType, path, position) {
var textPosition;
var name = path.properties.name;
var textFixed = _textFixed[name] || [
0,
0
];
if (_geoCoord[name]) {
textPosition = this.geo2pos(mapType, _geoCoord[name]);
} else if (path.cp) {
textPosition = [
path.cp[0] + textFixed[0],
path.cp[1] + textFixed[1]
];
} else {
var bbox = this._mapDataMap[mapType].bbox;
textPosition = this.geo2pos(mapType, [
bbox.left + bbox.width / 2,
bbox.top + bbox.height / 2
]);
textPosition[0] += textFixed[0];
textPosition[1] += textFixed[1];
}
path.name = this._nameChange(mapType, name);
path.position = position;
path.textX = textPosition[0];
path.textY = textPosition[1];
return path;
},
_getTransform: function (bbox, mapSeries, rate) {
var series = this.series;
var mapLocation;
var x;
var cusX;
var y;
var cusY;
var width;
var height;
var zrWidth = this.zr.getWidth();
var zrHeight = this.zr.getHeight();
var padding = Math.round(Math.min(zrWidth, zrHeight) * 0.02);
for (var key in mapSeries) {
mapLocation = series[key].mapLocation || {};
cusX = mapLocation.x || cusX;
cusY = mapLocation.y || cusY;
width = mapLocation.width || width;
height = mapLocation.height || height;
}
x = this.parsePercent(cusX, zrWidth);
x = isNaN(x) ? padding : x;
y = this.parsePercent(cusY, zrHeight);
y = isNaN(y) ? padding : y;
width = width == null ? zrWidth - x - 2 * padding : this.parsePercent(width, zrWidth);
height = height == null ? zrHeight - y - 2 * padding : this.parsePercent(height, zrHeight);
var mapWidth = bbox.width;
var mapHeight = bbox.height;
var xScale = width / rate / mapWidth;
var yScale = height / mapHeight;
if (xScale > yScale) {
xScale = yScale * rate;
width = mapWidth * xScale;
} else {
yScale = xScale;
xScale = yScale * rate;
height = mapHeight * yScale;
}
if (isNaN(cusX)) {
cusX = cusX || 'center';
switch (cusX + '') {
case 'center':
x = Math.floor((zrWidth - width) / 2);
break;
case 'right':
x = zrWidth - width;
break;
}
}
if (isNaN(cusY)) {
cusY = cusY || 'center';
switch (cusY + '') {
case 'center':
y = Math.floor((zrHeight - height) / 2);
break;
case 'bottom':
y = zrHeight - height;
break;
}
}
return {
left: x,
top: y,
width: width,
height: height,
baseScale: 1,
scale: {
x: xScale,
y: yScale
}
};
},
_buildMap: function (mapType, mapData, valueData, mapSeries) {
var series = this.series;
var legend = this.component.legend;
var dataRange = this.component.dataRange;
var seriesName;
var name;
var data;
var value;
var queryTarget;
var color;
var font;
var style;
var highlightStyle;
var shape;
var textShape;
for (var i = 0, l = mapData.length; i < l; i++) {
style = zrUtil.clone(mapData[i]);
highlightStyle = {
name: style.name,
path: style.path,
position: zrUtil.clone(style.position)
};
name = style.name;
data = valueData[name];
if (data) {
queryTarget = [data];
seriesName = '';
for (var j = 0, k = data.seriesIndex.length; j < k; j++) {
var serie = series[data.seriesIndex[j]];
queryTarget.push(serie);
seriesName += serie.name + ' ';
if (legend && this._showLegendSymbol[mapType] && legend.hasColor(serie.name)) {
this.shapeList.push(new CircleShape({
zlevel: serie.zlevel,
z: serie.z + 1,
position: zrUtil.clone(style.position),
_mapType: mapType,
style: {
x: style.textX + 3 + j * 7,
y: style.textY - 10,
r: 3,
color: legend.getColor(serie.name)
},
hoverable: false
}));
}
}
value = data.value;
} else {
data = {
name: name,
value: '-'
};
seriesName = '';
queryTarget = [];
for (var key in mapSeries) {
queryTarget.push(series[key]);
}
value = '-';
}
this.ecTheme.map && queryTarget.push(this.ecTheme.map);
queryTarget.push(ecConfig.map);
color = dataRange && !isNaN(value) ? dataRange.getColor(value) : null;
style.color = style.color || color || this.getItemStyleColor(this.deepQuery(queryTarget, 'itemStyle.normal.color'), data.seriesIndex, -1, data) || this.deepQuery(queryTarget, 'itemStyle.normal.areaStyle.color');
style.strokeColor = style.strokeColor || this.deepQuery(queryTarget, 'itemStyle.normal.borderColor');
style.lineWidth = style.lineWidth || this.deepQuery(queryTarget, 'itemStyle.normal.borderWidth');
highlightStyle.color = this.getItemStyleColor(this.deepQuery(queryTarget, 'itemStyle.emphasis.color'), data.seriesIndex, -1, data) || this.deepQuery(queryTarget, 'itemStyle.emphasis.areaStyle.color') || style.color;
highlightStyle.strokeColor = this.deepQuery(queryTarget, 'itemStyle.emphasis.borderColor') || style.strokeColor;
highlightStyle.lineWidth = this.deepQuery(queryTarget, 'itemStyle.emphasis.borderWidth') || style.lineWidth;
style.brushType = highlightStyle.brushType = style.brushType || 'both';
style.lineJoin = highlightStyle.lineJoin = 'round';
style._name = highlightStyle._name = name;
font = this.deepQuery(queryTarget, 'itemStyle.normal.label.textStyle');
textShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase() + 1,
position: zrUtil.clone(style.position),
_mapType: mapType,
_geo: this.pos2geo(mapType, [
style.textX,
style.textY
]),
style: {
brushType: 'fill',
x: style.textX,
y: style.textY,
text: this.getLabelText(name, value, queryTarget, 'normal'),
_name: name,
textAlign: 'center',
color: this.deepQuery(queryTarget, 'itemStyle.normal.label.show') ? this.deepQuery(queryTarget, 'itemStyle.normal.label.textStyle.color') : 'rgba(0,0,0,0)',
textFont: this.getFont(font)
}
};
textShape._style = zrUtil.clone(textShape.style);
textShape.highlightStyle = zrUtil.clone(textShape.style);
if (this.deepQuery(queryTarget, 'itemStyle.emphasis.label.show')) {
textShape.highlightStyle.text = this.getLabelText(name, value, queryTarget, 'emphasis');
textShape.highlightStyle.color = this.deepQuery(queryTarget, 'itemStyle.emphasis.label.textStyle.color') || textShape.style.color;
font = this.deepQuery(queryTarget, 'itemStyle.emphasis.label.textStyle') || font;
textShape.highlightStyle.textFont = this.getFont(font);
} else {
textShape.highlightStyle.color = 'rgba(0,0,0,0)';
}
shape = {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
position: zrUtil.clone(style.position),
style: style,
highlightStyle: highlightStyle,
_style: zrUtil.clone(style),
_mapType: mapType
};
if (style.scale != null) {
shape.scale = zrUtil.clone(style.scale);
}
textShape = new TextShape(textShape);
switch (shape.style.shapeType) {
case 'rectangle':
shape = new RectangleShape(shape);
break;
case 'line':
shape = new LineShape(shape);
break;
case 'circle':
shape = new CircleShape(shape);
break;
case 'polygon':
shape = new PolygonShape(shape);
break;
case 'ellipse':
shape = new EllipseShape(shape);
break;
default:
shape = new PathShape(shape);
if (shape.buildPathArray) {
shape.style.pathArray = shape.buildPathArray(shape.style.path);
}
break;
}
if (this._selectedMode[mapType] && (this._selected[name] && data.selected !== false) || data.selected === true) {
textShape.style = textShape.highlightStyle;
shape.style = shape.highlightStyle;
}
textShape.clickable = shape.clickable = this._clickable[mapType] && (data.clickable == null || data.clickable);
if (this._selectedMode[mapType]) {
this._selected[name] = this._selected[name] != null ? this._selected[name] : data.selected;
this._mapTypeMap[name] = mapType;
if (data.selectable == null || data.selectable) {
shape.clickable = textShape.clickable = true;
shape.onclick = textShape.onclick = this.shapeHandler.onclick;
}
}
if (this._hoverable[mapType] && (data.hoverable == null || data.hoverable)) {
textShape.hoverable = shape.hoverable = true;
shape.hoverConnect = textShape.id;
textShape.hoverConnect = shape.id;
} else {
textShape.hoverable = shape.hoverable = false;
}
ecData.pack(textShape, {
name: seriesName,
tooltip: this.deepQuery(queryTarget, 'tooltip')
}, 0, data, 0, name);
this.shapeList.push(textShape);
ecData.pack(shape, {
name: seriesName,
tooltip: this.deepQuery(queryTarget, 'tooltip')
}, 0, data, 0, name);
this.shapeList.push(shape);
}
},
_buildMark: function (mapType, mapSeries) {
this._seriesIndexToMapType = this._seriesIndexToMapType || {};
this.markAttachStyle = this.markAttachStyle || {};
var position = [
this._mapDataMap[mapType].transform.left,
this._mapDataMap[mapType].transform.top
];
if (mapType == 'none') {
position = [
0,
0
];
}
for (var sIdx in mapSeries) {
this._seriesIndexToMapType[sIdx] = mapType;
this.markAttachStyle[sIdx] = {
position: position,
_mapType: mapType
};
this.buildMark(sIdx);
}
},
_buildHeatmap: function (mapType) {
var series = this.series;
for (var i = 0, l = series.length; i < l; i++) {
if (series[i].heatmap) {
var data = series[i].heatmap.data;
if (series[i].heatmap.needsTransform === false) {
var geo = [];
for (var j = 0, len = data.length; j < len; ++j) {
geo.push([
data[j][3],
data[j][4],
data[j][2]
]);
}
var pos = [
0,
0
];
} else {
var geoData = series[i].heatmap._geoData;
if (geoData === undefined) {
series[i].heatmap._geoData = [];
for (var j = 0, len = data.length; j < len; ++j) {
series[i].heatmap._geoData[j] = data[j];
}
geoData = series[i].heatmap._geoData;
}
var len = data.length;
for (var id = 0; id < len; ++id) {
data[id] = this.geo2pos(mapType, [
geoData[id][0],
geoData[id][1]
]);
}
var pos = [
this._mapDataMap[mapType].transform.left,
this._mapDataMap[mapType].transform.top
];
}
var layer = new HeatmapLayer(series[i].heatmap);
var canvas = layer.getCanvas(data[0][3] ? geo : data, this.zr.getWidth(), this.zr.getHeight());
var image = new ZrImage({
zlevel: this.getZlevelBase(),
z: this.getZBase() + 1,
position: pos,
scale: [
1,
1
],
hoverable: false,
style: {
x: 0,
y: 0,
image: canvas,
width: canvas.width,
height: canvas.height
}
});
image.type = 'heatmap';
image._mapType = mapType;
this.shapeList.push(image);
this.zr.addShape(image);
}
}
},
getMarkCoord: function (seriesIndex, mpData) {
return mpData.geoCoord || _geoCoord[mpData.name] ? this.geo2pos(this._seriesIndexToMapType[seriesIndex], mpData.geoCoord || _geoCoord[mpData.name]) : [
0,
0
];
},
getMarkGeo: function (mpData) {
return mpData.geoCoord || _geoCoord[mpData.name];
},
_nameChange: function (mapType, name) {
return this._nameMap[mapType][name] || name;
},
getLabelText: function (name, value, queryTarget, status) {
var formatter = this.deepQuery(queryTarget, 'itemStyle.' + status + '.label.formatter');
if (formatter) {
if (typeof formatter == 'function') {
return formatter.call(this.myChart, name, value);
} else if (typeof formatter == 'string') {
formatter = formatter.replace('{a}', '{a0}').replace('{b}', '{b0}');
formatter = formatter.replace('{a0}', name).replace('{b0}', value);
return formatter;
}
} else {
return name;
}
},
_findMapTypeByPos: function (mx, my) {
var transform;
var left;
var top;
var width;
var height;
for (var mapType in this._mapDataMap) {
transform = this._mapDataMap[mapType].transform;
if (!transform || !this._roamMap[mapType] || !this._activeMapType[mapType]) {
continue;
}
left = transform.left;
top = transform.top;
width = transform.width;
height = transform.height;
if (mx >= left && mx <= left + width && my >= top && my <= top + height) {
return mapType;
}
}
return;
},
__onmousewheel: function (params) {
if (this.shapeList.length <= 0) {
return;
}
for (var i = 0, l = this.shapeList.length; i < l; i++) {
var shape = this.shapeList[i];
if (shape.__animating) {
return;
}
}
var event = params.event;
var mx = zrEvent.getX(event);
var my = zrEvent.getY(event);
var delta;
var eventDelta = zrEvent.getDelta(event);
var mapType;
var mapTypeControl = params.mapTypeControl;
if (!mapTypeControl) {
mapTypeControl = {};
mapType = this._findMapTypeByPos(mx, my);
if (mapType && this._roamMap[mapType] && this._roamMap[mapType] != 'move') {
mapTypeControl[mapType] = true;
}
}
function scalePolyline(shapeStyle, delta) {
for (var i = 0; i < shapeStyle.pointList.length; i++) {
var point = shapeStyle.pointList[i];
point[0] *= delta;
point[1] *= delta;
}
var controlPointList = shapeStyle.controlPointList;
if (controlPointList) {
for (var i = 0; i < controlPointList.length; i++) {
var point = controlPointList[i];
point[0] *= delta;
point[1] *= delta;
}
}
}
function scaleMarkline(shapeStyle, delta) {
shapeStyle.xStart *= delta;
shapeStyle.yStart *= delta;
shapeStyle.xEnd *= delta;
shapeStyle.yEnd *= delta;
if (shapeStyle.cpX1 != null) {
shapeStyle.cpX1 *= delta;
shapeStyle.cpY1 *= delta;
}
}
var haveScale = false;
for (mapType in mapTypeControl) {
if (mapTypeControl[mapType]) {
haveScale = true;
var transform = this._mapDataMap[mapType].transform;
var left = transform.left;
var top = transform.top;
var width = transform.width;
var height = transform.height;
var geoAndPos = this.pos2geo(mapType, [
mx - left,
my - top
]);
if (eventDelta > 0) {
delta = 1.2;
if (this._scaleLimitMap[mapType].max != null && transform.baseScale >= this._scaleLimitMap[mapType].max) {
continue;
}
} else {
delta = 1 / 1.2;
if (this._scaleLimitMap[mapType].min != null && transform.baseScale <= this._scaleLimitMap[mapType].min) {
continue;
}
}
transform.baseScale *= delta;
transform.scale.x *= delta;
transform.scale.y *= delta;
transform.width = width * delta;
transform.height = height * delta;
this._mapDataMap[mapType].hasRoam = true;
this._mapDataMap[mapType].transform = transform;
geoAndPos = this.geo2pos(mapType, geoAndPos);
transform.left -= geoAndPos[0] - (mx - left);
transform.top -= geoAndPos[1] - (my - top);
this._mapDataMap[mapType].transform = transform;
this.clearEffectShape(true);
for (var i = 0, l = this.shapeList.length; i < l; i++) {
var shape = this.shapeList[i];
if (shape._mapType == mapType) {
var shapeType = shape.type;
var shapeStyle = shape.style;
shape.position[0] = transform.left;
shape.position[1] = transform.top;
switch (shapeType) {
case 'path':
case 'symbol':
case 'circle':
case 'rectangle':
case 'polygon':
case 'line':
case 'ellipse':
case 'heatmap':
shape.scale[0] *= delta;
shape.scale[1] *= delta;
break;
case 'mark-line':
scaleMarkline(shapeStyle, delta);
break;
case 'polyline':
scalePolyline(shapeStyle, delta);
break;
case 'shape-bundle':
for (var j = 0; j < shapeStyle.shapeList.length; j++) {
var subShape = shapeStyle.shapeList[j];
if (subShape.type == 'mark-line') {
scaleMarkline(subShape.style, delta);
} else if (subShape.type == 'polyline') {
scalePolyline(subShape.style, delta);
}
}
break;
case 'icon':
case 'image':
geoAndPos = this.geo2pos(mapType, shape._geo);
shapeStyle.x = shapeStyle._x = geoAndPos[0] - shapeStyle.width / 2;
shapeStyle.y = shapeStyle._y = geoAndPos[1] - shapeStyle.height / 2;
break;
default:
geoAndPos = this.geo2pos(mapType, shape._geo);
shapeStyle.x = geoAndPos[0];
shapeStyle.y = geoAndPos[1];
if (shapeType == 'text') {
shape._style.x = shape.highlightStyle.x = geoAndPos[0];
shape._style.y = shape.highlightStyle.y = geoAndPos[1];
}
}
this.zr.modShape(shape.id);
}
}
}
}
if (haveScale) {
zrEvent.stop(event);
this.zr.refreshNextFrame();
var self = this;
clearTimeout(this._refreshDelayTicket);
this._refreshDelayTicket = setTimeout(function () {
self && self.shapeList && self.animationEffect();
}, 100);
this.messageCenter.dispatch(ecConfig.EVENT.MAP_ROAM, params.event, { type: 'scale' }, this.myChart);
}
},
__onmousedown: function (params) {
if (this.shapeList.length <= 0) {
return;
}
var target = params.target;
if (target && target.draggable) {
return;
}
var event = params.event;
var mx = zrEvent.getX(event);
var my = zrEvent.getY(event);
var mapType = this._findMapTypeByPos(mx, my);
if (mapType && this._roamMap[mapType] && this._roamMap[mapType] != 'scale') {
this._mousedown = true;
this._mx = mx;
this._my = my;
this._curMapType = mapType;
this.zr.on(zrConfig.EVENT.MOUSEUP, this._onmouseup);
var self = this;
setTimeout(function () {
self.zr.on(zrConfig.EVENT.MOUSEMOVE, self._onmousemove);
}, 100);
}
},
__onmousemove: function (params) {
if (!this._mousedown || !this._isAlive) {
return;
}
var event = params.event;
var mx = zrEvent.getX(event);
var my = zrEvent.getY(event);
var transform = this._mapDataMap[this._curMapType].transform;
transform.hasRoam = true;
transform.left -= this._mx - mx;
transform.top -= this._my - my;
this._mx = mx;
this._my = my;
this._mapDataMap[this._curMapType].transform = transform;
for (var i = 0, l = this.shapeList.length; i < l; i++) {
if (this.shapeList[i]._mapType == this._curMapType) {
this.shapeList[i].position[0] = transform.left;
this.shapeList[i].position[1] = transform.top;
this.zr.modShape(this.shapeList[i].id);
}
}
this.messageCenter.dispatch(ecConfig.EVENT.MAP_ROAM, params.event, { type: 'move' }, this.myChart);
this.clearEffectShape(true);
this.zr.refreshNextFrame();
this._justMove = true;
zrEvent.stop(event);
},
__onmouseup: function (params) {
var event = params.event;
this._mx = zrEvent.getX(event);
this._my = zrEvent.getY(event);
this._mousedown = false;
var self = this;
setTimeout(function () {
self._justMove && self.animationEffect();
self._justMove = false;
self.zr.un(zrConfig.EVENT.MOUSEMOVE, self._onmousemove);
self.zr.un(zrConfig.EVENT.MOUSEUP, self._onmouseup);
}, 120);
},
__onroamcontroller: function (params) {
var event = params.event;
event.zrenderX = this.zr.getWidth() / 2;
event.zrenderY = this.zr.getHeight() / 2;
var mapTypeControl = params.mapTypeControl;
var top = 0;
var left = 0;
var step = params.step;
switch (params.roamType) {
case 'scaleUp':
event.zrenderDelta = 1;
this.__onmousewheel({
event: event,
mapTypeControl: mapTypeControl
});
return;
case 'scaleDown':
event.zrenderDelta = -1;
this.__onmousewheel({
event: event,
mapTypeControl: mapTypeControl
});
return;
case 'up':
top = -step;
break;
case 'down':
top = step;
break;
case 'left':
left = -step;
break;
case 'right':
left = step;
break;
}
var transform;
var curMapType;
for (curMapType in mapTypeControl) {
if (!this._mapDataMap[curMapType] || !this._activeMapType[curMapType]) {
continue;
}
transform = this._mapDataMap[curMapType].transform;
transform.hasRoam = true;
transform.left -= left;
transform.top -= top;
this._mapDataMap[curMapType].transform = transform;
}
for (var i = 0, l = this.shapeList.length; i < l; i++) {
curMapType = this.shapeList[i]._mapType;
if (!mapTypeControl[curMapType] || !this._activeMapType[curMapType]) {
continue;
}
transform = this._mapDataMap[curMapType].transform;
this.shapeList[i].position[0] = transform.left;
this.shapeList[i].position[1] = transform.top;
this.zr.modShape(this.shapeList[i].id);
}
this.messageCenter.dispatch(ecConfig.EVENT.MAP_ROAM, params.event, { type: 'move' }, this.myChart);
this.clearEffectShape(true);
this.zr.refreshNextFrame();
clearTimeout(this.dircetionTimer);
var self = this;
this.dircetionTimer = setTimeout(function () {
self.animationEffect();
}, 150);
},
__ondrhoverlink: function (param) {
var curMapType;
var value;
for (var i = 0, l = this.shapeList.length; i < l; i++) {
curMapType = this.shapeList[i]._mapType;
if (!this._hoverLinkMap[curMapType] || !this._activeMapType[curMapType]) {
continue;
}
value = ecData.get(this.shapeList[i], 'value');
if (value != null && value >= param.valueMin && value <= param.valueMax) {
this.zr.addHoverShape(this.shapeList[i]);
}
}
},
onclick: function (params) {
if (!this.isClick || !params.target || this._justMove || params.target.type == 'icon') {
return;
}
this.isClick = false;
var target = params.target;
var name = target.style._name;
var len = this.shapeList.length;
var mapType = target._mapType || '';
if (this._selectedMode[mapType] == 'single') {
for (var p in this._selected) {
if (this._selected[p] && this._mapTypeMap[p] == mapType) {
for (var i = 0; i < len; i++) {
if (this.shapeList[i].style._name == p && this.shapeList[i]._mapType == mapType) {
this.shapeList[i].style = this.shapeList[i]._style;
this.zr.modShape(this.shapeList[i].id);
}
}
p != name && (this._selected[p] = false);
}
}
}
this._selected[name] = !this._selected[name];
for (var i = 0; i < len; i++) {
if (this.shapeList[i].style._name == name && this.shapeList[i]._mapType == mapType) {
if (this._selected[name]) {
this.shapeList[i].style = this.shapeList[i].highlightStyle;
} else {
this.shapeList[i].style = this.shapeList[i]._style;
}
this.zr.modShape(this.shapeList[i].id);
}
}
this.messageCenter.dispatch(ecConfig.EVENT.MAP_SELECTED, params.event, {
selected: this._selected,
target: name
}, this.myChart);
this.zr.refreshNextFrame();
var self = this;
setTimeout(function () {
self.zr.trigger(zrConfig.EVENT.MOUSEMOVE, params.event);
}, 100);
},
refresh: function (newOption) {
if (newOption) {
this.option = newOption;
this.series = newOption.series;
}
if (this._mapDataRequireCounter > 0) {
this.clear();
} else {
this.backupShapeList();
}
this._buildShape();
this.zr.refreshHover();
},
ondataRange: function (param, status) {
if (this.component.dataRange) {
this.refresh();
status.needRefresh = true;
}
return;
},
pos2geo: function (mapType, p) {
if (!this._mapDataMap[mapType].transform) {
return null;
}
return this._mapDataMap[mapType].projection.pos2geo(this._mapDataMap[mapType].transform, p);
},
getGeoByPos: function (mapType, p) {
if (!this._mapDataMap[mapType].transform) {
return null;
}
var position = [
this._mapDataMap[mapType].transform.left,
this._mapDataMap[mapType].transform.top
];
if (p instanceof Array) {
p[0] -= position[0];
p[1] -= position[1];
} else {
p.x -= position[0];
p.y -= position[1];
}
return this.pos2geo(mapType, p);
},
geo2pos: function (mapType, p) {
if (!this._mapDataMap[mapType].transform) {
return null;
}
return this._mapDataMap[mapType].projection.geo2pos(this._mapDataMap[mapType].transform, p);
},
getPosByGeo: function (mapType, p) {
if (!this._mapDataMap[mapType].transform) {
return null;
}
var pos = this.geo2pos(mapType, p);
pos[0] += this._mapDataMap[mapType].transform.left;
pos[1] += this._mapDataMap[mapType].transform.top;
return pos;
},
getMapPosition: function (mapType) {
if (!this._mapDataMap[mapType].transform) {
return null;
}
return [
this._mapDataMap[mapType].transform.left,
this._mapDataMap[mapType].transform.top
];
},
onbeforDispose: function () {
this._isAlive = false;
this.zr.un(zrConfig.EVENT.MOUSEWHEEL, this._onmousewheel);
this.zr.un(zrConfig.EVENT.MOUSEDOWN, this._onmousedown);
this.messageCenter.unbind(ecConfig.EVENT.ROAMCONTROLLER, this._onroamcontroller);
this.messageCenter.unbind(ecConfig.EVENT.DATA_RANGE_HOVERLINK, this._ondrhoverlink);
}
};
zrUtil.inherits(Map, ChartBase);
require('../chart').define('map', Map);
return Map;
});define('zrender/shape/Path', [
'require',
'./Base',
'./util/PathProxy',
'../tool/util'
], function (require) {
var Base = require('./Base');
var PathProxy = require('./util/PathProxy');
var PathSegment = PathProxy.PathSegment;
var vMag = function (v) {
return Math.sqrt(v[0] * v[0] + v[1] * v[1]);
};
var vRatio = function (u, v) {
return (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v));
};
var vAngle = function (u, v) {
return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(vRatio(u, v));
};
var Path = function (options) {
Base.call(this, options);
};
Path.prototype = {
type: 'path',
buildPathArray: function (data, x, y) {
if (!data) {
return [];
}
x = x || 0;
y = y || 0;
var cs = data;
var cc = [
'm',
'M',
'l',
'L',
'v',
'V',
'h',
'H',
'z',
'Z',
'c',
'C',
'q',
'Q',
't',
'T',
's',
'S',
'a',
'A'
];
cs = cs.replace(/-/g, ' -');
cs = cs.replace(/ /g, ' ');
cs = cs.replace(/ /g, ',');
cs = cs.replace(/,,/g, ',');
var n;
for (n = 0; n < cc.length; n++) {
cs = cs.replace(new RegExp(cc[n], 'g'), '|' + cc[n]);
}
var arr = cs.split('|');
var ca = [];
var cpx = 0;
var cpy = 0;
for (n = 1; n < arr.length; n++) {
var str = arr[n];
var c = str.charAt(0);
str = str.slice(1);
str = str.replace(new RegExp('e,-', 'g'), 'e-');
var p = str.split(',');
if (p.length > 0 && p[0] === '') {
p.shift();
}
for (var i = 0; i < p.length; i++) {
p[i] = parseFloat(p[i]);
}
while (p.length > 0) {
if (isNaN(p[0])) {
break;
}
var cmd = null;
var points = [];
var ctlPtx;
var ctlPty;
var prevCmd;
var rx;
var ry;
var psi;
var fa;
var fs;
var x1 = cpx;
var y1 = cpy;
switch (c) {
case 'l':
cpx += p.shift();
cpy += p.shift();
cmd = 'L';
points.push(cpx, cpy);
break;
case 'L':
cpx = p.shift();
cpy = p.shift();
points.push(cpx, cpy);
break;
case 'm':
cpx += p.shift();
cpy += p.shift();
cmd = 'M';
points.push(cpx, cpy);
c = 'l';
break;
case 'M':
cpx = p.shift();
cpy = p.shift();
cmd = 'M';
points.push(cpx, cpy);
c = 'L';
break;
case 'h':
cpx += p.shift();
cmd = 'L';
points.push(cpx, cpy);
break;
case 'H':
cpx = p.shift();
cmd = 'L';
points.push(cpx, cpy);
break;
case 'v':
cpy += p.shift();
cmd = 'L';
points.push(cpx, cpy);
break;
case 'V':
cpy = p.shift();
cmd = 'L';
points.push(cpx, cpy);
break;
case 'C':
points.push(p.shift(), p.shift(), p.shift(), p.shift());
cpx = p.shift();
cpy = p.shift();
points.push(cpx, cpy);
break;
case 'c':
points.push(cpx + p.shift(), cpy + p.shift(), cpx + p.shift(), cpy + p.shift());
cpx += p.shift();
cpy += p.shift();
cmd = 'C';
points.push(cpx, cpy);
break;
case 'S':
ctlPtx = cpx;
ctlPty = cpy;
prevCmd = ca[ca.length - 1];
if (prevCmd.command === 'C') {
ctlPtx = cpx + (cpx - prevCmd.points[2]);
ctlPty = cpy + (cpy - prevCmd.points[3]);
}
points.push(ctlPtx, ctlPty, p.shift(), p.shift());
cpx = p.shift();
cpy = p.shift();
cmd = 'C';
points.push(cpx, cpy);
break;
case 's':
ctlPtx = cpx, ctlPty = cpy;
prevCmd = ca[ca.length - 1];
if (prevCmd.command === 'C') {
ctlPtx = cpx + (cpx - prevCmd.points[2]);
ctlPty = cpy + (cpy - prevCmd.points[3]);
}
points.push(ctlPtx, ctlPty, cpx + p.shift(), cpy + p.shift());
cpx += p.shift();
cpy += p.shift();
cmd = 'C';
points.push(cpx, cpy);
break;
case 'Q':
points.push(p.shift(), p.shift());
cpx = p.shift();
cpy = p.shift();
points.push(cpx, cpy);
break;
case 'q':
points.push(cpx + p.shift(), cpy + p.shift());
cpx += p.shift();
cpy += p.shift();
cmd = 'Q';
points.push(cpx, cpy);
break;
case 'T':
ctlPtx = cpx, ctlPty = cpy;
prevCmd = ca[ca.length - 1];
if (prevCmd.command === 'Q') {
ctlPtx = cpx + (cpx - prevCmd.points[0]);
ctlPty = cpy + (cpy - prevCmd.points[1]);
}
cpx = p.shift();
cpy = p.shift();
cmd = 'Q';
points.push(ctlPtx, ctlPty, cpx, cpy);
break;
case 't':
ctlPtx = cpx, ctlPty = cpy;
prevCmd = ca[ca.length - 1];
if (prevCmd.command === 'Q') {
ctlPtx = cpx + (cpx - prevCmd.points[0]);
ctlPty = cpy + (cpy - prevCmd.points[1]);
}
cpx += p.shift();
cpy += p.shift();
cmd = 'Q';
points.push(ctlPtx, ctlPty, cpx, cpy);
break;
case 'A':
rx = p.shift();
ry = p.shift();
psi = p.shift();
fa = p.shift();
fs = p.shift();
x1 = cpx, y1 = cpy;
cpx = p.shift(), cpy = p.shift();
cmd = 'A';
points = this._convertPoint(x1, y1, cpx, cpy, fa, fs, rx, ry, psi);
break;
case 'a':
rx = p.shift();
ry = p.shift();
psi = p.shift();
fa = p.shift();
fs = p.shift();
x1 = cpx, y1 = cpy;
cpx += p.shift();
cpy += p.shift();
cmd = 'A';
points = this._convertPoint(x1, y1, cpx, cpy, fa, fs, rx, ry, psi);
break;
}
for (var j = 0, l = points.length; j < l; j += 2) {
points[j] += x;
points[j + 1] += y;
}
ca.push(new PathSegment(cmd || c, points));
}
if (c === 'z' || c === 'Z') {
ca.push(new PathSegment('z', []));
}
}
return ca;
},
_convertPoint: function (x1, y1, x2, y2, fa, fs, rx, ry, psiDeg) {
var psi = psiDeg * (Math.PI / 180);
var xp = Math.cos(psi) * (x1 - x2) / 2 + Math.sin(psi) * (y1 - y2) / 2;
var yp = -1 * Math.sin(psi) * (x1 - x2) / 2 + Math.cos(psi) * (y1 - y2) / 2;
var lambda = xp * xp / (rx * rx) + yp * yp / (ry * ry);
if (lambda > 1) {
rx *= Math.sqrt(lambda);
ry *= Math.sqrt(lambda);
}
var f = Math.sqrt((rx * rx * (ry * ry) - rx * rx * (yp * yp) - ry * ry * (xp * xp)) / (rx * rx * (yp * yp) + ry * ry * (xp * xp)));
if (fa === fs) {
f *= -1;
}
if (isNaN(f)) {
f = 0;
}
var cxp = f * rx * yp / ry;
var cyp = f * -ry * xp / rx;
var cx = (x1 + x2) / 2 + Math.cos(psi) * cxp - Math.sin(psi) * cyp;
var cy = (y1 + y2) / 2 + Math.sin(psi) * cxp + Math.cos(psi) * cyp;
var theta = vAngle([
1,
0
], [
(xp - cxp) / rx,
(yp - cyp) / ry
]);
var u = [
(xp - cxp) / rx,
(yp - cyp) / ry
];
var v = [
(-1 * xp - cxp) / rx,
(-1 * yp - cyp) / ry
];
var dTheta = vAngle(u, v);
if (vRatio(u, v) <= -1) {
dTheta = Math.PI;
}
if (vRatio(u, v) >= 1) {
dTheta = 0;
}
if (fs === 0 && dTheta > 0) {
dTheta = dTheta - 2 * Math.PI;
}
if (fs === 1 && dTheta < 0) {
dTheta = dTheta + 2 * Math.PI;
}
return [
cx,
cy,
rx,
ry,
theta,
dTheta,
psi,
fs
];
},
buildPath: function (ctx, style) {
var path = style.path;
var x = style.x || 0;
var y = style.y || 0;
style.pathArray = style.pathArray || this.buildPathArray(path, x, y);
var pathArray = style.pathArray;
var pointList = style.pointList = [];
var singlePointList = [];
for (var i = 0, l = pathArray.length; i < l; i++) {
if (pathArray[i].command.toUpperCase() == 'M') {
singlePointList.length > 0 && pointList.push(singlePointList);
singlePointList = [];
}
var p = pathArray[i].points;
for (var j = 0, k = p.length; j < k; j += 2) {
singlePointList.push([
p[j],
p[j + 1]
]);
}
}
singlePointList.length > 0 && pointList.push(singlePointList);
for (var i = 0, l = pathArray.length; i < l; i++) {
var c = pathArray[i].command;
var p = pathArray[i].points;
switch (c) {
case 'L':
ctx.lineTo(p[0], p[1]);
break;
case 'M':
ctx.moveTo(p[0], p[1]);
break;
case 'C':
ctx.bezierCurveTo(p[0], p[1], p[2], p[3], p[4], p[5]);
break;
case 'Q':
ctx.quadraticCurveTo(p[0], p[1], p[2], p[3]);
break;
case 'A':
var cx = p[0];
var cy = p[1];
var rx = p[2];
var ry = p[3];
var theta = p[4];
var dTheta = p[5];
var psi = p[6];
var fs = p[7];
var r = rx > ry ? rx : ry;
var scaleX = rx > ry ? 1 : rx / ry;
var scaleY = rx > ry ? ry / rx : 1;
ctx.translate(cx, cy);
ctx.rotate(psi);
ctx.scale(scaleX, scaleY);
ctx.arc(0, 0, r, theta, theta + dTheta, 1 - fs);
ctx.scale(1 / scaleX, 1 / scaleY);
ctx.rotate(-psi);
ctx.translate(-cx, -cy);
break;
case 'z':
ctx.closePath();
break;
}
}
return;
},
getRect: function (style) {
if (style.__rect) {
return style.__rect;
}
var lineWidth;
if (style.brushType == 'stroke' || style.brushType == 'fill') {
lineWidth = style.lineWidth || 1;
} else {
lineWidth = 0;
}
var minX = Number.MAX_VALUE;
var maxX = Number.MIN_VALUE;
var minY = Number.MAX_VALUE;
var maxY = Number.MIN_VALUE;
var x = style.x || 0;
var y = style.y || 0;
var pathArray = style.pathArray || this.buildPathArray(style.path);
for (var i = 0; i < pathArray.length; i++) {
var p = pathArray[i].points;
for (var j = 0; j < p.length; j++) {
if (j % 2 === 0) {
if (p[j] + x < minX) {
minX = p[j];
}
if (p[j] + x > maxX) {
maxX = p[j];
}
} else {
if (p[j] + y < minY) {
minY = p[j];
}
if (p[j] + y > maxY) {
maxY = p[j];
}
}
}
}
var rect;
if (minX === Number.MAX_VALUE || maxX === Number.MIN_VALUE || minY === Number.MAX_VALUE || maxY === Number.MIN_VALUE) {
rect = {
x: 0,
y: 0,
width: 0,
height: 0
};
} else {
rect = {
x: Math.round(minX - lineWidth / 2),
y: Math.round(minY - lineWidth / 2),
width: maxX - minX + lineWidth,
height: maxY - minY + lineWidth
};
}
style.__rect = rect;
return rect;
}
};
require('../tool/util').inherits(Path, Base);
return Path;
});define('zrender/shape/Ellipse', [
'require',
'./Base',
'../tool/util'
], function (require) {
var Base = require('./Base');
var Ellipse = function (options) {
Base.call(this, options);
};
Ellipse.prototype = {
type: 'ellipse',
buildPath: function (ctx, style) {
var k = 0.5522848;
var x = style.x;
var y = style.y;
var a = style.a;
var b = style.b;
var ox = a * k;
var oy = b * k;
ctx.moveTo(x - a, y);
ctx.bezierCurveTo(x - a, y - oy, x - ox, y - b, x, y - b);
ctx.bezierCurveTo(x + ox, y - b, x + a, y - oy, x + a, y);
ctx.bezierCurveTo(x + a, y + oy, x + ox, y + b, x, y + b);
ctx.bezierCurveTo(x - ox, y + b, x - a, y + oy, x - a, y);
ctx.closePath();
},
getRect: function (style) {
if (style.__rect) {
return style.__rect;
}
var lineWidth;
if (style.brushType == 'stroke' || style.brushType == 'fill') {
lineWidth = style.lineWidth || 1;
} else {
lineWidth = 0;
}
style.__rect = {
x: Math.round(style.x - style.a - lineWidth / 2),
y: Math.round(style.y - style.b - lineWidth / 2),
width: style.a * 2 + lineWidth,
height: style.b * 2 + lineWidth
};
return style.__rect;
}
};
require('../tool/util').inherits(Ellipse, Base);
return Ellipse;
});define('echarts/component/roamController', [
'require',
'./base',
'zrender/shape/Rectangle',
'zrender/shape/Sector',
'zrender/shape/Circle',
'../config',
'zrender/tool/util',
'zrender/tool/color',
'zrender/tool/event',
'../component'
], function (require) {
var Base = require('./base');
var RectangleShape = require('zrender/shape/Rectangle');
var SectorShape = require('zrender/shape/Sector');
var CircleShape = require('zrender/shape/Circle');
var ecConfig = require('../config');
ecConfig.roamController = {
zlevel: 0,
z: 4,
show: true,
x: 'left',
y: 'top',
width: 80,
height: 120,
backgroundColor: 'rgba(0,0,0,0)',
borderColor: '#ccc',
borderWidth: 0,
padding: 5,
handleColor: '#6495ed',
fillerColor: '#fff',
step: 15,
mapTypeControl: null
};
var zrUtil = require('zrender/tool/util');
var zrColor = require('zrender/tool/color');
var zrEvent = require('zrender/tool/event');
function RoamController(ecTheme, messageCenter, zr, option, myChart) {
this.rcOption = {};
if (!option.roamController || !option.roamController.show) {
return;
}
if (!option.roamController.mapTypeControl) {
console.error('option.roamController.mapTypeControl has not been defined.');
return;
}
Base.call(this, ecTheme, messageCenter, zr, option, myChart);
this.rcOption = option.roamController;
var self = this;
this._drictionMouseDown = function (params) {
return self.__drictionMouseDown(params);
};
this._drictionMouseUp = function (params) {
return self.__drictionMouseUp(params);
};
this._drictionMouseMove = function (params) {
return self.__drictionMouseMove(params);
};
this._drictionMouseOut = function (params) {
return self.__drictionMouseOut(params);
};
this._scaleHandler = function (params) {
return self.__scaleHandler(params);
};
this.refresh(option);
}
RoamController.prototype = {
type: ecConfig.COMPONENT_TYPE_ROAMCONTROLLER,
_buildShape: function () {
if (!this.rcOption.show) {
return;
}
this._itemGroupLocation = this._getItemGroupLocation();
this._buildBackground();
this._buildItem();
for (var i = 0, l = this.shapeList.length; i < l; i++) {
this.zr.addShape(this.shapeList[i]);
}
},
_buildItem: function () {
this.shapeList.push(this._getDirectionShape('up'));
this.shapeList.push(this._getDirectionShape('down'));
this.shapeList.push(this._getDirectionShape('left'));
this.shapeList.push(this._getDirectionShape('right'));
this.shapeList.push(this._getScaleShape('scaleUp'));
this.shapeList.push(this._getScaleShape('scaleDown'));
},
_getDirectionShape: function (direction) {
var r = this._itemGroupLocation.r;
var x = this._itemGroupLocation.x + r;
var y = this._itemGroupLocation.y + r;
var sectorShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
style: {
x: x,
y: y,
r: r,
startAngle: -45,
endAngle: 45,
color: this.rcOption.handleColor,
text: '>',
textX: x + r / 2 + 4,
textY: y - 0.5,
textAlign: 'center',
textBaseline: 'middle',
textPosition: 'specific',
textColor: this.rcOption.fillerColor,
textFont: Math.floor(r / 2) + 'px arial'
},
highlightStyle: {
color: zrColor.lift(this.rcOption.handleColor, -0.2),
brushType: 'fill'
},
clickable: true
};
switch (direction) {
case 'up':
sectorShape.rotation = [
Math.PI / 2,
x,
y
];
break;
case 'left':
sectorShape.rotation = [
Math.PI,
x,
y
];
break;
case 'down':
sectorShape.rotation = [
-Math.PI / 2,
x,
y
];
break;
}
sectorShape = new SectorShape(sectorShape);
sectorShape._roamType = direction;
sectorShape.onmousedown = this._drictionMouseDown;
sectorShape.onmouseup = this._drictionMouseUp;
sectorShape.onmousemove = this._drictionMouseMove;
sectorShape.onmouseout = this._drictionMouseOut;
return sectorShape;
},
_getScaleShape: function (text) {
var width = this._itemGroupLocation.width;
var height = this._itemGroupLocation.height - width;
height = height < 0 ? 20 : height;
var r = Math.min(width / 2 - 5, height) / 2;
var x = this._itemGroupLocation.x + (text === 'scaleDown' ? width - r : r);
var y = this._itemGroupLocation.y + this._itemGroupLocation.height - r;
var scaleShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
style: {
x: x,
y: y,
r: r,
color: this.rcOption.handleColor,
text: text === 'scaleDown' ? '-' : '+',
textX: x,
textY: y - 2,
textAlign: 'center',
textBaseline: 'middle',
textPosition: 'specific',
textColor: this.rcOption.fillerColor,
textFont: Math.floor(r) + 'px verdana'
},
highlightStyle: {
color: zrColor.lift(this.rcOption.handleColor, -0.2),
brushType: 'fill'
},
clickable: true
};
scaleShape = new CircleShape(scaleShape);
scaleShape._roamType = text;
scaleShape.onmousedown = this._scaleHandler;
return scaleShape;
},
_buildBackground: function () {
var padding = this.reformCssArray(this.rcOption.padding);
this.shapeList.push(new RectangleShape({
zlevel: this.getZlevelBase(),
z: this.getZBase(),
hoverable: false,
style: {
x: this._itemGroupLocation.x - padding[3],
y: this._itemGroupLocation.y - padding[0],
width: this._itemGroupLocation.width + padding[3] + padding[1],
height: this._itemGroupLocation.height + padding[0] + padding[2],
brushType: this.rcOption.borderWidth === 0 ? 'fill' : 'both',
color: this.rcOption.backgroundColor,
strokeColor: this.rcOption.borderColor,
lineWidth: this.rcOption.borderWidth
}
}));
},
_getItemGroupLocation: function () {
var padding = this.reformCssArray(this.rcOption.padding);
var width = this.rcOption.width;
var height = this.rcOption.height;
var zrWidth = this.zr.getWidth();
var zrHeight = this.zr.getHeight();
var x;
switch (this.rcOption.x) {
case 'center':
x = Math.floor((zrWidth - width) / 2);
break;
case 'left':
x = padding[3] + this.rcOption.borderWidth;
break;
case 'right':
x = zrWidth - width - padding[1] - padding[3] - this.rcOption.borderWidth * 2;
break;
default:
x = this.parsePercent(this.rcOption.x, zrWidth);
break;
}
var y;
switch (this.rcOption.y) {
case 'top':
y = padding[0] + this.rcOption.borderWidth;
break;
case 'bottom':
y = zrHeight - height - padding[0] - padding[2] - this.rcOption.borderWidth * 2;
break;
case 'center':
y = Math.floor((zrHeight - height) / 2);
break;
default:
y = this.parsePercent(this.rcOption.y, zrHeight);
break;
}
return {
x: x,
y: y,
r: width / 2,
width: width,
height: height
};
},
__drictionMouseDown: function (params) {
this.mousedown = true;
this._drictionHandlerOn(params);
},
__drictionMouseUp: function (params) {
this.mousedown = false;
this._drictionHandlerOff(params);
},
__drictionMouseMove: function (params) {
if (this.mousedown) {
this._drictionHandlerOn(params);
}
},
__drictionMouseOut: function (params) {
this._drictionHandlerOff(params);
},
_drictionHandlerOn: function (params) {
this._dispatchEvent(params.event, params.target._roamType);
clearInterval(this.dircetionTimer);
var self = this;
this.dircetionTimer = setInterval(function () {
self._dispatchEvent(params.event, params.target._roamType);
}, 100);
zrEvent.stop(params.event);
},
_drictionHandlerOff: function (params) {
clearInterval(this.dircetionTimer);
},
__scaleHandler: function (params) {
this._dispatchEvent(params.event, params.target._roamType);
zrEvent.stop(params.event);
},
_dispatchEvent: function (event, roamType) {
this.messageCenter.dispatch(ecConfig.EVENT.ROAMCONTROLLER, event, {
roamType: roamType,
mapTypeControl: this.rcOption.mapTypeControl,
step: this.rcOption.step
}, this.myChart);
},
refresh: function (newOption) {
if (newOption) {
this.option = newOption || this.option;
this.option.roamController = this.reformOption(this.option.roamController);
this.rcOption = this.option.roamController;
}
this.clear();
this._buildShape();
}
};
zrUtil.inherits(RoamController, Base);
require('../component').define('roamController', RoamController);
return RoamController;
});define('echarts/layer/heatmap', ['require'], function (require) {
var defaultOptions = {
blurSize: 30,
gradientColors: [
'blue',
'cyan',
'lime',
'yellow',
'red'
],
minAlpha: 0.05,
valueScale: 1,
opacity: 1
};
var BRUSH_SIZE = 20;
var GRADIENT_LEVELS = 256;
function Heatmap(opt) {
this.option = opt;
if (opt) {
for (var i in defaultOptions) {
if (opt[i] !== undefined) {
this.option[i] = opt[i];
} else {
this.option[i] = defaultOptions[i];
}
}
} else {
this.option = defaultOptions;
}
}
Heatmap.prototype = {
getCanvas: function (data, width, height) {
var brush = this._getBrush();
var gradient = this._getGradient();
var r = BRUSH_SIZE + this.option.blurSize;
var canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
var ctx = canvas.getContext('2d');
var len = data.length;
for (var i = 0; i < len; ++i) {
var p = data[i];
var x = p[0];
var y = p[1];
var value = p[2];
var alpha = Math.min(1, Math.max(value * this.option.valueScale || this.option.minAlpha, this.option.minAlpha));
ctx.globalAlpha = alpha;
ctx.drawImage(brush, x - r, y - r);
}
var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
var pixels = imageData.data;
var len = pixels.length / 4;
while (len--) {
var id = len * 4 + 3;
var alpha = pixels[id] / 256;
var colorOffset = Math.floor(alpha * (GRADIENT_LEVELS - 1));
pixels[id - 3] = gradient[colorOffset * 4];
pixels[id - 2] = gradient[colorOffset * 4 + 1];
pixels[id - 1] = gradient[colorOffset * 4 + 2];
pixels[id] *= this.option.opacity;
}
ctx.putImageData(imageData, 0, 0);
return canvas;
},
_getBrush: function () {
if (!this._brushCanvas) {
this._brushCanvas = document.createElement('canvas');
var r = BRUSH_SIZE + this.option.blurSize;
var d = r * 2;
this._brushCanvas.width = d;
this._brushCanvas.height = d;
var ctx = this._brushCanvas.getContext('2d');
ctx.shadowOffsetX = d;
ctx.shadowBlur = this.option.blurSize;
ctx.shadowColor = 'black';
ctx.beginPath();
ctx.arc(-r, r, BRUSH_SIZE, 0, Math.PI * 2, true);
ctx.closePath();
ctx.fill();
}
return this._brushCanvas;
},
_getGradient: function () {
if (!this._gradientPixels) {
var levels = GRADIENT_LEVELS;
var canvas = document.createElement('canvas');
canvas.width = 1;
canvas.height = levels;
var ctx = canvas.getContext('2d');
var gradient = ctx.createLinearGradient(0, 0, 0, levels);
var len = this.option.gradientColors.length;
for (var i = 0; i < len; ++i) {
if (typeof this.option.gradientColors[i] === 'string') {
gradient.addColorStop((i + 1) / len, this.option.gradientColors[i]);
} else {
gradient.addColorStop(this.option.gradientColors[i].offset, this.option.gradientColors[i].color);
}
}
ctx.fillStyle = gradient;
ctx.fillRect(0, 0, 1, levels);
this._gradientPixels = ctx.getImageData(0, 0, 1, levels).data;
}
return this._gradientPixels;
}
};
return Heatmap;
});define('echarts/util/mapData/params', ['require'], function (require) {
function decode(json) {
if (!json.UTF8Encoding) {
return json;
}
var features = json.features;
for (var f = 0; f < features.length; f++) {
var feature = features[f];
var coordinates = feature.geometry.coordinates;
var encodeOffsets = feature.geometry.encodeOffsets;
for (var c = 0; c < coordinates.length; c++) {
var coordinate = coordinates[c];
if (feature.geometry.type === 'Polygon') {
coordinates[c] = decodePolygon(coordinate, encodeOffsets[c]);
} else if (feature.geometry.type === 'MultiPolygon') {
for (var c2 = 0; c2 < coordinate.length; c2++) {
var polygon = coordinate[c2];
coordinate[c2] = decodePolygon(polygon, encodeOffsets[c][c2]);
}
}
}
}
json.UTF8Encoding = false;
return json;
}
function decodePolygon(coordinate, encodeOffsets) {
var result = [];
var prevX = encodeOffsets[0];
var prevY = encodeOffsets[1];
for (var i = 0; i < coordinate.length; i += 2) {
var x = coordinate.charCodeAt(i) - 64;
var y = coordinate.charCodeAt(i + 1) - 64;
x = x >> 1 ^ -(x & 1);
y = y >> 1 ^ -(y & 1);
x += prevX;
y += prevY;
prevX = x;
prevY = y;
result.push([
x / 1024,
y / 1024
]);
}
return result;
}
var mapParams = {
'none': {
getGeoJson: function (callback) {
callback({
type: 'FeatureCollection',
features: [{
type: 'Feature',
geometry: {
coordinates: [],
encodeOffsets: [],
type: 'Polygon'
},
properties: {}
}]
});
}
},
'world': {
getGeoJson: function (callback) {
require(['./geoJson/world_geo'], function (md) {
callback(decode(md));
});
}
},
'china': {
getGeoJson: function (callback) {
require(['./geoJson/china_geo'], function (md) {
callback(decode(md));
});
}
},
'南海诸岛': {
textCoord: [
126,
25
],
getPath: function (leftTop, scale) {
var pList = [
[
[
0,
3.5
],
[
7,
11.2
],
[
15,
11.9
],
[
30,
7
],
[
42,
0.7
],
[
52,
0.7
],
[
56,
7.7
],
[
59,
0.7
],
[
64,
0.7
],
[
64,
0
],
[
5,
0
],
[
0,
3.5
]
],
[
[
13,
16.1
],
[
19,
14.7
],
[
16,
21.7
],
[
11,
23.1
],
[
13,
16.1
]
],
[
[
12,
32.2
],
[
14,
38.5
],
[
15,
38.5
],
[
13,
32.2
],
[
12,
32.2
]
],
[
[
16,
47.6
],
[
12,
53.2
],
[
13,
53.2
],
[
18,
47.6
],
[
16,
47.6
]
],
[
[
6,
64.4
],
[
8,
70
],
[
9,
70
],
[
8,
64.4
],
[
6,
64.4
]
],
[
[
23,
82.6
],
[
29,
79.8
],
[
30,
79.8
],
[
25,
82.6
],
[
23,
82.6
]
],
[
[
37,
70.7
],
[
43,
62.3
],
[
44,
62.3
],
[
39,
70.7
],
[
37,
70.7
]
],
[
[
48,
51.1
],
[
51,
45.5
],
[
53,
45.5
],
[
50,
51.1
],
[
48,
51.1
]
],
[
[
51,
35
],
[
51,
28.7
],
[
53,
28.7
],
[
53,
35
],
[
51,
35
]
],
[
[
52,
22.4
],
[
55,
17.5
],
[
56,
17.5
],
[
53,
22.4
],
[
52,
22.4
]
],
[
[
58,
12.6
],
[
62,
7
],
[
63,
7
],
[
60,
12.6
],
[
58,
12.6
]
],
[
[
0,
3.5
],
[
0,
93.1
],
[
64,
93.1
],
[
64,
0
],
[
63,
0
],
[
63,
92.4
],
[
1,
92.4
],
[
1,
3.5
],
[
0,
3.5
]
]
];
var str = '';
var left = leftTop[0];
var top = leftTop[1];
for (var i = 0, l = pList.length; i < l; i++) {
str += 'M ' + ((pList[i][0][0] * scale + left).toFixed(2) - 0) + ' ' + ((pList[i][0][1] * scale + top).toFixed(2) - 0) + ' ';
for (var j = 1, k = pList[i].length; j < k; j++) {
str += 'L ' + ((pList[i][j][0] * scale + left).toFixed(2) - 0) + ' ' + ((pList[i][j][1] * scale + top).toFixed(2) - 0) + ' ';
}
}
return str + ' Z';
}
},
'新疆': {
getGeoJson: function (callback) {
require(['./geoJson/xin_jiang_geo'], function (md) {
callback(decode(md));
});
}
},
'西藏': {
getGeoJson: function (callback) {
require(['./geoJson/xi_zang_geo'], function (md) {
callback(decode(md));
});
}
},
'内蒙古': {
getGeoJson: function (callback) {
require(['./geoJson/nei_meng_gu_geo'], function (md) {
callback(decode(md));
});
}
},
'青海': {
getGeoJson: function (callback) {
require(['./geoJson/qing_hai_geo'], function (md) {
callback(decode(md));
});
}
},
'四川': {
getGeoJson: function (callback) {
require(['./geoJson/si_chuan_geo'], function (md) {
callback(decode(md));
});
}
},
'黑龙江': {
getGeoJson: function (callback) {
require(['./geoJson/hei_long_jiang_geo'], function (md) {
callback(decode(md));
});
}
},
'甘肃': {
getGeoJson: function (callback) {
require(['./geoJson/gan_su_geo'], function (md) {
callback(decode(md));
});
}
},
'云南': {
getGeoJson: function (callback) {
require(['./geoJson/yun_nan_geo'], function (md) {
callback(decode(md));
});
}
},
'广西': {
getGeoJson: function (callback) {
require(['./geoJson/guang_xi_geo'], function (md) {
callback(decode(md));
});
}
},
'湖南': {
getGeoJson: function (callback) {
require(['./geoJson/hu_nan_geo'], function (md) {
callback(decode(md));
});
}
},
'陕西': {
getGeoJson: function (callback) {
require(['./geoJson/shan_xi_1_geo'], function (md) {
callback(decode(md));
});
}
},
'广东': {
getGeoJson: function (callback) {
require(['./geoJson/guang_dong_geo'], function (md) {
callback(decode(md));
});
}
},
'吉林': {
getGeoJson: function (callback) {
require(['./geoJson/ji_lin_geo'], function (md) {
callback(decode(md));
});
}
},
'河北': {
getGeoJson: function (callback) {
require(['./geoJson/he_bei_geo'], function (md) {
callback(decode(md));
});
}
},
'湖北': {
getGeoJson: function (callback) {
require(['./geoJson/hu_bei_geo'], function (md) {
callback(decode(md));
});
}
},
'贵州': {
getGeoJson: function (callback) {
require(['./geoJson/gui_zhou_geo'], function (md) {
callback(decode(md));
});
}
},
'山东': {
getGeoJson: function (callback) {
require(['./geoJson/shan_dong_geo'], function (md) {
callback(decode(md));
});
}
},
'江西': {
getGeoJson: function (callback) {
require(['./geoJson/jiang_xi_geo'], function (md) {
callback(decode(md));
});
}
},
'河南': {
getGeoJson: function (callback) {
require(['./geoJson/he_nan_geo'], function (md) {
callback(decode(md));
});
}
},
'辽宁': {
getGeoJson: function (callback) {
require(['./geoJson/liao_ning_geo'], function (md) {
callback(decode(md));
});
}
},
'山西': {
getGeoJson: function (callback) {
require(['./geoJson/shan_xi_2_geo'], function (md) {
callback(decode(md));
});
}
},
'安徽': {
getGeoJson: function (callback) {
require(['./geoJson/an_hui_geo'], function (md) {
callback(decode(md));
});
}
},
'福建': {
getGeoJson: function (callback) {
require(['./geoJson/fu_jian_geo'], function (md) {
callback(decode(md));
});
}
},
'浙江': {
getGeoJson: function (callback) {
require(['./geoJson/zhe_jiang_geo'], function (md) {
callback(decode(md));
});
}
},
'江苏': {
getGeoJson: function (callback) {
require(['./geoJson/jiang_su_geo'], function (md) {
callback(decode(md));
});
}
},
'重庆': {
getGeoJson: function (callback) {
require(['./geoJson/chong_qing_geo'], function (md) {
callback(decode(md));
});
}
},
'宁夏': {
getGeoJson: function (callback) {
require(['./geoJson/ning_xia_geo'], function (md) {
callback(decode(md));
});
}
},
'海南': {
getGeoJson: function (callback) {
require(['./geoJson/hai_nan_geo'], function (md) {
callback(decode(md));
});
}
},
'台湾': {
getGeoJson: function (callback) {
require(['./geoJson/tai_wan_geo'], function (md) {
callback(decode(md));
});
}
},
'北京': {
getGeoJson: function (callback) {
require(['./geoJson/bei_jing_geo'], function (md) {
callback(decode(md));
});
}
},
'天津': {
getGeoJson: function (callback) {
require(['./geoJson/tian_jin_geo'], function (md) {
callback(decode(md));
});
}
},
'上海': {
getGeoJson: function (callback) {
require(['./geoJson/shang_hai_geo'], function (md) {
callback(decode(md));
});
}
},
'香港': {
getGeoJson: function (callback) {
require(['./geoJson/xiang_gang_geo'], function (md) {
callback(decode(md));
});
}
},
'澳门': {
getGeoJson: function (callback) {
require(['./geoJson/ao_men_geo'], function (md) {
callback(decode(md));
});
}
}
};
return {
decode: decode,
params: mapParams
};
});define('echarts/util/mapData/textFixed', [], function () {
return {
'广东': [
0,
-10
],
'香港': [
10,
10
],
'澳门': [
-10,
18
],
'黑龙江': [
0,
20
],
'天津': [
5,
5
],
'深圳市': [
-35,
0
],
'红河哈尼族彝族自治州': [
0,
20
],
'楚雄彝族自治州': [
-5,
15
],
'石河子市': [
-5,
5
],
'五家渠市': [
0,
-10
],
'昌吉回族自治州': [
10,
10
],
'昌江黎族自治县': [
0,
20
],
'陵水黎族自治县': [
0,
20
],
'东方市': [
0,
20
],
'渭南市': [
0,
20
]
};
});define('echarts/util/mapData/geoCoord', [], function () {
return {
'Russia': [
100,
60
],
'United States of America': [
-99,
38
]
};
});define('echarts/util/projection/svg', [
'require',
'zrender/shape/Path'
], function (require) {
var PathShape = require('zrender/shape/Path');
function toFloat(str) {
return parseFloat(str || 0);
}
function getBbox(root) {
var svgNode = root.firstChild;
while (!(svgNode.nodeName.toLowerCase() == 'svg' && svgNode.nodeType == 1)) {
svgNode = svgNode.nextSibling;
}
var x = toFloat(svgNode.getAttribute('x'));
var y = toFloat(svgNode.getAttribute('y'));
var width = toFloat(svgNode.getAttribute('width'));
var height = toFloat(svgNode.getAttribute('height'));
return {
left: x,
top: y,
width: width,
height: height
};
}
function geoJson2Path(root, transform) {
var scale = [
transform.scale.x,
transform.scale.y
];
var elList = [];
function _getShape(root) {
var tagName = root.tagName;
if (shapeBuilders[tagName]) {
var obj = shapeBuilders[tagName](root, scale);
if (obj) {
obj.scale = scale;
obj.properties = { name: root.getAttribute('name') || '' };
obj.id = root.id;
extendCommonAttributes(obj, root);
elList.push(obj);
}
}
var shapes = root.childNodes;
for (var i = 0, len = shapes.length; i < len; i++) {
_getShape(shapes[i]);
}
}
_getShape(root);
return elList;
}
function pos2geo(obj, p) {
var point = p instanceof Array ? [
p[0] * 1,
p[1] * 1
] : [
p.x * 1,
p.y * 1
];
return [
point[0] / obj.scale.x,
point[1] / obj.scale.y
];
}
function geo2pos(obj, p) {
var point = p instanceof Array ? [
p[0] * 1,
p[1] * 1
] : [
p.x * 1,
p.y * 1
];
return [
point[0] * obj.scale.x,
point[1] * obj.scale.y
];
}
function trim(str) {
return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}
function extendCommonAttributes(obj, xmlNode) {
var color = xmlNode.getAttribute('fill');
var strokeColor = xmlNode.getAttribute('stroke');
var lineWidth = xmlNode.getAttribute('stroke-width');
var opacity = xmlNode.getAttribute('opacity');
if (color && color != 'none') {
obj.color = color;
if (strokeColor) {
obj.brushType = 'both';
obj.strokeColor = strokeColor;
} else {
obj.brushType = 'fill';
}
} else if (strokeColor && strokeColor != 'none') {
obj.strokeColor = strokeColor;
obj.brushType = 'stroke';
}
if (lineWidth && lineWidth != 'none') {
obj.lineWidth = parseFloat(lineWidth);
}
if (opacity && opacity != 'none') {
obj.opacity = parseFloat(opacity);
}
}
function parsePoints(str) {
var list = trim(str).replace(/,/g, ' ').split(/\s+/);
var points = [];
for (var i = 0; i < list.length;) {
var x = parseFloat(list[i++]);
var y = parseFloat(list[i++]);
points.push([
x,
y
]);
}
return points;
}
var shapeBuilders = {
path: function (xmlNode, scale) {
var path = xmlNode.getAttribute('d');
var rect = PathShape.prototype.getRect({ path: path });
return {
shapeType: 'path',
path: path,
cp: [
(rect.x + rect.width / 2) * scale[0],
(rect.y + rect.height / 2) * scale[1]
]
};
},
rect: function (xmlNode, scale) {
var x = toFloat(xmlNode.getAttribute('x'));
var y = toFloat(xmlNode.getAttribute('y'));
var width = toFloat(xmlNode.getAttribute('width'));
var height = toFloat(xmlNode.getAttribute('height'));
return {
shapeType: 'rectangle',
x: x,
y: y,
width: width,
height: height,
cp: [
(x + width / 2) * scale[0],
(y + height / 2) * scale[1]
]
};
},
line: function (xmlNode, scale) {
var x1 = toFloat(xmlNode.getAttribute('x1'));
var y1 = toFloat(xmlNode.getAttribute('y1'));
var x2 = toFloat(xmlNode.getAttribute('x2'));
var y2 = toFloat(xmlNode.getAttribute('y2'));
return {
shapeType: 'line',
xStart: x1,
yStart: y1,
xEnd: x2,
yEnd: y2,
cp: [
(x1 + x2) * 0.5 * scale[0],
(y1 + y2) * 0.5 * scale[1]
]
};
},
circle: function (xmlNode, scale) {
var cx = toFloat(xmlNode.getAttribute('cx'));
var cy = toFloat(xmlNode.getAttribute('cy'));
var r = toFloat(xmlNode.getAttribute('r'));
return {
shapeType: 'circle',
x: cx,
y: cy,
r: r,
cp: [
cx * scale[0],
cy * scale[1]
]
};
},
ellipse: function (xmlNode, scale) {
var cx = parseFloat(xmlNode.getAttribute('cx') || 0);
var cy = parseFloat(xmlNode.getAttribute('cy') || 0);
var rx = parseFloat(xmlNode.getAttribute('rx') || 0);
var ry = parseFloat(xmlNode.getAttribute('ry') || 0);
return {
shapeType: 'ellipse',
x: cx,
y: cy,
a: rx,
b: ry,
cp: [
cx * scale[0],
cy * scale[1]
]
};
},
polygon: function (xmlNode, scale) {
var points = xmlNode.getAttribute('points');
var min = [
Infinity,
Infinity
];
var max = [
-Infinity,
-Infinity
];
if (points) {
points = parsePoints(points);
for (var i = 0; i < points.length; i++) {
var p = points[i];
min[0] = Math.min(p[0], min[0]);
min[1] = Math.min(p[1], min[1]);
max[0] = Math.max(p[0], max[0]);
max[1] = Math.max(p[1], max[1]);
}
return {
shapeType: 'polygon',
pointList: points,
cp: [
(min[0] + max[0]) / 2 * scale[0],
(min[1] + max[1]) / 2 * scale[0]
]
};
}
},
polyline: function (xmlNode, scale) {
var obj = shapeBuilders.polygon(xmlNode, scale);
return obj;
}
};
return {
getBbox: getBbox,
geoJson2Path: geoJson2Path,
pos2geo: pos2geo,
geo2pos: geo2pos
};
});define('echarts/util/projection/normal', [], function () {
function getBbox(json, specialArea) {
specialArea = specialArea || {};
if (!json.srcSize) {
parseSrcSize(json, specialArea);
}
return json.srcSize;
}
function parseSrcSize(json, specialArea) {
specialArea = specialArea || {};
convertorParse.xmin = 360;
convertorParse.xmax = -360;
convertorParse.ymin = 180;
convertorParse.ymax = -180;
var shapes = json.features;
var geometries;
var shape;
for (var i = 0, len = shapes.length; i < len; i++) {
shape = shapes[i];
if (shape.properties.name && specialArea[shape.properties.name]) {
continue;
}
switch (shape.type) {
case 'Feature':
convertorParse[shape.geometry.type](shape.geometry.coordinates);
break;
case 'GeometryCollection':
geometries = shape.geometries;
for (var j = 0, len2 = geometries.length; j < len2; j++) {
convertorParse[geometries[j].type](geometries[j].coordinates);
}
break;
}
}
json.srcSize = {
left: convertorParse.xmin.toFixed(4) * 1,
top: convertorParse.ymin.toFixed(4) * 1,
width: (convertorParse.xmax - convertorParse.xmin).toFixed(4) * 1,
height: (convertorParse.ymax - convertorParse.ymin).toFixed(4) * 1
};
return json;
}
var convertor = {
formatPoint: function (p) {
return [
(p[0] < -168.5 && p[1] > 63.8 ? p[0] + 360 : p[0]) + 168.5,
90 - p[1]
];
},
makePoint: function (p) {
var self = this;
var point = self.formatPoint(p);
if (self._bbox.xmin > p[0]) {
self._bbox.xmin = p[0];
}
if (self._bbox.xmax < p[0]) {
self._bbox.xmax = p[0];
}
if (self._bbox.ymin > p[1]) {
self._bbox.ymin = p[1];
}
if (self._bbox.ymax < p[1]) {
self._bbox.ymax = p[1];
}
var x = (point[0] - convertor.offset.x) * convertor.scale.x + convertor.offset.left;
var y = (point[1] - convertor.offset.y) * convertor.scale.y + convertor.offset.top;
return [
x,
y
];
},
Point: function (coordinates) {
coordinates = this.makePoint(coordinates);
return coordinates.join(',');
},
LineString: function (coordinates) {
var str = '';
var point;
for (var i = 0, len = coordinates.length; i < len; i++) {
point = convertor.makePoint(coordinates[i]);
if (i === 0) {
str = 'M' + point.join(',');
} else {
str = str + 'L' + point.join(',');
}
}
return str;
},
Polygon: function (coordinates) {
var str = '';
for (var i = 0, len = coordinates.length; i < len; i++) {
str = str + convertor.LineString(coordinates[i]) + 'z';
}
return str;
},
MultiPoint: function (coordinates) {
var arr = [];
for (var i = 0, len = coordinates.length; i < len; i++) {
arr.push(convertor.Point(coordinates[i]));
}
return arr;
},
MultiLineString: function (coordinates) {
var str = '';
for (var i = 0, len = coordinates.length; i < len; i++) {
str += convertor.LineString(coordinates[i]);
}
return str;
},
MultiPolygon: function (coordinates) {
var str = '';
for (var i = 0, len = coordinates.length; i < len; i++) {
str += convertor.Polygon(coordinates[i]);
}
return str;
}
};
var convertorParse = {
formatPoint: convertor.formatPoint,
makePoint: function (p) {
var self = this;
var point = self.formatPoint(p);
var x = point[0];
var y = point[1];
if (self.xmin > x) {
self.xmin = x;
}
if (self.xmax < x) {
self.xmax = x;
}
if (self.ymin > y) {
self.ymin = y;
}
if (self.ymax < y) {
self.ymax = y;
}
},
Point: function (coordinates) {
this.makePoint(coordinates);
},
LineString: function (coordinates) {
for (var i = 0, len = coordinates.length; i < len; i++) {
this.makePoint(coordinates[i]);
}
},
Polygon: function (coordinates) {
for (var i = 0, len = coordinates.length; i < len; i++) {
this.LineString(coordinates[i]);
}
},
MultiPoint: function (coordinates) {
for (var i = 0, len = coordinates.length; i < len; i++) {
this.Point(coordinates[i]);
}
},
MultiLineString: function (coordinates) {
for (var i = 0, len = coordinates.length; i < len; i++) {
this.LineString(coordinates[i]);
}
},
MultiPolygon: function (coordinates) {
for (var i = 0, len = coordinates.length; i < len; i++) {
this.Polygon(coordinates[i]);
}
}
};
function geoJson2Path(json, transform, specialArea) {
specialArea = specialArea || {};
convertor.scale = null;
convertor.offset = null;
if (!json.srcSize) {
parseSrcSize(json, specialArea);
}
transform.offset = {
x: json.srcSize.left,
y: json.srcSize.top,
left: transform.OffsetLeft || 0,
top: transform.OffsetTop || 0
};
convertor.scale = transform.scale;
convertor.offset = transform.offset;
var shapes = json.features;
var geometries;
var pathArray = [];
var val;
var shape;
for (var i = 0, len = shapes.length; i < len; i++) {
shape = shapes[i];
if (shape.properties.name && specialArea[shape.properties.name]) {
continue;
}
if (shape.type == 'Feature') {
pushApath(shape.geometry, shape);
} else if (shape.type == 'GeometryCollection') {
geometries = shape.geometries;
for (var j = 0, len2 = geometries.length; j < len2; j++) {
val = geometries[j];
pushApath(val, val);
}
}
}
var shapeType;
var shapeCoordinates;
var str;
function pushApath(gm, shape) {
shapeType = gm.type;
shapeCoordinates = gm.coordinates;
convertor._bbox = {
xmin: 360,
xmax: -360,
ymin: 180,
ymax: -180
};
str = convertor[shapeType](shapeCoordinates);
pathArray.push({
path: str,
cp: shape.properties.cp ? convertor.makePoint(shape.properties.cp) : convertor.makePoint([
(convertor._bbox.xmin + convertor._bbox.xmax) / 2,
(convertor._bbox.ymin + convertor._bbox.ymax) / 2
]),
properties: shape.properties,
id: shape.id
});
}
return pathArray;
}
function pos2geo(obj, p) {
var x;
var y;
if (p instanceof Array) {
x = p[0] * 1;
y = p[1] * 1;
} else {
x = p.x * 1;
y = p.y * 1;
}
x = x / obj.scale.x + obj.offset.x - 168.5;
x = x > 180 ? x - 360 : x;
y = 90 - (y / obj.scale.y + obj.offset.y);
return [
x,
y
];
}
function geo2pos(obj, p) {
convertor.offset = obj.offset;
convertor.scale = obj.scale;
return p instanceof Array ? convertor.makePoint([
p[0] * 1,
p[1] * 1
]) : convertor.makePoint([
p.x * 1,
p.y * 1
]);
}
return {
getBbox: getBbox,
geoJson2Path: geoJson2Path,
pos2geo: pos2geo,
geo2pos: geo2pos
};
});define('echarts/util/mapData/geoJson/an_hui_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '3415',
'properties': {
'name': '六安市',
'cp': [
116.3123,
31.8329
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„„nJ‚UXUVƒ°U„ÑnU@mlLVaVln@@bn@VU@xlb@lšLnKlšƒVI„JšUVxnI@lVL@b„ްVX@˜b„x„nVVUnVVnU‚›@kX@VwV@„al¥UUnUWa@ƒ@wĸU„LU¥lKUa@aUI@alLVaUƒ¯anƒWkUKm@XV@VaXlW@aU_UWVUƒI¯@ma¯W¯™™I@UU@WWU@U@@UU@VkV@@WUUm@UaU@„lK@IUK„L@KWmXUWaXI@ƒ@a@a@U@U@KV¥lw„k°b²JVIVKlV@UX„la„Ul`œUVLVVVUšJ„U@Lnm@_VK@KUIW@™J@Xk@WW@U—ƒmm™XmWk@kK@aUUƒVmmkUwUmWL™@WmU@™UJmUULkKWakLWVkIƒlƒwULƒW@X°lUJ@°ULƒWV—wmJ@bmb¯Vkm@@WkWm¯wƒL@lkXƒWmXym¯UImJUbkV™@Vn¯„@V@lUbƒ@mk@maUxmlUbULWn@J—LmKUkWKkwUKƒbm„X„WxkVUKmLkVV@JUUWL@xkJUUƒV@X@VVlUbVX@xk¤šx‚¼œxWxn„‚nn@Þ¼„JVb°aVn„@šmlnXU„JlbVlkz@‚lUŽlXJmxVxXnWxXÈWlUŽ@šUxU@VX@xUL@šUÆmLnV@lWXk@@JlbXblnlJ'],
'encodeOffsets': [[
118710,
33351
]]
}
},
{
'type': 'Feature',
'id': '3408',
'properties': {
'name': '安庆市',
'cp': [
116.7517,
30.5255
],
'childNum': 9
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@n°‚znW„XlW@k„K°xXn‚l@Xn@l‚°Una@anI˜xXU„ŽVK@¯VIkW¯X@‚„VK„x„klJXUlKXblLVKnVVIšŽV@Xn‚@šŽXKVnVxlŽnn„UlmV@²óUkV™lW„b„lƒšƒn@VVVIn@lw@WVIXblV„@Èx‚aUaVIVVnKVLšK„ƒln@b²K@»U£ƒÑķƒġÝÅb™K™a@Im@ۍ„@kWÓkkmKÅnóJƒUÅ£›W@w„ĕ@wĉţ¯¯ƒUkK±l¯Uƒ¥UÑkÝUķ»Ý¥¯™JƒIUŽVbUl¯ÈV¼VJU¼Vb@bkLUl@„VJ@bUXǚ@lkVmXmKkLVxš‚Ž„VƒL@VkVVVlzW˜kbmLUUUbVbUV™šlÒnJlUnLllUL@bU„Vx„l‚LXVƦÈVU¦WJ'],
'encodeOffsets': [[
118834,
31759
]]
}
},
{
'type': 'Feature',
'id': '3411',
'properties': {
'name': '滁州市',
'cp': [
118.1909,
32.536
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@š„@`nnl@„xšK@X°KXV˜IXVlbXVWnX‚lL@šÈ»‚LVan@VJ„êVVn@‚X@laÞbVaƒyn@„_‚xnWVXnWl@VnUVkI@l‚nXKVLVV@V@kW@LlVô„@J@bVnnKnkVa@»lç@ƒnwšKma™UUUVњ@n™mWXalI@alVn@VwUaVU„@„nlaôJnU„VVXlJšaXXVK@UšV@VWx@nXVWšXVšUlLUbV‚ULVVnUVbUbVbš@@a„KÆnnKVK@U@UU@@a„@Vƒ°¯ÈJVIlķ@aa˜UaVKU_@mkxUI@aƒUlyU@@™wkKWmUbUnUVWbkJW_J@bƒn@Vm@@KULk@V@@bVbÅm@LW@UVVbkK@UkKWL@VULUKWIUJUbkK@_WVXU›Jka@XƒVa@kšy@aVIUUW@@m„UlLœKWÑUKVan@UkVmmIXKƒaVaUwVU@UmykU¯@±UUL@WUIVUU@KkIWaƒaU@kUUaǃUó»mKƒk¯@y@kWK@bkI¯`mn™l¯XWlkVUzUJlbUbVJl@nnm„@VULV`XnWƗbmUUn™JmUknƒJ¯km@ƒyk@kU›xL@VUbmnn¤lX@`™z@JmaULUVl@Xn@xllkXWa—aW@UVmUbƒ@mVXšWxXbWbUŽƒÒnVVnVVUL'],
'encodeOffsets': [[
120004,
33520
]]
}
},
{
'type': 'Feature',
'id': '3418',
'properties': {
'name': '宣城市',
'cp': [
118.8062,
30.6244
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Vb@„XL˜JXxlIXxlVlV@I²¤šnlUnVšU@VULWVUJ@Lnb@lV@UnV@@VVVlLnbnJ‚UVkUUVWn@@anUVnVJVIV‚@@nUJVbUb‚„@VUbVK@bn@VbnIlxkllXVlXKWUXUlL°¤UVVb@bš„UlkXW‚ƒxXz@‚„Ila„UlƒnUlJVInVÆJ„U„LVUnV„K°@VnlVnxV@XLlK@wVL@KnUlJXU˜bnKVLX„lUw@VWlLXKm@@a„@VLnmlIVVnKn@škVašVlwk@@a@k@ƒVIUa™@maUa@wna@kmWƒ™UUmVUIVǗ@aƒKm™aƒ™kU™J@InmUUaVa„k‚lX@Vk@m@VU@wnK@alKVUkUkKƒbmUkmƒ@U£WVk@@UÝbbƒaÇx@b@WVUa¯ƒ@wVwUUV@VwnK@KWaŁ@KšIUyUI@WmXó™UbWaKm™@km@IUyƒIUaWKƒx@zUKUL@llVUnkLVVkJWX@VUKUVƒIkVWakb@VWb@n@JkXUlmL@xkL@`VxšLUÈUJ@Vm@@bmIUlUL@VUVVbknm@mKUw™KVÈ@J@LV±kkJUIƒl'],
'encodeOffsets': [[
120803,
31247
]]
}
},
{
'type': 'Feature',
'id': '3412',
'properties': {
'name': '阜阳市',
'cp': [
115.7629,
32.9919
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@V™nƒš@ša„k°aš±@‚¥@UUI@aUmlwUUx›b@¥XU@mmI@a@Kn@@_W@@W„I@mšUVVXUl@XaV@‚K@I@a„LX@aVI°K@KVL„UUw‚yXkšK@kšKÆbXnlK@k@a„JlU@w@U@»@aXKWƒn_‚JXkVKnƒ@°LlKXƒW@¯Uƒ@aUK@kmJUw™VƒIUJ™„kŽmL™K@kka@wUVm@@am@UkUbkK@nmVƒÒ¯VU„WVVmIƒƒULk@ƒƒma@kkKƒƒ@nUbUamU™`UUVUkKVkkƒW@@bkmƒnƒmUXVKXVƒL@VƒbU„m‚™bVXJ@nmKÅI@KWKUXVJUL@VUKUX@KUKWL@LUJmaXXm@kVVV@L@VUL@VlK@L@V@LUK@VUb@UUU@°@nVxU`‚Lkn@`@XVJ@X™Vm„k@UKmV¯LVVn±Wm@Ub@JlLUl„@VLk„@lmVVn@bnV@V°IV™šaVJXI°K°V@XXVlVVU„nšKVlUš„bWXnV@bV`U„„@@m@@‚ƒ@nxmn@bXVlL@¤nb„Ul¦šVVUnJVU„Vl@@bÞL'],
'encodeOffsets': [[
118418,
34392
]]
}
},
{
'type': 'Feature',
'id': '3413',
'properties': {
'name': '宿州市',
'cp': [
117.5208,
33.6841
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@UWU@bkW@aWU@aUIkWV™lLXb„lVIUVV@‚mn@V_n@VaUK@I‚@UašanJVU„@lV„UVnnKVVlaUa„I@wnK‚Lnll@nVlk@wVKXkl@@b„bUJ@V‚U@U„UUyVk@aVUXwlWXX‚WU¹@aU™@WUI@mlUšn„J@Il@šaXbV@VKl@XxVL@W„IšJlb„@„al@„IUUm@@aVK@¥¯—@mUķ¯bWƒk£Vm@akm@VaÅ@UVWaƒ@UJWkƒJ—UƒbWbU@UlƒXk@ƒamV@K¯nk@ƒlU@Uxmz@bU`ÇbUbÅVm£U@Ww™x@akLUK@UlakwUJWVkLmaUal@n_ƒmVUnKVUUmÅXWa™@kJmx@XUJ@bVLXxl@VVUVV„UbkLWbU@@lUVV„VVX„›K@XkJ@nU@@bV@VxUVlb„U@xXLWŽn@UxVbVĊ„V@b@XV`mnkJ@kUKmbƒaU@VbnbÆx@XU@@`k@@bl„™@@bkL@WƒakXWaU@Vmkx@XWW@@wUUUbƒJ™U¯V™@¯ÞU@WxXŽlL@bkb@ŽlVlnb™JW@kkU@mbkaWJ—IVlmz¯`UnU@mb™@@„ƒ`@bkVlœnV@b@šV@„aVxn@Vx‚KXnl@nbVK„bVK@a„_V@Vƒ„w@W„LlwnK@UmIU@VWš@šUÈ@lKnal„wš@@V°@šaUmlUUw@„ƒV@@UXK'],
'encodeOffsets': [[
119836,
35061
]]
}
},
{
'type': 'Feature',
'id': '3410',
'properties': {
'name': '黄山市',
'cp': [
118.0481,
29.9542
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lXnlWX@VUJVnUJVzXJVx„kVJlI²l‚U@K@IUǚLVxnLn@lmUaVU@UVKVknJ@an@@UVIVǙKUw@_lK@wnKVklW@I@mXa@UlaXblU„JVUVL@UXWlIUUlKVmkU@kVKVL@y„wXLVb„JVz@Jlnš@nŽ‚LXbVaôšnW@la@UVWUa@@a@mk@WIk@VwUa¯¥m@UUVK@ImK@aX£ƒkK›ÅV™a™™ƒ_@±ƒakXWW—LƒƒƒnU@@a@¯mK@L™JUWwUV™VmbXX@lWLn`mzUJUb™Lƒ„k@makVWmkX™ambkKknƒaƒ@ƒaƒb@‚U@Unm@—ƒWVƒ@VbUbUJWIk@@lmL@°UVUVm„nš™@@kmWkb@xƒ_m@@aU@b@JlŽUz™lWxXn„@‚b²@l`„IVl„UlL@VšK„nVbUl@VlIn@@b„bVWUk‚@@bX@Valb@bnb°Vn@„xVKlbVnV@V‚x„L@ln@UXVV‚L˜'],
'encodeOffsets': [[
120747,
31095
]]
}
},
{
'type': 'Feature',
'id': '3414',
'properties': {
'name': '巢湖市',
'cp': [
117.7734,
31.4978
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VV@blL@ŽXlWnnšnŽ˜„@VXXl@@WšIX@VJ@LšxŎxlnšŽ@bXJVblX@VVbUVn@VbUVlb@LnJVbVLV‚XLšÒVL„ÒšV„bVIVylUXk°Wšknm°_lJ@aXL@l‚z°@„lnLô¼V‚È„VUUaVKU@WW@@UUa@knmVLlaV@„a@kšak±@UmwkKmk™lj™ÝUUkL@mlIVmnÝWkkUÝ@KƑĉ™a@»ƒmma@mX™¤¯Uƒw@ƒ@UU@bU±±L@akmƒ„™LUKmLUUUJVbbÇwƒ@kUWaUJ@Xkxm@UJUUm@™„k„ƒ‚ƒakXUšVl±ôU@kn'],
'encodeOffsets': [[
119847,
32007
]]
}
},
{
'type': 'Feature',
'id': '3416',
'properties': {
'name': '亳州市',
'cp': [
116.1914,
33.4698
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lU@Un@@anUlw@KVmUwlaX_lKna@KU@@kWKUU@ankW™XK˜@@V²VVIÈU@al@VaÈamK@wU™@klaUƒV@XƒVUU»WUUbkmUkVmk@aÈw@mWU@VkIkVWKUÑķXȭºU¯lƒ@kkLWmÅa™L@l™LWlzVxƒVUK@L¯LUJ@bWƒK@b@JLU@Wbk@WVUU™V@nƒJ@XX@@`m@@L@bnJ@nWV@¦œa‚wVVkxVn@bVJ@V¦@Ž™²¯bƒl™b™@m„UšUŽƒŽƒ¦Xb‚UV`@nnxUxWLkUkVWKkV@XV@@VVL@VX„@lVV@L@blL@`šL@xXKVL‚@„VnUš@lwnU@ml@XnV@@UVW°LnalƒUI@aUK@a‚a@U„kXW@I@mWL@UXK@UVW@U‚@@k„Wn‚@@V„@XblaVxšL@bVKXb„IlJ'],
'encodeOffsets': [[
119183,
34594
]]
}
},
{
'type': 'Feature',
'id': '3417',
'properties': {
'name': '池州市',
'cp': [
117.3889,
30.2014
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': [
'@@„V°°ĊŤ@xƒĖ@xœXƤ„VôIÆmnLllXÔ@lƒÜŽn@@JšbšLÆaĢÞĸ„°VVUUKVanK@UV@VL„VVn„ln@‚xnklxXamk@WV@Xa˜@naVk„Klk™@mkUWwkJWw—IWK@ƒUaUwWIUyVIUmVI@UXWmkkW‚—KUUVWm@@kƒKw@U‚UUmkaULƒwm@¯Uma@akaUbW@@a@VlUXƒa@am@kJ@UVkUaƒm™L@UkKƒVUkƒJk_±@aƒ@WmXwÇkkaVaUa±ƒœwV@VkƒwnyUaW@UU¯amLk@m™@kmmU™™¯K@L@lUX¯ƒWlkXƒŽVb„bƒVUL@J@LVKnlJXnlb@`nXlalV@bnL@Vnb˜¼@lXbWlkL™K@zUJmIUxUVUVmX',
'@@llUL@VlxšL@a@UƒwXa¯@'
],
'encodeOffsets': [
[
119543,
30781
],
[
120061,
31152
]
]
}
},
{
'type': 'Feature',
'id': '3401',
'properties': {
'name': '合肥市',
'cp': [
117.29,
32.0581
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„L„xV‚ĊLÞkšVlVVXaWaXwW™nU„@‚anVVUX@˜bXblWkk@wWmk@VUVKnb@Išy@_kWm£nmVa@U‚KœwlVl@„zn@°l„IlmnVšIVmnV˜aXÅWmU_VK@Unƒmmk@UIVakaƒa™UƒÑUK™ÑWKUUKUamI@KkaVUUam@VUUa@UkWUaWI@a™kmōw™wUL@`mn@KƒV™IUVUUUK›Vk_ƒVkbWƒ@VkUULUJ±I¯aƒlkxU¦@L@V@V@b@b@„WJXbWVXn@LƒKVL@JkLƒŽV@Vbn@VV@XU@UlV@@VV@V@XXV@@Všš°Xnb°@„JUVVXV`@bkXWŽUbU@WŽn@VLXlm„°bV„UbkK@bVJ@bVbkLV¦ƒKķV@x@„XbmVVVk¦'],
'encodeOffsets': [[
119678,
33323
]]
}
},
{
'type': 'Feature',
'id': '3403',
'properties': {
'name': '蚌埠市',
'cp': [
117.4109,
33.1073
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VÒXLlUlJ@UXV@nÇx@bnlUVllnVaXVV¼UVW„U@V„²wVV@Vl@„VnwlIš@XbÆWVnUVmLUV„nm`k@VbnblKXUVIlxkb@VVLlK@bšwXxV@n¤ÆUVaÈaV_@anyVwV@„kl@°m@LnU„bl@„WVkV@Xa„a˜V„IXl‚IV‚„@XbVUÆ@XKWwUkmW@_UmnIlJXkWKXmV@‚w@_XV@Kl@kU@KlX@@UUUUKWLm@klJVUUmk@mXUWmXwƒ`m@„zUbÝakbW@m@UUƒéUIm@UbKǼ@™kKWXmWUkaWU—JWU¯L@W™Lƒwk@mm@_™ƒÅl™UVkmWUnV@VWLUb™bƑĬ¯l'],
'encodeOffsets': [[
119543,
33722
]]
}
},
{
'type': 'Feature',
'id': '3402',
'properties': {
'name': '芜湖市',
'cp': [
118.3557,
31.0858
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„bVaV@XllLXU°ŽlL@V@VUnVl¯Ikš›VUVU@@b@lUXUWmb„n@¼šbƒĊ‚LÞ@lVXlmÞUnkJ@nlKVVšÞXklWVaVI@aUKn»lL@Kn@‚XXwlm@mn°@„V@Wy„wXlWVk™ƒ@aUaVU¯£kKWVXVWLUkkWlkkwmJUam@@aULVa@UƒVaUaVI@m‚@UUJUIUmmV@bm@UXVVUlVmImakKUU@UU@VmU@@kma@KVIXUVK@U™VmUkV™m±£@JkU@nlšk‚ƒLUlmb—@WbU@@XnlWb'],
'encodeOffsets': [[
120814,
31585
]]
}
},
{
'type': 'Feature',
'id': '3406',
'properties': {
'name': '淮北市',
'cp': [
116.6968,
33.6896
],
'childNum': 3
},
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@lnnK@¦n@@V‚V„@@VV@nIV„V@VW²a@b@bVnUVVV@V™z@lš@°UšV„IVaVV@x@ŽXX@WlwUnV@XblW„b@XlK@aš@kƒ@al@@_V@@WÅwmaUaV@„bnaVL@llInmU_@W@aƒUUĉUaVwm@XWK@wƒVkaVUUwU@@aV@@mlI@WœLWƒUUUƒVU@kV@XalKVaUƒVUUUk@WwUK@aVI@WƒUk@@UUU±xkb@lVš@xnLÇbUbk@@bÇVUJ±U@U—@WLXšml@bVVXL@lV@@LmbkLW`kbVxUn@LkxmV@bm@@VkV'],
['@@VVVkV@¥@UV@U@VUUJƒkWakKUšlXVJ@bXV@blX@aXV@V']
],
'encodeOffsets': [
[[
119183,
34594
]],
[[
119836,
35061
]]
]
}
},
{
'type': 'Feature',
'id': '3404',
'properties': {
'name': '淮南市',
'cp': [
116.7847,
32.7722
],
'childNum': 2
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@°kƒīšaVaXK@U‚UVmnXUlšVÆkVKUUUmmU„ÑkU™UÝlĉKUƒwƒKƒbU@UxW@@lœmVUUVmUUƒmƒw—aW„kL¯K@Žm„ULWlIm`X„WL@b@¼@V@xkVƒI@b@l@lk„V°Ȯ¹ĸW'],
'encodeOffsets': [[
119543,
33722
]]
}
},
{
'type': 'Feature',
'id': '3405',
'properties': {
'name': '马鞍山市',
'cp': [
118.6304,
31.5363
],
'childNum': 2
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@šNJnllLnxV@laXLVKma„aXbVI„bVKVVVIVyn@n_ƒƒW@@ƒ„UnJlUVVXlLnaUWlV@VV„IXW@_W@XK@K@UVUUwVamÑXmmwƒw™KUnUK™çU@ƒJƒU¯@mŽ@nknWxWm@@LkKm¼VL@bUJUbkXWl'],
'encodeOffsets': [[
121219,
32288
]]
}
},
{
'type': 'Feature',
'id': '3407',
'properties': {
'name': '铜陵市',
'cp': [
117.9382,
30.9375
],
'childNum': 3
},
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@„ÒV¤@¼V²@aVV@Ž@„„x°Vš£nW‚@nbnaVXVW@k@aV@VUœUl™°JUkVm@U@UkK¯WVkKWkU@Ubƒakwmlwm@ƒkUmƒUUKU@@VmLUbVLUV¯U'],
['@@LllUL@VlxšL@a@UƒwXamK']
],
'encodeOffsets': [
[[
120522,
31529
]],
[[
120094,
31146
]]
]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/ao_men_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [{
'type': 'Feature',
'id': '8200',
'properties': {
'name': '澳门',
'cp': [
113.5715,
22.1583
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@HQFMDIDGBI@E@EEKEGCEIGGEKEMGSEU@CBEDAJAP@F@LBT@JCHMPOdADCFADAB@LFLDFFP@DAB@@AF@D@B@@FBD@FADHBBHAD@FAJ@JEDCJI`gFIJW'],
'encodeOffsets': [[
116325,
22699
]]
}
}],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/bei_jing_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '110228',
'properties': {
'name': '密云县',
'cp': [
117.0923,
40.5121
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@vIHZDZQtDLNMXIbHRCXXITbJ@H`LGPRDDJNCLHTOCWFGvGBUJMKGFO^IHWXITQCI’Y^AXGfRˆDXF`DJOLB~G\\DZIHHpErUVMhHb]\\M†BVF@FTP`@zTbD\\@~M\\K`H^EVODWICAakAQXoIcCOCIgGYNWFWNGGKKGaJEGMEIKYJUT_J_Go@_SyQaSFMEGTcYOQLIIi@EKAUPCV[EEXQCW|aMUMAaYCYNIDGGACIMGGSKDQGaF_C[GaB@GOIiOKAYL“mI@CN]F[SWWAcKKI@HMUimEKbeYQYISNUOcBKPIFBNgvDPGZYFSf]CMSIWGEUFgDIQ[MeDMJS@RR@LphFPCHaBAJKF@J]IBJO@HlO@@RKAMPJHCNDJTHFP@ZGNANBRFH@J_fM^ONJNF\\VTDJHDON@XRND\\XRCPVETCLBVKDFJINHRGPRV@\\CLJN@VbXbLVT'],
'encodeOffsets': [[
119561,
41684
]]
}
},
{
'type': 'Feature',
'id': '110116',
'properties': {
'name': '怀柔区',
'cp': [
116.6377,
40.6219
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@JHTVHXCHPfnDJGHNDJSB[JSBGVSAOH@PMPuDEHHXZN@PHF@ZLJ@LHVYJA\\OFWP]BMtMBSRGV[JeVAPQVIFENMD¡–@^NV\\JH@NNL@NM\\kTQ\\I^FNIpBHGTBFFAZQfKDIXQTLXFXNNVMVHRGpCFLlRLEVBBH`IVO\\G`RDPAXLXBXORHZEHTDLLN@VGTMrQNFPeASKG@GMOAKBYMK@GTUHUXSHMVDNMOUEOZMJML@^KRACMZEZMRQLUHE@OFENPR@DI\\ChMHIDG\\GJMDWHCKGMDCIQCHO_K@GaIJSWWQDaGWJMNCKRsCYGYuJUSaKaW@UIMDK@[QUHOGQJMEILCAUDKFSOUQD[WMC‚Q@WPMGCCIUSE[IMPMN]`e@IEGAQBMHM@YEOSGCIDMIGNOLB@QP@GkP@AI^J@ILEBIbADGEOog@KQQWSekWQQUOFKZLF@PUNmIaHIUeBCTSHENcJa@_IWSaGu`GLSBKJQFOXGDXVQVOBIHcDSJWBEFGTMH[^mLaXcHiKElTRKtFXZ`MHMPCNRDxZˆB\\ICIHK@KŽHbIVFZ@BPnGTGbDXRDJaZKRiGEFSFEJhjFNZFjn'],
'encodeOffsets': [[
119314,
41552
]]
}
},
{
'type': 'Feature',
'id': '110111',
'properties': {
'name': '房山区',
'cp': [
115.8453,
39.7163
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@h@bl@HRJDZ``TA\\VVD^H`\\pF\\JŒ`JGv@ZO\\GPSTEjPTR`FnEbDTDHEhLFMTK@ETSPULKEI@OVISKSJACEQNQbV˜IXGDIN@dMB[IIBcN]ZHNLP@XOWCFWŠCNRHTpATD@^NVNLED@Rh@jCEF}E[OOHUEW]W@QGGDIQSH_MmFmCUT_K]i@MHCMW—FCF‹E{BMHMPOHKS]CFNGBELDH_@BcAKOACESAOBELaXAROB@FODMEDWJAG[aE@UM@DImEWJMC@OeCA{aE[@{L@MINUCQXKfUJORCHqJBF@TCXWNQX]M[EAJO@@KMBQJIC]EWMCCUBEBFHKDOTMBGNGF]MWDBRDdMDQVyE@LPVHDCP@JVVMTG~HNSH[CmRUvHPHBbA\\PTNRC\\YNJ€PRARPJDDR'],
'encodeOffsets': [[
118343,
40770
]]
}
},
{
'type': 'Feature',
'id': '110229',
'properties': {
'name': '延庆县',
'cp': [
116.1543,
40.5286
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@^AXOPEB[ZIGU@KKI@YGE@OYMGWFGvCNO@OPGTBHUTA\\ITACIGMIHmCOeDGGWSUIGimYEEMgiFITEFEjHLQbYCIWQaCSHmHAOY@UEaJG@LGLDJ[J‡AwYQCDMNONGY_EWLsSQFkMO[NWAIGaIYL@HMBOKiOQDWEUDMQSF_QIUBWdg@[NaAKQ@M]OQ@WhgLUMMFYQDIRCEUZOOCIOJ[KIUMKL@HIDKVEBM`HJAJSJUdBLGNEdMBMO[BYEWJSNKNaD]PE\\SjOT_RQVEZPpƒNQXfŠNA~lNG`@PNLp¼RFLfbdKbATUh@FSNWjGFZVLFHVA~X¨PPROfFJbNJPLFbENJPrEFNPFRHDDJdENJLVEPBJTVTHGHFRFH@PXP\\ORQHW\\BjWFDERLPPBbB\\E`B\\D\\L`@F]FCnJ^AZL'],
'encodeOffsets': [[
119262,
41751
]]
}
},
{
'type': 'Feature',
'id': '110109',
'properties': {
'name': '门头沟区',
'cp': [
115.8,
39.9957
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@V@XMnGPY²‰JQNEhH\\AZMPDVTTDZCPiJkHSHCjIdFtEHITCNITQEKUAMCEIKCECABYESKFWAKBEIIHABGDCKCAIHMHALKEI\\CFIBILIJQZS]BBEECS@E@@C]COKI@CABAAEEDMGƒCH]A[M@CJWH—JaUMRFRBDTITLUJ@PFJKLOVST@FSLENgKGFSCaCmF_ESQiOSFOT[HYPu@IH‹_[IoE_[]GUC[USB__CYQI@Gakg@qZeHQNMNV\\FVLPgJAFJPRLCH[XcPELUT[JiV_EELFTADBXRTRLJC@fHXHHbPd`fR@NfT`@TLplHMpCEJHJBVLFŽ@JT‚VnG^KXDXHNVGRLRXFJVdDHSNWLGfEzA'],
'encodeOffsets': [[
118635,
41113
]]
}
},
{
'type': 'Feature',
'id': '110114',
'properties': {
'name': '昌平区',
'cp': [
116.1777,
40.2134
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VNLJI\\JPPDYPFVQDCJZRNEVNhKXgR@^P@NLRbB\\Mh@XcVARJE`RTCNFV€XRCjPPLNA@GZKbJJHXB\\MNPjLdGbWnK\\]NGHSFEXATIdCJGPARUWUHCPWRELITAHKv_E@iYCaW_BQ\\Y@QIO@QDCIGZCEMWGFMFAFgHEDOCSqKCCFGAMKEAC@ODGCGs@WH@KQA@EE@CE@GEA@EH@GGUEEJEAYD@JM@@DAA@FHD@FTJEHUC@JUBKCKG@G[CIIQReAYhO@OXGDO@@FF@IHJFCPEBACBIAAKDOABXARHPNEHGbQAAKQFGIAM[C@WHKaGiCEGOA‹HUKCIokSCUSOCYN[BgGMFIR±ŠOZmHWNU@ShbbXDHVXXGJ^lZ@PZ\\Nb@\\FHJAD'],
'encodeOffsets': [[
118750,
41232
]]
}
},
{
'type': 'Feature',
'id': '110115',
'properties': {
'name': '大兴区',
'cp': [
116.4716,
39.6352
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@F\\E~DFN@BDFEpHFCHBBEGCDCJBHUDSBB@ELCPbF@B\\J@BJVAFJ\\ADKTCBGECFMT@BMN@@FH@DaNBEnvB@FPBATK@FHEFIAKFBFL@@PKBFJHC@FXBRAFCDMPDTOL@JIVFDHH@DDH@BGRFCDLD@N^@@CNA@KNOAEBCECFEGCFGMGFIPMOEJOLBADBBHGG@GCHIECY@INC@DMGS\\AIOZAAEYA@GT@KKMBEETCGMVINFxA@MJADB@FlA@HJA@NND@DFA@DVAZBBOFKH_JA@K^GBC@EFE„G@gAENMXKJigC@IbSJMqGOP£RGSMGE@kbQFDPEFiBSGGSBK]I{CDWCIDOic[C_G@SuSO@EWKCO@MNY@\\uZOPENQD[LKESSKGBKEG@EJGAGHoH¥CqhifeJkX_XFFGHFNEDFPENKHM^IFIVL^S`DVEnNnG`RTCJHH@R^XFXGVPP'],
'encodeOffsets': [[
119042,
40704
]]
}
},
{
'type': 'Feature',
'id': '110113',
'properties': {
'name': '顺义区',
'cp': [
116.7242,
40.1619
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': [
'@@EhEBENXHFNYDJHCD@RJP@R[ZARX`DbjZF@bHXT`Jb@dIFMTGDSfAJVbGnJVM@OKELYPERVXRflXTT@NIfC\\NJRhCVEHFJXNT^DTeZEHYCOhuAMJELOdAVPTMOWBWNMNEJgl]@WGUFIC[T{EEDEHGCIGMI@SECUQI[D{A{GQESPUH]CsiMCmHUeoHENcAaDGCMDGMQCACCBaCGLMAHB@DIEQLOAAEEJ@CW@CDINGAAGKQOCgV@LG@BEGDKNeREFBNCFIDOPKD[@YRW@GFWDAFE@EHDDrLDTCPGF',
'@@KrJEH[\\B@FF@CHFBHUN‹AJKADGECBCMAG^E@EbI@BEGP'
],
'encodeOffsets': [
[
119283,
41084
],
[
119377,
41046
]
]
}
},
{
'type': 'Feature',
'id': '110117',
'properties': {
'name': '平谷区',
'cp': [
117.1706,
40.2052
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ZJZRafFLjn€VGNJ@LLBdXX\\T^EDMJ@”nZKLBjPPJ@HbA\\H`DbERHLCFK^BZaFWXQLAGMHa\\OLO@SBIpBdCLƒVQfElO@GSAKEDQTC@GEBKG@ORIJBDAPDFA@CaOq@GGQAAEJK@KMUGAAGEAa@MGMBGCGSIIW@WSUCMDOJeWOM@IUF{WMWaDIMgIoRoCOKeEOEAG_I[cg@wLIFENQFDVTFJ@HNDJGHCFFFS|D\\EJHV@Xk^IhMFMNAXPX'],
'encodeOffsets': [[
119748,
41190
]]
}
},
{
'type': 'Feature',
'id': '110112',
'properties': {
'name': '通州区',
'cp': [
116.7297,
39.8131
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@FDAJTGDNDCTDDEDBBE@DT@@EHCDGJ@EIZ@@FDBR@ATFBBVFFE@@HNA\\VE@CLIFNJFNJBCP]A@LJFA@HJEDD\\C@DBCHLAEPF@@DH@APHAERDF\\GIxDTM@CFLBBFJ@CNUPMHECGDBF]BMFPDLRBHHBJMDCX@@DFIBFPBRKJF@CGANBHKbDDABDRDHNNCHDbCdBFMpGHiOYMefKJMC}HWAUNW\\NNBNA„kNU|]HMTMN@MZBLFFF@RIRUT‘BMFIEGaAGGAOIIUGTSFcYKS@MSLYPKRUBU]EWDOI]CKGASgW@MTWKIMCS@uMAKKADMECGAKVUTSDy@IjWLMNBF@hƒHEF@FAD]H@LIBG`ELAPYAUB@CEB@CMC@MIB@GkB@ECAIB@NwBMEUJHNSDFFNALLS@@HZBBFYBJP[BHTCND@JMZ@FDGJHDH@GHAABCKAIPPFONEJNHEHHDEFFDADBFMP@L'],
'encodeOffsets': [[
119329,
40782
]]
}
},
{
'type': 'Feature',
'id': '110105',
'properties': {
'name': '朝阳区',
'cp': [
116.4977,
39.949
],
'childNum': 2
},
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@bFGHBHFBFIVFHHG@@FFB@HDFF@@FRB@LXGt@DHCH@PBDLFBNF@BEXCHEX@ZQ\\@LCPOJCDEAMFEfQLMHCAFH@@KhUNE^AAEHCFDNGVODMI@AEKADEN@CSJw[HCEFQGBBOG@@CE@FOKBDGCAD@C[FCGIB@IE@K^BDOIAEMMIJEDKF@[UMB@GF@EEAUEABSQ@CA@EY@FJI@CHGD@FS@@CAFCACFSCCDCMSHBIECMB@D]@@MKCDCQEAHG@CCG@CGUEIJK@SPOCCNEDQBDNDB@DJCDLFCBBALJB@BVGPBKVO@KHCCCD@FE@BNA@FNCTDDJA@FGB@NBDW@CL@hT@@ZHHQDDDAFSAANBC@HG@EFS@@DE@@PCB@Ue@CADNJB@FCBWA@LI^ix@FIHrH'],
['@@HUN‹AJKADGECBCMAG^E@EbI@BEGPKrJEH[\\B@FF@CHFB']
],
'encodeOffsets': [
[[
119169,
40992
]],
[[
119398,
41063
]]
]
}
},
{
'type': 'Feature',
'id': '110108',
'properties': {
'name': '海淀区',
'cp': [
116.2202,
40.0239
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@plDJVLŒGPBFHjDbHGL@X\\DBNHJREBLRBHaFGŽMGOBQAWPBLCBBAJBDFADOIEJGE@@EP@HCPWP@ZgfBRQJJ\\D@HLHLDVA@IVDFGSI@EGC@EBB@CN@@IZCAGHGaEqGJG@EjwJ]@K@GSA@e_I@NE@CA@Kg@KC@ENCFƒAKQAW@WIMK@V‹@I@@F@^EDFB@HcIaDYCBRRDCHD@EFLN@FE@CJUPEJOJMTBPEDIFCMIAKNOGMRFJNDVBFLSRMJSDGJsFcEiJGDGTIlOjYD'],
'encodeOffsets': [[
118834,
41050
]]
}
},
{
'type': 'Feature',
'id': '110106',
'properties': {
'name': '丰台区',
'cp': [
116.2683,
39.8309
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@hMN@NFTQCFRCBJFA@HJ@@HJ@HJ\\FTACDŒ@@UNLXJX@@MA@@IECAQlDFEHBDI~D@GXCFMVDFCH@@NF@ANJC@FnAB@AMF@@EDCDDLGP@LUOAUH@AIABKAAEDCKID@CCACMWA@EGDEILA@OK@AELEJBFEEGL@BSOA@EuAFmMACbG@@EM@ANS@ENFDAHSDCL[BEIUBAII@A[E@OaKD@FAACTGVIACDHDAFGAEDoGEFACM@i€g@@QFCMKMU@]SCoBGSMQ‰DEXXDWPO@MKYGM^AdJJA\\cNB\\G^„DNHFCBFABDBJ@PL^D@DF@T@FDAF^A'],
'encodeOffsets': [[
118958,
40846
]]
}
},
{
'type': 'Feature',
'id': '110107',
'properties': {
'name': '石景山区',
'cp': [
116.1887,
39.9346
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@NQPHLMJBDNJEFCAONSPIFIVODIF@@EKMFEC@DGQCAQZDbCdJ@GEAFC@]@EJ@DCSB[EGII@@GI@@GEBAIQDDESRMEM@gNYTIRKJAJEJ[DFJKLGBGNBJLDCDAHGBJJAFBLEXTLZFBAFDLD'],
'encodeOffsets': [[
118940,
40953
]]
}
},
{
'type': 'Feature',
'id': '110102',
'properties': {
'name': '西城区',
'cp': [
116.3631,
39.9353
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@XBDA@EIACM@IJAD]BC@SFABISAD]H@@OAEDQEW@BLE„MD@FLDh@@LDBF@@M`J@fTB@H'],
'encodeOffsets': [[
119175,
40932
]]
}
},
{
'type': 'Feature',
'id': '110101',
'properties': {
'name': '东城区',
'cp': [
116.418,
39.9367
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@DBf@@VDA@OF@@CT@FEH@@GADBMTBBECCRCGG@YS@@gDK@A‘C@PG@C^TBAJEB@TADC^IB@J'],
'encodeOffsets': [[
119182,
40921
]]
}
},
{
'type': 'Feature',
'id': '110104',
'properties': {
'name': '宣武区',
'cp': [
116.3603,
39.8852
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@RBX@RFFCŽBFU@aK@WA}CCJGAEFkCBRFD@JB@@N'],
'encodeOffsets': [[
119118,
40855
]]
}
},
{
'type': 'Feature',
'id': '110103',
'properties': {
'name': '崇文区',
'cp': [
116.4166,
39.8811
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@XBL@@bEV’D@BX@AC@MHA@EIBCCDSEMmB@EIDBME@@MG@EDUCENWD@H'],
'encodeOffsets': [[
119175,
40829
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/china_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': 'xin_jiang',
'properties': {
'name': '新疆',
'cp': [
84.9023,
41.748
],
'childNum': 18
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@›ρȁôƧƦóəʵסʵóƪԫʵѵͩƧͩړ›υࡓɛʵ@ȃ@óᇑѵƨɝɚôóНѺͩɜ̏ԭʵôƧɞñ@υƩ—݇ȂóƩƧ@ѵȂυœƥŌਗ—॥ɛóʵѵƧѹ˜݇̍ࢯ˜əɞυ˜ρͩ̏óਙƨƧŋôōóš̍ͩóʵן›óŋړͪƧѶ@ɜԭ—ԫƦɛȄ̍›ɝȄöςƩȂ̏œñȀ̏œƩóóŎə˜@Ő̎@ɞȀɝŎôƨóנѵȄƧ@óŏɝœóɜôŎ̍ͨςŎ@ƨóôƨɞ݈ʶóƨφó̎Ȁƨ̍ԮòѸԮמ@ѺȀ@ƪၬֆòȂñ̐òȂɜ˜óƨ̒Ŏ̑߼@φρȀ@Ő๐ς̎Ƨφ@ɝφڔ೦Ԯǿࢰ@ƦŏԮƨƨȄƧ۬ɜʶڔŐɚɚóŐôƨ߼˜ôƧƧó̐ƥóŏѺǿƦȁφƧς˜ƨƧ̒@ɜƥƦυ̐ɛƪͩƩəƪʷ̑ə@ȃƨʵנŋྸōਚԭԪ—@ɝƨŋ̒օςʵôƧ'],
'encodeOffsets': [[
98730,
43786
]]
}
},
{
'type': 'Feature',
'id': 'xi_zang',
'properties': {
'name': '西藏',
'cp': [
88.7695,
31.6846
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ôŌנœôʶ̎ͪô™óŎƨŌਚƧ̐ôςͪφ—ɚɝࢰ—݈̎Ѻ—Ѷƨôʶ०ɜਘ˜Ʀŋφ›Ѷȁ̍—ôŏɚŋ@̑ə—@ŏò̍ɜ›óƥôʷƧ̍φѹԪ̍ע@Ѹʷɜ@ôñנ@Ѷɛɞô̐ŏѶƨѸƧƥōƦœôŏô—@ƧôƩ̒ŋƨŌƦǿô̎ɜȁ̒—óʶѶôôО̒›ςƥɜНφσɛȁ̎υƨఱƧŏ@ʵƥœ@ŌóóóͩƨƧóŋ̑õóɞóɝԩͪɝρôƧ̍ƧѹͨڑŎ̑ōóƧࢭͩ̏ѵɝóఱóóԪυô@̒ƥŌ̏Ƨ̑Ȅ݇ŎƧ›ѵӏ@ɛõŏɛȄôӒƧŌѵǿɝ˜Ƨŋԫ@̏ʴƥ@óǿ̑Ȁóǿ̍ςóóυô@ʶɛñρƦƩŐó̎óœѵó̑ͪࢯОóɜן˜Ƨ̏ƥȄ߻̎̏̐ןŎɝɜöɞƩȀôöɛȀóͪ̐ƨƪ̍̎ȂƥԪυО@φɞ˜ôƪ'],
'encodeOffsets': [[
80911,
35146
]]
}
},
{
'type': 'Feature',
'id': 'nei_meng_gu',
'properties': {
'name': '内蒙古',
'cp': [
117.5977,
44.3408
],
'childNum': 12
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ኊȁ૊ö߼ƩɜɛנñԮɛѶóԮô@ȁѸóמ̎ගѺၬ@߼ʶԮӒ߼̎@ŐѹӒ̒Ԫƨöග̑ѶȄ̒ς।œѶɚöɞɜʴڔôôȂ̎—ѺȀς—ƨ˜ƪóԪ—ɜôɛОਕڔԭ˜ѵ̍ѹȂԫ›ɛƥ̍Ȃóɜ̎ô@ʶ݊ੲࢮʵږͪנƨôȂƧ˜̐ͪ@ŐƦƨφԬѶɜôƦ@ŐƧôôƦəŐ̏›@ŐڒѶԬô̐ʳԩНςōôŏɞ@ƨȂѶəóƧ̒ػ̎ó̐Őנóƨô̒@ƨɚɚ@עԫɛɛ@ȁυͩƥʳòևρ—̑ࡗƧͪ༃ॣԮփ̎Ʀ@ôô@ôō@š@ȁѵóƨ̍υȃóʵɛƨƥóυȂóəƪ›̐ρƧͩɜԭڔȄ̎عƧȁ̐ŏó̍ɛ›ƥƧ̑óρŐ@Ƨ̏˜ɝəɛ˜߻ͩ̍ͩɝО̍ƪƧóóӓƨóƧʳ݇@ɝςƪœ@ʴƩ—ƧƦôƨɛȄə›Ƨŋυ›óͩѵ@ɝǿóŌן̍ɛ˜óО̍œ̑̏ôȁ̍ŏòȁñóƦͩ@ǿə@ɛƧ̑˜ρȁυô̍օѹœóȃə™@ȂσʵѷƪòƩ̍—ôó߻ۯôʳƧ™óšõʵѵóѹɜ̍ȂѹôɛŌφֈƩͨρóυӑóޟఱ̑݇ͪóƪƨŌóȄڔԬƩςםñ̑ȃѵŐԭŏƨȁɛǿρôõɚɛóƧОə@ѹ̐ѵöԪͨôͪɛ̒ןŏƧƥóôƥƧɛŌôóɝó@̒݇Ӓ̒Ō@Ŏԭࢰ'],
'encodeOffsets': [[
99540,
43830
]]
}
},
{
'type': 'Feature',
'id': 'qing_hai',
'properties': {
'name': '青海',
'cp': [
96.2402,
35.4199
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ƨ@ôƪ݈ȁƪ˜@φɝòóƨԮʶɛ̐ѹͪôОəóƧɞᇒѶ@ôږô@ǿѶ›ƪȁςœɜͩφ˜ςŋɞôѶɛƨŌɞ—@ɚςŐñԪॢͩƨȂɞóƨŐ̎ŏעӏ̎óƧƦôœ̒ȁɜ›ςͩ̒œɚɛƨôƨɝφɛóȁƨŋóóɚͩƨóóƩ@ƧəŋƦƩ̍@ƧƧôǿυ̑@ȁɞǿõŏρƥסɚƧóτԫɞœôƧƦ@ñȃòñƥóυôôѹѵ—@ŏ̏Ȅɝó@ȂəŌóəѹƦ@Ő̍Ōυ݈ԩŐƧóôƧ̑›ôʵɞƧ̑ѵôƩɞƧ̑œóНѵóôʵ̑˜ɛȂó̍ƥȀƧŋ̑Ōóƪ@ƨó˜óŐƥ›ƦŎѷƨѵƧ̏Őɝóѵɜן@óòɛ@ѷʸס@ԩ̎υѺƨ̎óʸôƦɛœñ̎@Őɚ˜@̒əŌóŐ̎˜'],
'encodeOffsets': [[
91890,
36945
]]
}
},
{
'type': 'Feature',
'id': 'si_chuan',
'properties': {
'name': '四川',
'cp': [
102.9199,
30.1904
],
'childNum': 21
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ô˜ôŋó̑Ԯ̒ɛОמͪƨōöͫ߼ƥôȃƨóóñôƧóƧôōڔŏƨŐ@Ŏô˜òƥѺŎ@ōɜóנ˜ôǿô›ƦôԮ̍ɜôɚ›Ƨ—ñɛɚȁ̍Ƨɛևυ@óóôŋρԭɝ@Ƨʸ̍ŏυɜƧƧóƧƨȁρ̍ƨȃɚ—ôʵφóô̑̏Ȃ̑ʵɜʵɞ@ƨʳסƩóŎə—óɜƧôƩƧρ˜óôôô@ŎƧƨƨƪѹ˜ó̍̍Ʃ@̏ѹНôޟ̍Ʃóƪυɝɛ—əƨôŎɛȀ@Ȃ@ñɝʶ@Ōρנ̏—õóɛͨƨȂѵОɛʵ@̏ƩŐó߼Ƨల̍φɜȂυτɛОρƦɝƨóƪ̒Ѷɝƨóʶ̒œóƨƨôԪŏφ݇̎ŋ@ŏѺƥôɚɚŋ@ȁɞô̐ȃ@ŐѶ˜óѺφóƦôñòòȄ'],
'encodeOffsets': [[
104220,
34336
]]
}
},
{
'type': 'Feature',
'id': 'hei_long_jiang',
'properties': {
'name': '黑龙江',
'cp': [
128.1445,
48.5156
],
'childNum': 13
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ᇔȂਚНƨŐѶŏöƥςŏñƧƦóƨȁ@óƨ—óȁφӑóóƨ˜óǿ̎̑ôНɞ—ó̑ɜə߼›̎ǿ̒ôڒӑφ@Ƨȁ̎̏ƥƩ̎ρశ˜ôȂςƨφ@נɞ݈˜̑ƥƧɛƨʵƧȃƥ@Ƨƥ@ŏ̑ԩôɝρρóɛƧ›ƩͩƧó߻ʸ̍ʷѹƥɞڕõ̍öɝυ—̍ȂƧ̐̑ŏóƨñŋѹóóȁ̍›̏Ԭõʸ̏ŏ@ǿ̍@ƧОυ@ñƨòȀƥŎ̑ŐѵóɛŌóȂԫōƧŎѹñ̍ʶóОן@Ƨ̎Ѷô@Ȃ@™óŎó@@ó̍ƥԭք༄।ƨͩ̒ࡘς˜ñֈƦʴφͪ@ȂɜɜסԬə@Ƨə̑@Ƨóןô̏ŏ̍ô̑ؼôƨѵɚƧȁɝ@óŐρŎԪО̏ʴ'],
'encodeOffsets': [[
124380,
54630
]]
}
},
{
'type': 'Feature',
'id': 'gan_su',
'properties': {
'name': '甘肃',
'cp': [
95.7129,
40.166
],
'childNum': 14
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ڔôԮࢯ@ō̑ŋ݈ӑ@̑ɞôóôɜŋƦƨôóƨƦנŐɜ̑óͩԩͧѶõѺ̏ɚ@ƨНɜôöəςóɜȀƧȂԮŐѶŏ̒ȄמòƪρړԫôȃƧŋôƩ݈ͩɚ@@ǿɜ@φͩóŏɜӑƧōôǿ̎›ôƥƪóõ›ö@ô—ƨ˜ôƧƦôó̒ɜ@ɞŌõʶ̏Ő@ȀóôƨȂ@ʶע@@ƥ୾ӑó̑óŋôʵóɛړ@@ƩöóƩóρ—ɛƨ̑@óʷƥƥ̎ɛƧ›ôōƧǿôͩѵôɝȃɞȁõƧρóó—@ōƧŏړŐóŎôƨóƨôòƧôóȄ߻ƦõͬƧŎםͩɜНԭ̑ô̒óŌó—ƥ@óƨɝ›σԬƨôעəςƦöŐɝȀ@Ȃφ̒óȀƨƨ̎@ƥƪɚŌ@ƨôƪƧôəͪôôƧŌôȂυɜƧɞƧóəɜ̑›ρͪɛœ̑Ȃó›ƨƥ̍ôסӐ̍ŐƧŏɝôƧȁॡͪòԩρŏ@əɝ˜ƧŋѵɜɝóρŌυ—ɛͪρ›ƩȂѵœ@Ȁڕó@ȄɜʶφࡔڔœƨͪѶͪԬʶôƩעʶɚʶƥôóƨςȂ'],
'encodeOffsets': [[
98730,
43740
]]
}
},
{
'type': 'Feature',
'id': 'yun_nan',
'properties': {
'name': '云南',
'cp': [
101.8652,
25.1807
],
'childNum': 16
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ôɞôɝ̒öôŌƧƨôͪôô@ŋƦ›@ʶƨŐô߻ƪŏ@̐ɜʶѶНƧȁɜͧöô̐˜ςן@ŋɞʵ@ò@ȁɜǿóōɚƧɜ˜φɞôƩ̎ƪóޠѺО@̐̎ƪô̎Ѻ—ƧƩƨƧ@ōóóôóς—ƪƨƨóôɛó̑ԭ—ƥŌɛǿɝƨɛͩô›@ǿƨȁѺŌɚɛ̍ןѶНɛƧôóƥȁƦͩôŎɞ—ƨ̑ɜ—òôφ@ƨʵ@ɛѹōóȃəƨυǿóʵρƧƧŌƩɛ̏ȄñƧƧȀɝ̍ԩʶƧ̑υ—óŌƥʳɚӑóНƥô̑›óӒѵʵѹœƧӐןôƪφõŌƪ̒ԫŌƧؼƨƨס›ρȁƧœƨȂóʶó@@ʴƨôôφ̎Ŏ@Ȁƨ—ƪɚƨœóƨôôôςóޤƧŌƩŋƧԪ'],
'encodeOffsets': [[
100530,
28800
]]
}
},
{
'type': 'Feature',
'id': 'guang_xi',
'properties': {
'name': '广西',
'cp': [
108.2813,
23.6426
],
'childNum': 14
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ƦŋѺ̎ڔʵƨŐ@ƦמȄƪôóȂɜŌɚͩɜ@öóɜôôȂƦôɜȁ@ɞφ›óȄ̎›ƨʶɞŋƨʴɚǿ̐̎Ԭ@ôñ@̏ƨ›ρ۫ô›ɚƨƨНƪŐ̎›ƥóƦʵƥŋ@ȃóƥƧ@@ŏɝǿôυƧȁѵɛ@əóŏ̑@@ə̍›óƧó—@ȁƩ˜ρóòНƥô@Ӓ̑@óŎ̍ƥσŎυ@̍ƨ@Ō̑ôóͪƨ̒óŌړœ̏Ŏ@ŌôȄѺŎ@ɜƧʶυ@ñóɛ˜Ƨ̒ɝ˜óōƥͪ'],
'encodeOffsets': [[
107011,
25335
]]
}
},
{
'type': 'Feature',
'id': 'hu_nan',
'properties': {
'name': '湖南',
'cp': [
111.5332,
27.3779
],
'childNum': 14
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@քɜОƨ@öŐמóƪôƩɚ̒Ő߼ȁςͩɜòƪ—ɜȀò—ñɝò—Ѻͪ@ŏƨŋóɝôǿƨ™ɚȃóəƨȃѵͩó̍@ȃƨóóƥƨƧ@ʵƦ›óͩɜ—ɛóñԭɛōυȂ̍ƧƦō@ɛƥ—ɛȀ̑œóʷóō̍œƩŏƧОəƧóœς۬Ƨœ@̐óòԫ@̏̍əȀƧʳɝŌóɞƧ˜ƨɜóŐƨò@ȄƧŌρŋóôԪОóʶ@̎óȄ'],
'encodeOffsets': [[
111870,
29161
]]
}
},
{
'type': 'Feature',
'id': 'shan_xi_1',
'properties': {
'name': '陕西',
'cp': [
109.5996,
35.6396
],
'childNum': 10
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ςôöƨɝȂɞȄѶóóͪƨȀóŎƨœ̍ɜƦƦôʸ̒@ɜƧς˜ƪôõô@ƪڔ@ôɜóʶôŌô̒୽Ӓ@Ʀ@Ѻ̎ɜѺɛѶôöʶô™ƨšóʴ߼۰óô̎˜ñƪѸƩτʶ@ȁòŋəѹóǿ̑ʵ@ȁ̒ʷυփô݉ôН̏ط@ȁƨóô̏ƪõ@ʳ̐ʵ@ɝɛŋƩŌɛóןôƧŋ̒ó@ŏ̐ƥ@ŏυ@ƧƧôן̏@ƥȂѹɜəœɛóԭ̎ƥóóœóȀן—ɛô@ŎѹōñƦ'],
'encodeOffsets': [[
108001,
33705
]]
}
},
{
'type': 'Feature',
'id': 'guang_dong',
'properties': {
'name': '广东',
'cp': [
113.4668,
22.8076
],
'childNum': 21
},
'geometry': {
'type': 'Polygon',
'coordinates': [
'@@@Ȃô˜ôƨ̎œ@ɚ̒@ôŐ@ɚѶɜƨȂóφɞȀ@Őƨ@ôƦ@ȄƦŌƥʶƦôôŎôʸ̒›ɜǿƦ˜@ɜƥŎ̎ƨφȁɜŎòƥԮŎƨōóŏɛƧɝəɞƧ߼ɜςȃñȄƦŎ̒ōôòƨəƨ˜ɚН@əƨ̏ƪʵυŌəɛóəԭŏəœóŏѹœρʵɝƦ̏™ƥʳѶ›öō̑óóŋρȀυƧƥɛѹōƧôן—ɛŏѵ@óŋôʵɝ›ƪԩõ@Ƨō̍@Ƨ@@ƦɝԮƪО@@',
'@@X¯aWĀ„@l'
],
'encodeOffsets': [
[
112411,
21916
],
[
116325,
22697
]
]
}
},
{
'type': 'Feature',
'id': 'ji_lin',
'properties': {
'name': '吉林',
'cp': [
126.4746,
43.5938
],
'childNum': 9
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@נ@ôН̎ʵѺòƨōԬŎôȁɜŋѶô̒ŏƦōñǿòƧφ@ƨН̎@@Ȁ̐Őöʷ̐ԫ̎œôȂѺôòŌôƧ̒Őƨ̏̎ȁφ˜@ŋƩͩםȃƨ—@ȁ̑ʶ@Ōóôɛœƥѹ̑—συ݇@ɜρƧȃࢯƨôœəȂɛōƩɛ̏υρóõœƪʴυφ@ʶôŌóœρք@ɜƧ@ɝǿƧͪρȀƩó̏ŐƨȂ̍غړȃɛԮƨͪ̏ςƩœôɚφȁƦôɜƧôʶφȄ'],
'encodeOffsets': [[
126181,
47341
]]
}
},
{
'type': 'Feature',
'id': 'he_bei',
'properties': {
'name': '河北',
'cp': [
115.4004,
37.9688
],
'childNum': 11
},
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@Ʃ̒̏ŌѺ̒Ʃ˜óȄƧŌƥͪòôñȂ̎ŐóȂ̒̐̎›ôНɜ—נ̎ôŋɞȀѶ@ôͪφœƨŌɚœɜȃóƧƨƥƪ˜@ʳƩ›ɞρ݈@υНφʵɜ˜ƦρƨƧ̍ɝóɛѹ̍ρŏ̑ôóƨ@œƧƦôƨɛ@ƥƨ@ȂƦ@@ôəŐƧʶƨŌυœ̍̎ɛŋôōɝ@óƧ̍›ƦʵѵʳôʵɜŏςôƪŋƨŌɚ@ôНƥƧ@ōѸɛ̐ô̎ʵѵНԭ@̍̍Ƨò@ȁɝ@əρυͩƪ̏ƩõƧŎƧōóšॡȄɛʶɜȀ@ɞςѶƧœƥςɛŐ@ɚɜɜ@Ŏôôςœƪς'],
['@@õə@Ƨɛ˜@ŐóƦφô']
],
'encodeOffsets': [
[[
117271,
40455
]],
[[
120061,
41040
]]
]
}
},
{
'type': 'Feature',
'id': 'hu_bei',
'properties': {
'name': '湖北',
'cp': [
112.2363,
31.1572
],
'childNum': 17
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ñȄυƦöŐƩ˜óנƨƨφ@@Ő̏Ʀ@Ő̑ôƨŌנóɜôƪŋɜŌѶօڔə݈òɞōɜŎôӏƦóƨô̒óôȃƨó̎ŐôƧƪ@ƨȁςƧə̑̎Н@̍Ƨŏρôԭͩԫ—̍ʵƧšóȀôɞƧŌ@Őѹͩñ˜òɞñ˜ɛǿƩ˜ɛñρͪ߻Ȃ̑ŏƪəƩóםôõŏƧ@ɛНƥȄó›̑ѺƧ›ôφóƨƨƦƪóɜŐôóòôƨóφ̐ƨóƦ̎'],
'encodeOffsets': [[
112860,
31905
]]
}
},
{
'type': 'Feature',
'id': 'gui_zhou',
'properties': {
'name': '贵州',
'cp': [
106.6113,
26.9385
],
'childNum': 9
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ɜȀƦŋԮ˜ô̒ɚ˜ôōעƪƧʴɝ@ɛʶ̒ʶ̐ȁƦœóȂô@ôŏ@ōô—ƨʶѸô@ʶƨ˜ɞó@ōτöòυƨ@@əƨô@ɛ̒@Ʀɜôȃ@̍ôʵԩНôóςŌƨŋ@ȃƧñôŏƧɛƨ—ôɝƧʵ̍œôȃυœ@ɝɛȂƥóóȁɛóõôɛ@əͪɛŋôȁƩóםȃ@ƥƧŏړʶѹ̍ƥŌƦȂóôɜƨѵО̎נəɜѹŋƧȂ@ȀóœɜͪɞƧ'],
'encodeOffsets': [[
106651,
27901
]]
}
},
{
'type': 'Feature',
'id': 'shan_dong',
'properties': {
'name': '山东',
'cp': [
118.7402,
36.4307
],
'childNum': 17
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Ʃ̐φͪɚςɞ@@Ȃƨñ̎̎Ԯ@ѶОƨƧڔ@φН̑ŋ@Ʃ̒ǿ̎@ƨɜԬςôʶ̐ʶöԫƨƧנƥɜŎôō̎@ôŏóρƧŏԫôóƧԩó@ƥɜƧԭóƨʵɛƨ߻ӑɜНԩ˜óô̑óƧʳə™óɛƧ@õȀƧœ̍ȃɛŐóŏυО̍—óɝƩ—ԩ@ƧɚԫȄɚʶƨ˜ɞʶԪ̐ړɛƪ̒'],
'encodeOffsets': [[
118261,
37036
]]
}
},
{
'type': 'Feature',
'id': 'jiang_xi',
'properties': {
'name': '江西',
'cp': [
116.0156,
27.29
],
'childNum': 11
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ƧȄôɚəȄ̎ʶԬ˜ԮͪςóƨŐƪ›τɞƦōƥƧ@ŏςôóŐôô̒ʷѶ—ƪƩƩǿ@ō̒ɛôυ@—Ƨȁѹɛəƨѹ̑ƨ̏óƥѵʷô̍ɛȁôŏɝǿƧԫƧ›ôʳƥōòȃρȄ߻ɛɝƨɞɚɜƨôŐƧŎԭōñƦòԮɜôɛ˜ôͪƥœ@ʶƧƨôƦƧô@Ȅô̎Ѷͪ'],
'encodeOffsets': [[
117000,
29025
]]
}
},
{
'type': 'Feature',
'id': 'he_nan',
'properties': {
'name': '河南',
'cp': [
113.4668,
33.8818
],
'childNum': 17
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@φ˜̎ƪ̐˜ɞȄɚ@@Ȃעó̎ŌѺ̒ôֆॢȃô™ƨŎƨōƪöƩ̑ڔɜԩ̏ɝʵƧ—əʵԬȃƨəԪ@@Ƨ̒ŏô̍υȁƧɚ̍ôóŋ@ɝƧŋõ̑σ—@ŏɜŋôɝ̒ƧɚôôطρóóɛƩ@óƨ̍ŏƧôóȄ̑ôƧóƥôóӐɛōɝŎ݇ñړɚѵֆ@ɞ̏ʶ@ʴƩöó̐'],
'encodeOffsets': [[
113040,
35416
]]
}
},
{
'type': 'Feature',
'id': 'liao_ning',
'properties': {
'name': '辽宁',
'cp': [
122.3438,
41.0889
],
'childNum': 14
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ƨʴƧôôӔƨô̎ƩɞН̎ͪ߼ͪɜ—ɞɚ̐—@ƨςŏ̒ôƦƨɜœô̎ƪôςǿƨͩɞȀƨ@@ɛςփô›óŋ@ʵφυƩʳö›॥փρѹס@əɛ@ͩࢯ@ѹʵρ—ƩʶφȀƧ݈̒۬óʸɝŎѵ@ԭԫןɛƧƨƥςɛ—υʶφО'],
'encodeOffsets': [[
122131,
42301
]]
}
},
{
'type': 'Feature',
'id': 'shan_xi_2',
'properties': {
'name': '山西',
'cp': [
112.4121,
37.6611
],
'childNum': 11
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ɚѺñŌɚšôȄѺ›̎ֆφóςȂ̒—ɜƨɚ@@Ȁƨŋôȃƪ—ѹ̑̐ŋƪ̑Ʃρρ›óó@ōɛɛ@əɜŏƦρƨ›ρѵ@ɝɛǿɜʵóօѹ̑̍ŋסô@ȁə@ɝȃ̏—̍Ʃυ—Ƨô@Ȃ̐ظóОó݊φք̑ʸ@Ȃ̒ʶôȀ'],
'encodeOffsets': [[
113581,
39645
]]
}
},
{
'type': 'Feature',
'id': 'an_hui',
'properties': {
'name': '安徽',
'cp': [
117.2461,
32.0361
],
'childNum': 17
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ó̎̑Ő@ƨƪ˜Ѷǿɜ̑φ—Ʀʵ̐˜Ƨѵôóƪôôυς—ƨȂɞŏ@̍ԫôò̑ƥ—óȃѶͩƧƥôŏѺœôŏƦ—@›ƥͩƧ—ôȁυó@̑ƧɛѵʵƩƪѵ˜̑ʸóóôŏρó@ŐƦƨƥŎσɝƩœ@̎̍Оɚ̒ρƨƧȂôɜςôóظəó̑ƨóɞɛŌ@Őτ˜ö̒ƨŌ@ɞôŌ̎óƨəφȂ'],
'encodeOffsets': [[
119431,
34741
]]
}
},
{
'type': 'Feature',
'id': 'fu_jian',
'properties': {
'name': '福建',
'cp': [
118.3008,
25.9277
],
'childNum': 9
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@̎›óȁƨӑ̒—̎ɚƨͩφŐƨɝ̎ŋóŏρ—@ōƨ›òʳəóƨō̏˜õɛƧ@ƨѵƧōəŏóŋƧô̑ɝɛʳƥ@@óɛõ@Ƨ̑ƧóȁəƧ̑—Ƨ̐@ɚəОƧ—Ƨɚóñ̑ŎóʴƨœƨԬɞȀóŐɜȂó̎ѶʸôƦƧ̐Ѻ̒ɚƧѺɜƨȂ'],
'encodeOffsets': [[
121321,
28981
]]
}
},
{
'type': 'Feature',
'id': 'zhe_jiang',
'properties': {
'name': '浙江',
'cp': [
120.498,
29.0918
],
'childNum': 11
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Ѷʶƨɜ@̒φôóȂƨ˜Ʀͪ@œ̐˜Ѹ̍τȂ̒̑נŐמôƪƧôӑ̑›@ƥρͩƨօ̏@@υɝó@ŋɛ@ôƩəóƧѵυó@ƩɜŋƧ@̍ŌƧɞυŏƧͪ̍ə̑˜ƧӒôȂ̍œ@˜óφ̑ɜ@ŎƪȀ'],
'encodeOffsets': [[
121051,
30105
]]
}
},
{
'type': 'Feature',
'id': 'jiang_su',
'properties': {
'name': '江苏',
'cp': [
120.0586,
32.915
],
'childNum': 13
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ôɞ̎˜φНôŐɜŏ̎Ȅƨ›öǿƨ@ôɜɚšƨʴ̒ôôó@Ƨ̎əԮȃԪૉöͩ̐ƧòʵφƧôʵ@óړɜóŏɜǿƧ›ɝρσȁѷ̎̏—ƥ˜óŐѹ›óŐƨƦѵͪôȄƦ˜ñ̒Ԭó@̎ɝŐƧȁρ˜óφƩóóôƨѶ̏—ƥʶυ˜ɛ̒ѵȀ'],
'encodeOffsets': [[
119161,
35460
]]
}
},
{
'type': 'Feature',
'id': 'chong_qing',
'properties': {
'name': '重庆',
'cp': [
107.7539,
30.1904
],
'childNum': 40
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@əȂòɜƨ˜ѺɛƦȁ̐@ƪ—õŏφƥòȃƥ̍Ƨôυ̏ƧôñóóôɛŏƩôƧƥôƧóυƨœ̒ѹôœƦȃ@փƥɛ̑@@ɜƧó@ɚƧ@ñφσõ@ŎɝôƧ—@ʵѷóƧʵó˜@ŎóŐó@ôȁƥ›ó̒υôóʶə˜ƧȄς̎ƧȂôƨƨƨφɛ̎Őƨʷɞ@ςԮóŌôôφ@ɜֈ̎ƨ'],
'encodeOffsets': [[
111150,
32446
]]
}
},
{
'type': 'Feature',
'id': 'ning_xia',
'properties': {
'name': '宁夏',
'cp': [
105.9961,
37.3096
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ల̒ôޠφӒςôƪͧυևɜŋѺó̎ȁ̍ɛ@ѹס@@ʵƧȁôó@ǿ̐ŏöʵɝŋɛ@ô̑ƥóóƨƧ—ó˜ôœó@ƩôóƦ̍œóȀƨŎɛӒôŐυͪɛ@@Ȁə@'],
'encodeOffsets': [[
106831,
38340
]]
}
},
{
'type': 'Feature',
'id': 'hai_nan',
'properties': {
'name': '海南',
'cp': [
109.9512,
19.2041
],
'childNum': 18
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@φɜƦʶ̐ôφô̎@ƨŎö@τʵƦ˜ԩ۫õН̏óƥȃƧ@Ʃəםƨ̑Ʀ@ޤ'],
'encodeOffsets': [[
111240,
19846
]]
}
},
{
'type': 'Feature',
'id': 'tai_wan',
'properties': {
'name': '台湾',
'cp': [
121.0254,
23.5986
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ô—ƩɝöƧɝѵəޣ̏ρƩԭóōóͪρɞƧОôԪ݈ଦѶɜ̒ɛ'],
'encodeOffsets': [[
124831,
25650
]]
}
},
{
'type': 'Feature',
'id': 'bei_jing',
'properties': {
'name': '北京',
'cp': [
116.4551,
40.2539
],
'childNum': 19
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@óóó›υóôƥ@ŏóóə@ƧŋƩŌρóɛŐóʶѶʴƥʶ̎œôƨɞ@óŎɜŌ̎̍φ›Ƨŋƨʵ'],
'encodeOffsets': [[
120241,
41176
]]
}
},
{
'type': 'Feature',
'id': 'tian_jin',
'properties': {
'name': '天津',
'cp': [
117.4219,
39.4189
],
'childNum': 18
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ôôɜ—@ƨöɚôœôôɚŏ@óƥ@@ȁƦƧɜ@óƧƨƥ@›ƧóəН̏óѷɜ@ŎƦƨóО'],
'encodeOffsets': [[
119610,
40545
]]
}
},
{
'type': 'Feature',
'id': 'shang_hai',
'properties': {
'name': '上海',
'cp': [
121.4648,
31.2891
],
'childNum': 19
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ɞςƨœɛȀôŐڔɛóυô̍ןŏ̑̒'],
'encodeOffsets': [[
123840,
31771
]]
}
},
{
'type': 'Feature',
'id': 'xiang_gang',
'properties': {
'name': '香港',
'cp': [
114.2578,
22.3242
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@óɛƩ@ρ@óœôȀɚŎƨ@ö@@ōƨ@'],
'encodeOffsets': [[
117361,
22950
]]
}
},
{
'type': 'Feature',
'id': 'ao_men',
'properties': {
'name': '澳门',
'cp': [
113.5547,
22.1484
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@X¯aWĀ„@l'],
'encodeOffsets': [[
116325,
22697
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/chong_qing_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '500242',
'properties': {
'name': '酉阳土家族苗族自治县',
'cp': [
108.8196,
28.8666
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@XJ°œlJX@lbl@XbV@VLnJlxnbšƒUU@IVK@lVIVwnJlU@n@J@L@Jn@l_nWVLVln@@blLšmV@@xœÔ‚`nœ™xV‚ÈLlx„LVxVVšƒV_U»VWn_m¥XwVmnX°ƒlmUUVwÞaVƒk@a@mmIUa@™mwk@™ƒm@@U¯a@UV@@K™@ykkmwkV@kU@ƒÑƒVkKWLÅamaUm@kyU@WkU@Ua™IUašVaUUmUUa@aVLXKWa¯UUbmJXnWnX`l@@xkzWÆ@V„LU¦‚x@b@JkIkJ@LmbUamJwm@óxƒnk@V„@x„ŽVnUVmVUVŽUbVlUbkXWŽ'],
'encodeOffsets': [[
110914,
29695
]]
}
},
{
'type': 'Feature',
'id': '500236',
'properties': {
'name': '奉节县',
'cp': [
109.3909,
30.9265
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@WVXb‚UnK@x@b‚²kxmKkl¯_ƒVV°™VU@bnKVVV@@nkŽ@n›bn‚@š°@VLČUš@°WV@V™nU@InKVl@nU„b˜KnX„WlknLlKUwnalLša„VlUXmWk@UU@UWWIUyķ¹XaWW@X™ƒKUIVm„U@W@UVU@KV@n»VkUkÇmUmVIUmULUbm@ƒwUaƒKkkm¯ÑUL@bWVnx@VmxUI@„klmkkK@aƒK@IlJ@I¯ƒk@mak@mnkJVL@bV@Ub„„W`UUUV™I@VƒU@VVbUJVLUVVbUX„VVxk¦VJUnVxnVVUšJV@Ubl@@bXV@L'],
'encodeOffsets': [[
111781,
31658
]]
}
},
{
'type': 'Feature',
'id': '500238',
'properties': {
'name': '巫溪县',
'cp': [
109.3359,
31.4813
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@nLWbX‚VLVU„V@KšIVl@b„@lbšU„VnU@JÆU@V@n°KĢUl@VbÞKšVš@„_„V‚KXU‚U@KXƒ@wlkkU@mWKUU@UôJ@XV@œaVmÞIVaVLƒƒ@»kmƒ@ƒUkL™U@aU@WWƒLUUU™™KkbƒwWa@KU@kaƒXmW—LƒamVk@UmL@JmVUšU@¯X™@ċVUK¯@ÅnWK™LkKULWK@UXK@wW@™LkV@bVLƒlXn›`¯xU„°LnŽlV@n°Lnl'],
'encodeOffsets': [[
111488,
32361
]]
}
},
{
'type': 'Feature',
'id': '500234',
'properties': {
'name': '开县',
'cp': [
108.4131,
31.2561
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@n@na‚I„wš@@VVK„LVbVxnVÆUnanKWXamKmk¯K@mkUm¯KVƒ°w@Wm@UIUUlKUU@a¯KWanwmUXamKkUWUnU@KƒkUwWKXaWLUWkImaUUUƒƒKka±k@lƒ¯w™wmbUƒ™ƒkXm@UJkIW‚XXƒbƒmƒ„UJ™XUV@°šKlšlVXV@xmbnV@blV@VšœU`UL@V™a@bULlb°VXbܚ@V@bƒL@J„xnLVb@lVb@V@@z˜bXWšX„KVLV‚š@@bUVVL@b„„lVna@ll@„zl@@J'],
'encodeOffsets': [[
111150,
32434
]]
}
},
{
'type': 'Feature',
'id': '500243',
'properties': {
'name': '彭水苗族土家族自治县',
'cp': [
108.2043,
29.3994
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„Jlb@nVV@bXb@ÆlL„Ul`nVKU¼VxkbW„nlUxlXX‚@°°WnnJ@VUn@J„k°L@VlV@nUJ„x@bVVVz@VnLla„KnalVlIUŽ„¼@nV@@anKUwVal@UlJœƒlI@akU@UWXKVI‚¯Uak@@KmkXWÜkXWykIWwXw@laXamkVUUym_XmlkkmmakwmIUKU@Wak@kaW@kI¯›WIk¦VŽƒUUƒmaUV@XkVUV±aUb¯b¯¥m@@ImJ—@mƒmL@kUKUkkJƒbV¦'],
'encodeOffsets': [[
110408,
29729
]]
}
},
{
'type': 'Feature',
'id': '500235',
'properties': {
'name': '云阳县',
'cp': [
108.8306,
31.0089
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lb„LV„VVnblJVXXKWbXLVx„l@LmVXVVl‚nLWbnVmxXb°L@bVVkLVVVJn@@X‚‚œ_Wm„kUK@alUšKX@@xWL@VXLVKlLšKXLÆm@™mœa@ml@mU@UUmL@aVšUU¯„U°`lknLlw±@a@wmLVWaXU@KWU@ak@VaU@™IUVmUUwVmUIl¥UwƒUVWUaVUUKVIUa@UUUUJƒUUm™kƒ„nl@„@VWV@L¯aUb™Ulxƒ@@b@VULUx@VUxVV™U@bU@mxU„U@mUVŽklkkƒ@WxknlxK@amLƒKU„K'],
'encodeOffsets': [[
111016,
31742
]]
}
},
{
'type': 'Feature',
'id': '500101',
'properties': {
'name': '万州区',
'cp': [
108.3911,
30.6958
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ĸĊVI„ƒ„n„aWWXlJVIn@lWš„V„našx°xk„l@²Ž‚LVƒ„LnK@b‚LkwlmXw„@lllkUnVV@VƒnwV@@ašVUUVw@UVwVK@U@a„@kwšVVa°b@KXU@U@ƒmk„ƒÇсaml™kUVmn@VULU˜m@kUVkUaƒwUWm@Uw¯„mKUUmVUUULUKU„W@XbWVkaWwkUU™ƒ™k@maUbmbVlk¦ƒxUVUIWVU„kJVVkL@UmJ™UUVU@lLUVU„lx„@@VbƒJ™U™L¯¤@Vƒ„'],
'encodeOffsets': [[
110464,
31551
]]
}
},
{
'type': 'Feature',
'id': '500229',
'properties': {
'name': '城口县',
'cp': [
108.7756,
31.9098
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VK@w¯L@m@UÅV@ImVƒU™Vkaƒ@@aUk™J@LƒUUVUKmLmbÅVmUUwUaƒKUL@U™@ƒxJmbm@nVJ@X@VkV‚n™lƒLXx™@ƒb@bUVƒLU`UnƒbU@@ŽmVVX@JX@VLVVšklV—„‚`@bUL@V„LVKn@‚U@„UJkn@lmLmK@X@Jn@mb„nÞWVXnJ‚k„KČÑÆ@VK@knaÜmXlUČW°kôÇÆ@a@yÞ_VmƒUnU@K'],
'encodeOffsets': [[
111893,
32513
]]
}
},
{
'type': 'Feature',
'id': '500116',
'properties': {
'name': '江津区',
'cp': [
106.2158,
28.9874
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„InWUUlU@LVašlX@°²lÒXxlK@Ul@@Un@UaVJ@I@W@UƒUUVUwVIUKUa‚UUVwn@Üx@XUlnn‚bœJ@¥VklKUUlk@ynU@kVƒUUVWnI@¥V£VWVIUKU@UVƒa@n@Vm@@nlUaVkUwƒJ@blLkLW@XWmXkmmLn™@m@U@UVm@™„UVUUlakUVa„ƒVkV@@wnaWUk@VwkƒlmVIkUUxmJ@U„™@KƒIkx±V@IUm@K@IUKkbWKUbn„m„@bmVnbmb@xkxUJ@ULW`@bX@WVXL@Vƒš¯„mk¯@UJ@VmLUaWnX@WJ@nkKkxW@UIV@@KkImmkK@UW@XaWIU@U‚ƒIkbWb„xXŽlLVbnV@bWlX@VxVLnl@nÆÞVÜ'],
'encodeOffsets': [[
108585,
30032
]]
}
},
{
'type': 'Feature',
'id': '500240',
'properties': {
'name': '石柱土家族自治县',
'cp': [
108.2813,
30.1025
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„š@kl@š¼UbmVXJ@bV@nxVIVJULVVk@@LWbnJVU@bVbUJ@blLXnWV—@mbnV‚@V„„bn@VJVLnaVanbl@„šVšlVXxlbXUWaX@VƒUUVwUUVm@I@WmI@a„mlLœ™lK@alwnUV@kóVaƒÝk@UlbVK@™VU»VUUVWUƒ@U`ULkwm@@KmU@knKƒ»VkJkUmbƒLkbmK@UUyUU@aƒwm@@XXJ@VVLVVUbVnUJVX@K„„k`WXXJWXUbmW@bkL™Um`Xnƒb@JVL@LU@™°VVXKVnUxVLUbmJ'],
'encodeOffsets': [[
110588,
30769
]]
}
},
{
'type': 'Feature',
'id': '500237',
'properties': {
'name': '巫山县',
'cp': [
109.8853,
31.1188
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@kVƒU™bkKmbVxkLmKkllbV@@LXb„xlašLVšVV„KXXV@@bšVlK„V„@ln@¼°KXa„U@Ulw°JXalIUa„ÝWXW@kVU@ƒVUVWUUUamUw@aVamwn@VUUƒlLXWm£@wÇĉkKklmLUÒ¯ƒWn™±kwmaWm¼U@@LUV@V@XƒVUnVJ„LWš@‚XXWbĸºVzXJVXV@@VXlWn'],
'encodeOffsets': [[
112399,
31917
]]
}
},
{
'type': 'Feature',
'id': '500102',
'properties': {
'name': '涪陵区',
'cp': [
107.3364,
29.6796
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@nèVblĖVVnLšŽ„@šx‚V„n@nšJ@L„UVVX@lbUJV@@nn@VVVK@z„˜V@nzVJVUlmX@@_VVVbnaVal@@knW@wnaƒVK@aVI„J@£kUVW@‚wXUVJ„amƒ@Ikƒƒƒƒ_X¥ƒ@WwkKkwmŽ™šƒkUxƒnÅmm¥™WV@Um@UlVL@JU@@Xƒ@UVkKVk™KVk™Kkb@bmJVXU„VVUbU@@`W_UV¯b'],
'encodeOffsets': [[
109508,
30207
]]
}
},
{
'type': 'Feature',
'id': '500230',
'properties': {
'name': '丰都县',
'cp': [
107.8418,
29.9048
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Þè@XUK@LlV@blbUJ@„„V@bnV‚@VVVXU@ƒlbXal@VXnKV@maXUރ@amk@aVKXV‚anbš£°mnIVaUKVwUmWLUUš¯V@@KUK@I„aWmn_šVlK@anXVaXWWIXWl_ƒƒ@LUWVIUmVaUUUK@UWI@Wn@VI@mkU@U¯Kƒl@ImVÅLƒwU¤óbUU@wWXkmm@LU@@VUIWVUL@JUnƒaƒx@Jn„ƒbUIWVx@ŽUXlV@¤ƒIUJ@bUL„Žmb@xmX@lk@UbmbUaUU@`W@kn'],
'encodeOffsets': [[
110048,
30713
]]
}
},
{
'type': 'Feature',
'id': '500232',
'properties': {
'name': '武隆县',
'cp': [
107.655,
29.35
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@l„„w„bVm@IVKXUVJ@UV@@KnnWlX@xVVôaV£„xÆKnUVm@UmIXm¯¯@WkWVwmkXƒlaUwV»ULmk_ƒVkK@ÅWa@aUU@mkaƒIƒb@‚ƒnm‚_@mmK@UƒLUVVmI@aUJ@XWJ@U`UIkm±kk@@lULmUmKUnVšnlUVmI@VkVlx™bkIƒVmLUxkKUŽ‚Xš‚n¦Æn„mVw„lš™nlxlLXx„@W¦„`„„'],
'encodeOffsets': [[
110262,
30291
]]
}
},
{
'type': 'Feature',
'id': '500119',
'properties': {
'name': '南川区',
'cp': [
107.1716,
29.1302
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VšUbVJVUn@VLX@WVXVVI@VUVWxU@mš@ĊX@@¼V°aVUX`@_V@VaUUVƒUWnI@alašLUlšLUllLVU„@@WV@@IUKVkn@@VlLVwnK„UlJšakwlU@UnJVUmkU™VmXa@wVK@UUw™@VƒVI@akƒ@alInwlKXUmaUW@wWLk™™KVak_ÇaUƒƒV@šXbƒLVxUlWIk@UK@V™@ƒkU@VbUVUlVnƒLUV@lVXmxkV@L@V@Vk@WbUwmL@JUI@xVxkx'],
'encodeOffsets': [[
109463,
29830
]]
}
},
{
'type': 'Feature',
'id': '500241',
'properties': {
'name': '秀山土家族苗族自治县',
'cp': [
109.0173,
28.5205
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@XlV@lzn@VŽnbÆbXKlL„U„ÒV@@llUnxll@zšŽ@LU@@V°b@Vn@š„l@VÑUƒnK@UšU@aUaƒkVm@K¯wƒklmnn„Ul`nI@almkIUwmWVkUaƒkkJmUUa@K@aU@@_m@@wUyVUUa@Umƒ@awl@Wka±„UkUykIWV™b@bUVk@›aU@UXU‚UIWakUWmUxUV@nUVWbšŽ@XXVVŽmXXŽ@VƒbVLkVWx'],
'encodeOffsets': [[
111330,
29183
]]
}
},
{
'type': 'Feature',
'id': '500114',
'properties': {
'name': '黔江区',
'cp': [
108.7207,
29.4708
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VX@V@LV@VJUL@lVnnxlb@VXV‚XV@@W„@UIVK@kUKna@£VWUaVUUalIVJVIUW„_lm@bXKV@mn@J„UUw@KnIVll@VanLVmUkVKXLVKUIVamw@UaU_lw„KlwUWV_Ua@aUa@KUšwm›_›Ó@wU@™nkK@am@UkUKmXk`m@@I@K@I@mkVmIUxUJ@kUL@JVV™„lnklWnn`VzUVnlWbkb@WxXxlJXzWŽÛlWXnl@Ll@Vb°UJWLX@VlV@bkJ'],
'encodeOffsets': [[
111106,
30420
]]
}
},
{
'type': 'Feature',
'id': '500117',
'properties': {
'name': '合川区',
'cp': [
106.3257,
30.108
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@XKVXlK„ƒVL@UnV@aValXXK„U@WVwUaVU@IV@@aVW„L@U@anVV@@bVK@UVL@bnJWL@VnUnb˜@@JnIlVl‚@@bXIWbn@UKVLVKXLlaV@VVnK@bVL„m„IVƒ@KmknUUWVI@aVJ@_„WU_VmUwƒU@K™ƒVak@am¯mJU_UJUkU@WkIV`UI@JV@LmmU@@mƒbUzś™@„VK@nUKƒ„ƒb™akb@UWK@bkVVbV„Û@@`ƒXk@WŽ@n@lXL@bmb@VVJUn@JnUlnUlmX@`XLlbkJW@kzlb@`@b@b'],
'encodeOffsets': [[
108529,
31101
]]
}
},
{
'type': 'Feature',
'id': '500222',
'properties': {
'name': '綦江县',
'cp': [
106.6553,
28.8171
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@¦‚@X„lVX@@UVKl„VUX@lanVlUVbXWVXVƒ„VVUnKVUlwUwU@UJ@nmVkUV™lwXam@VaUUUw@W@kk»mV@UmKkwVKVUU@@LUKVI@mV@XVWxnXVKUUUK@wWU@UUWnUlLXa‚mUI„am@wI@K@amIm‚UUkI@m‚akUkKWUUanƒ@wƒamLVxk@UVmUUL@Vm@kV@I@ak@@bWVXJlLVbVL@š@bn@@`Un„@WbUKULWVXbƒ@UVmbX„WVƒb@bVmxUKUƒV@šUn@V@V@nmšnKlnnWWXX@lKkK@a„IVxUlVb‚k@mn@@U@m„bVUV@VLUJUXU¤'],
'encodeOffsets': [[
109137,
29779
]]
}
},
{
'type': 'Feature',
'id': '500233',
'properties': {
'name': '忠县',
'cp': [
107.8967,
30.3223
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VLÞĊ„U@Wš@¼V‚„@lk@w²mlšVUœ„llšVnI@VlKUUlIVƒXUVJVU„wl¥UkUKUIm@ƒaUƒ@mUna˜@XUWmkK@aVIUa@aUVmIXa@Kl@UUVKUIUJmwU@@aWInUVa™»k@@lƒ™¯n™¤mabWUUL@bnl@b݄WVnbU@mLUWk@Wbka@„WVUU@UmUmVkUULV„lVUx„l@L@VƒbÈÒlb'],
'encodeOffsets': [[
110239,
31146
]]
}
},
{
'type': 'Feature',
'id': '500228',
'properties': {
'name': '梁平县',
'cp': [
107.7429,
30.6519
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@XLV@VV@b°°nšƒnkb@bƒšnJWVXblIUVšxWnUJnVVLVU„JlUnLVK@UnUVJš²nKVbVKla@aXlJ„k„Klb„ƒ@U°£šKšV„IUa@ƒ@kwVƒVUkKV@VUkk›ƒUVk™±n@xklƒ@U@»™‚@XƒVÝĉUJnxWb@UX›KkVUbUKWUkVmkkLU`›b'],
'encodeOffsets': [[
109980,
31247
]]
}
},
{
'type': 'Feature',
'id': '500113',
'properties': {
'name': '巴南区',
'cp': [
106.7322,
29.4214
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@nxnVlJlUXLƒ¦@x@Vl@nKVVX@V_V@@KlVXU„@lKlxXIl@ÈĊ@Vl@n_VJlŽnVlnb„²VVVJVVmUUkĕUamçU@»W@@ĉn™V@XwVU@UUJWUXUW@UKm@UVUIVaU™UVmLUVƒUU„UWWXUakVmUkbW@UVkƒUL@VW@kUWƒ@mJUXVVU„@lmV@zklVVkLUl@¦›I'],
'encodeOffsets': [[
108990,
30061
]]
}
},
{
'type': 'Feature',
'id': '500223',
'properties': {
'name': '潼南县',
'cp': [
105.7764,
30.1135
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@a@a@_kalyX@lIkaWK@_nWVkkmmV@IVmUI@Una@aWK@k@mkbWaknmJUk@mk@@kUal@Uaš@Wa@aXLlwUKlkkƒ@KmI@VUJ@Lk@@VUUmL@amJU£kKUaWakLmU@bVVUbnbWV@xkL@bUb‚xUxVbXJVbUVWIUVU@kLWxkKWV@n¯VUbU@@VVX@VmaUL@VUK@VVbn@lVnI‚@@lnLULm@Ub@Žl@na„@lK@XVVkJ@b@zl@@VnV@bVb@J@bnXV`lXXmVI@W@InbV@@aVKUblKVLUanLlmnLlK'],
'encodeOffsets': [[
108529,
31101
]]
}
},
{
'type': 'Feature',
'id': '500118',
'properties': {
'name': '永川区',
'cp': [
105.8643,
29.2566
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@b܄nWVLX„lxV„VxXxlVn@@bVblK@a@UnLVJV@@UnLVU@VXaVKVXš@n`WUÿ@IUKlaUUUkWyUÛÅÝ@mmkUKUwW@Xk@amUUakKWƒwXaƒK@VVLklƒXVlkxV„UL@bm@Vxn`ƒIVxUVkLVšUšl@@lkXmmƒVUn@VV@Xb'],
'encodeOffsets': [[
108192,
30038
]]
}
},
{
'type': 'Feature',
'id': '500231',
'properties': {
'name': '垫江县',
'cp': [
107.4573,
30.2454
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@šĊ°¤nҘ¼œaV_lKnllUXVVLValUœLVW‚@XamwVIUKkaÇфa@U@KƒkVwkUUƒVKlVnU@aƒU@ƒVIka@akU@KVL@WÝçUV@Vmbů@L™KƒnnJW„ƒVkxlL@VX@VxmnXVWxUb@bkn'],
'encodeOffsets': [[
109812,
30961
]]
}
},
{
'type': 'Feature',
'id': '500112',
'properties': {
'name': '渝北区',
'cp': [
106.7212,
29.8499
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@bVVXL‚a@lnbWn@L„@XVlK@VVLUVlbkLUKVVVL@VšnX‚VL@VV@UbVb@x@¦UxVb@bUJƒL@L„VVxlK@™nk@U@W„UVLlKXV„@VblU@UUKVU@wn@VJVanLlkX@VaVK™¯@a@U@U@ƒVaUK„kUUƒ±maUkm@UUkbm@@Vk@@JƒwU@Ub@I@JmwUL@aƒ@@KkVÇLkƒWkƒ@kUU@@xUVmKUnllUb'],
'encodeOffsets': [[
109013,
30381
]]
}
},
{
'type': 'Feature',
'id': '500115',
'properties': {
'name': '长寿区',
'cp': [
107.1606,
29.9762
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VVšU„bX‚lX„¥l@XnVmlxUx„@@blVnnôĀlm@aVaXwWUnmUwW@@UkKlw„UXƒmI„mšL@Kưna@UUImyU@ƒ—@yULUUm@@mU@VIkaW@UUƒV@K™I@mƒmU™wƒ@™mKUnU‚UIƒlVLUb@„@V@V@bš°ULUbW@klmKUbUIm@@xUVVL'],
'encodeOffsets': [[
109429,
30747
]]
}
},
{
'type': 'Feature',
'id': '500225',
'properties': {
'name': '大足县',
'cp': [
105.7544,
29.6136
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@XUmaVaUU@anVlKXbValU@aV@@IXKš@@bV@VxVK@UXLlUšJXa@_‚@@aVK—ÅWVkwWaƒƒwUa@am@kUWLU@kWmX@ykI@W@UV@na@LlLV@UƒkwWƒUKmXX`mIVl@bXLWVkbkkƒx@`VXm@@J@U@UUKUxk@WbUIVl@VXLW„ƒJUkUlUImxXlmb@X@VUJUnVbšW@UV@@VVX@bnW@LVxUnlJUV@n„@VxVIn@l`„UVVVL'],
'encodeOffsets': [[
108270,
30578
]]
}
},
{
'type': 'Feature',
'id': '500224',
'properties': {
'name': '铜梁县',
'cp': [
106.0291,
29.8059
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VblLV¤nI@bnKVV@Ul@@KVI@UnJ@Ll„klVLkxWK@bXb™@Vbk@Vb@ll@@nVlnIlmXblaXl@„W@_Ü@UƒUalU@aXL@Vlašb„a„ƒVL@mUL@ƒUUƒƒÇXUW›X_WaƒƒUƒ»m_™@UWULWb@UUVmK@VU@UImK@V@bkL„x‚„XblxXU˜ÆUL@b@@`Wb™IkVWK@VULUwU@@a™@WL@JU@@bkVUb'],
'encodeOffsets': [[
108316,
30527
]]
}
},
{
'type': 'Feature',
'id': '500226',
'properties': {
'name': '荣昌县',
'cp': [
105.5127,
29.4708
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VI@U@WnaWknwVJVkVl„IXƒWK@UUkVJXal@VwVL@V@V@In@UW@_„wlllaXUWK@aUknJW_ۃ@aWaU@@UVm„UUaUImJVnÅUmVUm`kUUVWLnVU@VVmXƒK@„nxmŽULkx™ImJ@nU`@X@Vkn@`@nlV@nVJVaX„VLnK@bVV@nV@lbXWš@'],
'encodeOffsets': [[
108012,
30392
]]
}
},
{
'type': 'Feature',
'id': '500227',
'properties': {
'name': '璧山县',
'cp': [
106.2048,
29.5807
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@XzVlVVkbVL@JVĀXŽ‚¼V„„„XbW`XœWVȎ„„VVšŽVkV@@UXa@alK@IƒƒU@UKWUyUI@wVUUWVak@VUkƒW¹@WXI@yVIUK@kWwkѯ±W@™kUb@KkVVVmXƒJ'],
'encodeOffsets': [[
108585,
30032
]]
}
},
{
'type': 'Feature',
'id': '500109',
'properties': {
'name': '北碚区',
'cp': [
106.5674,
29.8883
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@X‚VLV@„„@JkL@bWb@VU@UlƜVy„a@nV@nn@KU@IVJU_lJXV@VlVIV`nIn°@b‚lUbš„„KVI@aUaVw@¥@wUaVaU@@UUKW™m@UUKUUVLlKkaVUUK@UkLWUƒ@@KXmma@kbWKUU@aUamLnÞ@VWLk@@Wm@ULU@@U™KUVWI'],
'encodeOffsets': [[
108855,
30449
]]
}
},
{
'type': 'Feature',
'id': '500110',
'properties': {
'name': '万盛区',
'cp': [
106.908,
28.9325
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VIV@@wVJ@InKVxXal@@U@U@KlUnwUW@kVU„KUmVkUa@I@KW@@bk@@mƒU@m@k@a@aƒIUxmJk@ƒwULƒwkKmVVX@VXV@xVLVVULmWXwWUU@@nUJVL@KV@UVULlxnL@VnUl¼@l@XVxVVUbn@WbkxUšlVnU@m'],
'encodeOffsets': [[
109452,
29779
]]
}
},
{
'type': 'Feature',
'id': '500107',
'properties': {
'name': '九龙坡区',
'cp': [
106.3586,
29.4049
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@XK‚L@Vš@XbV@lW@UV@@VXIV@U™VKlL@KnnJ@VV@VU@I„@@mVUVWUUmL@V¯LUK@UV@UU@a@U@yU@WLUK@X@KUVmL@ƒ@aXI@w@ammVk@WÛwm@UxVVVbVLUJVxVU„V@V@X@JUIVbm@@Vk@@VkL@lVLUJ@zWJ@X'],
'encodeOffsets': [[
108799,
30241
]]
}
},
{
'type': 'Feature',
'id': '500106',
'properties': {
'name': '沙坪坝区',
'cp': [
106.3696,
29.6191
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Xºl„UVl@UbVXUV@xVJVzXJVUšL@VV@VKn@@Xl@XK@UmÝnKVbVakkVm@k„ƒUK@UmIm@LkKULVšU@WJ@UU@@VkXU@Wa™@@UKWL'],
'encodeOffsets': [[
108799,
30241
]]
}
},
{
'type': 'Feature',
'id': '500108',
'properties': {
'name': '南岸区',
'cp': [
106.6663,
29.5367
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VV„JVL@bUVVnl`XIlwXJlw°nnl‚IXW@UÇĉk@WJkwkLƒ@WVkU@LU@U`W@UXUV@n'],
'encodeOffsets': [[
109092,
30241
]]
}
},
{
'type': 'Feature',
'id': '500105',
'properties': {
'name': '江北区',
'cp': [
106.8311,
29.6191
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@nLVU@wV@lV„@Xll„ÈKlU@L„@@bVKnx@I@JVaV@„x@Il@@Un@laVVn@mkUIm`k@WXJmk¯mkxWIkxWJk_UmVUUKƒ@UU™@ƒ„@l'],
'encodeOffsets': [[
109013,
30319
]]
}
},
{
'type': 'Feature',
'id': '500104',
'properties': {
'name': '大渡口区',
'cp': [
106.4905,
29.4214
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@k@@U@w„¥WKkVkImUmwa@b@xWJ@b@„nKVU@L@WVLXKV@@z@V@bVVU@@VVL°K@U'],
'encodeOffsets': [[
109080,
30190
]]
}
},
{
'type': 'Feature',
'id': '500111',
'properties': {
'name': '双桥区',
'cp': [
105.7874,
29.4928
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@WwUwU@kK@KmbU@@V@XlJ@znWlXV@XK'],
'encodeOffsets': [[
108372,
30235
]]
}
},
{
'type': 'Feature',
'id': '500103',
'properties': {
'name': '渝中区',
'cp': [
106.5344,
29.5477
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VLš@VV„@VL@aUKƒIUUƒ@@JUVU@'],
'encodeOffsets': [[
109036,
30257
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/fu_jian_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '3507',
'properties': {
'name': '南平市',
'cp': [
118.136,
27.2845
],
'childNum': 10
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@knyƒk@ƒKU¥šwV@nkƒWƒzUmk@@lKUa@aVI@UƒKUamKUUVaUI‚@Xƒ@UV@K±IUVVlUbUbUL@KWUXmWk@KkXmmkŃKUƒ™a@amUƒbkUkKWUnwUƒÇwV™UUƒÝUKV£U™@ƒnKWwXLVKm¥@wUXkmWk@ƒ@wX@lU„@šyVImaXwVƒƒ@kŽƒnU@mbk@mlUXƒmU@mV@n@bnW@bUIWJ—ImVUKWbUK@nkKƒaU@W_VUUmWmL@UU@™bUWUL@V@bmVUz@`mUUVVbXL@V™L@lmLUxmVamXkW@xWbU„VbUxkU±@ÅUmmkLUbW@@`kLknVlV@lbXxlVUXVV™ŽU„U@UbWŽkIWVUUUJkI@llbUxVL@V™VƒUU°ULUmWXUV@VULWb@™xm@UaVLVKUa@ƒw@V›bkmVambUUm@@VkK@„@b„xlxX@‚„n¤@Xƒ@@lkLWV@Žn„V„kb@bWJXLWx@nkxmm™bXn@VWVUn@VnJ@bVXl@„™VJXnWbX`lL„UlJVI@Žœ@VXV@Vl@bn@@Æmn@VšxXU@mVIlxšVššnI„l@nVJ‚aXI@mlU@aXkVm°klmnVV_naš°@V@xܦXK„V‚nnUlVXbVK‚LXKV@naV@@VVl@@lXblXšWnLlbVK²nš@@‚VLUnlV@lƒXxô°‚V@UnaUUlKXLVUVVUbVVlUnJVX„@VW@an@lb„@nl@VU@anƒšUVW@kƒaUm@InVVKVU@kUW@Uam@km@kVa@a@™nwšU@WlI@mVI@WXaW_nƒ@™nƒlkkW@U‚¥@kV@Uw@wUƒ@@IXK‚¥VIn@nU@`@Xl@VV„LnašW‚bVaUwnU„@VIšKlV'],
'encodeOffsets': [[
122119,
28086
]]
}
},
{
'type': 'Feature',
'id': '3504',
'properties': {
'name': '三明市',
'cp': [
117.5317,
26.3013
],
'childNum': 11
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lL@Un@VVna‚bnUlœa@U‚x@„VbULUKVbn@šw‚@XaVK@UVUXWVnVKV¯„VšU@UUKVwka@klJVIVVXUlJXVaV@VƒšUUVWkUWwkaU@UklmlK@_X@ValKnnÆV²@lVVwUaVƒXa@wlXnW‚bnUVwnK@kšK@UWKUaVUnV@_VynU@a@UVKVXšaV@@VnKnXVV‚UX`V@„blL@mVLXaVLnU˜JXIVJ@amX@a@mnUV@„nVWnkl@naV@„ml„@@KmKUam@UU@ƒ@UlKU™Vk™U™K@aVaUwV™U¥UIkJ@wmI@‚mbkwkVW@UXƒKULU`™IVKUa@LƒkkVmUU@WlULUWÅU@I@ƒWW™nU@@w@a@ƒUam_XyVIVWkkƒ@mwVKXUV@nw˜VXkWƒÅ™U@ƒaƒU¯KUnƒK@ƒ¯šmUƒLXŽVLnWVbVbUVm@Ub¯¼W@amƒ`kb™amLUUUƒ™aUXV`@x@XmJ@n@L@xkJUU@kU@mWm@kUUwUUVWl@VUkIƒy@kkaVUUm™IWVXbWxU@k„mVkK@nWVX¦WxU@@bkx@VU@WŽk@™kUbmJUUmkUW@_kKWKƒ@knV¤kIUKWLUbV‚@Wbk@@VWL@VkI@lUXVxUVU@@mWIƒV@a¯nUaƒaUV@„ƒJ™b@bÞ°VbUš@X™aUVmL@‚VXblŽnV„°˜n@Vnx„@VUUUlK@InJVb@„Vlnn@V™L@VWJU„x@XlJUVVVl@LUUUJ@Lƒ„@lUL°¦k˜V„VnV@„xV„„l@blLnlšLVaXll@šnVUn@‚xn@nml°‚X@lb'],
'encodeOffsets': [[
119858,
27754
]]
}
},
{
'type': 'Feature',
'id': '3508',
'properties': {
'name': '龙岩市',
'cp': [
116.8066,
25.2026
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ša„I@ƒVU„bVb°m@b„UXJ@nV@VUUwVW@klJ@UXK@Ul@Xa‚@UVaXKVLlJU£lm„@XLlL@`VXnlVVnIVašll@XV@@Ulw@aV@XwW¥XU@mlLnUlƒV@XwWaXUšJVnUVlb@l„zlJUVk@UXVVVxlVn@nXV@@lVVlI@w@K@mnI@W@wU_VWšbV„VVnKšbla„_n‚bX@°»Van@VUUaUamXUKW„K@a@Ukƒ@wWkXƒWW@wUU™Kw@_lyƒwUkU@@Uƒ@kamVmƒXašUVUka@Wk@»UUUVƒKkbWU™VUbk@mkƒxkƒƒKnIVUmW@kUKmXUmVaU@kU@m@KUWVkIWJ@ŽU@UI@wUUUa@KW»nU@mVkUmm@XwWU@ƒUUmL@ƒw@mnƒVUU@aWak@@amxU@UxULWVXbVLU`mbUImVU„ƒbn‚V@@bVn@bnVWxLmyUbƒIUKƒ@aƒVm™akbV‚UXW„UlKWbkV@„WLUlk@@nšbƒb@lkKmU@ƒUIWJkw¯UUVVxm@@XkbWx—›XKƒlUzWJkUUL@bmKkVƒ@@VUIUlWV@X„K@VkbWx°xUb@LUbk@@VWb@LXJ@VWXU@@bUVV„VVn@VVlLn„@l„@‚xk¦Vx@bVJXbƒn@JlnXxV@@„nJ@X@V@lmx„bUn@xVL@VVKlL@l„„nLVaVL@xkl@LƒxVl°š„X„WVX„Vl„œJWnxlJ'],
'encodeOffsets': [[
119194,
26657
]]
}
},
{
'type': 'Feature',
'id': '3509',
'properties': {
'name': '宁德市',
'cp': [
119.6521,
26.9824
],
'childNum': 9
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@LVKVaVaUkVU²J@LVU„@@W‚VJUbVVnLVb„L@VUJ@bVbkL@Žl@Vn„y„XmlU@™xV¦„L@Ž„lmz@lnL@bVVšbVb@l„nšKVk„Vl¤@zXV@šl@XJVLVKnXVK‚VnU@wUm@šKUƒ@UlVlw@U@U@ƒUaUKlU@kXKlmXIWKXaVIVUVK@KU@@k„JVUnLVJUL@V‚IVa@VnLšKUnl`Vb„V„V@š‚Vbn@Vzn@lKnVlI„VVKUalkXJl@XXVWVLVUUmVU@Unm„£lK@Uk@WUXK@U@WVwVkšƒĠkĢǰaUÅUwmaţƒɱUÇa™w„±V¹XalKôx„@„UVaÜʓͿVóbÅLƒJm„¯Vk¦ƒŽk@mamXkKUƒUL›akbk@mV@LkJWb@Vk„mXk@UVmaUV@amLUKUamI@KUaU@WbU@UUUƒUIWJUkm@šƒw™Kk„VJm@kxǁVƒUK@mUVUkmlkkVm@amwƒLVWU@UbVLkšUbƒ@VƒmK@XaVWU_VJnwV@@kUmWakxƒ@kwWakIWxnbUJ™zƒ@kVW@@x@„XllnVW@xn¦ULWKXxmL@„VšU¤VL„ÞVVUšÈxV„mxXVlLlV„anV@bšbV„„LlÆnnlW@LXlWnXV'],
'encodeOffsets': [[
121816,
27816
]]
}
},
{
'type': 'Feature',
'id': '3501',
'properties': {
'name': '福州市',
'cp': [
119.4543,
25.9222
],
'childNum': 9
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lxna@nJ@xlIVJV¦UšVxUb@bšLšVUlVškL@V@„VVn@Vb‚Ln‚@LU„lJXblx„@lwXbVn@lU@mxUIV`UXWb@‚nLU„„@Val™UKVaV@UX„Knx‚bn@lUkllnUVnV‚@VLU„È‚lwn@UIlƒšL„x‚™n@VlXIVJV„VVV@XaV@Vb@LnJVbVLnK@bVUnbVUl@nWlƒ@UXalI@KnUl@laœbVKV„lLnWnbl@„l¥°Unƒ„IÆKôa΀U„a@UUwÇWǓIUWUÅVkƨm@ƒ@£@KmLU¤ULˣJ™kUƒVǟUUķ@ĉVƒKUk@Ѱwôǚç@īšé@Åţ¥mīÛkm¼Å@ƒVķVó°ō¦U°ƒn@bVJXVVL@bUŽƒakLmx@xmxXzW`XbWnXV@bWLÛ@™aƒ@ƒaXbWVkaÝwU@mlWKkLWWkLUKULW@kVmVUU݁UamV—¤›n@xUVUzkJV¦lJU„'],
'encodeOffsets': [[
121253,
26511
]]
}
},
{
'type': 'Feature',
'id': '3506',
'properties': {
'name': '漳州市',
'cp': [
117.5757,
24.3732
],
'childNum': 10
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@bl@Xb@bVVUŽm„@n„x‚@nKVV@„XVWxn@VnUl@nmVX¼@LVbVV@xVJV@@XIlJXU‚V@Ln‚@lVV@UbVnnWVL@lnXUVmJ„Ll„„wnll@VašUXVla„LVUVV@¼Xl@lbUV™VWbn„nUlb„@@VV@„aVUšmlUašUny@kU@Wkk@WaUVk@@ammk@@U@UlU@aUa@wl@šmXLllnL‚U@anVnU@L@VVV@KlXnWVnVanUšw@w@wm›nÅ@wƒaUam@Uk„mUl@@a„a@U@¥škôK‚wȯ°w@ŻkwǕaK›ÑÛk@ĕōřċ£ĵƒUKW»kÅŻLU@Ulġw@¤Vz™VUbkKUbmLmlULU¼UxmbXl@bWVƒb@bUnV‚UšVbULU@@VkbVL@`U@WX@ŽXV@b°„@b¯š@¤@Xm@@b@`U„VVUL'],
'encodeOffsets': [[
119712,
24953
]]
}
},
{
'type': 'Feature',
'id': '3505',
'properties': {
'name': '泉州市',
'cp': [
118.3228,
25.1147
],
'childNum': 9
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Vl„xkz@`‚xšLVV@xXXW„Xl@xl„@V@bnV°™@„„LVm°L„V„bV@ƚX„Wl—UmxU@WVULnx„@llUXUJWzn`Vb@„@b@xV@šmXX@„@JÆVVXVKXkV@nVlU„l@KVbULšJV_VK„LVWX@lUVƒkIU¥lIVyVU@wœm˜£nUVWU@aƒm@UmWw@UX@@am™VUn@@aUUlUVanaWUXWmUnkšK@VšUlVVUUwš@XLWWX™ma@knm‚bVb„VXbVL‚@XJlInlšL„w˜mXóšw@çV»ÇçŋaķƧóƅóKġ°nÅUķƑUÇW@—¯xǰöÆlV„n@llšaš@„Lšbƒ`™@™„VšXVƒVx@V@bULVJUk‚Ç@ƒ¼ƒXUKk@mmULkaWbk@ƒx@UkL@a@K@U@UmKmbU@kV@UmVUbUmmXkW@LUU@U@KmVmU@bVmKkkWK™nk@@xVb@bkV@V@Vl@nn@bl@VUXbl@XlV@@lmz™VVbkŽ™nUVƒb'],
'encodeOffsets': [[
120398,
25797
]]
}
},
{
'type': 'Feature',
'id': '3503',
'properties': {
'name': '莆田市',
'cp': [
119.0918,
25.3455
],
'childNum': 2
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VbނVVnUlUX@VKVLlKXXlKXL‚‚nkV@ÞxlbXUWa„b„@šbÜ@XK@aWUXmWaX_Wynw@wnwlK„bV@aUKWUUI@a„mV¯Ŏ¥ô¯ĸU„UÆ@n»¯aƿé@ţ¯nĉĬÝK™óó@™ÑU¼@è™xWô—nƒx™KmkkJWI@UKWaƒUUaamn@lnbWšXXWK™@VxUVkU™V@U™LmlnVWXXVmbUbkVVV@bm@UVnš@bW@@VXx‚n@V„n@bV‚UX'],
'encodeOffsets': [[
121388,
26264
]]
}
},
{
'type': 'Feature',
'id': '3502',
'properties': {
'name': '厦门市',
'cp': [
118.1689,
24.6478
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@VlUV@nanL@V@V@L@blK@V„wl@XalbVKnnl@VL„W„»È@lVUIVK@a@UUw„WUU™šƒš@„_™aƒK™@™bkkm@UƒkõŁxóL™l@¦@Vƒb@bk@VŽƒnVln@Vb„b@xmÆnœ@x@x™x'],
'encodeOffsets': [[
120747,
25465
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/gan_su_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '6209',
'properties': {
'name': '酒泉市',
'cp': [
96.2622,
40.4517
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ÇnÅaĉ@ƒU¯¥›‚ƒ£™WUýUU±JkkUw‚yÞIČxĊĕĊ¯š¥ÆUkţ™UÅÓ±¼™IUx¯UƒÒƑ‚ݐŰƒKÝnğ°ÅU@Žƒ@Vn@þš¼¯šWnŎ°XLWlnVnbWnƒVXxmbƒa—bóUƒlǕUUa™IUmlU™ƒš¥™kƒ¥ĉwkkƒÝɛa@¯™™U¯°mVƒkVnKlƒōÑÇÑU@kl™ŽkUŻnUW™@š¯ƒšmWV£UKnUƒmUw‚w@ƒUIVaX™šwm»Èmmwn¯ċ™¯LĉŽUƒJUalka±Va@U‚k@ƒÛф¯WmnUaɝ¤Ûmƒn¯m±x@wóxÛLġÒUx¯VƒÈ™JUbóz݃ÇKĉ¯ōlÝUŎWl¯nťbÝ@¯ǩLġmV@ƯĢkÆm™ĊkVťLɃmÝXó°@„ĢbVŽóVݦɱ@Ƨ„UV„ĠÇÈV¼UVţwmbJÇwˋa™XmǯKkkmŽƒbXšm¼V¼Ǭڲ¤ôŰÆƴô̐ŤǪnɆӨ¼ɆLÆłUĊšxŎƞȘǔˎǬǪnƨŮǬö°»šġ„„ÞÜÆĸÒĊ„ǀbƾèôÈ@¼¯þŤĸƧ°Vb@lÈĊ‚šʠń̐„ȘKǀŽֲॗţÿǕý@ʊǓƨóÆÑǖŃôw@΋ʈƆÅÈVVĊV„óĊÅ@ÞƒĬV@Þīš@°Ž„V@ĸ̃°XτƜĠ@ÈaÜ¥Őƅ‚™nğóĕVġUůƿŋ—ĕƒa±V—UťÇğÑ'],
'encodeOffsets': [[
101892,
40821
]]
}
},
{
'type': 'Feature',
'id': '6207',
'properties': {
'name': '张掖市',
'cp': [
99.7998,
38.7433
],
'childNum': 9
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ÈÒŎÒk„mLUŽlŽU„¯nV°šš@°ɜb„ÞĠaÈ»ĸl‚š„LVUÈ@Ċ@ýUm„@@ÆVĠ¯Þm„LƯޏƒ„ѰVVwšJ²»ÆÔšVlŤÅV™¦ĉ°ĉĖċwÝJzVxll²IVVVþšX„¤źœV°¦„VĊ@ÆbÈmǔLĸĠ¯Ģaô¯ĸmÆÛUƒlÇĸk°XyĊUǔV„ǩnmV»ƒa@ýnK°n@l¥@»ż„Ċ¤m皃@£ČU@mƒmVkÞUƐ±²¹°‚ĠwÅƑŃU¯™›V¯aÈŁšƒÇ»™ġn_°xŎKlxœklx„@Þw‚„„@Æm²b‚DzLlkšWXať¯ĊaœÑšK±w@wƒUÅçV±Uk™@@„¯š¯xƒU™±±UU°ōxVxÅÔō°ó¯UÝ¦óbÝþƒ@ĉÈóUV‚Ux„„@VŽUVÝwÅÈǎóVkk¯JǐkmmL@„™KÇx@bkš™@U°ķ²ó`ƒš™šmn¯°ƒUwlÅkUƒ`™¦ɛô™Žķz@ŽÅnǰU¼¯KmVk²ƒJƒ¼ƏÞķôš¤ULƒ@mnğ`™šÇnUxÇ@Ûÿ™U@ƒƒŽ@x@móJkŃ¥VŹĉóÒĉlċ°ķ„Uƽ܃@›x'],
'encodeOffsets': [[
99720,
40090
]]
}
},
{
'type': 'Feature',
'id': '6230',
'properties': {
'name': '甘南藏族自治州',
'cp': [
102.9199,
34.6893
],
'childNum': 9
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ލš™nKlnšwX¥WÝXk˜xÞUnƒ°aĊVnUUKlÞĶWXnĠ¥ô»„™@nmVL@¤°™Vz„JšanU@aÆwna@k›ƒšyX_›aĉb™ƒ„wƒéXkWwÅaš¯V¥mƒ¯UƒƒI@ƒš@„mšb°aÈçšUš¥@»‚knwɜƇ°I°ÑÈmVU™¯Xa@w‚W@wšV¯Č¥l¯Uwnm@k˜aUaóKkk@™Ça™b@ށÒWa¯IÇxÛam¼™VUƒxÒl‚@zÝÒ¯bÝaĉVĉwDށW›zJ™mJn²mܯUƒ¯ĉ@ġ¤Åb@²nšmlƒ@@Ž„„U„ƒLVxšV™„U¼Ålma™b@ƒ°™l@WIUƒ¯@mƒ™@™™ó„™„@U›zţyƒXÇU™ÇVUUVLkbWakVWmUbkkƒKUÆ»nƒ°Knk@aƒUVmšnk»l¯Ģ›lw@_kKVU@ƒnaƒ@lUk@¯¥mV@kmbW™b¯Åõa@mkU@kƒÇŽkU@›`@™óó—bl¼Uxƒn„¼šlVȄx@blVkVVnƒ`XÈġÈ@ǃK£ÝJmUUnUĖmlU„mKUn™VÅaUw›Uĉ`¯n¯wW¼nxVŽ™š@bĉnƒ‚kIċŘkXUŽ±Ò™xšÈ@ŽX°`l„œV˜IȯĊV„ƒšVVan@VašUVażVmšblkÈW„ƒWIXa„alL@wVb„„V„¦lL@lĠ™„U‚nk‚šL@ÆÞkšÞšK‚bñþW¦Û„ċVƒ„ULUºkÈlŎUxÆxÞUUxšÒ‚x„@XbšL@lÆ@„ÒlXVln@„bm¼ƒJ@„Ån„šƒx@bnšĠm„xVXmbÈè@ŽĊ£ČW˜w'],
'encodeOffsets': [[
105210,
36349
]]
}
},
{
'type': 'Feature',
'id': '6206',
'properties': {
'name': '武威市',
'cp': [
103.0188,
38.1061
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@±¯¥@klwU»ƒƒÞÝmwKm¯™™ç@™kVÇUL¯lVUKġ„ġm@a@U„@X£°l°LŎÇ@aōVÝw™ÔƒKUŽÅš„WJ¯lm@ÛVWa™@klĉUmaƒLUanaƒ™ƒk¯J„™™±KkXóÜÅxƒ²Ç‚@„„nUÒĊb°@™ÆkL™Ž™XÇÆ@xÝn—xWxţ„¯¤ƒI@Æn„ƒVV„VlU²Æè„V@x²x™L›ÒĉbŦ°Wb™Xklބš@l¤šXĊ`„wl@ĢÈŎm@bšnV‚Ubƒ„™ÆÛLƒèǚUÒŦlĸ™`°ĮʟÆǓbĉôϚĊƚĢnŤé΀ÑĸĀĊ¦„@@l°lœ¦Ȯ¦ɆÞĊKŤ™ĵĸů„»mف™ķŭ@Çɱȭ¯mƧUĊķnŁŻ»UaU™˜ƛɞÝƨů'],
'encodeOffsets': [[
106336,
38543
]]
}
},
{
'type': 'Feature',
'id': '6212',
'properties': {
'name': '陇南市',
'cp': [
105.304,
33.5632
],
'childNum': 9
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@šÈÞ@l`UmVƒ¼œŽ‚@nnÆwVlnVVa„LVƒÈ_‚ÿރ@n„a„xÆ@„lš_š@VxnK@llLnxmÈŎJnbUxšŽl@n¦‚lÈIlmX¥„k°@šk‚J„k²é˜@klaUaVaU@@ÝnIWnmnx‚k„ºÞ„„aV™°„V@nw‚KšxôbÞ£šVšU„bšþšLn»mƒVw„IšŽ@„nb@°°I„ġUkÇKVƒ™™@ů»lƒ„Lnmƒ£@anK@Ñ܍n@»mL@£™yk„UUmbUÞÝ@kyÇbó»™XUxƒWVzb±mÝbXaƒwUamL¯»@wUKVwm¯ĵJ°ÅUWVk„KVk°wÈVšƒlUšƒ¥škmVamknƒUw¯¯ƒbċ¥ÅKƒk™Kk„™VċVk£kKVw‚Ñ„a@kóyÛ¯ÇVk™ów›š—Xō¥Ç¼ów™Ž¯U±‚k„ƒ@x›IĉÒÅVmÈnšÜ@n°„bUbÝV‚ŽUnnJ¯Į@‚m¦nV܃@„„L°JXb‚Ñ@šaÈb@šllôLVb—b@lmnVxk°ċ¦U°™Ž@xX@xWbš°UVÇn¯Ò¯Jɛƈmxl@¼'],
'encodeOffsets': [[
106527,
34943
]]
}
},
{
'type': 'Feature',
'id': '6210',
'properties': {
'name': '庆阳市',
'cp': [
107.5342,
36.2
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@kw‚ĉ—»VamƒƒV¯wƒIóVkl¯™Km™Vō¯ÝWkL@bÝKō¦@Ž™„@š™Lx›@b@l™a@km@@l¯nm@UaÅ@ƒ„óWUXm¥™nƒw`@UUxķôǰğ¦@„VJš_n‚‚IVŽnalxkX„JWn¯šnVƒLšxl¤nnVbklVX@xnxmV@bUK@nm@@xƒV—°±aÅnƒŽkUWnUaƒx@m™n@ƒ¯LƒššmUĀlU@lV@blLUblxklkIÇx¯°‚UXbšaVŽUnšV@°‚LUlnbšX@`°nVmbnÆmV‚kLmK™¦UŽ@X„y@kl@U„°K@¼XbW„ƒš@b„WnLVa„VšƒVz@xlVČ¥lbUxލlV„U@nÆWôn²™VJlU„Ƨ„LnmÜLXa˜n@mœw@wlUlV²mšblwšƒlLލ„±@lVnUlxnkma@mškšJ@kXV‚U@mn@š¼VXUƒVƒlLnmVbôaVnWV»ÈUl°È¯ÆIn›ÆU@kk»mKkÆġk¯@»mƒk—¯@óÇlÇ@—Vykkl™Uml¯Þ™@w'],
'encodeOffsets': [[
111229,
36383
]]
}
},
{
'type': 'Feature',
'id': '6204',
'properties': {
'name': '白银市',
'cp': [
104.8645,
36.5076
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VKUȚl@šè°šnŽ‚LnxÝބ„V¼kx@l‚¦²°ĊóĠ„™Ċ»š@ÈxšaĊxlwÈVŤa@¯²aÇ£ƒJk£lƒnUÞ@°šô™@y„wl»lIX¥Ǫnw@ÑÞWla„ÅlL@ƒUwĉakƒl@ƒš¯mwna°J„V¯nUVÓÞÑm£²óWaUƒÇ@óÝUçV»ÈkkW@¯‚xV@XlK@wX@Vmm_@wÈݙKU¯ÇwVwÅK¯VƒkƒJ™™™XkWVaƒImޝUk„ÇlVšœĀV°mxóšk„@¼ó„WxĉÜU@Ub‚zÛJÇk@‚ÆnVlԙ@kŽ„x™ô@ĬWL¯ƒƒK@aÛImm™@ƒIUaƒ@™™UŽÇêU¤VÒÇx¯ÒV„šš™lk@Wbĉ¦UbkWV_‚y¯Lƒ„kŽ@b@nmbkx„°'],
'encodeOffsets': [[
106077,
37885
]]
}
},
{
'type': 'Feature',
'id': '6211',
'properties': {
'name': '定西市',
'cp': [
104.5569,
35.0848
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„a‚V²wVJV_@„LlanÅllŦçÜӚ_šlnƒWaôk„xUš„bmV@È°lèšnk°l¦„`@nnL‚@ÈlÜIyVaV@ĊÛXwôƒ@»lƒô™nwU¯›ÿU™Èklƒ°Vn„JUblXšWšš„I„l°U„ƒVƒš—@aVVVmnL@„lƒ„UUw‚mkƒš£„bV¥VUVwۂƒlaÇÝރmk£ƒLUy¯L@WlkKW_XaWƒ—mƒ„ġU@a™k™‚ƒakXkmVwmŹVƒU™b™WƒónmwnWW£„KÈnV¥ƒ¥„ƒÆ_k™lW„bU¯„V°aôbnaVwmaōInÇmwkK@kmLUw™@™`ƒkÅ@ƒwƒb@m݄ĀÇ`U„ƒKUbmUUkÅxmm@›„»nUVk_Ý@™Ç™¦™VÇè¯b™aƒn™@@„„JV„°Žn„™°ÆbXxWl„êƒxš„ĊaœbW`™zV°œ„@lmbÅx@bmV™bƒI™`™¦@ÒUVUI@ƃL@bš¼@ššŽ@„šlmxnL„°ULƒŽƒÞğޛ°kLUŽƒL™°™xVŽ„n„KVƒl@šzX@'],
'encodeOffsets': [[
106122,
36794
]]
}
},
{
'type': 'Feature',
'id': '6205',
'properties': {
'name': '天水市',
'cp': [
105.6445,
34.6289
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@UyȍVƒVUnn@ƒVU„`UblzšJnk‚@Vb„KU„°l„wš„„„nkVŽ‚UÈlš£°V@šV„kl™kU˜±U„ƒn™ƒlw¯UkwmKUlmkUmnkym@ō@U„mWÈU°l°anlJškUKlU„¯Èm@kmWV»kkÝLUWUx±b™@¯ma@ƒ¯™IƒJUxn„™K™ýƒa™V™Uݤóa™wLmxU@¯ƒUšƒƒƒ¹lmwmnXŽmJ@ÞV@UbVbkblŽ—@±êƒlI™l¯@ƒlW¦knÇJkm¥k@¯™Jmbóa¯bƒUV°ƒakXlšÅ`ƒ„„¦U¦ÇmƒLX¤mXnxm‚„ôšXša„VźUnŽUxlnlW„bššl@bĢV„ƒ˜nX„WbX`lLXk@ްKVz„Kl¤„nÞ݂Èkb„‚܁'],
'encodeOffsets': [[
108180,
35984
]]
}
},
{
'type': 'Feature',
'id': '6201',
'properties': {
'name': '兰州市',
'cp': [
103.5901,
36.3043
],
'childNum': 5
},
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@lW²LššƒŽ°I„l„šmbVb„KnbĊVlkš@XbÜU@Žkn°‚XIƒÆ™V„LšÓÞxŎUlôƒ„b°KzU`lXVaĊ¥Xal@šk™™Uƒ°ÑÈwUтV£ÈéVšš„@Vb„Jš@nnÜJ@b„„XK@īšóƒwlš@kÓmUÅmK@mƒ_k¥l¯™mkçǯ@nUƒaV™ƒwólXbm„™k™`ÛÔťèkkmÆkbƒK@U`UI±xUƒbWlX„mbVbÅÒólkƒƒIWJkšƒ@ƒz—Kݼ™@™xUx󎃄¯LWb@ŽÅ҄„±¦U`nbťĀUšVb„LšŽ„U'],
['@@ƒ¯lwna@mōȯK¯kW¤ƒ@@V@bĢñVLU‚°k']
],
'encodeOffsets': [
[[
105188,
37649
]],
[[
106077,
37885
]]
]
}
},
{
'type': 'Feature',
'id': '6208',
'properties': {
'name': '平凉市',
'cp': [
107.0728,
35.321
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': [
'@@ÆLUxÈxV°šLÇÞ@xn`Ü@X@nĊŽÆwnJmwUx‚aUkšw@V@w„aVmlLXÝl@X‚VĢmV°@nl@UUUWK@w„ÿVI²Òlmš@nÝĊýVV@nš„„šUłm@kV¼nK›ĢȤôK„blnKllVk²aĠ¥È¯ĸóVw@V‚_„xšmn¦VWôX„ƒÆ@Vbn@°m@kn@@lšb@k‚aœ@‚wšK@™šƒ@UlKVaƒWX™W²¹lӄw@_°›n@@_lKōķW™@ŽmLUWƒn™»Û@›l_Ç`ƒÛmm°ÅbWb@š—VWbƒUU„ÅaġlmkUġlƒ»—Lƒl™Um¦@ޝU™¤ÇkVUml¯ƒƒX™ƒƒx¯kVƒƒLUa@ml™IkyVaƒ_UV@„mmUVU„ÇŽVzUxUVU¦ƒa™¤l„nVxƒVk„@ƒmKUnUU@b™˜U„ƒ„',
'@@@Žż@™mlkƒġk'
],
'encodeOffsets': [
[
107877,
36338
],
[
108439,
36265
]
]
}
},
{
'type': 'Feature',
'id': '6229',
'properties': {
'name': '临夏回族自治州',
'cp': [
103.2715,
35.5737
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@š@ż»˜L„y„@l™XI„Jl„ôkÆÑUanaWƒXkW@™yk@U„ƒLƒmUšwš¯„KVlKœ¯Ġ݄݄VKƒ¯mKnw™k@ƒ™@™™»@a„K@ÅVJVU@њ¥š_Uy¯š@£UKmn@‚ƒšó¼ğ¦WmĵXݎkŽVLmVĉU¯bm„ÝV—wWlXÞW¦™xkmmL™šÝŽœ„±U@Vގ™š@„ÅÈW°X„ܼƨyUĮnŽWŽnXÝxUx°lVXJlôV'],
'encodeOffsets': [[
105548,
37075
]]
}
},
{
'type': 'Feature',
'id': '6203',
'properties': {
'name': '金昌市',
'cp': [
102.074,
38.5126
],
'childNum': 2
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@šĢȼ™„Çł°bœšV‚ƒń‚ÆǖŰnšÆ„ōĬǔaʠůĭš_kķÆ¥VÑș„çÜKšÅ@DŽƒVaU™m@aōnġÇk@ƒxĉ_™Wk£™ƒ±KÈ±aÅnƒ@ƒÝxƒ@kw›lkwōL¯wm`'],
'encodeOffsets': [[
103849,
38970
]]
}
},
{
'type': 'Feature',
'id': '6202',
'properties': {
'name': '嘉峪关市',
'cp': [
98.1738,
39.8035
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@llĊx„¦šl™¦š„kVVnšJVbǖV„kôV˜a„bnaWw„UXmmamUXkWKō¯Xm°™™»ĉÇ@UVƒK™ķkǼğb'],
'encodeOffsets': [[
100182,
40664
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/guang_dong_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '4418',
'properties': {
'name': '清远市',
'cp': [
112.9175,
24.3292
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lǯkÿƒaV¯™VaÈU„¥ÆÇ„Ilxšmnb‚Uœxl™„Uôl°kš„„Wl„š™VwUanUl@„xVkšaX¥‚kU»„aš¯±@kka@ƒUwmUkwƒJk™˜„±k@ƒ™™L@ÝWUwV݃—xÇU¯ŽÇX@m™Åƒ@@yĉ£VmUwȗ»ÇšUn„lUnWU¯`Ukƒ@@„™x„Ž@bÇxX¼ƒVVš¯LšĀk‚ÝLƒ„¯@VŽƒĀ¯lnĊW¦kVÇôkUDŽUK@ţ™U@a™™ó܃UU»ƒ@™¦k@Vx„KVb„n‚š@„Æ™„l„@xšƒbWšnlU„lxÈlV„ȰƄ@¼™„@x„šWxœŎ‚V„š„š¥ššnƒÆkŎ@ÈÑm™„K@¥šk@™ô@„nôV'],
'encodeOffsets': [[
115707,
25527
]]
}
},
{
'type': 'Feature',
'id': '4402',
'properties': {
'name': '韶关市',
'cp': [
113.7964,
24.7028
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@W™Xk±Ñ@ƒUw™mUwĉwlmn@Æwn£mkIš¥ÇÅ@¥šaƒón£nWWwš£V`Þ@šnVml@xô¼„IV¥ƒkUmkamUkVWwÛ»móƒ£UVÅKmn@x™@kbmm¯a™Xka›VĉaUb݃ƒ²—‚lš„IlxnVVx@„lb@l²™°ƒbV¼lW¦™bUlƒwk@mVVbUxóš™@kƒƒX™ƒ¯lókƒVkš›wVma™nkwƒJÅȃ¦ÇVUbšŽ„bl°ŽkÈ@x™¦ÆÜ™°@„°„¦óa™VUôlUlbXl@nÜV„„nKlŽnIVÞ°Wš„°U@bnm@¥šIVƒ²Ulƒ°VnalzXyl_Vyƒ¦lƒœLlxš„@ŽÞbšKm„knVWanwƒÑVwČº˜@n_ÞV„aVŽÜIœl@„˜š„VJ@aš£È@˜™@km™„aV¯W@_ƒa¯KmbkÇkLmwƒ@Å¥'],
'encodeOffsets': [[
117147,
25549
]]
}
},
{
'type': 'Feature',
'id': '4408',
'properties': {
'name': '湛江市',
'cp': [
110.3577,
20.9894
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@ƒkXƒ™@a„UUċlk„Jƒk„™@wVJXUWk°W@nKnwlUlš²ƒ„blU@‚lI„l@„XbW„šxnm@lW@w„wU‚JX¯VU°`ŎóˋkÝÝkÅ@ÇmğÈřmw™aĵV›xUہ»°™ĠǷnýmóX¥ɅĵҏÇ@°²ĊU˱ĮU¤Ç°™Ā¯ɐnżUĊĊĬV@脎@ԃÒU¼l¤nƒĠb„êVĠ°Èy„zVaV‚nUÆL„ašbVl„wÆ@'],
'encodeOffsets': [[
113040,
22416
]]
}
},
{
'type': 'Feature',
'id': '4414',
'properties': {
'name': '梅州市',
'cp': [
116.1255,
24.1534
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„‚šlW¼x‚¦@lœVl™lLkè„a@zš¤ƒĖ„¼UxlnUKUbÝlU¼lb@„Vx„V„klJÈwV¯š@ĠlÛ˚nƒbkšÆźÞƒUÈôklmšL„¥‚LœW˜„„™nKUkVa°V„x@IVV@x°bUk„a™a@mV@„@y„w‚L„ÑUwVUšV„‚„U‚bÞVVann‚@XwÇÿš¯²aVamkXaÆ»@»nw@¥›UXaƒkbWa¯KUw@¥m@kwmLU»UU™J@kmU@UUWUƒ@ƒyƒanwmçÛl¯ƒŽ¯UƒmKUmƒwVkmÝXbW@XWÝbƒk¯@±‚w@»U@W¯Å@ƒÇ¥UƒU@ƒƒ™IU™ƒakJƒĀ„ꃰšþƒXkamŽ@Žƒ_m‚@X'],
'encodeOffsets': [[
118125,
24419
]]
}
},
{
'type': 'Feature',
'id': '4416',
'properties': {
'name': '河源市',
'cp': [
114.917,
23.9722
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@°VlmX¹laĢÒlm„@„„šV𣂂@¦Ģklynn¼lW°z„W„„°VbÈV@lÆbnn‚JškX„šVÆašÅ„W@™ƒUUw@ƒkaV»ÞkVaVLkmVwƒ»„ĕ™£@yƒblçkKkš›U@k¥‚wX»™kmӃ@Wn¯‚I„`@nlb„W™ý„¯ƒé„ÿlI@™XUmWUwƒ@@UJU„Ç„mKUV@x™„ţk¯¯LWƒƒnUxK@ű»Vwš@¤WX@ŽÛ¦@¤ÇIȼWxXŽƒ@Wx—w›ŽUnVbÅèmVa±²UWl@Žk„„¤nôܼXxlUnVlbVn„lU¦ƒJó»@wnkmU™‚Ý@U_™¤XxmXm¤„ô™b@¦Èƙ¦lJn'],
'encodeOffsets': [[
117057,
25167
]]
}
},
{
'type': 'Feature',
'id': '4412',
'properties': {
'name': '肇庆市',
'cp': [
112.1265,
23.5822
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@l@š¥„@V¼„Vôۚš@bšV@ŤVLȃlVÈólUX¥mĉ°k„ÿU°@„ƒÞKl™ÿ°KU™„UW»Èw@aƒšw@ƒ„@nm@w›£kÓVUVn„K𙙣Vamƒ@nkKkbÆǫma—kmLU¥™UmƒÛwmVU™mUƒJ—ÇaUxÇIn`mb@Þ¯b@„nJ@nl„U‚V„lVU„L›—Û`Ç_¯`mš¯I™bĉWċzx±J™x𐝯Uƒƒ_k@™šƒJ@Umb„šXôlLš˜n¦@¼ĊxlUXŽ˜xUbL‚Ġ„UnVĊwlšUš„b@lW„X„‚˜@ÞWxXš‚Unb'],
'encodeOffsets': [[
114627,
24818
]]
}
},
{
'type': 'Feature',
'id': '4413',
'properties': {
'name': '惠州市',
'cp': [
114.6204,
23.1647
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lbšW°bnnlaš@@wnmÆLVUkÇlƒ@Xk‚V²±‚bnUÆçUaVmœ˜xXw„@WXwÇ»ÈJ@£Ü¥@XW@£°™‚bUx²¼@ƂLVw„mX„°K°Ťlšƒ@wVUnLȃVƒVIky±wkƒKU¯ƒÅkƒ™XġÑۃlwUwlm@m„nKWašÅm›¯óÇmğb¯alĉUwķbmb@lÞÒVn—šmĀŹ@VŽƒbVŽUnmakLm`@xĉkklVÔVJVn—lV„UnmJmaLUbl‚™zmŽkL™a™‚ō@@zš‚V¦UŽV²kJ„nÜU@˜VXUށL@„lJƒL@bݤUnVŽ—b@xVnlK²„Vx°V„xlI„lkVl²k¤@n'],
'encodeOffsets': [[
116776,
24492
]]
}
},
{
'type': 'Feature',
'id': '4409',
'properties': {
'name': '茂名市',
'cp': [
111.0059,
22.0221
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@‚LnÇlk„KnkÆL„ƒUm™ÈxlUœJló°n@ššanŽš„„a@ƒ˜@X_@mÝóóU@a™aU¯mL¯ƒƒk™ÇVwkw@V±Ŏ£@™™@šalw±Vk@m„Åm¯™ÿŃƧIÇ`ōô¯_UVW°IV‚ƒx@xkX@Žmn™wXƒWa@ƒƒkkJ@kVƒ„k™kVmxmL@‚¯XXlWVUI@xƒš„lƒIklVȃV@b„šlW@„@nUxVblVxkôlx™n„‚y„šnIƻư„aXwlK„bVnƒŽXb‚L„¤„k‚L—èƒVV¼ƒŽ²IlĠVX„ynz°KVx°@VlœLlblKœš'],
'encodeOffsets': [[
113761,
23237
]]
}
},
{
'type': 'Feature',
'id': '4407',
'properties': {
'name': '江门市',
'cp': [
112.6318,
22.1484
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lUXx°JWnnƚXVš„W„X@„šºVLV¯nU‚Vnb™ô„x‚aXmW™XIšŽUb°xlK„œK˜xXÞ°ŽšXÈ¥Ü@„ĉޏU™‚çš»nóƒVma—x‚¯UÅU¥Ý¯@ƒƒç@ș@çĉÅUmU籃ĉKÝxÝ_ÅJƒk¯»ó¯nmèkǀšŽWxœ¼mnUÜġ°@¦@ƒxƒLkŽÇaVnUxV„™šVlnIlbnÆÆKX¦'],
'encodeOffsets': [[
114852,
22928
]]
}
},
{
'type': 'Feature',
'id': '4417',
'properties': {
'name': '阳江市',
'cp': [
111.8298,
22.0715
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@°„nKV°šb@bôVÞô@n„VlÒôÆUnlnn@lmkmVkƒaÈkÆÆ„™‚ÅÞ»ÆKXkW¥ÅLmÅkamJUkš™UƒVwUmÈbl„K„w‚@@¥Ģ¯VÛnm›»Xw™lƿ™@kbW™—aʵ@óL›ƽ@™ƒƒLn°ƒÆ@nUl‚²kx™b@‚š@šō¤U²@ŽlxUxšÈU°lŽ„'],
'encodeOffsets': [[
114053,
22782
]]
}
},
{
'type': 'Feature',
'id': '4453',
'properties': {
'name': '云浮市',
'cp': [
111.7859,
22.8516
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@V„Iš™l@„`V„°Å™šw²I‚wČyĊXša°Jn™°_È`Ü_°˜œX‚KVƒkUUƒVkƒ@mmI@ƒ°a@Ýnam_ÈJVwlĉX@„šlUšómaUmVU°UK™¹@ƒƒWƒXU™™WmÅXm¯IWwkVWlÅLݼÆl¦ƒšÅÅÇl„bUllnknm@kmVmóÅkуUW`—@@„ƒb™ƒm™b@™¯mkô›IkVÇwnš„VƒÅKmlƒLklmȁKƒšVĊK°²„`n˜¤n„U„bWl„xVx™LUx@°nXm`VklVxmnnx'],
'encodeOffsets': [[
114053,
23873
]]
}
},
{
'type': 'Feature',
'id': '4401',
'properties': {
'name': '广州市',
'cp': [
113.5107,
23.2196
],
'childNum': 13
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Ș¼VxUnĊ¤@z„@šÆ@nÈW°ÈV˜w„ŽUÞVxÞX@ŽšK„šl@ބVaĊbœU@ml£k±lUƒkkJƒw¯UUw±ƒkLUm@w˜aUVmÞ£@a„KkI@ƒ‚KVUW@—ÛVƒmlIU±V™@yğzƧǃƒšƽĠřšÅnī±m@ƒ²¯lƒ°@nÝÆóUll@XnÝVU¦mVV°—„™Jƒn„b@°mbn„ƒ‚@²¯‚¯wVwƒ@@nmxX¤¯L@ŽVLU„m@@l'],
'encodeOffsets': [[
115673,
24019
]]
}
},
{
'type': 'Feature',
'id': '4415',
'properties': {
'name': '汕尾市',
'cp': [
115.5762,
23.0438
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@‚„@VxnXWV@š„bVššJ„„V@ÞÅU¥Ċxš£UWU‚wÅUU¥WVUkĊÇnkV`°LV™„wƒƒnU@™„ƒlbĊ¯„Vnalšš@@çkUÝ¥ġaó¯ÅaÅLŻÆUýmy¯ó@ĉÆó„ȯw™ÆXbmLƒ‚@nknVxkx܄ĢҚW„Æl„„Ll‚²xlz'],
'encodeOffsets': [[
118193,
23806
]]
}
},
{
'type': 'Feature',
'id': '4452',
'properties': {
'name': '揭阳市',
'cp': [
116.1255,
23.313
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@V„Ȧ„Æ@X°V@@¼‚°@„lÞaWXX@‚aÞWlnUŽ„xVnnL„‚°V„@k‚l@„ak™@mlk°aXƒ±„nwm±™²¯JV²@ƒwW˜—_mƒa„ƒU@m¯ĉUф™šJl™„ašbVn„lĸLlƅÛDZwÝ@ĉxó@è™@k™mbƒUĉ°kaƒ„@šmV„„ƒxUš¯KU_mlĉÈVlXUV¦ÆVxVŽVX™¤ĉwV¦ÝÆ'],
'encodeOffsets': [[
118384,
24036
]]
}
},
{
'type': 'Feature',
'id': '4404',
'properties': {
'name': '珠海市',
'cp': [
113.7305,
22.1155
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': [
'@@„è@„Þ°V¦VƁ°˜wnb„UÆ»nçÆ@nxܤ²llU°VnÈJސ°UôéšķUklƒô£VVˌKÞV°£n¥ƒ£ȗ™Ýy¯¯mÅkw¯bÇĔğ@Ýn¯ĊƒōŁŻƒķJ@Ț',
'@@X¯kmèVbnJ‚™'
],
'encodeOffsets': [
[
115774,
22602
],
[
116325,
22697
]
]
}
},
{
'type': 'Feature',
'id': '4406',
'properties': {
'name': '佛山市',
'cp': [
112.8955,
23.1097
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Èb˜Ž„InVVšnUÜxn„šVV¦nK˜lnbÅǬlalL@mn„Ubš¤l¦™šƒLUmUVlԜ¤@xmnVl°_XVVmƒkVmș@kn@VƒUK@°KW£nw@m„@Ux°x°„mƒna@¯ƒa„mšIU»˜ƒU¯nUV¥ÞUWmk@Vk¯™Ukn›ÑƒĊÛ@Ǧ™—w›Lk°ƒkL¯wVa™WJXšWnbƒwkVƒ™W@kĊ'],
'encodeOffsets': [[
115088,
23316
]]
}
},
{
'type': 'Feature',
'id': '4451',
'properties': {
'name': '潮州市',
'cp': [
116.7847,
23.8293
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@°ŽÜknèmx„b„z„@V‚VX@VnV@lšIVVV¼nKlxn@@¦Vx°LXbla„ŽWbœV°£¯™W@nW@™‚aUñVœwWš»@¥ŤÅUÝǓÝóV@ńǎkUVmƒIUwÅVWÇX¹›—@W„¯bkl@nlšƒb@‚kġށn@l'],
'encodeOffsets': [[
119161,
24306
]]
}
},
{
'type': 'Feature',
'id': '4405',
'properties': {
'name': '汕头市',
'cp': [
117.1692,
23.3405
],
'childNum': 2
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@‚@U±°Iš±n²mx²ƒ˜@œWºXÈÆUVx„JUnlVȍ@ŃôUǔÞVçn»VyĢÛVm@»kaÝUǼóšÛÈķKċ¥X„¥Wwğk™ƒ¯@ƒwķKƒkUm™aƒbkš™IƒšVÒ°Ċ@n„VU¼ƒ‚„bn˜`X—„x'],
'encodeOffsets': [[
119251,
24059
]]
}
},
{
'type': 'Feature',
'id': '4403',
'properties': {
'name': '深圳市',
'cp': [
114.5435,
22.5439
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ÞLš„@xšbV„šVš™X°Kô¥Vw@anU„胐š‚lkĊl@wn_lKnbVmU„aUź@nÿ˜™UmÝѯUƒbk„@ÆkxŻ@™aÇX—wƒJƒƒ¯LķÝUĕ™ó™ĸóêWº@b²nmĬ™Æ'],
'encodeOffsets': [[
116404,
23265
]]
}
},
{
'type': 'Feature',
'id': '4419',
'properties': {
'name': '东莞市',
'cp': [
113.8953,
22.901
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Ŏ@ššblKnšykVa‚KnbnIVmUƒ˜kUmUIUә„ƒçmV@bUxó¦¯LW‚¯š™L™UUƒ™a@w™ƒÝKğŚ™ƾ„„ƨÈĠy'],
'encodeOffsets': [[
116573,
23670
]]
}
},
{
'type': 'Feature',
'id': '4420',
'properties': {
'name': '中山市',
'cp': [
113.4229,
22.478
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@‚XœÒlmšôÞÅ@m„¯°k„±‚@@aX¹¯VݏÇIUmV¯kk‚±Û£mw@‚Őmèżmô™¼èVš'],
'encodeOffsets': [[
115887,
23209
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/guang_xi_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '4510',
'properties': {
'name': '百色市',
'cp': [
106.6003,
23.9227
],
'childNum': 12
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lklWXL@VšI‚l@XnJn@VUUalk@mK@kny@UlU@a°™„ƒUU@VmaU@Ua@UWw@ƒn@KmLm@alkšmnI‚m@an@VIUamWÅImwU@@a@K„X@JVL„UVmUaVkUa@m„@@Ulmkk°ƒUaVUlKXbVwVIkaVmUk@KVk@a„aW¯m@w„¥laœX@KmaškVmnUl@nxVKšInU@yVaVIV@na°KlxX@@_lmXšUV`VIV™V@„n@lšbn@@WUkValK@²yl@„„VUV@@K°L@KU@@UVaXIVVV@naVkVa@K@UUK@UUa™LWa—w@m@K@UVVƒ@mVUUVKnL„mVL„K‚bVK@UUIk›mI@mUIVK@IUK@VkLƒ@WU@mU@WmUk@ƒI@VƒJk@WwX_@amK@UUWkIƒ„ƒK@LVb@mVmakL@J@bU@Ux@xƒbmI@`ƒIwm@UbmKUaUWa¯UkJWV@XƒJUU¯LUmV@ma@kkamKwƒLUUmWVkkm@aVUUkVKnVVUmXK@UW@km@Ukkm@@W@U™kUy@I@aUUmbƒ¤U@kUmL@bmJU@Ua@wkLWWkL@Uƒ@VaU@ƒLUakKWbkUWVkKkLVLUV@JVbƒz@Vƒ„@ƒVmUU@kVmK¯@VƒU_™VWakVmIUKUaU@@bml@XU@@V@LmKUV„mVUKƒƒKƒbkaUXƒKUL@x@V@l@„mxU¦„V@ŽlL@V@Ln@@VV@„nlKUaV@nLUbmJnL@VWLkbmV„@@L„W‚„XLlx„VVIVV@x@V²blUVm„LVUœK@kWWXUlV@Xl`„LX„l@@VšŽƒn@VnbVš@lVUVUÈVbš@@`UXU`l@@XUVm@kš@xmVknUJVXUbmKULmbx@VlJ@LVbkKUbVLÇUUVƒUVmU@VaUkUKƒVUwmLkUUVVlƒbka™XmwƒKUšVVU@@V±Uk@VWUUm»XamU™bƒKk™`ƒ„™U@UnWW_kKmbUVUVmnUV@„nJVUlšUbU@UV@n@JmI@VmbnVUXlx¯ŽkKmnVV@L@V™bkV™Umm™@Ub¯LmlUƒL@VWLkmkLmmn£WmnKU_mW™š™bnbmxƒ@U¦UJU„@Xmlk¦@‚mnUUm@@Jn@lV„ÔVJnIVW„I@a„ƒÆK@I@aVK„IlŽÞnnl@nl`nbÆX²l@xV„@llbVn²ŽVVl@nn„V@IlW@Un@@kVa°KšnÈmVaVXUlaVƒÈU„VlwôUlynIVašan@lVXb‚Iš@n¥la@Kš_n‚@bÆx@XnJV„nKVz@`VXVšU`@bƒ¦UV@VšIlx„UnV‚K„XÈbšVllšbVbnVn@'],
'encodeOffsets': [[
109126,
25684
]]
}
},
{
'type': 'Feature',
'id': '4512',
'properties': {
'name': '河池市',
'cp': [
107.8638,
24.5819
],
'childNum': 11
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lLVl„bVV@nXVlI@JVX„mšn„W°b„IVV@‚ln„@nalVUb„nW‚@kVkÒlbVKn²°bUŽlV²@˜X@`nb„aUI@ƒ°wlU@aXJVI@aVK@wUamIXm‚@XUV@@bV@Vm„ImnUUwVaVKXU‚nVK@akƒVwV@nL@UV`n@@X‚lnIUJl@X¦˜V@aUIVm@anƒV@UwnL@VlbVL@KVVXUWƒ„wUUVUka@UVJnUlbnalbVVn@°„„LV`Þ@šXVxV@@bVlUVVbXnWlXnmlš@XXWVXJmbUI@V„llUVkn@@VWV@Vnb„@VXUJVnn`lLVk„a„»lVšLnw@WV@lInw@WnU@U@m‚knUVó„K‚wUmUXUƒU@@wVJVIl@XKVVVbVI„J@Un@lŽVLnm„b@U@Ul@nUš°VUVJnnVJV@„@mVU@ƒ@wkUVwkKWk™yUUkU@alkÈ@lJ@x„Ilƒ@UUWVkUw@Kn@@kmaƒVUl™UUL™ÇƒUUKl@UUmL@aXU@mlUUwmKkUUVKVUƒaƒKUnK@U@Vl@XUWU„KlwX@šb@K‚@XkV@UwWJka@aUwmV@U™@@U@wUm@»kLWVkIWŽXnmV@VkbmKƒLUbk™Va@aƒa@@aVU@aVak£@ƒ±UkVU¯V™UUƒJVƒUIƒ@kxmUmWUbL›w@K@aU@@aVU@Kma@aka@_VWkk@UWVUKULWKULUš@KUnƒwVaUKƒxU@UmaƒL—m@kVmVa@UkƒmI@ƒ@KmIkxU@@K™U@mmakI@VƒLkmWkkJ™_U‚@V@L@n˜xXbšKVb@VVL@V@LUbUlmbU@UUWJUb@VV@@L¯K@LU@UVƒƒk@±z@‚kLUbVl@Xm@™akm@ƒU@UšUJU_™VWŽkn@`W@kw¯LmbU@UJUb@zmV™JULmwk@mVUn™lnb@L›Wkbƒ¦@x°nXŽƒb@bUl@LVlUnlbUJUxWakLUVVb¯„llkn@Vƒ@@nVbUlVbUnƒVUK@IƒW@L@bV@nxÆJnXVbUJm@@bnmJ™nkl@b‚nnK@L„m‚@Xx@VVbV@nb@UVVƒ„¯š@bkV@Vmz@lnLl@kŽVbUVm@mI@Wk™J@UWKkXkl'],
'encodeOffsets': [[
109126,
25684
]]
}
},
{
'type': 'Feature',
'id': '4503',
'properties': {
'name': '桂林市',
'cp': [
110.5554,
25.318
],
'childNum': 13
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@nU@J‚X@`XLm¦Vb`lšVXXWš@VblČnVšŽlanLnmVLšK@_Vaƒ¥@kUa„@VmVb„aV@XVVzlVVK@knKVmX£VKšLlbnš@b@llL@xĊôXaV@°È@¤„bn„V@@Wl_„V„U@W„nVamw„wVbn@„K‚VšLX@VmVUxlV@šnVV_nK@m‚I@Wn@@IšUĊ@@wVWX@@I°VVm@wmU@m@IUƒV™kƒlkUmmkÅV@@aV@@Wn_UKla@kšaV„šlVanb@k„@@KlVn@@aV@nIWW™UUaVU@™kKmwU@UImKk@UU@w@W@‚™k@™UkWƒ@mk_W@Ua@a™ƒƒ@—¯ƒmV£@mƒUUam@—kWakƒVama@UUm@nw@alaUmnUlVlIœV‚™šLVyk£Vm@k@UUJkƒK@kmKUw™KkWK@UXImyVwnI@m‚ƒkUlkUKkUVmƒw@kkJWUÈm@_k@@aƒaW@U„UJUwU@@IWKkƒmUUV@nVl@bVb@bU‚UXƒakw@ƒWUkbkKƒbm@™xUlkLm@@wmKUX@‚™UaVW™XVmU@@UUUƒxkmWXkKkUWaUaUb™L@`UL@LV`UXmK@VmakLVbkL‚xUJUIVbUVVb¯KƒV@Xnl@lVXbmÒnV@L@VWKkVUIWJkIƒŽUamUUbm@U„kU@JUbW@X„WxUam@kbVVUnUJmUUV@bƒU@UUV™@ƒVk@ƒbƒmULV¦U@V„U`VLUL@xVbn@UJ@nWJXXVŽVV@bkxVbUx‚Lšš@x„¦@šU‚lXUVVlULV@@šnŽU„ƒb@xl„nJVnlVknUlVUbmŽU@ƒbVš„x'],
'encodeOffsets': [[
112399,
26500
]]
}
},
{
'type': 'Feature',
'id': '4501',
'properties': {
'name': '南宁市',
'cp': [
108.479,
23.1152
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lKnbnU‚@Ua@K„L„ƒlJVX@VnL@bW`Xxl@„I@U„Jl@nV@X‚V@nXV„@lK@UVL@JULVJ@nnJlœVJ@VULaƒLUKƒnmKULVVUŽ@nU„š`lIXlln„K@UlJnb@nšV@LV@lwnJ@L@„nJl„@VUbUn@l˜n„KnbVŽV@„wVLUb„xVm@LV™VKXLVKVLXU@VllUX@`lb@bnb‚L@ŽUV@bV@@b@Lœx‚KVanXVƒUUmVUUUaVUky‚UUa„ImK@mUUVUkKU_@W@UVVVIUW„UVaVU@UUKnƒ@k@al@ll@bnL@b„VUV˜X@Vœ@@b‚Knblmn@V_@aUalL@a@akK@kVKUKlwUUnV¥VmU_VWVIVaX@Va„alńK@LVJnalL@LnK„wlVUw‚mX@VXšƒlLUVnblaUmVUVwXU@Wm¯Va@ÞKnw@w™mšk„»‚UVW²a@_mW@U@I„y„LVUUKW@@™„LX@VUV@@yVU@UV@nwUUmJka@IU@ƒmƒVkaW@UwUX@`ƒ@kLWUk@mƒkUUm@k‚UUWkUƒkWxk@@VƒK@nV@UVaƒUUJmIkVƒ@UamLUbkVmamLka™@ƒ‚kmL¯WI@wJmwƒx@akU@aUKmbkaW_nW@_U@Wm@a@wkwUKmƒk@ƒbkb›w@mKUkkU@J@bW@kVWz@bVUa›VUx@„ULkJWbXVVXƒ`@œmJUVU@@Lk@WbU@UJlnXlm„Vx@Ln@‚b@K„LX„WJUUW@kƒaUVUbmV@nnV@n@lVLƒVmLX‚mXkV±@kxÅL›šUbJWIÅJ@I‚mXalkUamKkškL±aVwKƒUU@mÞnbWJX„m„@lbmKULWUUVkaƒbnn@Vl@VVV@VƒbVbnLWLXJWxXLV@@VV'],
'encodeOffsets': [[
109958,
23806
]]
}
},
{
'type': 'Feature',
'id': '4502',
'properties': {
'name': '柳州市',
'cp': [
109.3799,
24.9774
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ƒwU™„aV@nVaUVklmkUUmmIkƒ@w„aVƒm@™U@VKUkVUkWV@™ƒ¥@w™™KVwUalw@aUUUWWXI@mVIm@Ua@wVKUKV_UƒV@U¥VK„n„al@„Uš@VU@V„V@aVUnVVIVmUUlan@VbXwWƒX@Va@IlVVƒn@VanVVb„lJXIVJlUXL@U@KmUnÑWakU@mkƒJUI@mk™@wUmmUV@JXaWIXWmaUIƒJƒkk@W„nJ@„ƒaUak@›kkJ@kUKU_ƒ@myUóWUkm¥kUmL@KUKm@k_UmVa@ƒk@@UmU@mm_—JWIUVUŽWLUlbVUJÇVUIVwƒKUVk@mU@n@lUL@Km@@l@L™VƒzJmUU¤m@UbV²U`U@@¼Vn@x@Vš@@VnUVx@blbXIVxU@Wl@@L™aW@kxƒLXVWVk@@U@VmLVŽ„L„bUVULVV‚lnLVxkV@nWV@bnKVVk@VL„VšÈVKšVVk„Unb@lm@@LVxUlVX@Vk„ƒJ@wkIÇ@kl@blVVVšzXllLUxlV@x@„UV@nƒ‚U@UImmUIUV™¯mVk@@V@VƒamnUKkm@@VƒIUJUaUUWLk@UJUI@xV@V„VWVnxƒLUômVV„@VkVVVUnV@UVkL@VVV@bVxla@bkXVJVn„`nU@bƒb@bVL@VnJ@„l@šV„aU@@_lW@UUU@Unƒlll@XLl@@UX@°bVWVanLlknVV@VVX@VVƒnUŽVLmbXJ@nllXX@`VXƒlmaXVWk@Wkƒw—J@„VL@J‚bnU@bn@@bVKUnVJVIVVVL²a@bV@@Vl@nUVakalmš„UL@VUL@V‚a@mXl@nK@UlK„L@Vl@@nkllb@š„Vnn@‚šnV„™V°l„šVInwlKXxlU°Žn@@ƒ‚I@UnVlakUJWkUK@anUWK@_ÞJ@U'],
'encodeOffsets': [[
112399,
26500
]]
}
},
{
'type': 'Feature',
'id': '4514',
'properties': {
'name': '崇左市',
'cp': [
107.3364,
22.4725
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@JVzšl@V@Xn@ll@VlnX@@VWLnŽUVmUULVlUV@blnUlnXVV„K‚xnLlb@lnbU@Vn°KVV„I@WXUlI°VXb‚VVbnLVan@‚x„J@_nJ„a@wVwV@@a@IU@UU@WKXwWIXKmKUa„a@U‚UUUk@@Umm„albVUXVVKnL‚a@knƒWƒXImanÝV@„V‚LUx²blKl™nLVbklWbn@JÆIXJ‚IVaœ™ÆKlw²@lUnWWnK„UUK@k@mmU@mnUVaVU„b@lVXVXIWƒƒK@Lam@@KUwnƒWkkmVIV@Xal@@KV@VUnI@›„_UWWUkam@kkm@ka@mƒk@wkJWIUU@WXkW™XkWWLUUƒ@UakLƒW™XV±VIVWUU@anUWaUK@IU@Vak@@UUKWaƒ@m@ak@@wUkla@mUaUklakwVƒ¯¯@WWUkLkKmaƒ™kLUnV`UxWX@Jkn@bmlƒakkk@ƒb@l¯bm„ƒbJ›b@VXn„bVV@„ƒbƒJUkkKWVU@mœÛVUUW@UVUJWXkVkKmUL@WW@U„Vl@XXKW„XJ@XVlmbUxnnm@UlVnV@XVm¦VJb@šmLkKÇbXblVkn@l@bWnX`V@@IVV@ŽV„V°n@@_naÆVVbUVVbUJnzlVUl‚XkV@Vlx@X„VnxƒbƒKUK@b¯VVUV™L'],
'encodeOffsets': [[
109227,
23440
]]
}
},
{
'type': 'Feature',
'id': '4513',
'properties': {
'name': '来宾市',
'cp': [
109.7095,
23.8403
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@nVlw„@VJU„„IVVUšV°lU²V@„l¤Ub@bUV@b‚@„b@bUblšVa„KnLla@UnUWmXlJXUlKV@V_U±Van@V£nV‚I„yšU@K@kn@@LVK@k@mnVl@VU„LUxVJÈUVIU‚aVkXKVVUXJ˜In`@nnV@Vl@@„UbVnl`n@VL@LnKlVn¦VlôXV‚nz„@V`VL@llIœll@Vb„b@ƒmIXƒl@„l„IVJnbWXXJWb@IU‚nVVn@xlš@nVJ„I@W„U°LUaVUUaVJVIwlKUalKnb@UnLVWU_@KVK@_šKVa„@VKU¯VLVKn@la„aUkU@maVU„J@k™@Um@XmbkyVaUIUU@KV@laVn@KXKWUkUk@ƒaW™UUVw@aXKmƒVaUUkšmIƒlUU@wUa™xUmmU™¯™U@WƒLUmVIUym@UVmUa@wmw@çm@aWLU„™JUIUamKmL@™aƒx¯¥ƒkU¥U@±„k„UVmKU_mJUbkKm„ƒLÅǙ_@WWUXUmaVUkK™„UWW@nVxkUƒxmL@KkKmbUI@KƒLkƃbUbW@UbUJUXV`UnU¦mŽVVkxVLUL@llL@b@bkKVb@bU`m@knmaL@a›@@U—WVUƒU@amK@akkk@@b@lm„VL@VUVUbƒVVXUJUU@V@XV`lLUVVV@nnLƒJVbVlzUVVbVVnUVVU„'],
'encodeOffsets': [[
111083,
24599
]]
}
},
{
'type': 'Feature',
'id': '4509',
'properties': {
'name': '玉林市',
'cp': [
110.2148,
22.3792
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VJUXVVXlWX@V™xVnX@@`ššULWŽUXÅbWK@mULUUmJ@n¯b@l@VULVx„x‚XU`VXXJVI„V@nm`@nUŽVXn@lWVn@b@Jn@nU@Lm`@Xn@WJƒ¦U@@VnL„lV@@Xl`nIlJnkVL„w@KVK@UšaVL@bVKX™lUUKVK@I„VšL„a@U@WšLUlVL@bU@@blb@VlbUxVbXUVJ@xVL„U„lV@VU„bVLnKl„XJ@L‚b@an@VanL@`VLšKV_UWl@U_„a@WVInlVUUUVm@I@W@wVakIWm@U@ƒXwlaVbnI@ƒm»Va@aXaVLšU„»@aVa@k™KkL@KmU@WƒzUK@wU@VWUUVUUKUa@mKmbUK@_nWVaUkVaUaVUVLXKVƒVUVmVI@UkKkLm`UkW@UwWW_„UaU@WakXmK@xUXƒJkƒUUWUk@Wl—mJ@km@@aUKzmyVk„a@kkWVUU¯lmU@@w‚kkmV@Vk@mÅIƒ‚Ukƒaƒ@Ub@m@UUU`mUbWaWmb™X™XKWIXUWm@љ@y@UkIUJUUWLUWƒL@UkVUxW@kaWbKWnXxW¦n„m`XLVlUbVbUx™I@JmLUKUb@VW@@bkL@b@VlU@xkš@L@lƒxXxWXX°V@VVVbUVV@UVVbULVnVJUb²b‚aUb@VVVVInlV@VnXaVUšlI„VUb'],
'encodeOffsets': [[
112478,
22872
]]
}
},
{
'type': 'Feature',
'id': '4504',
'properties': {
'name': '梧州市',
'cp': [
110.9949,
23.5052
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VbXblVlLXWln„wVV@VV@UnšWUXVbš‚@VWXa@kVK„UaVaVkšUlyX@Vaƒ—VmUwUaVU@UÈymI@aU°@š™nWV@VaVaw@IV@VmnLVK@kmmna@™„™VbVI@aV@XbW`U„„LUVVx„@VbUV@bl@VLXblJn¦lL„°°@n™@K@UlLnK„a°LWbnJ„¦UÒV„UllLlVnKnbWnn„V`„w‚@@Xa±™n™l@XKV_„WVkVa@kVyUa@wU£UW@UIVW‚@@a—wWaX_WKkVmUULmak@UJUI@±m»™—k@m»VyUIm™nmmwnkUmVaVIUn_mW@»Vk„@VwkmmUXa@IƒaVm—mƒ@Wm_U@mIUWóLmUk@laXmmkUK@UmKULUUmWULƒ@VakU™@Ub@bƒ¼™VUKWb@bUbn¼@„mJUakbWx@„@VXnlJUb@x@X@JUnVVUVmkUJ@XƒbV`k@VXU`™LUK@_mKUbm@@b@„U`@nlV@b„UnbVbn@@`VbUbVV¯bm@@mJXb@bVnUllVXUlbUl@LU¦VVmŽkLVb@b™l@V@XlK@V@nUJUz„°mށwmLmlXbWVU@UUUlƒIU@VVmV@@¦‚bXbWxX„WlXVWL@LUmkbU@@LVVVJUblzna@WVnš@@lƒIUVnbV@Vlƒbkbm@ULUKV°ULƒ@'],
'encodeOffsets': [[
112973,
24863
]]
}
},
{
'type': 'Feature',
'id': '4511',
'properties': {
'name': '贺州市',
'cp': [
111.3135,
24.4006
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@nL@xn@lKVkšwn@„alLlaXV@„lx„bVWV@aUa@aUk@mVUnVl„XL@JV@VxVIVƒX@„b@bl@@`ÇnXVlI@l„xUnlVVLkllV„@nmJUxnzWJ@VXLlŽšLVxnL@l„LlŽVI@V@lUnl¤Uz™Kš@„Vl@š„L‚l„Lnš‚b@VnVVU@k„a‚Knxn@VkVJ@ńUlakmWIUaVanm@_UK@UVWUa@klXam™U@Vmƒ™VIXW„@lUVknVlKVLXŽVXšW@b@VlšnnVL@KXL‚Kn@lb@UnW°@Va„X„WVb°aVa@I¯aUkUaVKVwƒaXk@a„a‚™@wkm@alanUVw@alK@Umkw@UƒaUmU@WXUaUK@UW@UaVWI@¥Xa@w@WWšVƒXwƒU@mKUXUWVU@a¯kl@akU@UULmK¯VUVW@U_m`U@@xVbUz@lUbUlƒXU`WLk@mš²šWb@ށ@ƒxU_mƒXmmamLkUkKVkUƒƒ¥mIXa¯KƒbmLkK@V@Lmš¯@ƒ¯kKm¥kIWaUKk@@aVUUaƒ@UwVUƒKVƒX_WaU@@bUJUaƒš@šmbnn@lULmKUnU@@J‚xUbUbU@mX™š¯@VŽ@bnJÇz@VUVVbVxUn„˜UbW@kz™VUlUbVbƒŽUL@lWb'],
'encodeOffsets': [[
113220,
24947
]]
}
},
{
'type': 'Feature',
'id': '4507',
'properties': {
'name': '钦州市',
'cp': [
109.0283,
22.0935
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@IlVVlnL‚@œxla„al@n„VLlx@x@bXnV@@`mXX`lbnaVL@blV@b„wnx‚I@xXJ°nK‚l„š@lbnKnblUVanKVb„@lUnJVI„VUb@V‚U@m„L@Ul@Xw„llVVXV@lVnlVn„l@XVlK„@@_VWVxX@lb„U„nV@@JlbnIlmnVV@UwVK@U@k°a@mnIVVVK@nXLÆaVWXVK™™@_W@Umšw@UXWWkUUVWUIVaƒUkJ™UVWbUmU@mkUJUU@UVab±aVaUIUmVKUaVUU@VUUaUUU@W¯XWWw„w@k@Kl™@wkV@U@alK@aX@@UmIUWUIƒ@mmkXU`U_WJUnUJmUk@@amLU@UVW@UkU@@VƒbUWVUk@@wmKkUWLUWX@JmIƒlUkkKWKkLWU@UKWa@bU@@a@_UKWƒUUUmJmw@nV_@ġğKóLmbU¼VÆ@xUXƒ@Um@wklVnUn›lkaUV@„lV²WVklWXXbWlkVkIm`UUƒLƒUU@UWƒx@XU@@lWLU@kbUbV`UXllUV@bmb@LnKVbULm‚šnVVIV`X@'],
'encodeOffsets': [[
110881,
22742
]]
}
},
{
'type': 'Feature',
'id': '4508',
'properties': {
'name': '贵港市',
'cp': [
109.9402,
23.3459
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@n@VzUJ‚nVŽ„K@XšVš°nVVnšwVb@xVV„knJl™VVUbn„WL@bUxVVXš„bl@lVXkWƒXwWaa@¥‚@nUUUV@„JVkVVV@XUWanknK‚xnƒ¯VyVI@m@UkL@W@Ušk@aUalKnUUV¥@KVkkaWVkUVkUm@aWanI@n@°aUUVaUa@_m@UamaƒV@akU@mV_@ƒa@KWIkƒmLUKƒaUVU@ƒkƒVUK@wUIWVUaVwka@Uka@aV@@aUKVk™K@X@Vƒb™KƒU@JULVLkVWšUL@aUK™b@VUL@LƒxUKmlkImJk_@WU@ƒkmK@UV@„¥XIm@@Wn_@KmVm@@I@aUmkXm@UWV@mn_@mƒUUJWIUWV_WƒwU@mUknVVmxU@@VUV@zU@UVW@ƒK@šX@VLUVƒKƒz@J@VnX@`±bUXVƒ¼™lšn@xmxÝL@‚Ubn°@XWVUxUVVnkbWVXV@Xš`ÆÈ„KnƒlLVanIV`nLVUlƒ²ƒV@V¦„l°¦„w‚b@šnKnLVbVJšIVƒXK@b‚n@ènx@xVbUnV‚'],
'encodeOffsets': [[
112568,
24255
]]
}
},
{
'type': 'Feature',
'id': '4506',
'properties': {
'name': '防城港市',
'cp': [
108.0505,
21.9287
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@XV@X°°U„lxkbVlVb@nkbVl@xl@@b@n„‚XbVL@Vl@UbV@@JVLXbmV@bVVUXUJU²šW„XlKVb„@VVXKlXšWlXXWV@VXJlI@x„l@nlbn@lln@lbXalIVK@ƒVwœUVb‚U@aXylUX@@aW@U_UJmU™nVKUamL@Kna@aVUkkVWU_ValaV@XK@kV@@W„wVXV@„V„KVVn_lJlUXkWaXWlkXU‚±kU@ƒVUlbœkVmUmlk™¯Ý™™W@mb@¦VxULm™kJUU@ma¯wƒmkX@VóJ±bUVUXÝWk™lWXXlƒxUaƒbƒ™Ç@U@mVUKkkm@UJm@XnWV@x'],
'encodeOffsets': [[
110070,
22174
]]
}
},
{
'type': 'Feature',
'id': '4505',
'properties': {
'name': '北海市',
'cp': [
109.314,
21.6211
],
'childNum': 2
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VaVLnK@IšJVwUaVaUkWKn_mƒX¥WwXm‚LXalbU£UyV„Å@ݙwm@™°l›LÅUƒmk™mwÛaƑLÝUUm@ȣƃV_„Ó@£UƒƒUVƒ„™¼U°W̄™ÞVbXbôx@b@bmVƒ™UÝ@@ĢU`m@ŽnxnIVV‚VX„VL@`@bV@@aXbVL‚@XVlKXLlLVl„knJ@I‚WVXXKlVnL@xl@UVVX„a@UV@VlX@VUV@nK@bl@nVVIVmXIV`V_lWnn„@VJVXnJ'],
'encodeOffsets': [[
112242,
22444
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/gui_zhou_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '5203',
'properties': {
'name': '遵义市',
'cp': [
106.908,
28.1744
],
'childNum': 14
},
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@@UnUlJn„w‚JU°VL@bnVšU„wlJ@XƒŽXVlU@klVUJknl„UllL@bUJ@xULUlƒ„UblVkblbnw‚UXmla@„wV@VK@L@UXaVKVLXWƒUVa@U@Im@@W@£UKUakKWIXU@al@@llUnL@W@Un@@VlUV@VIUanKl@Xb@lmxVb@b°bb@nlJVVnnJ@b@L‚V@ln„@LmV@Vx@blnVK„nlJXIlw„J@҄b@nlK@Un@UL@VVVVUUUVK„l„@VUVL„J@UVUUw„@Wm@™„UV„ÈVlbUb@JšLlŽX@@x„„ƒLmŽk@@nlx@bUJUzVJ„@@LVxUV@bWxnLnVVK@_‚K²xVbV@n¥@aVI@b„@l@Va„Knb@n‚`n„mmý„W@ƒU_šwV@VlVV@Vn@n„˜@nI@Jn@°¦VaUU@™„mVVWVaUńU@aVKnƒVbVUmmU@a@kUw™m@aUUmUUJ¯lakU‚aXaWUUaVƒkk„amkmUnVlULƒVlJ@XU@UJWUUw„k@aU@WbkWƒL@U@WU@@XUKmV@aUVwUĕUJUamUUVUÑm™nIVJ@kl@XalJVn@KVLœ¥@UWIXWmU@mVUKnUWLUKUaWUUKVU@U@anUny@UlUkK@w@a@aVUƒ»UkVw@Wmk—JƒÅmUUVmwXalLXWWUnam@XkƒJ@UVU@U@W„@@U@I@Wl@Ènlw@KXLWb„lVUkalKUU„VVaV@@wnIlaUmkUƒKWU@KkUkLWaƒKUUWUn@VƒK@LnnWJUIƒVkUWVnV@V™@@XƒK@VUIUJ@IWJkX@VVJ™IƒVkK@I@UVaUWk@m„@wnUWKk@mxk@@„lV@b„xmb@x@VUmLkUƒJ@nVV@b@VkLVbU`¯I›l@™U_UW@UU@™™ƒK¯wm@™xƒL¯¥kIƒ™ƒ‚@bkbƒ@Ua@ƒm@kkW@XVbmV@ŽkV@bWbUbV@„¦ƒxXlmVk@ƒ¦™bkaWL@KUImK@wUK@VUI™b@bmK@LÅy@akXW@kbWlXblL@ŽULUbƒ`@U™kUymX¯@mšUJUUJƒL@Lm@@WX@lU„VlšXll„@l@Èk°V°Ž„X@VU@UVll@XUJVXUVm@@VXLWlnV@Xƒšk@mVULnxV@@bm‚kL@VWLUbU@UVm@ƒb@ķ¥UnmJ@UUVƒkkJUšlÔU`UIW@ƒ°kLUlUI@WVI™U@mWKkXk@ƒ‚WU@bXšW„@J@xX@l@LVl@xšLVxXX@x‚KnxVknb‚KVV@U„L„WlXU`@nUlšX@llVXšVU„KlkUKlI@anKVLXKVaUIVWV_VK@VnLlU„»VKVL„m'],
['@@@KlKkUUVVX']
],
'encodeOffsets': [
[[
108799,
29239
]],
[[
110532,
27822
]]
]
}
},
{
'type': 'Feature',
'id': '5226',
'properties': {
'name': '黔东南苗族侗族自治州',
'cp': [
108.4241,
26.4166
],
'childNum': 17
},
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
[
'@@VV@XkV@bUbWJU¼Vb@Vnb@bš„@J@bƒL@LV@UVƒlUI@a™KULVb@bkJmx„šlLVxknVJk„‚xnKmnnL@bn`WIXlWLU@UxVbUVmKV„XI@JVIVJ@U„L@Wš@@UmUXUlV„UVJXImm@K„L@UVmVXV‚„LXblKlV@LXV„LlVVnkbmJ@xnXl@šbXa‚@Vana„ÒšL„m‚VnIl‚Þ¦°k@b„@@lV„nJlUnš‚VX_„@lVlK„šV„UUxVLVWVIXJšUlnnWlI@KUaUUVKn@VaVXV@na@ƒmw¯@mUkJUamI@lk@@am@@I„ƒUmVImUUw˜™@anUVaUU@LU@WaWUXWW„wV@VwnU@L@ynbl@@X@a„J@nW@@Vn@„lVLlxnI„lš@@UWKUƒnIlJXIVllIVVš¼XK@aVI„V‚@@bn@VKXLVKVVVInw„J@UWI@mX@WKnI@KmU„UVJUL@V„KW@@k„@aU@@W@InJWUXwWI@Wƒ@¯wkaVaUIl@nŽValIXWWI@UUm@anwWkXWWIUbk@UJmIUamKVUUUVVama¯VkIVVUlKnXVwX@@WVaUUVa@IlƒaVmƒkna›wk™UU@ƒU@mUVƒšUVwœl°LVbnJVU™¯la@mX@@UWKXU@aV_V@@JlkUƒ¯@V™nK@km¯k„U@ƒWUW@mmƒU@™kmlU@wkL@WƒUkL@VmLƒJ@b@V@bknUUVK@UVKUK@Uk@Wa@LUVVnUbmVk@@UU@@aƒV¯K@U@UU@WmUL@aU@WV—w@ƒ˜I„xXll@UX‚K@KXXVJna@wWaƒ£naUKV„m@UU@mUmalm@@XkVm@U@VƒLmWU@kkWxU@@bVV@VkXVlƒVƒ@UUk@@ƒmI@KUw„m@UmVƒUUwU@lwkV@IUa@mUaVIVKVa@w@U@™UJkb@n@bmJ@XmlVUxWXkJmUkUUVW™xUlU@ƒaULUšmbU@@‚WXkmƒL@xUV@nUxÇm@„XLWbnlƒnV‚nnUV˜U‚nVVz„@lbUVVlULVb@V@nUJkwm@Ux@bWbUK@UULka›JbƒU™U@U@lUK@XUJmn™J@bU@UwWa™x@zkJWnUJUUVšVV@bXn@xVb@J™L™m@X™w@`@bkb@VmXUV¯L@mW@@n@V@‚ƒL@K—IW@@aƒaUx¯@U„m@XbW@@L„V@bnVWVkKUzlV@bÆa@lnI@VV@@LnVVKUaV_VJVbnU@bn@‚‚nX@yVIVxXKVLlUVaXU°J',
'@@@KlKkUUVVX'
],
['@@UUVUkUmV@ln@VXVK@K']
],
'encodeOffsets': [
[
[
110318,
27214
],
[
110532,
27822
]
],
[[
112219,
27394
]]
]
}
},
{
'type': 'Feature',
'id': '5224',
'properties': {
'name': '毕节地区',
'cp': [
105.1611,
27.0648
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': [
'@@UkVƒ@k‚W@Xn@@K„KVIVVIn™°@nWVzšl@V„_VaVK@kKWaXklaX@lW@bÆz@KnL@ašaVJ@UVL@xnLVJ@LXKlbša„¥l@nUWk„wƒ¥U@VaXa@amLkUƒKmƒ¯kƒmkIUaƒKUIWƒkKm@anw@mlwXIƒmƒUk¯@a@amUƒ`kkKWVkxmUUak_mJmw@w„mXUW¯X›_@WnI@aVwkWWýŃU@WLkU™aUbVV@lUVVnm@kUmV¯™kK™LƒwmVUUaWV™aaWw¯wƒÈ@VULUVUUƒK@nWJkI™l@Umxnbm@kbUJƒa¯bUbVxmLUV™aU@VUUWxkVVV@bUV@XWbnlUbƒbUJlbUV¯b@z„`WbXnmbƒaƒwUwVWUƒbUxmbU@Uam™@Vƒk™VaƒwVaUƒWI@mUKóz@lUlÅ@WIƒb@xXxml@XklULWKUmwUa¯KUXWJkaULmKkLWbkKUVƒImƒƒWa@kUaULƒW¯LƒK¯@kbƒL@b™x@J@bmnnlUšlzU`U@@Uƒb@„m‚n¦°bU„Vx@bkVm¼mx@mk™mVV@bkxVn„aVV@bU@mL@b²`lIVV@lXLlš„bVxn@@bl@XllIVšnbVšn°°wlbXw@mVa°lVnU@mš™VLVbn@@b„@@WVnUV@Xlxn`VznJVb@L@bV`V@šUnwšU„@WUXKV@UUlmUUlaXalLšm„bšIVbnJVIlVVaUUnWVXn‚VL‚k@ƒnWnblnlb²x„xVKVXlVXLVW„LlUVJna@wVL„¼@JVX@`@nnx@nWJU@Vx@XXKšŽUblxUš°„LVKVVlL@KnbVUnJ„IlUšƒnKl£VW„x„IlJ@nšVÞUVVnb‚VX@V_°lnK',
'@@@UmWUwkU@Um@@VkL@V@„„‚V„VkV@nbVa@ƒ'
],
'encodeOffsets': [
[
108552,
28412
],
[
107213,
27445
]
]
}
},
{
'type': 'Feature',
'id': '5227',
'properties': {
'name': '黔南布依族苗族自治州',
'cp': [
107.2485,
25.8398
],
'childNum': 12
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@‚V@IöalK@UV@@KUaVIVVœLlaVbVWnX@‚@LnUlxl@naVLXVVaVU„J@lUUanWWI„@VlV@Xbƒb@V„n@VmVVbk@kU@V›V@X„J@zn`ULW@kK@_WVUK@LUb@Jlxn@nnWlU@@b„x@XVVU@UbVb‚@n`VI@VVLUlUIUV@KmL@VV@XIV@@lVLVmXV„@WLXLW@U`šnkb@Vl@UL@VVV„L„llX@`lIXb„J˜IXW„L‚aVL@ŽXXW‚Ģ™b@bmK@L@°@Vnxmxšn„K@xVn@VkL@V™Lƒakbl`VnnxVnUlššV@@VVXV`@šœk°JV_UalK@U@aUU@m„IlVnK‚V@U@wnaƒw@akU@ƒl@nwl@XLmV@xnƒl@VXUb@V@JlL„UšJUI@UlWUƒnLVUUaVwV@XKWkXJm_@amKnmmLwlƒUIlmUwkKƒ™nwlI@aUaVKšL@bVJ„kVUU@@K„K@a@I™ƒ@ama@UUaV»XIVa@alU@WUU¯IWVUbkVUKWLUwUJ@zmWm@@amVUaUIU`VbULmU@KU@@UmJ@kÅb@akUVylLXUmU@aƒU@KX@Wan@Vƒ°@Vw„b@bX@˜J@L„K@@U@mX@@n°KVUnW@Ula@a@_šx@WšnšK@IUa@wWm@aUUU™VVVIXmlI@yšwXbVxV@@ašInmVI@WVL@k@VšV„V‚aœIlbVK@VVLXa@aVwn@lxVI@m@UUaVKUkVUkaƒ@UymUV—VUmmU„mmkXaWK@ƒÈnVw@mVU@w„KlnXW@V@naV™VKUk@KVIUWƒ@mk@KXU@Um@@lVƒk@UVJna@UWaƒL@a@ƒXa@kmmVUUk@mkkƒamJ—ImJUUmIm±aUUkambkamVUU@VlbUbVVƒxX„WVUU@VUakU@UmUV‚U@mnUVVnUbVJ@b—UW¥kLVamVkUaWJU_UVWKk@@nl„UVVJUXm@Vm@UnVlmbnmJUbULU@@UUKWVIWxnJVb@xUL@bUJWIkxƒbkb@xVJƒbmU@kW±LkKUkVa@a¯am¥ULkalÑlKXUWƒXƒaVakImVƒ@ka@UUƒJ¯aƒX™mmb—KWU@wUUƒaUa™KmU@UXlWb—¼WLUKUb°„UlVbkbVL@VƒšƒJ@nVlUbUXmJ@VX@lbUbU@@bWb@VnLVJ@bVVUz„ŽVL@lnL@b™VVVULmKUk™Jkbm@ƒxVb@V—kƒKVnnV@b@ŽWXU‚„nV„l‚VVXVJUXlVXbWV@VU@Ubk@@KWbUUmL@JnXV°XJ@_‚`UbkXVVlÆkbƒ@VLXVV@‚V@k„KXX@`V@@n'],
'encodeOffsets': [[
108912,
26905
]]
}
},
{
'type': 'Feature',
'id': '5222',
'properties': {
'name': '铜仁地区',
'cp': [
108.6218,
28.0096
],
'childNum': 10
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@°a@aÈbVUlU@aVKnVV„VUlyX¹lWVa@U™VƒnUVU@m™@mUl@„mÞw„@‚xnIVbna@KVI‚J@kwV¥ƒUXÇVkVW@kkKWU@aXUWmnIVa°VXbmL@VVbnVVVUb™VbšJVbVKXkVKVanU@aWnWUWa@U™nk@mVIVK@wXxlLXbVJVlKœbl@VI@mšaXalVV„VbX@@ašalnkx@b@V‚b@Vnx@bVVUXn¤WXn@Vl@Vlzn@š`@I@KUU@ƒV£namVkXa@aVK‚nnU@anVlKƒa@UUU@amk@»kƒU¯@aš„VWnkWmkImU@akaVm@»VUV@UKnkW¯XWlkUKnIWaš@nmlIXmWUnwUwWm@wULmaUJkIUaƒaWa—klwkwmJmU@bkJ@XUJ¯W@XbWbUKUkWJUUVKnn@UmmXUWa@mU@@UI@WmXVykwm@kaULWwU@¯ƒlKUUVU@mU@UkmaUbmV@b—š‚xVnVUJVnƒ„@Jn@@bl@@knJVblInV°@nx@„mbU@UWUbm@ULVVVb@LkJmXkm™VWIUJUXUKVwƒV™UƒŽkLkUƒ@W`Um™kVmIUƒ@kƒ@@a¯lÝ¥kmJUƒn™KƒÑmbUb@Wb™ak@mWU@UbƒUVVkLlbUVƒkXaWK@LkxÇmk@@X@J@Vƒ@@X@VUV@V„IWln@mbXVWXkKWbnxVUnV„ƘInl@XUxVl„¼UV@b@b@xlLkV@VmzmV@b@VUVVLXVVbVLXKmVVLU‚@nnVWXXJ@V›¦UK@LUmkIWbk@@lUImJnšVÒVUnVVbVIVĖUxV‚@bnUVL@WV@@X@V„KlXXaV@@bƒlVxXVVIV@@WkI„UVKUkVmlnnŽƒbllU„VbXVWbblVkb°ŽVInVVV@bšnVx@l@bnVVnUŽUam„UL@bƒVVÆUbUXU‚ƒn@šVVUb'],
'encodeOffsets': [[
110667,
29785
]]
}
},
{
'type': 'Feature',
'id': '5223',
'properties': {
'name': '黔西南布依族苗族自治州',
'cp': [
105.5347,
25.3949
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VL@Vl@@IXW@kVUVbnW@XlKVVnU„VlL@b„aVbƒb@xX‚°ÔUxV@kbm@VxkxWJœ„ƒŽ@ÈnšVKšxWXJmV@n„Ò@xVbn@@blLk`VX@bššla²JVUlnn@U±lw@wnw@mlwVIX@@m@klKnk‚a„KnwmmXkƍVm„Uš¥l@nb°n@„aVwVmVIVnI@a„¯@mšƒl@@VnI@JV@UV@b@IUbVJmXöºƒzllUbVa@aXUl@„U@llLnKVaUa@UmK@UšwV„bnKV@VwVK@UXƒV@Vbn@‚w@U„WnX‚@„a@m„I„™@UUKlaUaVk¯ƒVaVLXK˜»XaWk¯mƒkğwmW@mIƒVkwƒJUIšÇVwU™UkVKkƒm@UkmU@WÅwm£Vƒ„m¤¯IkJWa™_™lUbmJzÝJk„ƒUÇVU„ƒ‚@bU„Ýn™m¯LUb@`mL@VkL@VƒUmmk@UU±Umka@kUƒ@ķymUkk@mmkÝmUaUakImV@V@VÅLƒ¦ƒJUXmJXšWb@n°Æœx‚¼nV@LlbUŽUbmL¯@ÞbV¤nbVx@bUVlblIœ™@KVVUnVJUn@VlLUlmLUUUxmK@I@@VW@@bU@UJmUkLVVUl@b@V'],
'encodeOffsets': [[
107157,
25965
]]
}
},
{
'type': 'Feature',
'id': '5202',
'properties': {
'name': '六盘水市',
'cp': [
104.7546,
26.0925
],
'childNum': 5
},
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@ôyVL@nXJV„Ub„x‚bUŽlšU„@ŽšnŽVbV@naVw„a‚VUXVx„x„bnaWmXaƒ_@y°aVUkaVI„aVamkXa@WVU@aUUlUXwVV@UVšbVUnKUwVa°a„bVIlan@manw@VšklJXI@m„LVVVUVK@U„ǃk@KUa@UkaVU@UVWV_XWVXVWlLXKlLXaÆKšwVL@akKm@Uwƒ@@XUVk@VUI@wWK@aUV™I@UkK@ƒmL™Wƒ@kImJƒUÅVmkXUW@UJkx@nmx@xkxV²m@kmUV±Ikb™™@aUWl_kK@am@Ua@wƒÑ@mnUWIX™wULm™„›ƒXIlwUwn@laU@Vw¯ÓW@w„aUaƒb@akKƒUmVUUkL@WmXUaUV@lWX@Jk@@UUKULmLUJmzkKmVX°VšUnWKUL™ƒƒL@mU@UnVJ@b@„UV@Xƒ`m_@l@@bmbXJmnnš˜wnn@ŽVLX@V‚@nVl@nk@@b‚l@nn°WlXzW`XXVKnUlxVbUb@‚V„Xb@Ž‚VxÈbVlnbmn@ŽkVUL@„ƒŽmLUVVL'],
['@@@ƒ@UmWUwkU@Um@@VkL@V@„„‚@„V@VkV@nbVa']
],
'encodeOffsets': [
[[
107089,
27181
]],
[[
107213,
27479
]]
]
}
},
{
'type': 'Feature',
'id': '5204',
'properties': {
'name': '安顺市',
'cp': [
105.9082,
25.9882
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lL@bUK™xÅLWbkKWLkKUXUWWXU`UX@VUVlb@VVb@L„l°xXx‚bšbXUVb‚VnU„xšKlL°šnUlVn@UmVU@kUUVašblVXKV@ƄXþlXUxnU@mVK@_@ml@UU„@šblU@KnLVyUw„@@UmkšWVw@UVK@VXzVK@n„VVUUW@kVJnlaš@nKW™kaWL@U—™õb@JU@mU@@_WWƒL@lUU@WUUK„@lakÅUUlWVa_@`WIU¯mW@InKVVXa@Ll@VaV@@UXUWakUVWUIUW‚UkUƒƒmVXW@@amUUm„L˜l@UUa„wn@lašIVlnLVKUUšU@amK@kUKƒVyUU@aUImK@UXa@aV@VakaW@@UnIVWVaUkƒb@mWƒX@Vxm@UaU@W„@VULUxU@mLƒaUŽ™x@VnL@VVbUbmLkK@kƒVk@WV@bUbVakk„yõ¹nWUIVa@J@aVUU@@ImJ@Uk@¯„™V@nƒ°@bmJUUJUnUxƒbm@¯Žmak@™¦ƒVUnŎWlnnmxƒLbmlkL@l@nWVnlÆU„VnIlJ„@šXnK@„lL@VšJVU@bXL@xVJUl@VU@W„@Vxn@'],
'encodeOffsets': [[
108237,
26792
]]
}
},
{
'type': 'Feature',
'id': '5201',
'properties': {
'name': '贵阳市',
'cp': [
106.6992,
26.7682
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@nŽlLX„VJ„LVblJ„n°ln„„LlVnKlU@nUUa@WlX@l„n@‚Vb„@la@a„„šlJ°¦„Kšwn@°x„LVkUmmwUmk_la„bšK@UlK@UUm@wƒL™mnwmw@U@¯@KnL@aša‚ġXWW@UKbƒKWX—JƒIWakJ@_kWƒkƒKUU@UVKk@@Ula™mV_X@WKXKƒ@WUUnUK@kU@WJU@@UnK@LVUVJVkUK@UUJm_@UaVaV@UU@Wƒw@aV@Xkmmm@kw@IVa@KVLXU@`lLX@VKm_@yƒI@WœU@UlVl@UanU@Uƒm@U„aWaU@Ukƒ@XJmXVbkV@ŽƒIUVUbWUUKmbk@kwmV@K@mWUXUakb›KUUUJVb@LU@@VkL˜š@VXKlbXšmL™@kbm‚UI@lVXUVƒU@mULWy@UUL@VUx™Xnl@Vƒ@VxUzmK@LkV™aƒ@VVk@@n@`UL@nmV@bmJ@Xœ`WX°WVƒn@xnxnIl`VbnVlwXUlLl‚„_nV@b@bl°„V„nWJkx@nmx@b'],
'encodeOffsets': [[
108945,
27760
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/hai_nan_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '469003',
'properties': {
'name': '儋州市',
'cp': [
109.3291,
19.5653
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@஼jpnr’``ŽpRVHʘ̤žZt^JÖA˜[†CâlTébQhRPOhMBcRSQiROE[FYdGNOEIH]MgEAMLLIAG_WMCSL@ED]PCLYC[ZIHgjSxJTMbHNEFCMEE_HSDFHSLECRNSFDRICHNADGPI\\RZGIJTIAHLDQOHG`GTNCOIC@eIGDWHIS[kiE[FMbECZS@KKS[FDWsCeRuU_DUQNOE[LKGUBM¨EDQP@HWHGDImXƒCog_~‹I_fGDG|QDUWKBC\\ore|}[KLsISBHVXHCN`lNdQLOnFJSXcUEJMCKSHOUMDIm_‹DI`kNDIGEYFM\\YPEEIPMSGLIKOVAU_EBGQ@CIk`WGGDUM_XcIOLCJphHT_NCISG_R@V]\\OjSGAQSAKF]@q^mGFKSW^cQUC[]T}SGD@^_ˆaRUTO@OHATŸ”'],
'encodeOffsets': [[
111506,
20018
]]
}
},
{
'type': 'Feature',
'id': '469005',
'properties': {
'name': '文昌市',
'cp': [
110.8905,
19.7823
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@€hIJ¤Ī¯LQDaFßL[VQìw€G‚F~Z^Ab[€¹ZYöpFº lN®D´INQQk]U‘[GSU©S_­c‹}aoSiA£cŁ¡©EiQeU­qWoESKSSOmwŸćõWkàmJMAAMMCWHGoM]gA[FGZLZCTURFNBncVOXCdGB@TSbk\\gDOKMNKWQHIvXDJ\\VDTXPERHJMFNj@OwX@LOTGzL^GHN^@RPHPE^KTDhhtBjZL[Pg@MNGLEdHV[HbRb@JHEV_NKLBRTPZhERHJcH^HDRlZJOPGdDJPOpXTETaV[GOZXTARQTRLBLWDa^QAF`ENUPBP…\\Eji`yºEvåà'],
'encodeOffsets': [[
113115,
20665
]]
}
},
{
'type': 'Feature',
'id': '469033',
'properties': {
'name': '乐东黎族自治县',
'cp': [
109.0283,
18.6301
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ªVLP`@PEdNRAHOPEAKHEVL`GZBJfvdTAXNNTZJFPrHHNpKTD\\ILHbEVd^J‚OHLh@NNBnHP`\\xH@NBRLJTlŽNv_^CTLd@bNDVFbxdFV€UPBTKOGEOUO@OEBXQP[H_EI\\EbeYa@UO_J‹MEJ_IEDKJUGMDcNUd_FMTEJSGoZ]EIYGO[YW‘gEQ]a@WHEDQKUSDUGAbYBUpSCYNiWqOSQEoF[UcQISWWNMSDe_cLQ_UBiKQOOASQAWgS­ā]ZaŽSPÝZ]XMXSŒ[^oVËNgNKlE RôEø'],
'encodeOffsets': [[
111263,
19164
]]
}
},
{
'type': 'Feature',
'id': '4602',
'properties': {
'name': '三亚市',
'cp': [
109.3716,
18.3698
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@®ĂhTBXTRPBRPjLVAR`dKf`TC‚NXMTXRJVdE\\FpTRrPjXZMTDVoZABaVHTCLVCRGF@X^bFR’hZXP\\ZHHMA[^wBWXJlW¤EJ[bCTOF‹WWMm@ILMGWQ@DQ^QNWFSHEbF`OXNbO„VNKTEPDTLTCCVTREfvfEHNbRAENH^RJXCFHNFRpVGHWISDOTMVCZeGamaLoLÛD¹¹ėgsia{OųE—Tt‰‚wr}jŸR±E{L}j]HąKÃT[P'],
'encodeOffsets': [[
111547,
18737
]]
}
},
{
'type': 'Feature',
'id': '469036',
'properties': {
'name': '琼中黎族苗族自治县',
'cp': [
109.8413,
19.0736
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@bRFnHNbHŒgN@NPEnbXP@bND`NT\\@\\QZb@`@J]V@XhžDpW„nCJGHGXO@CR§FANHVKLF\\MPVR`CvVfQtDPKpGHG@S`WJP~^dSTHWX\\RHTFACQTIAUPOU@MG__IaYSFQK‘NSbORHXCZeTFJg„B`YBMNMFi~IVDV[tGJWXGDQRGF]ˆJrALgESLSAYDGIaFeXQLS\\MKSLSQYJY}eKO[EHiGSaK[Yw[bmdURgEK^_kcSGEOHKIAS]aFSU@Y]IWFUTYlkP_CUOUEkmYbSQK@EMWUuAU\\M@EpK^_ZMDQ^OXwC_ZODBrERURGVVZ\\DTXcFWNIAWJWAYUUFYEWLQQaCIZeDM`cLKRGpanJZQd'],
'encodeOffsets': [[
112153,
19488
]]
}
},
{
'type': 'Feature',
'id': '469007',
'properties': {
'name': '东方市',
'cp': [
108.8498,
19.0414
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ºŸx‹JYZQ”IŠYXLl@dR\\WZEn]bA\\S~F`KXaDeTiNO^EEKWEDQXITBXaWaDQMUJOIaTWf@NJV@dSxGZ‰Fu_@WMKAUˆ}AQ@MwG_[GOAmMMg@GKP]IUcaFKG[JSCoLGMqGEOYIMSWMSBucIeYA_HUKGFBLOFGPQBcMOF_@KO©UAtERadwZQ\\@ÊJÒgòUĪRlR°KĮVŽLJ'],
'encodeOffsets': [[
111208,
19833
]]
}
},
{
'type': 'Feature',
'id': '4601',
'properties': {
'name': '海口市',
'cp': [
110.3893,
19.8516
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ńZƂt̬æßFuz¹j_Fi†[AOVOFME_RBb]XCAKQKRSBQWSPY\\HbUFSWSPoIOcCOHIPkYCQ]GdGGIFQYgSOAQLK`MFUIGa@aQ\\GGUFcHKNMh@\\OYKAigsCgLSF]GOQO]@GM]HyKSHKPW@Pxi@EMINYREXWRQ@MQcFGWIAwXGRH\\yDI`KJIdOCGRNPNtd\\UTMbQYi@]JeYOWaL[EcICMUJqWGDNZEXGJWFEXNbZRELFV]XQbAZFrYVUBCLNFCHmJaMIDDHXHEhQNXZ_TARFHVB@DTQIRR@YHAJVnAbKFUEMLd\\c^ÍÞ'],
'encodeOffsets': [[
112711,
20572
]]
}
},
{
'type': 'Feature',
'id': '469006',
'properties': {
'name': '万宁市',
'cp': [
110.3137,
18.8388
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@^J@ZTVbET^JBGLFPTHld]`FLQhcVanx\\\\ZbLHTGj\\FLP~fIZRZPVTQFSVAFJE^NDLEE[~LjsxVTG\\NZZNGlLRRGLJTV@hPZANN^@T\\NEPPbDZXO`d^HSvcJDIV\\XZAJUFCLNP@PQ¤@[ïKLÑIÏ]ÇE±I{uƒ­YśUćFcYUmsVeBSVgB[RO@aYYPO^]@UVaNeDShMLG\\EfFVE\\F`'],
'encodeOffsets': [[
112657,
19182
]]
}
},
{
'type': 'Feature',
'id': '469027',
'properties': {
'name': '澄迈县',
'cp': [
109.9937,
19.7314
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@T\\GJCXJH@fJDDPNCNJENN^NLHBNSx@DDYbBLLDRbjZTj@`XXTlG^Xr@PJLW\\WLTlWR@HDJTD@X_PO@STMDNTMVV@NLDM`M\\XM\\JNBH[PYZ‡úYzŸ`Ċ\\ÎÝd]c[NKVFLEBaUmBIZGQ@JQSR@CUAEGBQ`SWYRMFgWGCGJCbNnIDGMEDKVAZUEqBYRa^WEUFKYQMaFWXEHIFWMYHCrXVIIiaK@aMCUYNSIISTwXALKH@XWXIEIJQCG[IEQDE_XSBaa[AIPW@]RS[FWS[CD]PEBYNGFSaSyJG]@ugEUDQlGHiBKHUIoNSKqHFaPMICK]UUHIPDJMuCA[SCPIDIOILGAEmU[POPBVSJDREBGS[QXWSGcT}]IO_X@TGHoHOLCX\\ELT@LYTD‚aFENF\\lj'],
'encodeOffsets': [[
112385,
19987
]]
}
},
{
'type': 'Feature',
'id': '469030',
'properties': {
'name': '白沙黎族自治县',
'cp': [
109.3703,
19.211
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@D\\RV]dTXELnHr]^@LETBBRTHPi^[@U`QTHDJ`MGSogDIPKdJ`WVNHCXHl_DJR@AH`FBVPUJLHKNTJOFFZON[ZEHFCJlMJ_ŒCn`CJVNGPLTNDFIdVTWEIPmRKMc_kDMWGGUTAtJLK~\\f{pqD[LAVXRCH{HC`eŒJ`}@W^U@I@_Ya[R[@MSC_aMO@aWFmMOM@‹haGGMEmaQ[@MESHaIQJQ……MckBIw[AOSKKAMPSDSLOAV_@@`KJRbKRDfMdHZERgAWVsDMTUHqOUr@VQXTT@Tƒfg‚L^NH\\@heTCZaESNObHPƒHeZF\\X^ElM^F^'],
'encodeOffsets': [[
111665,
19890
]]
}
},
{
'type': 'Feature',
'id': '469002',
'properties': {
'name': '琼海市',
'cp': [
110.4208,
19.224
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@TP\\pATHTGlZDJGAQjE\\Rb@jVBDCN`JZ[NCNHNXbULPrP\\KNbMTLjJJRFP`“pNLZz^FLRHjVPZ@hxVKbHBHMNNJFRlLzGPnNHhIrHHADcPWdUAmEMVQDSKYHY\\EhBN^HpXGNDBNNBnIß‹Å_g{³So]ã@ORO@KMEDIVYB[WJUICudGTc]P_YWaCOOMFS[]@MMYBgOU@ISHKQQkKMHYY[MSHwUit}KF\\KFMCF]EIUBETSROUKTLT[NKTWREfJbCHBZKTFTKh'],
'encodeOffsets': [[
112763,
19595
]]
}
},
{
'type': 'Feature',
'id': '469031',
'properties': {
'name': '昌江黎族自治县',
'cp': [
109.0407,
19.2137
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@`ZĤd–`òüˆ˜ “BSPGP@VSbQ`‡@]HC~T^SE]N]FkW]E[fY„GGOPaTMbFDYfS@g[MGK]h„e@SSSRW@UVqrPVGNStCXUhBFQGYNcCeLQQaLI@_`@EUwcEaCUaMc@SK]Du`MSkKI‡~BVNL@X`‚EvYŠwHcTU@MIe@SXJbIPNVCRXbWbSAWJCRXFFL]FMPSjCfWb_L}E[TaBm^YF[XcQk@WK‰Z“JYRIZwŒ¹ '],
'encodeOffsets': [[
111208,
19833
]]
}
},
{
'type': 'Feature',
'id': '469028',
'properties': {
'name': '临高县',
'cp': [
109.6957,
19.8063
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@jD`hNd\\^dZädĒH´Op@ˆùZY\\OAGIMN[[W_NCNMKU@NUMSNCTSP@`O@WSCCI@GXQSkXKX[IK@OWqH]SkWW@_SiiYQaKCAKZaCCw@MTGAMKM]FMMIMDSM_HGHRPKCBGSJJIYH[QOJCHMBDGQJECMTDQKFGTCEGTF`NFEDMFaGSNwIiTGhYJD\\KZODC^@FTKND`XBHKJNKFBNhG^FJMPcHEZF\\QPRjQTAdgNOPgQaRSê'],
'encodeOffsets': [[
112122,
20431
]]
}
},
{
'type': 'Feature',
'id': '469034',
'properties': {
'name': '陵水黎族自治县',
'cp': [
109.9924,
18.5415
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@R]NC`YL]FoN@V[vBXVFNL@TRZalnVFVP`DlOZkVSXEE_F[EUFeH[NKTgfCbMVU^@P]ZObZP@\\QhATUfAtUasñiāEoI]eYǯ@aKmaeƒWuCºKÜKpnbHbYfUDSNCPJTRAHJTDJSfDNLHXC``VBNGTYCQDIXMDSP@xLNEFRNXBIpVNLXah@RgF@`qOML@LJNSPLbaHAh@Jdj'],
'encodeOffsets': [[
112409,
19261
]]
}
},
{
'type': 'Feature',
'id': '469026',
'properties': {
'name': '屯昌县',
'cp': [
110.0377,
19.362
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@\\OnVBFKHPJCJOJTDB\\vDINOCGJVVL^JDONEbrGTLpMVJLGjAHGRkVChF@vH^zIbTETMHAZOFC^\\DXT\\EffAP\\PdAV@UIYfS|S@YPICMeM@sC[_A]VQEwyHSMuNcAUlQJMVGMS@mVBZPFO\\CSFQK[LqDMACiUa@[QiFBRIHYCHkGSBS[oSOqB‡IE^QHCRWHIXsHU\\UC}JEjMNAN_ZƒAIhSEYfWDQGaPMTL’ERZTJb``NHV@'],
'encodeOffsets': [[
112513,
19852
]]
}
},
{
'type': 'Feature',
'id': '469025',
'properties': {
'name': '定安县',
'cp': [
110.3384,
19.4698
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@JjDNdJ\\FbKPXfZ^Ij@RZNaVSc[MsMOHQPDJcLIJ_zCG[HQxWJBHXdENRR@XQFWZQQGOFSWUCI[WCJuRGLXNMPLhCl[Ta@SqGgJMGOmyHkKEQMINMAGaGULgwY@UOGiKQ]EYyMK”oO_QEIIKiNSMa[LqOKOaVMWMGMDY\\_IKrL\\ERT[DEPYOUA@nNTUHINkRBVMdNvGTxzRF^U`BD\\@tfNDNOJ@Z{TeTJZ@VU€cB[OBOeeQT@^OXBJb\\AbWTF`RCJFH\\RDJIJFXW@WLGBKxWTSJJMTVZND@bbL'],
'encodeOffsets': [[
112903,
20139
]]
}
},
{
'type': 'Feature',
'id': '469035',
'properties': {
'name': '保亭黎族苗族自治县',
'cp': [
109.6284,
18.6108
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@FJp@fxpQ\\ApN\\GNPNBM`HLMrXLXj\\PEHnI@WUCEM\\GTc\\GZYHTPBHRCPTd€H\\K\\@HXi–BJILJJAVNTOZJNtFPC`YxDPWci@IBgbGKaTOIM@KNKrP@_hE@QbgKWUMJoWAQMFEKM@wTONCJWRCZDHSAM_UD_GWMKeCITSCGIQBGXUHQoMEEGWDQIG]FMQBMaFGueFeSQDUSDSKOCSFMLƒUaPWM_PaEGFETMX]RCRR@HXKN@JNnXXEŒSPaDI\\£FkXWIAX]xB\\GN'],
'encodeOffsets': [[
112031,
19071
]]
}
},
{
'type': 'Feature',
'id': '469001',
'properties': {
'name': '五指山市',
'cp': [
109.5282,
18.8299
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@TCNOLBTLBPx\\AJdl†NR†RIbJTGNF\\@RcIYbmHoLQdKN_fCJYbDRRXKZFVEZVXBXIJBXMdESW[CUYHUVQFQAqsEIMPYMSBUIIJKAIj•GW[@[LGScDOGQOAGSYZ[HSd[HFNVD@XmJFG[OWiWKNqGKN_MAMO[HoM[BoRewo@Y^HpITSFENc`MVCdHNIVCLJFI`NFIŒP`@VZbaf[FFJG`O\\WRFA@PVPFPPH'],
'encodeOffsets': [[
111973,
19401
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/hei_long_jiang_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '2311',
'properties': {
'name': '黑河市',
'cp': [
127.1448,
49.2957
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VÈÞ@Žkx˜nXްVÈa°V@kôw„b‚š„JVškXlVUx„„@ŽlL@xkVV°ƒ„VbxlVUnVxk@ƒ„ƒKkŽVb„Il„@°kVl„@„™lÆnkll@@V„VXƒŽš@V„²bUlƒVlV„U„VÇn@nkJšŽlkVbœ@›x²V@n°VUnlKU„n`@n°bWLnVUblVUVVbknV`°kkŽl@@V°@nz„J@XšxlWXb°n@bƒĠlbXb™bVbƒJ@Všb„a@„„@lbUbšVmnœ@lšVmnIW‚œ@WbÞ@„n@x°@š„ĢaƐéϚnœ„‚lȝĠŻÈwm@ôçU™mm£Xy°UV™›@wÈ£Ǫ¯kõÝçUњ™‚ƒĢkVфÆšÞU°nŎ¥ČUĊx°m°¦żVƐœƒÇ£@y„UônރÆ@Èĉ°Kô¦šW„kWU—bÇ»@™ÈĕWÇÈ£ŤU@›n£ÆUUKVamanwŃmÝJ¯k@JƒIkaVaUUÇbkaÆÑkWmÝUۙ™Ý@™ƒwnU±ƒ@kkV¯KUkƒJƒ¼U¦ƒšÅ@ówķaķůV¥Uaó@Åwmƒƒ_kVƒ‚ĉmmn_V»™a@U™ƒVwķ󃂁LǫéóXÇmōLǓÇķxÝkƒƒĉ™kmakbUͰ@W¼„@bƒšÈÆ@Ė™L„l@„°J¯„mkl¯L݃±L—amJ@¼ƒ„™VƧ„™UX˜ċb¯ńVbkÆÝI@llx„k°V²šV@Uxގ˜L@b„@b™`ƒšÇzkókݤ@ğ¯Wƒ™LĉǙLmmnċVkbUaƒL@ޝ„‚bU°ğL݂Ý@'],
'encodeOffsets': [[
127744,
50102
]]
}
},
{
'type': 'Feature',
'id': '2327',
'properties': {
'name': '大兴安岭地区',
'cp': [
124.1016,
52.2345
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@k›ƒϙmƏêġb™ƒ¯@@wƒmÝ@XV@IlŽl@bUxl¯VlV™bV@ULVlUV™_kx™VVV™ÈÝJ@„¯šU„™lm¯x@xóÒĉ¼m„¯Wƒxţ@Uz¯ƒWwnUwťƒ@knƒWƒ£óVƒUUwğyó¦WI—Vmm™I@±kwÇ@@bƒ@ĉ¼ó@¯wó@¯a󼛐ƒaUwmWUwÅI@aƒKó@Ua™LƒaƒVÅwō¼UUÝl±I—¤VxÇx@zkJmnn‚mbnz™xlŽƒl¯ČkJl™°@„kb„Žmx@x™@kêmVnŽWxôXšxU°„bWLóJnÇWĵ„™ŽƒUUb™b™ÆġK™šk¯™VU±aXmċÑUwĉKġ„k„™ŽVxk„ÇKkbƒIƒ‚ÛXWl¯bƒŽ™X¯K™š„„ÞVƚnŽĸ²lxUްn°òÈb‚¦—xVbƒŽƒ„Vx@¯VķÞČlĊ°KĸŽȘI°¤ČIôŽò»ƨnȰKǬ¦ôWŎÈƨwlƒnKVXmbX`lbšwkVW‚XXŽ„L°a„ƾaĊ£nƒ°@°¥ŎzÞ¥‚»œalwôkƒJ„a@ĶK„£„bU°ĊxźVÈUĠ¥ƨ™VI@XU°x°Ln¥šw°UmwXm݁V¥Ģް@nU@mÆ£š¯lKœšÜw@aÅU‚¥UaÝIkmV²‚nn@Ķ»@Uk¥VKÞ@ÞÛ@ƒkVmĢa@_ƒmƒǖ¯Æw—óÇa@alƒUwšwĢřšk@wÆWXUWXƒWa™m@_ƒ»ÇéXaĸwVa@ÝKkUWkX‚kšKXxƒn@lĊV@¯m¯nřÆwš¥'],
'encodeOffsets': [[
130084,
52206
]]
}
},
{
'type': 'Feature',
'id': '2301',
'properties': {
'name': '哈尔滨市',
'cp': [
127.9688,
45.368
],
'childNum': 11
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@°`„_šJlUšŽ@„„@V¦°JUšŽnLôlnŤ@@šÈaUÒVbkbl¤ƒzk°ÇVÛô°IlVUVôU„xÆU„Ž@bźĀ„º@¦šb@l²‚UVlœ@°ÒĠxšnXxÆVô¼Þ@Üx²KލlƒVѰUȰôlwô@²ƒĸ°„lanV@„šVŎUll@bÈnÜm„wĢ@la@ÝÞb°UXb˜²ÆškšV‚I@ŽnJnĠްknƒÜbĢwna@a˜kÞKƒĀ„a‚™œ‚‚IVbU¥wĠwkô˜xnLƒċVçkaUƒ±IUmnġW„°WôĉšalƒÞÅĵ¯@W¹XÝaƒb¯a±X¯ºLƒaVƒmkLóƒƒbkaƒVUKVkkKV_@aÝykk±L@ƒÅU@yV_™aU¥ówÇx™@UkVƒn@lƒkÅlwšWVwUkĉmkklW@šašbVwnWWƒ—wWL™™@Ušƒ™UƒÇLšÇmƒ„@wƒƒL¥@ƒÝ_@a¯y„UWw¯ƒ¯Uġx¯aÝXVmaU£ó±›¯nwƒa¯óÅVƒXman™„Uƒ›lUXkWa@mkI„›ğaƒm™IklÇU™„ƒƒzkKƒš„lU„ōĬlš™„@ŽnX°@llUxʲmKĉVWwk@UbUK@bmVmI—ƒVmwaWxXlWȁššÞÆbUxV@ĵńWÆĉLkWUbƒaWzkbĉ`U„±LklōwUVÝ£™UW`Uwk@mk¯VkaõVX@WbL™K@XƧºWzxƒK@lmX@bkVVÆk¼Vbk@Vn'],
'encodeOffsets': [[
128712,
46604
]]
}
},
{
'type': 'Feature',
'id': '2302',
'properties': {
'name': '齐齐哈尔市',
'cp': [
124.541,
47.5818
],
'childNum': 11
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Þ@ށĠKV¯ƒ@„KVblaČU‚mnnšKĊȚKX„°ŽĠ@Þ£ôllÈy„™š_@a‚ƒ@a—VwU@±™¯Uƒlkw@kÞJlÅUa°ŃČaW—šƒƨVšU„ƒ@»nI˜b²Kބ°Klkn°ƒ¯I@ƒƒkšK@ĕÇń™@aƒX»¯@VĵlaÿVamI@aÅÝउýƒĊȗJƒôȁÅkmƑۃ@kxġ@@l™aVk¯»ƒīŹaƒkƒ¥Å¯™JUaWU@@w™aƒ»„KUkÆkUm„UmwÛ±±UUbUŽUXƒwWwÆÝk™lkUanaWwnKl™kal¯ka™ƽa›kÅx™a¯@™amb¯V™lÇwÛĀ™V@x™šmêVƜVV‚aôV„wÈx@šˌx„¦VÞ¯VšlmX@‚ƒL@¯Ua¯LmV@„„°X„ċK™V™ƒ@UƒÈ@‚¥@w—ƒġIU™km¥Źwƒ¦¯lmn@°kxVV@¦óam„n¦l@nx™lĉVóšmx™n™ÒĉĀĊ¼„þ„šǔêÞ°ˌĠÞÒ°ĀɲĀƨźˤȤƨĊ°w@£nymwnkUUV¥ôÑVmkÆmUUVa™mVIkmô„lxkXÞþƒbl„ƒl@kV„ƆƒV„xV@š¼VÒ@šŽUŽšnnނJ'],
'encodeOffsets': [[
127744,
50102
]]
}
},
{
'type': 'Feature',
'id': '2310',
'properties': {
'name': '牡丹江市',
'cp': [
129.7815,
44.7089
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@U`lLUlVL„Ulb„„lKnŽU„„b‚K°¹²W°b„aÞb˜knyUlUkamř²L@m°@lšmš²n`ôÅlK„x„ÜKnxV@„l@œƒ›ÅXyW_k@™wm™ŹĕmƒX™»‚ƒÛ™l°ƒôšÈ„»š—ô˜ô_WW@Uœal»šwU@@wšUVƒš@VƒXI@w‚Ģ͑ÞȻ›aU_@mUkly@¯óV»XmWUXUWmnm¥nUUaWLk»Æ²IÇa™wÅaݰ¯nUa±a™ƒ™@¦õÆğ„@„™@Åb›xU܁nÇłlb¯¦„ôó»mƒ—ƒUk@Wwƒa¯xU„ƒxXbǎŁUV™™ƒK@¹ƒKUaȯ@ōݙXƒal™ƒlÛkalÇUǫÇńÇakbÝƆ¯nlš¯Ž™VUx@x¯™Æ¯š„Ĭ¯ČƒVk‚ķÅmxœ°ô²V¤‚bUnÞW°bĢw°V°„XxƒV°z@bÞ`@„‚¦„Ž„I@xƒŽn„™ÈÈK‚„šV™„@VššXK˜xX„mXUx™a™b@‚kXllĊnVlUx™XkxlÆk„m@U„Vlš@ÈwôxV¦šbU`@zÆV@„²KllÞz@b'],
'encodeOffsets': [[
132672,
46936
]]
}
},
{
'type': 'Feature',
'id': '2312',
'properties': {
'name': '绥化市',
'cp': [
126.7163,
46.8018
],
'childNum': 10
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ऊþÆÞ@bnJUb‚ĀnblŽĊš„„ÞlĸwǔÈŎKÈnôWǬê‚KV¥„ĸôUxš„@VšbU¼m`nnĊŽĊ„xlUšmkaVÿšLšwš@°»UmbKmݙUšwUmVknKUUl¯ƒKU™ƒƒ‚™nK@ĠkX±lX„°„L@¯¥@wV_m›ĵ¯Ww™ƒUkōƒÇVU™l›w—±ƒ¯aƒVka°wVk°mÞ¯Ŧřƙl™²™Ŏk™U@ƒmUkb¯ƒķޱ„ó@kxȯó¯VUÒk„ÝŽ±LÛwÝ@ó»ÅUWw™mğw¯Ñ›@Uk@k™a@¥ƒ¹Źÿ@aƒÅVƒwóVVUkU¯JÜóÈUl¯„yk£laUaVÑÇb@™ţ@kmómK™V¯IU¥ƒ@@ƒ™kV™Iƒ`@ô™¼„blU„lƒ™bÈb@xÇKkĢɳaÅɆō@ƒŽVƒK@z™@@¥ÆKnÜ@@aۏUw›wnU‚ķ@ƒ_ƒŽ@„klVššnULVVÞbVl@°™@nx™n°LŚÆlV„ȃmU²@VmĠLƒx„n¯xkWƒzšJ‚wnLmbXbW°šÆ‚™²™@™Žšx@JVx„L‚Ā²Æ°I¯º‚È@ÒnÈ'],
'encodeOffsets': [[
128352,
48421
]]
}
},
{
'type': 'Feature',
'id': '2307',
'properties': {
'name': '伊春市',
'cp': [
129.1992,
47.9608
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ƒKƒ¯kWW²ğl@ŽmLšÇ„„VVš„Lk°VVmLUlVn™xšVnނLnaVޝ¼™@™x™KUĀlb™n„`n„Æxô@VbU¦ĸŰĸbôxÆ@„™„»„IVl°LUŽll@²„mV„x@ššÞܚÞVnŽlXÅÒlbÈaVVUblb„J@I°lÞIn‚Æ„mxnbUbVLÅVm¤@œţVǤXÈÇĖ@šÈ¼˜aXVÜaXbWŽnzŎašř„KôbšUlw@¯naÆKnUU¯Üa@mkkVUĊm„™żÝ‚ǖŽ‚K„™°L²lÆI@ƒ¯¥ĉƛVaÞk@ÝVaĠlnUVwƒœómaƒ@™wĉ@™a™VƒxamX@aƒ@UaÅLƒaVWƒ_nWm£nWm_ÅV¯ƒm@m„󤁚ݦƒ¯ÅalmX£ƒ™VWUŚw™mÇ@@IV™„WUw@ašI@„k@wŎ»Wƒ„ƒ™ÅVaœK›Ika@¥lUkUlwÅwVyÈwWU@a¯U°m—Ç@UçƒaVa¯mV»ÅwÝUlƒUk™V@k„mUk‚šw°@@ǃaÝIƒƒam™Ûam„¯lğmmI@J™U™l±ÅōŽ—kWa¯VÝa@Þkbġ@ƒxÛnÇm@akkōVōl±škšÅšťŚÝ°¯nUl¯xlb„U°b²„ô‚˜Uœxšk‚VÈUŎ„Vl°„šKXxͰnœU`@x°¦@'],
'encodeOffsets': [[
131637,
48556
]]
}
},
{
'type': 'Feature',
'id': '2308',
'properties': {
'name': '佳木斯市',
'cp': [
133.0005,
47.5763
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@nš„b‚„ÞJ„b@ȯ@™xW¤Vlƒn@lšUVlk„ÞVÆxU¼°nUb„bVèÈ@˜ŽnIn‚@šĢmlUw°™żƒ‚VUn@lnL@Vôbš‚lœ„JķĸĢl„wôwƨxVVUƒŦšxš™Èš°`nnĠwŎJސĶwôJ„@¤Xn܄ĸlšn°¼È°lŽ„„Uš‚b„xš@„l@ÞÞÈm°„lôwšL°¼ĸ‚°Þ²nĠ@ôwÞ`ŤI„V„ÒĠU„„@„VJĸbƄ²@°ŽĊKšœ„JĶa̐Ȱ@ô¥°nš¤‚bČUš@Vx„mUw@a݁ţƒÇ™ķƒ@ĕķīU¯²@ÆmVÑô¯X¥ċç@™ĉ»U¥ÝţKWVÅkUVÝŎUmǍÝx¯aķxÛUóL¯a±óōb¯™ƒÑŃVÿƒ_Åķ„a@UƒK@wm@Van@UmmLVa—@VImmXUWƒÝUřƒKUwÝUUƒkVƒk@l¯X›‚Å_ƒJ¯k™Jm„ÅLƒa@¥U@¯Vƒz¯@ƒ`@¼šmxƥšŏKÛk@±laÛ@@Xm@™ƒ@xƽ@WŎnšˣĕÅ@@aÅ@@nÝbǏ¯@ƒ_U›kUWƒkb™wÝU@ç„Wlw@anIƒ¯lyœX°m°VšašÛšm@„mVwÞK°ƒšXlaXmm_ƒ@UƒkwÝK@ƒVI™ƒXmV»ƒI@aƒ¯ğW™bġaU_¯JU¯ġŽƒ„ĉ„k„ō`±nÝÆk„™bóĊ¯Xƒ‚ĢX‚mVn²JV„lbUè„ČmK—wlóğx‚xV¦UaJ›šƒbƑÿÝL—l@bmbġx'],
'encodeOffsets': [[
132615,
47740
]]
}
},
{
'type': 'Feature',
'id': '2303',
'properties': {
'name': '鸡西市',
'cp': [
132.7917,
45.7361
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@‚LšKVVnkšbVšÈb‚²U°VnklVlaÈL@anU°ÜmXV`œnôLƒèšxlŽšLX„˜L²ašVVmÈX@ķ˜lnU„Èl`ȹš@ŤŽ°U@x„KnnV„mlnnUl‚lVnnaŎwlVÞ҄@n¦šLVްlšwVk„LšŽl„„š@xmLÞ¤Wnœ¼‚WÈLVVUxlÈô„„WVaU_VKšKXUÆbn™‚nôK„bÞw°bÆWXamVwœK˜™Uw¯WUk„UlJUwVUa™@@kmyzm›ĉw@kVwškƒW¯ÅKU_Vmƒƒ™xU@aW@@kK@w„a@Kƒ@@kVUƒaky°_Vm™kna¯K@™ƒL™k@@IÇóX™ƒwVakmV@mwXUWanƒ™Uw™KƒƒóšܛNJۄ@›w—Å@ƒ±b¯Wƒ¹„WVwŹĕ¯kVmōb¯w@aƒwmV™UUb™V™IkaVwķ™xk¼›b@VXXó`󗙘ƒ¼Çó™¯„kŽÜš„š¼WŽn„źĖnššxl@X`WzœÆ'],
'encodeOffsets': [[
133921,
46716
]]
}
},
{
'type': 'Feature',
'id': '2305',
'properties': {
'name': '双鸭山市',
'cp': [
133.5938,
46.7523
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@™UƒƒUwó™mÑÞÑUÝÝUkmmŃyV¯ī„¥ƒUÿĉ¯mÇkaWbÅX¯aÝxƒaóLmmšÅaWV™LULV`UbƒƒkÇVwUUÇKX›»XmÝ£nK@wƒ™mÑkƒÝ™bƒKUl™x¯kU™Km¥ƒ@ÝÑkUōxmbUmkVkmmnkUƒmmƒL@w¯Vţ™@Ǻk_ƒÇmV—k@ĸVx‚VȰlLkllšUbōwƒnVW¼nlUx¯XmWUnÝ@™xÝUó¼¯J@LVbkJWnkb™„ÝLUxƒn@‚™n™Ü™b¯U¯n›Wkz„°mJ@bkxƒX@èÞVšxlaX„lVVœ„`°@ȐÞa@mÆ@@bÆ@ˤĖm™Xōƾ@@wš„n@@WÜ@kb@²ÜlŐLƦ™nw™„_°@„y°UV@@¦„bÆKnƒšI°l„IÆ`œ°W@k„llUV„ÞVVx„šÞVX„WVnnUJ˜@UbnKVnm@Ubn@@x„L@VƒbÆĸ„`UĀÆ„„Ò°šŎa²ô°bôKÜVĸw°bÞwȎVnÞōVUÆlXU'],
'encodeOffsets': [[
137577,
48578
]]
}
},
{
'type': 'Feature',
'id': '2306',
'properties': {
'name': '大庆市',
'cp': [
124.7717,
46.4282
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@mÇ@сǰ¹¯J±ÅÿƒKUw‚I@™wšš@š±Å‚™X¯WanamKx™I„ylX°wƒm„wğKUn±@nVDŽUƒÅkƙ¯Kšmmwš@@¯UkÝaUUVK™mU™lk@ƒ¯„U„`ĸ@V‚mœxVxܐ@bÛ@m‚ÅL@¦š@@y„L‚U„Ŏ@ÆɅɴblġÈL@wÇaša„ƒkkVƒaš»@ó¯_ÝJ™wÇaÅXny›U¯¥Å„@w™bÝa™Lmm@@ƒVUŽlbğVmš™¯Xƒm_ƒ`¯_Ux™m™L™a¯b@mƒaó¦Çk™¤V„@bóJknVx™VXx±aƒLUbVxkLVlLWlƒ@nX@VÅbWlÈnƒx„bWšÅbmŽ@xœbml°b™„XbW„XVmnn`ƒLmšnbmb@šk@mwU@@š¯Jlbk°lbkšmLXxmbVbkllšÅނxX„xVWVVa²VܲnxƒVVnÅlVlƒL„¼šb@xV@XŽVbšIư„¦„lźb„Ĭ°¼Ulšb@kĢ@lw„@ƒÜlnȂƄóȘI„ĉ'],
'encodeOffsets': [[
128352,
48421
]]
}
},
{
'type': 'Feature',
'id': '2304',
'properties': {
'name': '鹤岗市',
'cp': [
130.4407,
47.7081
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Þ¥‚™ô£nƒn@°„ÆUn`mXn¤mX„`UX„bÆKVb„@@bnW‚b„wšUšbĊ@šx„@nbšWVmƒ_mm@ó»Um„ŘWXkĠ»²¯‚¯nķšwŎ@ĊšŎK°bĸUnјKȦĠÈbÆknJššÆUĢV°IšŽšƒwaV™ƒƒkÇ¯¯»™mķkۃWm@£ƒóIĵxݏōIğxmm¯_Ç™Źš™K™Ž„UVUŽƧwóxƒxġkĸķƒIk›ĉ™xóa@UmK@kVm„¯šVxkŽġn™‚@mmJ¯n°V@bXVÇxUzÆxkxlVkV@¦lbœJ›LUbšÆƒ„X„ō¼@xƒl@™J@bVxƒXUš@JÈ@šn™xVÆUXš‚„W¤knÆb„°'],
'encodeOffsets': [[
132998,
49478
]]
}
},
{
'type': 'Feature',
'id': '2309',
'properties': {
'name': '七台河市',
'cp': [
131.2756,
45.9558
],
'childNum': 2
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@²mŎ_lƒĊƒ„ƒĢV°°IV`ĢbšaĠX„°@b„JU¼Wnš„UJ@„ÞLlxV„„@n`lIUa@K°Iô»ÞVšwÞ@VmnX°WVwmkX»‚U„mŎxVak™lkkKǯUUwÇWUn™U±b—KWƒ™Kk™w„çóK›mU_nW¯ÛmV@bÇKkbkUml¯U±VÇaU™™amlUU™LK›„k@ƒU@mwÛLƒŽƒwkLóÆm_™±™nkޝ@@n±KnŚlbkVV‚mz—lWXº@Ķ°'],
'encodeOffsets': [[
133369,
47228
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/he_bei_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '1308',
'properties': {
'name': '承德市',
'cp': [
117.5757,
41.4075
],
'childNum': 11
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lLnlmxn„„IVVlUnb@VVxXJWL@LގVnnV„J˜_@wkmšK„b‚x„wXk˜WXXšKlb²K@nVVVb„L@WlU²„lKVnUJVz@VVb@lżmVUVnbôaVX@°Ub@lWbXš@b@bVb°x„@VxÈLVlšaÆ@Þb²k°@lVUŽ@Xn@VW‚LXb@¤VXšKVVVLnm°_ƨ¤@aUIVa„alkX›°k„™V@„alwUVy„U@k󙰃na°UVUUmUÆw@mkLVUƒWVI„WšLnn@xlVnK„myU@ƒU°UXaV@U¥ƒU@Uƙ@aVUkWU¯ƒaU@WLUV@bkbmKULmKkUVUkmVIUwlWV²™Uml°U@W„LUwVm@UUK@_ƒKUUÜaXw@ƒVKUU@mVIUUlmnIVVVbÈVlKnbVKš@nI˜@nVnwVLVK„K„„˜Vnb@aUIVW@In™°@lVnIš@lWĢ@°UVL@b„@VyUUƒa@w@WUnU@Wǯ™K@UkkJWaÛbmk@mVaÞU@amkWƒ@mXUKkÿƒ£@a„kl@Um°UXwla„al@nmlXnW°znW@aƒwV™@ƒakbĉ¥VmU@ƒIƒVƒUƒJkUmWU™KbmkUaƒKkUVU@KV@@klw—™WaU@kmƒXVènbmlUUƒKƒX¯JkbƒI@JmIUWU@ƒLml@XkJ@U™kƒK@aVKwWa—IWwƒmUƒ@mU@J@UaċU™aUUƒVkI±ƒk@UUƒ@UbVVm@UVKƒLƒlkIWaULUWƒXUJU„ƒ@WbUb@lkXUxm@@JVn@J@b„nƒb@Vkx@bšLU‚Æn„JšaVXnKVVmzX‚°V@_lJXxWXƒK¯bÅamUƒ@lUI›bñJ@LÇKkIÇ`kxWL@„ƒ@@bUVUb¯xWKk„Å„VlULW@ƒŽn¦Ul@I™lmUUUVm@kWƒnkKma¯XUKWmnwVwÝL„mŽ™VUbUVWb@Lnxm„xVŽmbXx›¦@„nb@`™„ƒVƒ@kbƒLU„mVUlkbVXkºmnm@@xk¦šbĢÜlš'],
'encodeOffsets': [[
118868,
42784
]]
}
},
{
'type': 'Feature',
'id': '1307',
'properties': {
'name': '张家口市',
'cp': [
115.1477,
40.8527
],
'childNum': 15
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@k™ġۙal¥@wn@nml¹UWlaVknUVƒ„Kla„@„Ušƒ@_ma@ƒœ¥WwnaU‚wnƒmw@KXaVUVašUnmWUk°™lƒnUVUXWVw™IWVóKUI@WXƒxUU@mma@kUKWLkw@yk@ƒaVkUUċaUU@Wk@Unm@UVmLm±IUƒkJ™kWƒ@a„I@m@U„ƒVƒ„Ula„@VXVƒXmVwnkWKƒKU_k@m¥ƒmX_™JmnU@km@U@KmU™VƒU@U™@Umk@@LƒmW@Û£Wƒka@wk™@aƒI@mmk@mUa@UmUƒIƒwW@aWUƒbU@kbÇ@kwƒ@makVUk™U@aƒm@aU@mxkUƒbƒKUXUƒ±KXVWLUK@wkU@V™@WXUa@WbUxƒJIƒŽ@¦VèVVX@±ê¯KUIƒ`¯UULVx@Vƒ@UKƒIƒVkLmVkKmš@nUJÝbkIUJVXšVVxVbU„VJ„Un™°bV„mlU°„XnK@Ul@lVÈVUXšx@W„@VXšV‚KÞb„n@VnbV„m`ƒUx™kW@UVkL™Km¼@lUnUJVnV„XV@Vm@@LV„klƒIkl@VƒWlŽULWKUL@mJ„@blbUVUlmzUJUxm@UUbċÜk@Ub@VšLVV„¦ôbVŽmšUKUkU@m„„@VlVn¼WbUJ¯@@„°šnIllÈl˜@nXšWlLœk‚J@bkxlxkxlXUlklJƒšXL@bW„n`@nƎXxlL@xl@Xb‚LœKlVlIXblVUbUJW@lX@VL@VVŽšXšJšw„n@WnL°K„bVbl@VI@K„@U@nmVmV@XUWI@aXm@™VUUkWmn@lmUUk@mUmK@UnwVĉ@ƒƒmU_V@XJôVVUšLVUn@šllUnJl_n@šml@XŽlLlw²LVJUL@VmbVblVXmVnlš@Ť¦„nn@܎@bšl„@@XV`„Unb@VlLVb²J‚Xn¥ÆÑ@¥Þ@'],
'encodeOffsets': [[
118868,
42784
]]
}
},
{
'type': 'Feature',
'id': '1306',
'properties': {
'name': '保定市',
'cp': [
115.0488,
39.0948
],
'childNum': 23
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VbXWš@@UlV@xVLXKWU²LV„VW„L„alVnwV@@b„n@bšVVllUnb„@lxÈ@laV@„aXV@b‚X„x„J‚nV@VVb@nnl@n„J@blšl@„ašƒU_VWUwVUškUm™Ukb±mVwœU@VIUW@UWk„@VU@ynL„m@IV@‚bnK„LVaVmnIlaXwV@@WVL°@@xnX„@V`V@VbUVVLVKnwnL@ll@@_V@VVnaÆ@œKVXÆ@nƒ@wƒKmU—™Wm@km@kÜKXU@ÑW±nIUwVƒ„Kla@I°wU±kškmm¯mƒ_ƒJnƒaƒwW@IVaUama@wƒUƒmU@mVw@aXk@mWa@£km@aƒ_kVmUnWW@¯bƒkUmk@ƒVÇm@@kUU™KUU™@UVUamVUaWIkb@xU@@amUkKƒVkam@@kVUkUWmKmUkLUb@xmJƒ™U@UImVÛVmnUwƒJƒU@VƒX@UWm@Ub°¦UšmxklmX@`ULU@@UW@@xkn¯@makV™UmxUb™°ƒlUšƒbUbƒnUJƒUUVƒa™LkbUU›JUU@mUUUƒJkaƒ@™xUIWJƒUnƒJ@V™zƒ@kb@`@bln@l™bƒŽ@X@š@š„@Xl‚bnbVb„@„„VJlInlšbVw@U„K„l@lbnan@Vb‚JôLn‚UzlV@lÈLVbVK@LVx—VWXX`WxXz‚bV`UXV¤nx@„bVlVnVlUL'],
'encodeOffsets': [[
117304,
40512
]]
}
},
{
'type': 'Feature',
'id': '1302',
'properties': {
'name': '唐山市',
'cp': [
118.4766,
39.6826
],
'childNum': 11
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„@VVl@²„lJ„UVVšbČVVb‚@@InV„@‚V„nXx˜JXb‚xUL@b„Lšl@VlI@Wnk„KV@VXnJ@I„Jla°I„W„LVVnkmaUç„WVkôaܯ„@nV°wnJlaV@VUnUUaW¯wXWWwna@£UaWKU¯ƒ¯@aVUkKUamUUƒ‚an™„IVwUWlkš@„LlWVakU@K„_lƒšbÞU°@šy°n„@„KÈkWW™ţ¥ĉōƒkġWUw¯£¯ƒÇwţwƒ@kK@kƒ¥ÝwÅbǤېťV™lW°@ĸ™x@VVVULVLkl@V@Xƒ`Ub@Xm@UWbƒk@ÆVbnLWV@lnXUbl‚@X¯lmU™VkKWLkK@_UK@U@UmmUxmVXLWVULkU@`W@ULUK@XlJXzV@@xml@VU@UX@Kk@WbUK@Xn`ƒXmJnšmškxUVbUVlVVxUbV@nKlL„kVKÞbVKXI°KVšmVUIUKULVxVJVLkV@Vƒ@UbU@WUU@UbUK@b@nƒV@VkLmb@b'],
'encodeOffsets': [[
120398,
41159
]]
}
},
{
'type': 'Feature',
'id': '1309',
'properties': {
'name': '沧州市',
'cp': [
116.8286,
38.2104
],
'childNum': 15
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@ln@UȄŽl@Vn„l°aX@mXnVlU„`@bln@¤Xb@nWl@bUx@nnV‚„„V@xnbVbUb@J‚X„x„b‚mXa@k„UVwlW„k„Vm@w™kkK@kl»Èƒm™VKXkla°@XVV@VI@ml@@Vn@VX@V@J„@VxUzVVšš²blVk¦@šĠ@@»š@VK@VÈLlK@XnJ@alIUl„a„VVbš@„n@a„U@WUIV@mUn@mKXml@lL@LnWšb@XV@@a„VVb„V„@VV„IVWÈb˜IÈ»ƒǟlWšaVUÅUƒƒ™Um@kVU™WVkaUwmaóUƒJUU¯ÑU¥mk™¯UaƒKÅnÇyóXmWÛX¯aċbÛa›J—W™ÝU¯»ƒaóóUm@IƒšVVl@bƒLUJWLX@@xšXUxl¤V@V„nVUV„XVbVš@Ž„@@VVn„°VŽ@ţU¯VƒUmƒUWV@mUXƒaƒbUKUwUaÇKn„ƒVk¦Wb@VnLmV@bkV@n„xW`Å_UVƒV@bƒUklVX@VmlUƒx@VVL@x—VWVL@VW@UUm@'],
'encodeOffsets': [[
118485,
39280
]]
}
},
{
'type': 'Feature',
'id': '1301',
'properties': {
'name': '石家庄市',
'cp': [
114.4995,
38.1006
],
'childNum': 19
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@la„@šy@U„I‚m„VXIVJšw„@lb„IVVnV‚@VVœIVVlašK„bVU„VVI„mVa„aV™„kš¯VanwšVlUnb°@lm@wX@@VV@VK@_nWlknwV™¯¥Van@VX‚@„W@U„V„IVxnmÜUnUVJV@„šnI@wValKnV@k‚mU£na@mVk°K„LVa@UU@UƒmknWWkXU@aWW@@km@UaU@@klK@UkaWaUnamm@U„a¯wWU@UkƒL@ŽUn@x™V™lUXVJUb™LmU@aUWUkmKkLUUm@mW—XƒaƒmmkkWUm@@U¯JUUm™kU¯@mKĉxÝwÝ¥LƒŽmwkUUUWVkKm™kKmLX„lxVLVxXJ@nVJnz@VWL@`nX@šƒxƒ@kVUUmJmIXx„JV„ƒnUVƒ@UVV„@LUšƒ`UXVVƒ„ƒlXL@l@b@VmX@b™xn°™UƒbkKWLXlW@@bƒK„mKULmakLUlmb@šXb@xmXU`V„b@`lLx@nWVXL@‚°WlXnlb„KVK„XVb@˜X@l_lJ@V@XnŽ„I'],
'encodeOffsets': [[
116562,
39691
]]
}
},
{
'type': 'Feature',
'id': '1305',
'properties': {
'name': '邢台市',
'cp': [
114.8071,
37.2821
],
'childNum': 18
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@nKlLnšlLXUVVlVnxô„V‚KÞ¦ÞxĊwnL°@lVnšVV°I@Vn@V‚lXnl„n„b˜WnXn@VVlKnLVlVX@bnVšKVaUIVWškšU@wVm@¯@U¥VmU_°lšK„k‚w@LX‚Va„U@wšUƒUUKlUóW@UVUœUlƒ°K„wlKU_na„KVnlKkkšWWa@IœJVa@IlJnU@„KVUUmVlaXUl@lm@kXWÝÑnkƒ™±™k@wğ›@@U@mKĉLmVJ@zmlnŽWLUÝJU_ƒ@@šmJkXUVlbklÝ@Ýa™b¯@¯±JÅwġaUU@ƒkU™@mVI±bUKƒL™WUXƒJkaƒLóKULWbUVkKmnk@@bmLUŽƒl@b@mnmJkUULƒaƒbnŽmn@lVV@¦n@„l@b‚znx@`Vz@b„xnV@xl„lbnKVx'],
'encodeOffsets': [[
116764,
38346
]]
}
},
{
'type': 'Feature',
'id': '1304',
'properties': {
'name': '邯郸市',
'cp': [
114.4775,
36.535
],
'childNum': 18
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„bVKlVnInm‚@@a„kVnK@al@nmlLVUXaVKôL„Klb„IVWšX„KVL²a‚JnUš@lV@„VVĢbÆx²I°Ž°@šaÞbÞ@lkkaVUlWnI@™„@V`ÞI‚VXKmnk@y‚InUĊKƒÇkUUamUUkƒƒ@aU@U™ƒk@WUwVkVJVkkw°a@„mK@UX@VV„LVW@wšwVa@¯Xm@@lUIWaU@UWkXWmU@UwmUkKmn@lkVƒ²™VƒaULUVmJUUUwƒLma@™UmkIUm›L—mVšmx@b™LUamKÅL@VmbkU¯KÝamzkJUb±Vkb™L@lU@WIkJƒzkKmKƒnUalWkkKW@@nkbk@WW¯XUVUJ@XlJ@Xƒ@XlWLkUƒ`VUnaWa„UV@UVIƒaUxUUmVƒK@I@W„U@@U@bƒ‚@nmKXmx™@UxkVWUX„@`VLlL@`™zX‚Ýb@b‚„@VUVkIUJVz°KVlnLlKnL„xlLVVUVlXUJ@nn‚„I@mVUlbn@@Žm„@bV„nV'],
'encodeOffsets': [[
116528,
37885
]]
}
},
{
'type': 'Feature',
'id': '1303',
'properties': {
'name': '秦皇岛市',
'cp': [
119.2126,
40.0232
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lnV@Xb˜škx@lU@@LUVlV„LVbnl‚ašLXVVn‚l„I„V„U„JV@UnĊ¦la„bš@nJ°UmƒV@„wn@VU„JVI°bnWlXnWVLVK²b‚akk„lI@aUaVƒUwVUUalaVwnUVak¥šX@W‚kœLVÓm„mUK@_lWš@n_UK@alÅ@ğÅƑŃݍmƒ—ţÇlƒLƒ@¯m™z¯@ÝV™ak„ƒ`@LlVUbkXƒK™@klVXUxƒJmšbm¼V„nVVblLUV@b„°V°XLVb@¤mbXxWX°xXŽVbmVUVU@kbmI¯xmUƒ@Û°óbUl'],
'encodeOffsets': [[
121411,
41254
]]
}
},
{
'type': 'Feature',
'id': '1311',
'properties': {
'name': '衡水市',
'cp': [
115.8838,
37.7161
],
'childNum': 11
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„KVlV@X°xƒb@VnnmbVŽXblb@VkL@lV@Vbn@@l‚@XX@bWVXlmXnlV„V@@VUbƒK¯LUl@nmbV¤n@l‚LXnlVUV@ln@lb„UlLnV@bV@@wlaXJVbnUVbVUš@VVšLVVn@VVX@@U‚KXU˜U@wUK@U„wVnk@UUWlk„V@a„UVUÆ`X_ƒw@mlU@anUmK@UXal¥„UmƒÈLVbVxVL„a„bVW@nXU‚Vn„„V°UŤV@Uƒ¯Um@Uƒ@@U™UaƒWVUmUUƒU@k£Vw™W@wW@XKƒIUa@wU@@al@UK@_mKXKƒbUU@aVKmš@Xmƒƒ±@kbÇakLğVaUw@a@ƒmkUJƒk@ykw@£ƒWX@lknk@WVkbUŽVnUVƒL@‚mVkI@JUb›I@JXb™XllkLUmƒLmbV`kLƒx¯Lk„›VUV@VôXkVVL„V™V@xƒVUbW@Kxƒl™L¯kV`UnV¦°@'],
'encodeOffsets': [[
118024,
38549
]]
}
},
{
'type': 'Feature',
'id': '1310',
'properties': {
'name': '廊坊市',
'cp': [
116.521,
39.0509
],
'childNum': 9
},
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@la„Ušš@šUnL@VWbklWxnIVV„V@X„JlbUlšXVbn@@K„mV@@X°WVInJmn²@lmVbnL@amKV_kwlmX@@LVamaXaƒaVU@UnJVanLlUkaW@UaVakK@IlKUU@an@ln@alKUƒkIVa@a@klaUKUV@UkUV¯šKVƒV@kUmƒU@@a¯ImJUU@VV@UL@Uƒ@@WXUWa@Ukwm™@ƒX@@w@al@@aVIUmVUUUVWUknK@I@™l¥kU±a™™UUVyUwƒ@@I@UUWm@@Uk@@nUJU@WU¯@kbWlULnšÇ„k¼@llLšl@xUnóŽƒLƒlkXUxƒV@lWb„I„`°nnn™llŽV²¯x@JkbƒLU„VxmJX²@ÒWVÛL@lln@‚Xn˜šnV„L'],
['@@@kX@Valaa@KWI@UXW@WanaUIW@UaUKķŽk_W@UVUKUš@bƒ@UamxVXnJUbWVXLVbn@W°kb@U@Wó¼mIU¼k`V„@bVbl@„lX@lUôVlUœIV`lX„Vn@lUlVn@„l@UVaƒIUWl£Um™VWU@@UUKlUUUnƒVL@KšUnLVWUa›@™U']
],
'encodeOffsets': [
[[
119037,
40467
]],
[[
119970,
40776
]]
]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/he_nan_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '4113',
'properties': {
'name': '南阳市',
'cp': [
112.4011,
33.0359
],
'childNum': 12
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lKl@nVV@„bn„@VVnm‚nL‚LXx@š„‚VLlKVU„IXWÜ@șlbl@XUĊUlwnW„LÞw‚m@ÞUVmnVl@nX‚JXLm@VnnJla„I@VkxVb„@VŽln„J@knKVn„@°aVanal@XK°b„‚@š¯VJXIš„VK@al@nV„k‚@nK„a‚b„@XL@blVVKVLXK„@VaVI°mVaX@V_@a@yUkVw„VšIVaš™@anIlaV@nKnXÆm@wUUV±UUWUKnaWwXUWmٝVƒam@kakImƒUKƒ»lan@VXXa˜W@@UlUUa@a@UlwUƒV@Xal@@anIVaUK@V™XmwVmUmV„LXl‚@nalLnal@„šnKlkV@@UnJ‚UXnl@nVl¦V@@VnJ@nUVVVVIn@Va„—n@@K@m„kƒa@kmWVaUI@a@™k@@aUL@mmaVIUKUVƒ@@IU@mƒUmmL@K@UUUU@mW@@nU@ğ»mVmbk@klW@UXnV@LƒJm„™lUnUJ™UUUWƒƒ@UnkKƒxmLa@ƒ@@lUU™bmUVWk@@nkUmam@UakJU_ƒVm@ÅlÇLUVmVUwULƒKU@ƒk@UƒVUlU@@Uƒ@UaUUWaŎƒzJƒaWLkl™b@bmL@„kKƒabWŽUVƒ_@mV@b¯JmXUbUK™¤ÇLUU@b@JkLWmkUWIkJ@VmX@JUbVXU`¯VV¯blK@LXKl„UV@Um@@Uk@kxWŽkbƒL@KkbmL@‚UXmaU@@l@x@blX@xUJ@bULUlULÇ@@VšnU`W@@nÛ¼U@@VmKUkm@VVX@@xǚ@bUbVb@VX@@x‚LUb@lƒ¼XLlbUlVVU„Ub@n'],
'encodeOffsets': [[
113671,
34364
]]
}
},
{
'type': 'Feature',
'id': '4115',
'properties': {
'name': '信阳市',
'cp': [
114.8291,
32.0197
],
'childNum': 9
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VllInJlknJVkVU@mXlUÞ`VnV™VU@U@y„@nXlKV„nJVkXKWaXI‚b@yVk„VUkVwn@‚K@nW@k„KlUXVVUlbnUV`n@V_V@llX@@V„b@bV@@nlVUb¯‚WLnbmb@ŽnLnK˜b„U„bVWnLlaX@VVUX@Vln@`kL@ll@VXVJÈIVl@XÞJ°Una„LlylU@UXKlnn@lanLWWnbVI@KXKVL@LVWVL@UVKUIVWX@@XÆJ@In`@lJVI@a„WšÛnK@UlK@UU@VK„nlm„nXal„UllLUbVVšknJ@nV@Vm@a„l@@xnV„„lJVUU@™w@aƒk„@XW@_mWnUlŁUmVKV@VXwW»XƒWaUwnkWUkVUƒU@@@WlaUkkaƒIWVkm¯xmIUmƒLUVƒaUIó»m@mmwXk@a›mk¯¯l™@wƒmkLmmU@UbkUWJ@XUbƒJ@b@l@znÆmK@Xk@Ub@lm@ƒI@akmVKUUVUkU@U±JUbkƒ@IWmkxƒa@UUV™UWVkIUaW@UlLWn@VkJƒI@VkK@L@bmKƒkJmUUaUKWXk¼VxnJ@„V@@VULV¼ƒ@@UkaUlWL@U@W@IkKmL@KULUWULWKUXUJmIƒb—KƒŽƒ²UW™nWKUUkLUƒmUUam@UU™@ƒmUL@xkV@„VV@bmV@Vk@mwkUƒVUx@mbX‚ÇnVb„‚UL¯šWŽnUVLVb@xnlWnU@UVUVVUbVVlVkn@llVUXUWUXVbUJ@bmLUJnb@nVK@bl@@š@bVJUbnX@l„b'],
'encodeOffsets': [[
116551,
33385
]]
}
},
{
'type': 'Feature',
'id': '4103',
'properties': {
'name': '洛阳市',
'cp': [
112.0605,
34.3158
],
'childNum': 11
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VVUllLXl@LWn@J„@bƒKUVmnL@`VblLnbV@„b@JmL@LnV@VV@¯„VJVnXL˜@nm@aÞ@‚a„k@m„IšmVbXL‚ynLšk°@°aVJnUV@UVVXk@WJ@VXLlUnJVnnƒ°U@»°U„wl@šb„WmUXƒÆ@VLXU@m@U„a@I›mkb™a@naWW@_@WXUV@@U‚ƒ²@„K@I±U@¥kKWLóLlƒa@£Um@kWKXU@mlLXUVKUU±J¯_@`UL¯Wmk@Wa„kkƒlUnƒVUVaU@KUU@mmK@_ƒa@KX@VaUIm±™k„aVKVUkw™@kaƒƒW@kbkL±UUaƒK@UUKVak£ƒ@UmmL@lƒIkmUƒ@Ualw@UƒJkbmIUmn@WKImWk@mUUnÝV@ށnÝxƒKmXkxĉVWVk@kaċšÛ@WXƒJUV@zŽm„VWnbUbVbšLlUnŽ‚lUÒnWV—VWnk@@Vm@kxm@Un™l@Ll@@V@šXnƒškJV„šV@nlVXx˜U@l„n@aš@VLnWĊ¦nxš@lbVKXLl@ރVLƒ„XJl@XXl`lIXVl@Xl‚XUVšK„wV@lanx„zUbVJ@VVX@b'],
'encodeOffsets': [[
114683,
35551
]]
}
},
{
'type': 'Feature',
'id': '4117',
'properties': {
'name': '驻马店市',
'cp': [
114.1589,
32.9041
],
'childNum': 10
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@n@„b°UƂXnVlnLÜ@VLœm@n˜@na@J„„m@k„@lVšVxXX@„V`lLV„XVV@VVÞLVV°„²@lašbnxV@@b„Lšmlm„_VWnIWUna@lšLšbnV°ƒVL@KšV„LVUVaVLXK@mÆXna@wVm„a‚@Xw@KlL@a„@Va@wUkaWnIVƒla@Kn@Vn@VUl@nKVn„J@LnK@aVkVUUWƒ@VakUVanI‚²X‚W@UUU°KnUVLl@XaVK@ašU@KUI@W@_lm@KkLUKV_Uƒ@»@UVJ@XV@@mVL@K@U@Kk@VwUUm@kmWL@VkVkzƒKmb¯VÝI@WUkÇJUIUWk@@klK@_km@UVWUUW@kbmKUXƒaƒV—amLmK@namaXK°VakU@mU@@aƒa@UW@kkU@U`m@U_mVkaUVWUkVƒL@lmX@ށLm@UxVlƒUUl@zaWJXbWLUlmIUƒkLmWƒ@@z@VUVUšUmÝ_kVWŽ@nUVUlmIklmIkJUkƒl@n@Lm@؃IUbm@UJUUVU@mmI@UU@k¥mUk@WmVmI@VU@klmLƒ™k@mbkKmb@WkƒKUŽVnUnnxšW@UVLUbmJ@bk@WbU@V„kx@V@bVbkV@V‚@‚—XWbUWm@kb„¼VLn„lJlb'],
'encodeOffsets': [[
115920,
33863
]]
}
},
{
'type': 'Feature',
'id': '4116',
'properties': {
'name': '周口市',
'cp': [
114.873,
33.6951
],
'childNum': 10
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lšnb@xlJ@UnLlKXUlJl_„KnV@xVL@bkbVVUè@šWb@„Ubmš„ŽkšVšmbX„VJnUl@„a°@@b„LVbƒlXx˜InmnLVw‚anJÆw²IlmnXVl°VVbÈaVb„@lkn@VWnLlUVmÞUUklƒkƒVkUaVaVaUw™K@kkaVWmw„_„‚l@nU„VVb@b„aV@VV@zXJl@@kl@šlœk°WVnÆbnbUšVJ„Iš@VKVm@k™K@_kK@a@aU@@wW@@k@aUW@IUWVUnLlUlVXKVwmk@W@—VWa„¥@k@lnƒUIÇKUaU@ƒUUVmIUV™Uk¥ƒVma@¯k@Wanwmƒ„@@n@@m@UIVƒkUVamUXWƒaV™U_™@ƒmUVUImW@aUIĉK@VmI™b@lU@@n™JƒkU™@KƒIUmmLk@UVm@UŽm@@LkbU„mJXlbV‚@xUbƒ@@bkK@LWx@ƒbUn@xmbÅW@nWLUKUbUVƒK™U@LUK¯„mU@šVV@xULUŽVL@bU`WšUz¯aUamKUaƒ@@xkX@x'],
'encodeOffsets': [[
116832,
34527
]]
}
},
{
'type': 'Feature',
'id': '4114',
'properties': {
'name': '商丘市',
'cp': [
115.741,
34.2828
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@XVl@lLȃ„@VkV@V»UanƒWX@VaÆÇô@ÈaVX@xVJXUÞU‚aVLĸbXKl„V@šm°Vn_ny˜XX»mUk¥lK@a„_@yšInaVKVa°_@WXI@ƒ@K‚VnIlbnaV@„l„@‚a@_w@ƒlwUKm™Xa@UV@š»Vƒšw@kUKVUUm@w±VUXUKUwmJUUƒ@km@@±mXkmUI™@mm™KUwkbWakLWaUIkJmŽƒX@l@@VUX@JWbX@VbULWbƒlUVULknlV@bVJk„mb¯KknWmk@@nmVkx™@ƒVmU¯KUnUL™@ƒJUIV™maÅaUm¯X›l™kk@@lk@WI@yUUU@ƒb@aUaƒUmVk@ƒƒ`nxUXlb@lšLVxUbUbVbUll„k„VlÝVUnkVmKUXm@klƒ@ƒnUx@xnxƒn@`VX@V²x@V@b@„Wl@zU`VUVVb„L@Vƒb™W@bkXllkLWV@V„@VVÈwlVœ@@X˜K²Llb„WnnÆL@VnJWn'],
'encodeOffsets': [[
118024,
35680
]]
}
},
{
'type': 'Feature',
'id': '4112',
'properties': {
'name': '三门峡市',
'cp': [
110.8301,
34.3158
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@WKUmUI°ƒU@@UmU@KnK@IƒaU@makKUa@_‚KnmVU„L@a‚ƒ@IXm@KWkkKVkUU@aUW@UUIVaƒymwkbU@ƒx™LVUWWkk@WUkJk_WWk@WI„ƒUK݄k@WKULka™@mwĉ¥mXUK™@@bƒm@k—VWwkU@m™UUƒlI„™Wm@™@Uk@@KškVmn@lwn@@Ul@Xm˜UXUmkmkV™KUaVamaUXnƒ‚@ykLUKƒ@™WwKmKnUm@UmƒƒaU@mUk@kL@lƒxċxUnkVmnXxWb@`kzWJ@V—LmVUn™lmUL@lW@Ub@VšXUbš`VLUbUJ@nmnUlUUm@@bUJlnU„š‚U@lxkbƒ@@XƒJUnƒ@kb¯VVVmlXXlJlzn@VlkVW@bkK™bmškŽUbVb„lƒXVxšKÈnšwÞlĊKlšVnKlwX@lL@xlUnVn„@šl@lmX@ƄÈb°¼ÈwVJlx„_°xšašlšUÈxlUnbVxnL@lllšbm„n@nb‚@@V„L@V„@@„VLšJnIVVlKnV„_'],
'encodeOffsets': [[
114661,
35911
]]
}
},
{
'type': 'Feature',
'id': '4107',
'properties': {
'name': '新乡市',
'cp': [
114.2029,
35.3595
],
'childNum': 9
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@XVlL„K°bUblbUbšl@nX@W„XVVKVkš@@Žmb@„Ubn„W`kL„LƒV@VVLnKlVXIlVš@@a„@l£nWlƒkVa„@°bnUlLVlna‚bnUVUXKlU@ƒ@lk@a„I°y„@ôkUU@wššnkWakml™UkVmkUlmUUm@nkUKWanamU„LXW@U‚VnUln„`l„œblL°KXV@ĠJ@L°„šJšUVw„anK@UUImmƒkK@¯±Um@IVmUmmÅnWaUK¯aUk„w@W±kVƒx™U™VƒwƒnÅJUIWaÝJóI—bm`ÝbÅImJUI¯¥¯@mU¯UƒJmnUVóUkl±V@zXl„bWVXL@bm„@@XmJUXU°llk„@nWJk@U„@¦U`m¯ŽWx'],
'encodeOffsets': [[
116100,
36349
]]
}
},
{
'type': 'Feature',
'id': '4104',
'properties': {
'name': '平顶山市',
'cp': [
112.9724,
33.739
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@l¤UbVL@V„LVb²VlKlaX@„„lbš@lxUVULƒbšln²VJUbW@@L„b@`nL@nVV@LVŽUbUVm„kVl„ƒlXbl@Xn°ŽVK@_°`²IVVV@VUVJnInaWK@Uš@„K„LÆ@nmlXXWVUUw@klKVa@knyVkVanI‚JXUl@XbVUl@@aša@mXk‚bnK@UlK@UUUVaXaWmkUm¥n—WmXaWaœkl@VmÞb„KVL@aVI@mUwVm„@KōméUL™KVaUk@kUK@U˜WXI@VlKXU‚@VVnInVV@VLlK@UUƒkKU_@ƒWWUwU™@klƒn@ƒƒ@Imb—@@m›nUKÛ@mKUkWVXxmbVLXŽVVU²VV@xÅnmWmLU@kbmJ@b¯š™IUb™JƒUUxVl@z@bU`W@Ub¯nUJUbƒ@WLUKULkU@aWKƒ@aƒbmL@ƒlmUk@@bUL™ƒWJUI™°@ƒŽ¯aWLk@mbUb¯b'],
'encodeOffsets': [[
114942,
34527
]]
}
},
{
'type': 'Feature',
'id': '4101',
'properties': {
'name': '郑州市',
'cp': [
113.4668,
34.6234
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@nWVUKÅ@W„nVnI‚ŽV@œ‚šwV@šnn@lxÞlnôJ˜zXJl@nalUČVlƒl@²UlkôVVUnm„I°VnV°@°¦VJnIÆJÞan_VmU@ama™@kU˜¥kaUklw@UIV¥kVUI@ƒmmUÅmUlƒwVU@amU—JWbUakVƒ—Vé¯Im`ƒk—@ƒwVWmLkU¯ŽƒXkWmLmx@UUƒbm@@x™J@LbW@UUVWUkVKƒ@ka™IUamKUkkmmLƒUkJUVWXkWmnÅ@ƒKƒL™@@VXLmbmJUIUVU@ULWVkK@nWVXL@lVn@¤„b‚kôKXKlL@¦²V@JƒL±@„@VU@WV@X@`XXmb@Žšblaœn@Jƒb@V'],
'encodeOffsets': [[
115617,
35584
]]
}
},
{
'type': 'Feature',
'id': '4105',
'properties': {
'name': '安阳市',
'cp': [
114.5325,
36.0022
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@°kVaV¥kVmUkWkWVkVKUwkkmKUU@a„wWWXWakKWkXmlašIVmX¥ƒU@a„@WnK@kƒƒ™V™ƒ@KğI@WU¯LkK›akƒƒ_kmmVU@VWXƒKnVmbXbVLmln@VVknlVUnVlkšlnXbmlmlXblnÈlWbn@@nšK@V„L„bVV°VVzšlnš@V™xƒI™b™ŽU@WLUa¯V™UkWõ@¯kkmxk¼l‚„XUlVbVLnlULmU@lƒLkVUlƒX@xW@¯mUƒ@UmIUW™L@aXa˜kU™¯anƒWk°@k™kKmmUIWaambUkkKmV¯aƒ@UblŽk„mXk¤ƒ@@b™@UbULWVnb@lUVVnmšnVVU„J@bWXX@WJkL@blVU°UV@XlWnXUbW@UVkVšVWbnLUJWLUK@Lnn@blVU‚„nUblxVUVJXU„a˜@Ub„LnUVV@mVIVVn@UbV@‚XbmbUV„_lVXUWanJVI@WkI@WVIVU°WXXl@la@mX@lLXl‚kVbœm‚X„ylIXJV@@kšKla²UVa„IVyÞb°LlVna@UÆKnLVbšK@anwU™'],
'encodeOffsets': [[
117676,
36917
]]
}
},
{
'type': 'Feature',
'id': '4102',
'properties': {
'name': '开封市',
'cp': [
114.5764,
34.6124
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lUVbXa˜InV@bUV„x‚knVVÆnn@„VJlUU¦VJ@kxVllb—¦lVš@nb@bVŽUn˜aôJÞIXbVJÆI„m„xšUšV„w‚U²l@XƒxVl°bVLXb‚`XklUnmVblLœ@lmšx°LVK@UXIVašWlL@Ukƒ°KkVaVUXmmI@UÅKmmƒXka±K—L@W›@kUÇxUUƒ@@UXUlKkklW@ašX„a@UƒKUaVUUV_@yXk@ƒ@a@U±w@UUW@_„mmw@wVw„mUaÇbUa¯UUkmWkn±JÅxmIbUxmKmn—JWw„kUaƒK@a¯@ƒbk@mVUIWƒ—Lmwm@Ua@WJUb@LUl™@UUmLUbWJ@VL@VmXWWzUJUꄘ'],
'encodeOffsets': [[
116641,
35280
]]
}
},
{
'type': 'Feature',
'id': '4108',
'properties': {
'name': '焦作市',
'cp': [
112.8406,
35.1508
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@V@VL@x@bXŽWV@XkššlUŽWX@J„@nI@KlL„KšUVaV@œJlL@KUk@KÞL‚l²_‚@nWlL„UVVš@nLWVUJVn@anV@a„wÞUVLVx„b„@lW„@lbXn‚Vn@@¼šL°mšKVn@bnl@nVK@blb„L„W„U@VWLXV@nlKn@lVVbXw°nV_@¥Vƒl@XI@mlƒkkV¯VWnI@W‚@n¹nƒ@aWKXUƒaWk@yk@k„ċUkVmbk@WI—yóImÝkkwm@™mU@™›lU@mJƒX™ak@ƒx¯V@¼¯Vm„UmmIkVWK@UXIl@UWVUU@mVUI¯b¯@™lmKzWKUa™nƒJ@nƒlbÝ@@b'],
'encodeOffsets': [[
114728,
35888
]]
}
},
{
'type': 'Feature',
'id': '4110',
'properties': {
'name': '许昌市',
'cp': [
113.6975,
34.0466
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lI„VnKlnVlnLVbšJlb„@ULVlUXVVX@‚a@KšI@wn@„aVV‚@nwnKlX„lVnKUX„x˜@„ln_°JVIXy‚XnW@U‚K@UXIVanKVVš@Vk@KVaXI‚@Vbn@nx˜KnaU™l™ƒn™Va@ƒXa@™VçUUla@aUK@wmUƒLk`kIWVkLmK@V@XUlƒn@JXV@nm„™bU‚óIƒmUa±@@ÑóVUUk@UlKVU@akWVUUlUUaUK@UUKWbUkÅJ@XWaƒ@XbmJ@nUJ@bUKƒLÝaUnk@›lXbWbXnm˜n¦lVXnWbUbVV@VkL@VmLaWl@n™b@bk@UVWak@WVImJUbUlmz@lUbkL@lVx'],
'encodeOffsets': [[
115797,
35089
]]
}
},
{
'type': 'Feature',
'id': '4109',
'properties': {
'name': '濮阳市',
'cp': [
115.1917,
35.799
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lLXbW‚XXƒx@bVVnLllVxULUl‚XXlVlUnlŽU¦Ub¯l˜nœK@V‚bVb@šXbVL„KVxVVnIlašb„a„¥lU@wnalLnVVlVLXnlWVXn@@lVI@WnU@mƒÅW¥—aW_k@WwXy@kmƒ@wU„mš„š¦šlUxVLV@UwšJ°xš@VX„@Vb„@š`VX@VX@llšIVbnJlI„bšV„l„˜J@ƒmѯLóa@ƒƒKUa„k™ƒ™Xƒ@UK@wU@ƒlWUUݯImW¯aƒLUKU@ƒkƒ»k@mƒwƒa@UnKWI@ƒUU@akVWK—k@a±ƒbóUWKXUmk™KUmLƒbUx„„@lmLXŽƒ@@b„VW¦Un™JkbWnXl'],
'encodeOffsets': [[
117642,
36501
]]
}
},
{
'type': 'Feature',
'id': '4111',
'properties': {
'name': '漯河市',
'cp': [
113.8733,
33.6951
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@Lƒ‚UnVxnIWa„@Xb@WÆIVlXaVL@VVLVbkVVŽUVlX@bUVkLV‚l@VVôU@Ò²@Vb„nôJVšanƒ@mWU@I„mVk@WkI@wmak™@wlW@w„@VbnLVb°bVyX™V_@aUKVVK@wUU@™™a™K@kmbXVmJUXƒ`kn™nƒK@aU@mw™akb±@¯ƒUUÝKUUU@WU@VkLUKU@mUmJUU@WVkL@UWJ—X@VVL@lVlUbšLVKnêÆŽ'],
'encodeOffsets': [[
116348,
34431
]]
}
},
{
'type': 'Feature',
'id': '4106',
'properties': {
'name': '鹤壁市',
'cp': [
114.3787,
35.744
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ó™™n@xVVólƒ@¯zƒJ@bkl@@„kVWLUVmVXbVJnnlLlš¯@Xlm„°bVš—lWb@bšKVXnJ@VV„°nX@@w„WVklU„K@knVVKmkUKUaVkƒWkl»nwlްlö@lXšV°UVbXKV@šša„Jšw@Um™™kUy¯UUUƒaƒK@U™L@mm@XaÇkkmWank'],
'encodeOffsets': [[
117158,
36338
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/hu_bei_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '4228',
'properties': {
'name': '恩施土家族苗族自治州',
'cp': [
109.5007,
30.2563
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VK‚bX@lbUVnL°„@VlVnUl@VUX@„aVƒmaXƒlašUUU@wmaVUn@Vƒnmmk@m™U@kna™aU¥Vam™X_@WƒU™mW@_kƒVaVKnL‚lœ@VVal@k¥@kUW@kUKVUlUVсW@kÇaU»ValmkUVUVak™@aƒV¯_@W‚UkmVUlU@aœƒƒalI@akkVWUaWXUWwœWVbÆ@„„l„alIVK@U™m@UU„W@al²a‚¯UağÇm@ƒbkk@wƒ@@W™aULmxƒIU‚™ƒb¯@U`UX™JmL¯aƒKX›WUL@aknmK™@aWUXaWm@I@UÅmVU@™™aUV@b™VƒI@WkU›bXkm@VakwUKULWKXmJ@XUK@ƒmL@KUwVaUI@KU@mmn™mXka@»V@@UUaƒw¯yVk@ƒUUVmmkÛÈU@mWUnmx„šmlUbV¦UlbWVUL@UUƒ™IUmÇKV„VbUVVxkn™LUxV`VX@š„„kJVVUXWaUVVlUnmKUbkI@WULmK@L@LVlƒLnmUIWV@aknƒ`VXUJIVlUVVbUX@¤mbnLm‚m@UXk@mm@Ukaƒ¥@kV@@KkU@aUKWbkLWVkIVŽk@UbVlmX@bU@@mmL@bn`@Ln@llVLVk„@XVVU@`VXUš‚¼k`VULka@VllVIn¤VU@@bl܃bkx@bkL›škKƒn@bn@@b@JUnV`UnVbVKlVXUlbn@°ƒVx„@@b„nVbUllVn@V—VK@UnW@UVUšlnk‚VÈޚxVb„VVI„xVaÆ@@aka@UVaU@@a„k@Wl@nbVIƎ@Jk@„L@VlXnlla@VJnw@UmwXU@aVK°ÒnllnLlb„xnKVaV@l¦²nVl@llL„x@XVVœ‚͐š@našx@U@al™XUVa‚LÈþV°XxWXkK@šmLnlUb@b‚xnLVlVVkb@UJ@xWXXš'],
'encodeOffsets': [[
112816,
32052
]]
}
},
{
'type': 'Feature',
'id': '4203',
'properties': {
'name': '十堰市',
'cp': [
110.5115,
32.3877
],
'childNum': 9
},
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@@a@w@kV@nbVK@ƒnUla„@la„Ål@nlVakwWX@WkLšaVmšwV@anK@UlIXmWkk@@mmLkWlwk@U_mKXwWK@U¯K@UU@ƒVUa™kmƒkI™yUUVUmanU@mlwkƒ@_mWXaƒUWU@ǃ@U@aUaVwUKUIƒVkK@UWIXƒmaV@k@Vm@UnwlƒUamk@V@„ULUamxUJkU@Iƒ`WkkK¯XWak@@W@IUV™LWJkXkaÇVUKƒ@kUmbmUUƒUKƒbkKWUkI@ƒkKÝ@@aƒUm»nI@mƒU@UnWV_@aUmWbkLUl¯b@a›kkk@WkkJm_k@UV±@J@b›nU@@WÝIUJVbXL@nlJkx@„Wn@VkJmb—LmUƒ`VbUL@xVn„@XVƒŽ@„mVVnnJVbU„ƒx@„V„nVUbVVƒx@šn„™bUK@bƒ„@bƒJ„š„VU‚lbXzVJV„„JVbn@@Xmb@V@bVJÈ@‚Vnkn@°aVVV@šX„KnalLVmšUnnVKVlnLWlXX„Klk°š™šXŽWškLUVVV@nU@ml¯nmbk@W`Å@mb—LWm¯UƒxnêVèk@mbƒVƒnUK™@kKmXk@@JUI›lÛLllnbVnlJ@LULnlÆaVLnŽV@nkVJ„@lkô@²bÆm°w„L„WV@VXšKšVXI@W°ÆVšK„b°U„JVIVV„¦XKVL@l‚InaVÝnUl@@bX@‚™nmVL@lVL„lVLVUnbVW@xXn˜bœU°¤V@š™„a@kWKUUn@VlnL@UV@Ü»@mX@V_ƒakaÞ@VK‚¯@kkW'],
['@@mUkUUm@nllVKXXVK']
],
'encodeOffsets': [
[[
113918,
33739
]],
[[
113817,
32811
]]
]
}
},
{
'type': 'Feature',
'id': '4205',
'properties': {
'name': '宜昌市',
'cp': [
111.1707,
30.7617
],
'childNum': 9
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@°`„U@blšUbUVlVkn‚ŽUbV¼Èb@l‚XUÒkVUVVL@lVX@ll¦k@UbU‚›@kmKULUbl„@`nXšŽ„V@XW`nšUbV¦šbmb@lšV@nnlmnU„m@UVnb@xVV™VkbW„nb‚VnVa@an@UaVU‚JXnWlXX@l„¦@ŽlKÆX„bX‚V@VV„@°¯°xXx‚XV@nV°UVWU_VWXkmaVnWVkn@lln@lb@UVLXWlnX@˜aXUmaVK@UXU„U@WVI‚W„XXV‚U@¥VKœ@‚Ž„„‚a²LlV@kV@UanKma@UVUnK@UVLXyVL‚knJ@UV@@UXKWUXaV@Vb@mVLnKW„m@aUUm@@UkK@Ula„LXKWaXI@alKlmUk@wVKXL@m@WWn@UVa@K@wna@aW_XWWkXbVW@k@U¯WWwka@UUaVIVƒkU@m±@U@@wVKkaš_@VV@XUVwU¥‚šyUkm@V±ÈUKk»ÇL„m˜mLk@ó£kmWwƒm@U„IkWKXwWU@ƒkLƒwkbmaƒbkK@VƒLkmWIUKkUUƒÇIǫJ™XÅJULVŽÇLUVƒ@UK™@kI@WVI@UaƒWmXVVUL`±kÅLmKkƒƒkƒÅ@Ua›XXxWVXŽVbUXll@bkJ„b›„@bkVUVlnV@X'],
'encodeOffsets': [[
112906,
30961
]]
}
},
{
'type': 'Feature',
'id': '4206',
'properties': {
'name': '襄樊市',
'cp': [
111.9397,
31.9263
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': [
'@@@Xl@Xb°WlLXl„_@JlVVInwVbVK@ƒ@UnlVbk„mx@VUnl@U@nbW„XJ@VlL„UVJVLUxVb@b@VȄ‚@XV„VWbnX@`l„kx@nmVnbUVVVšzlJn„šlVb„UV@@V°L@VXLWxnLV`l@kxlXnK@nl@XlWn„`Xnl@@UVa@VÈKš£VLVanW°U@UVU„@„`VIn‚mV@„nV@Xa@aVW@UšalkXKšblI„XnlJXbl@@VV@nklU@`„nVK„LVKVb@V„U@UÈK„UVKšIlUX@V`lIVbn@nblVVmV@@XXJšUVV@knKVn@`@X‚VnK„wlLVmUUU@ƒU@aXL@WlU@UUW@UmU@KkLWaXkWmXUWm@U@ƒnk@UmK@U@UaUVUUKV_@al@namWUI@KUƒK@aV@WUIƒbƒ¥ULUJkIm™ƒK@U@K™V@U@a@UkU@K@wVaUwlU@mUƒULmKUkV@@anIWmUK@I¯„mKkl@LUb±lUakLmk@WwUKÝVUIm`¯n@Uk@makJU_@ƒƒJma¯ImwUVkKƒb™aUÅ@wWaU@VU@mXIVmmUkJkwm@mIlUKWzUK@VmLUV@VnbmLVbU@@lkU±KbƒƒÝV›@UL@¦VWUƒWXUJ@XƒVWV@VULnbWV—bW@kmWXUK@Vkam@kkm@UlmXUŽnbWlUXV`UX¯VmUU@Ul@Lll@nnJ@LƒnWmbmš@b™`ƒš',
'@@kUUm@nllVKXXVKmU'
],
'encodeOffsets': [
[
113423,
32597
],
[
113794,
32800
]
]
}
},
{
'type': 'Feature',
'id': '4211',
'properties': {
'name': '黄冈市',
'cp': [
115.2686,
30.6628
],
'childNum': 10
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VVUnWVXnVJ@„‚U@V@VXŽV@@IVJUnŽ@V@L@KlIVlVanLVbnVlI„ƒn@@a@Kl@@I„JlI@aXU@KlK„kVblJXU„VlU@V„bVkVKXn@VlxVa²I@VlVUxln@bšJXklaVWnLmÅ@y@k@ašI@W@aXIlVVaV@nnlKnLVW@IUa@a@K„UVVlI@wXKVV@IUƒla„@lUXwWƒnƒnalLlxXLll°@XwVKVaXIl™nb˜@nln@Va@U@k°ƒUmÆUVaXI„JV¯ÇUmmkU@WaKmakVm@U@aVKkkmKkVmIkǰ£@aUUVaVVnKlkX‚mkƒ@ƒlUVaX@@Um@‚™UmlUXV„UVU@w‚K²¥Ua@I@UV™l@U™V±UIUǰ»VkUmVI@a@U™m™ĉ™¯V±bŹĖğaÇL¯lmŽkX@‚óĀ@ŽmšÝêb±WkLƒn@xXx@Ž@b@V@LW@UbƒlţXƒ`kxWnXô¯¦ÆV@L@JVLƒxkK@V@bkz°l‚lXz@J„UlVla@XUV„bVKXnW`XXV@laVV@V„X@V¯xƒx@xULVbUJ@n@LU@VmmakbUK@b™IWWUUVkUmkLm@VJkb@nUJƒ@`V@kX™aUaVmmLkUmJ@Uk@U„±lkzmJUb@b„VUxVXU¤ƒL@JƒX@VlL@JkLUVU@mnUl„¦@V'],
'encodeOffsets': [[
117181,
32063
]]
}
},
{
'type': 'Feature',
'id': '4210',
'properties': {
'name': '荆州市',
'cp': [
113.291,
30.0092
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ÈJV„lVVLXJln„K@UlL„anbla„xlK@„XVWxXLlƒJ@V„nXxlnô¤l@nKn—‚ƒÈKl¼VL²Ç‚Un@Vl™zŽV¦UxWVU@@U™`lbUL@xV@²@@nlVU„UJVb@VlbXx°XVWX_VKUwVKVa@UVKUUVk@KnblaUU@wnWl@UX@lÆ@@a„IVmUk„™šxVJ„U„™@Uk@WWnk@Vƒ„™Vm@I@m@Un@m™XUlVlUnJ@knJVU°@@aÆLX@ƒllL@¦nJV@XblLVa²U@UlWš@VX@`@LV@@bXJlIXml_lJœU°b„KÆLnVVl‚—Vƒ‚mXaVIĢllUlVnLVlX@@b‚ašnnxšV„L‚bn@°ÆXmmkĉƒ¯w±™™™Uċ@KÝÅƧŃÝ癙Uw¯ƒm™¯k@W‚kV@¯UIUJW¼kb™Uƒwk@W`@¦Uônb@VƚlÈ@VU@ƒƒ£UWWnUÆUnmJkUÇ£VWUI@aUU@WkI@Uƒa@JW@k£kaWVUKmnkKƒb™kkVWb—VmUUmwU@kk›@UakUUa@V@nlx@lUb±lUbnnWLUyk@UamœUK™@mlk@Wb@VXL@x@xWI@a¯Ž¯V@bVn@LkKmL@`XmKmVU@@bkL@V±bk@Uaƒa™L™KUVƒIƒ„™W™XamVVbUK@b@Lm@UWkxULWVUnm@UlUX'],
'encodeOffsets': [[
113918,
30764
]]
}
},
{
'type': 'Feature',
'id': '4208',
'properties': {
'name': '荆门市',
'cp': [
112.6758,
30.9979
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@n@lxlInVUnWJ@nUVV@Xb@xVƚb„alLVUnx°Jnb„I@„V`lInbl@@V°mn_VJÞUVLXx‚@nllKVb²kVa@KlknL°ƒ@JVLXnmJ@bU@VlnLVKV„@nX@lUšKVaXal@VKn@¥°L@Unw˜bnašV@KV@VUX@lVXI@KW@@IXWV@laVL„„KlaXUVVnkVWV@lwXblIXWVkVmšaU£VaUmVIkU@y@WakKUamU@UUK@kmK@w@@mK@Lƒ™U@WwkmULƒamVVUU@ƒƒIƒbUKUa™kmƒm@UakLmxU@UÒWlULţÿmwkIUm@a‚kÈblW@UVƒUUk@JW@XkWWUkUKUIlw@aUWknWUUmnIWƒ™aUwVaۚƒaƒVUI™wƒšVlUnƒJ@bÅ@@kVWk@mX@xVVkbma@LUlVVUL@VUbULVxULW`UX@V@lUXWaXlWXX`@bmb@x@LUb@VmŽXX@‚@nWKUL@xVlknkL@bWJXbWLƒKkb@VlL@Vn@VV@bƒnX‚mLUK@nUaU@WbXVWL@VU@@V'],
'encodeOffsets': [[
114548,
31984
]]
}
},
{
'type': 'Feature',
'id': '4212',
'properties': {
'name': '咸宁市',
'cp': [
114.2578,
29.6631
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ÞÆ‚LČ@šV‚š²š°xĊ„nlWnŎ¯m@aƒK@„„°‚n„Jšwn™VIUaÆJšÅ@wšwV™XW@aV_l@²V°lĊwlaXLšwlUkalVVaX@lVXI@a˜UXJ@U°UU¥VIVKVklanLVa@VÈIVV@nk@aVa@mV_@a„K@klKUa@UnKWk@@lU@@UW@@nUWUwmaVIXƒ„lV@mLXblJ@kV@kk@KU@WƒkUWVÅwkLmW@UmL@lUL™KULƒak@maUUÝwUJƒIb›KUUƒ@š™aWK@kUWVkUwVw@™mÝ@™I@wkW@a›ww@LU¥™kƒJ@nVJƒIkVVnkV›UkyUIUl@xWUkaW@@°kz„ŽWxkLUWmzk@@bVVVš„b@‚@XlVœ@Vl@bVbUn™`Wn—@Wb„VVI@`„LVbXLV`mnU@@lƒL@LUŽƒak@ƒLk@WbUJn¦@lVb@xVb@n'],
'encodeOffsets': [[
116303,
30567
]]
}
},
{
'type': 'Feature',
'id': '4213',
'properties': {
'name': '随州市',
'cp': [
113.4338,
31.8768
],
'childNum': 2
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„@nš`lw„k„ƒ„UmUVWX@lk„@VanUĠ¼V@@mX@@nVV‚VXLmJVLnK@b„V@@J„@VUn@VaVUUUVWVLV@@Kk_@almaVkUU@WVƒVUVLXmmk@wUaUKUV@°™@kmaUaÈmW„mUƒVklaX@lVnxl@@UnaUk@ƒVUVwVK„nš@VVn@VbVJUknUmmVmk_Vw„KUUm™Vak¥@UVKVIkW@UmIVWkIVƒkmmLkwmVUƒ@LƒUU@VVXL@JmLUbmK@UUKmkKUUmVUaUnÇlk¯™mJUnmLUaUJUaWL@UkJ™ƒUƒ@ƒaklkU@¯@KWLUmUUWVkbƒLƒŽUKkbU@WX@JX@@LWJkUW@UVU@@L™Umb—amx@V¯K@¦mŽULk@WbUb™LkVW@kVVxUb@x@LlV@V@b@VšU@L@V„LnšlJVIVK„¦„aVJ@XUŽ@b„LV‚@LVJnXmbk@@bU`VLUVV‚b@V@VnL@Vml@„@VXnWVXnWlXblK@LnV@VVX@VkV@XWK@b„VV@VV'],
'encodeOffsets': [[
115830,
33154
]]
}
},
{
'type': 'Feature',
'id': '4209',
'properties': {
'name': '孝感市',
'cp': [
113.9502,
31.1188
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VnXK@L@°lVlk„b„@„VšlI@VXKVbVIVbnKVmnI°šlŽÈkVmVbnUVVlLnVL@VnLVanK@IWKUUV@„V@KV„nUlxnKlnU„lJUXnJ@VlXUJUL@Vl¦UbnšVVƒLUxl`UnnnmVVlnVK„bšmVX@a°Ý°LšaXJV@VUnKVXVK@LnKlLUbVVX@VwVJVn„@@UU¥V@@UUK@ƒmaUVUkkJ@L@K@UmVUI@JU@W@U@UV@ƒUIWmXUVmUUÇ@UVmIlmnmakK@akaW@UwVUkKVnUlKVwk™ƒVU_WKUkVW@UXaWkUa@w@VU@XaW±@IkbƒKƒb¯L@WƒXkWƒ@UakL@UV@UmVUmL@UXWVL@ašUƒVUUUVU@yUUƒIUa@wUKWVU@kƒ™™Wk¯UkwVKƒLUx™K@nVxUlUUWVUmw@wƒUUyXWlX¦WbUV@„U‚@blbUVVbXXƒl@lVL@bk@lxkVVnVx™¦ƒ`UnkL@V@L@Ž‚@@xnL@lVL@VnVVblLXb@‚@zlVUJVnUbV¤™bUnUlWXkJWakxU@UXml'],
'encodeOffsets': [[
116033,
32091
]]
}
},
{
'type': 'Feature',
'id': '4201',
'properties': {
'name': '武汉市',
'cp': [
114.3896,
30.6628
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@nbnm‚knJVUÈ@@Uƒ¥VknmV@VUlK@IkK@U„W@I„KV£UWVwƒU@aVanIly²kVƒl@@VnIlVnKUnVbšblWU@@_„‚VI@mlaUIn@lKVnUlVVXXšJ@aVLlanbUnV@@K@mVIUaVK@w„w°w@UƒW@UUUkbU@WWX_WmULƒaVU@WkbkUƒV@IWyk¯kly@a@UlL„wUK@I@KÅUW@ѱUm@wl¥kaƒ@@_Vw@ķƒa@akw@ƒkKW£XVUVwVwUaU@VUU™™xWKkbĉx¯k±Uk@U`@bWXUš™x@x™ÆÅIVbUJmš™xƒImƒ¯@ƒ™Umx™nUVVbnJV„@Lƒ@@ŽkV@bVnƒ@UVULlx°VXlššl„V@XUVL@xVb„JVV@zUVVVUV„™V@bUKWX@VnKUVVnU@@VlKVb„@lX„W@X°K„a„Lla@JX²Wb@ŽUV@@xVbXlWb@VUXVlXLV`Uš„lŽUxkLmVUŽlLUVVxX@lb@blL'],
'encodeOffsets': [[
117000,
32097
]]
}
},
{
'type': 'Feature',
'id': '4202',
'properties': {
'name': '黄石市',
'cp': [
115.0159,
29.9213
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VšUVV@VbUx„aWUœblUVmnKlX@bXJVIlVUxVVVIU‚zlx¯š@‚VbnL@x‚x@UVaXK„b˜@Xk‚WU_Vm²klW„XVK„Žl@nXV@@w„mlK²X‚aÞén™@ôÿ@lWn°kUKmmUљUmm@ƒwkImWU@UakL@bVLUVċ@™bUK@alIXKWK@™nXnKmkUVwƒ@¯b@L„lUL±W™n@KULUaW@kL@lƒL@bU`@nUb@bmlU@UÇJ@UUbmKkblŽUULUJV¦¯V@VWI—V@bWJkUW@UbkUlbkV'],
'encodeOffsets': [[
117282,
30685
]]
}
},
{
'type': 'Feature',
'id': '429021',
'properties': {
'name': '神农架林区',
'cp': [
110.4565,
31.5802
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@n`lIXll@lœl@b°aVklKXaVn@bU`mX@V„V@nmJn¼„V@bÞ@lL@„lJXVlL„aVLV„nVnalV„@VLÈUlblWXIšKVU@J„™š_‚@an™na‚X„m@KmI@mkk@KVkWWw¯w¯°ƒ@UUU@WƒaÅWkL@ƒ¥@kWWXkWmIUVVbm@@bUbmUU„ƒbW@UVk@mVkU@U¯ƒmKVUkaW@aULƒÆVbƒb@VÅ@Un@VƒLWl¯Lš„'],
'encodeOffsets': [[
112624,
32266
]]
}
},
{
'type': 'Feature',
'id': '429006',
'properties': {
'name': '天门市',
'cp': [
113.0273,
30.6409
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@K@UlKVm„_š¥UwUmlUkwl@@aUK@k„kWWUaVUka@aV@ƒVUXaW¥Xk@WWIklm@ÅxmI™VÝUkxkaƒ„@bWJaUL@„W@™l¯UULU‚ƒbƒkV™Ua¯bm¤UnÇUkmUšUx˜b@VkXÇal@bVnlJnxŤĀVKXkVÑV@nwlKVbn@n„šlVbVL„a„J@„VV‚UnU„bVKlnXxV@°š„U@KnL'],
'encodeOffsets': [[
116056,
31636
]]
}
},
{
'type': 'Feature',
'id': '429004',
'properties': {
'name': '仙桃市',
'cp': [
113.3789,
30.3003
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VK°VškX@@ƒVK‚bXI@a„ƒlblwÞVšUnJÆwn@lkXJ@X‚WVz„V@xnx‚VXUVVVkUw@mšLVw„KVU„@Um@alU@„@@KUƒmIUaVUšmnwmw™mb@aW@UkmKkUkVġkUJWbnU„õ˜@UkmUÅKƒL¯a›VkIk`WnkJƒ@xVLUVVbUbk@WlXbm„VxnxUblbUV™@@VUV@nVL'],
'encodeOffsets': [[
115662,
31259
]]
}
},
{
'type': 'Feature',
'id': '429005',
'properties': {
'name': '潜江市',
'cp': [
112.7637,
30.3607
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@UbVxšbX„mJVnXVlmVX@bkxVJVLVlXXWlX@@IVl„V‚U—aVwV™lnÈVVmn£°aVbUš„l„aVUK@mVU@Uš@VUkaVamwUwnƒWaXkl@VaUaVUUK@w„WI@aU@@K@_UW™@kX@V±VUbkKWaU@mI@¥kK„kW@ÅK@b¯@UVmI@lmIkVkUWVnšm@@V@n@JUnƒšU„@ŽmlXXl@@V'],
'encodeOffsets': [[
115234,
31118
]]
}
},
{
'type': 'Feature',
'id': '4207',
'properties': {
'name': '鄂州市',
'cp': [
114.7302,
30.4102
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@°¥WóXmlw„_ŤW„kVaX@@K@U@a@WwU@mWk@ƒULƒWkX±lUnV`XWl—@ƒaWLUb@Vw@wmKUa@°™kw‚yVUJUUVwkUUJWI@akWmLUnkV›aXVƒbUxUVWX¤lL@„lx@b„b@ĸUx@`„@lbk¦@x‚n²VƄX@'],
'encodeOffsets': [[
117541,
31349
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/hu_nan_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '4312',
'properties': {
'name': '怀化市',
'cp': [
109.9512,
27.4438
],
'childNum': 12
},
'geometry': {
'type': 'Polygon',
'coordinates': [
'@@@n„‚@b@XnJ@k°x@aVUnl‚UXnV@@VnJWUJV„nIVV°ŽUbVVVL@޲LUVa°V@aV@nm‚UXblLXWVXVmVLVK@an_„`@X@l°„VlXXW`nX@Jmn@b„@nV@Lm`„bUb‚n@VUVl@nIVbUlƒV@LkJUnVV@xVblVUbU@ƒzUKU@mx@xUnn@@WV@lbUb@šnVWXX‚V@VIV@VUnJ@VUz@JWbXllI@VXVVL@ŽVn@„„Wlb@„Žl„XVlL„aV@VJ@XX`„kVwVl@bk„‚bUŽlVXIlƒnLVa„mVwV@@nV@XaVJVbX@lwV@n„@nV@VWnIVVUŽÆ@Xx‚a@I„UUKmk@mVƒ„IXmWUš™VJnUVU@anaVwk™›U@UXa@W™@m_@a¯@@K@UVƒ„bnK@blIlbXa@WW_n@VƒU@¯bmyƒUkUJÇÅ@WU@kWKÅwƒnm°KVkmankVWnXVWV@UƒƒwXkV@mƒ„UlLnaƒVaX@VUn@VnVK@xlnXWšU@a™@@klak™Vw™mUaV@™wmIÛ`m—@mVUXmlIXƒV‚I@K@aU@UaV_UK@wkUmmUKWXŽmVkUƒL@mƒƒU_nK‚™@aVU@Ukak»@U™™@ymUƒ„¯™ƒUUƒVKkam@™nka@ƒmwkLWb¯mkaƒ_VaVKUƒ™IUw@kKmU@WK@UnƒmaULkU@wUalWV¹U@@WUI@WU@‚_@W@U@mƒU@WbbUK@Um@@UmbUwWWkk@WU„a@anUUwlWUwUU@wlJVUnnV@@mnI@m‚K@U@w„a@wUm@_mƒVUUaVUkƒƒƒ_kċUk™VWLƒ@mlU@kn¥W@UwUWV@VÝU@lXLWVUbVLXlVIl‚knmU@VUJk@@„ƒ@™kVmwmVkxU@@XmVUb@xnKVLl@VxUxkIU`@bWVXX@JWL@bkb„¤@bmUUU¯Kƒkmb@V™VU„VVn@@„Vb@`lnœxmb„lUn‚bk„@xU„mV@bmWbUV@VJ„Il@nVUb‚K@nn@VbnJVIlJVkXJ@X@lmx@bnnWVXJWXU@UlU@mk@@llb°x„IUbnJ@VWbXVmI@JVX@bk‚@bWL@JUXUK@U@Uƒ`n@@Xm@XVW@@nX@@`ƒImxU@@JUI@KƒLmK@UÅUUV@VW@™¯kUU@UamVUUmJ@n„xmLKƒkmJkwkKm_mKXU@aƒU@b@Wk@ma@zUJVUmbUlU@™xnXlWlXXblK„¤V@@nUVVLkVš„l@Xb@VVK‚nXKVx@znW@X‚@@lVK@X@JXbWbnn@JUamLVVXIVxnK@aWUX@˜x@VnI@WlI@anV„IVxk‚l@lbXXšxVVVJVInbV@@ln¦ml@XXVWbkJWb',
'@@XLVKVXVKUa@UUUmV@l'
],
'encodeOffsets': [
[
112050,
28384
],
[
112174,
27394
]
]
}
},
{
'type': 'Feature',
'id': '4311',
'properties': {
'name': '永州市',
'cp': [
111.709,
25.752
],
'childNum': 10
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lxUXV‚lXUVnlVĢ„JVbUXVJV@XUW¯„VIUK@klW@Un@„nl@V`XUVL@l@šVx@„XXW`UnUbšxUlVnUšV„lb@VnJšUVVVInJlUšVnwVklKnw„LVJVšV@nIV@nbVa@KVVVUUa„KV_nVVJ@_VW„nV@n¥lI@anƒl¥X_VKlwVlULUVVVš@šU@VXL˜ƒ@IUmn@VU@wmKXUWU@m²šl@VIXWWkWUkWlkIVamUXamUnmWUU@@Un™lK@XJl@kVUk@mWKXkl@@aVU@UVWUUVa„In`VUVLnw@U@K@Uƒƒ@w@UVmUUƒ™°K@UnV@bV@Xk@KVm@amk„aU£VWUUmUUwm`UbULka›KXU@kVmU™@aV_UWVIn@˜y„XXK@klmV„V_kWVUn@WUU@UƒmaU@™wnwWanUmmXkƒam@UakLmK@b™xUUUU@Km¥Vaƒ¯@ƒkUaVUlm„UU@mUUÇmUk™Uyƒb™bUa™XUWWbÅLmL@V™aL@WWXUKmmk@a@UUK™XW¥kU@VƒUkxmVkUWbUJnVJ@nVJXzWxkŽ@lVbUX@VVL@`mbUnšŽUn™VV¼k@Ulm@mwLƒb@lmLUK@UamƒWkƒK@£Ua@ƒ›UkJkUmbVlkX@bWbUŽVŽnnUVl„@bšbVK@VX@lb„V@nU¤šx‚²„Knblb@x„V„ô@šlŽ@b@l@XWxnVl@„VV@XLVl‚LUŽUXV`šbXXmJU@@bm@UUkLW@UlUKWUUb™wUm™L@nklVVmVXXm@@bUKlÆn„‚XkllVUVVL@nUbV‚@V@nnV@xUn¯U@JW@UX@xĉ@™`m@@LV@b'],
'encodeOffsets': [[
113671,
26989
]]
}
},
{
'type': 'Feature',
'id': '4305',
'properties': {
'name': '邵阳市',
'cp': [
110.9619,
26.8121
],
'childNum': 10
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@XIlJšI„VVK@n@VVVKnLVwVmnLVK@U„@šw„J@wVIƚ°X@ÜȄUÈxll@kn@VwVaXJWXn@@WVL@UUKVKV_U@@aVK„x@U„aV@lk„@XylbUaV_šVnal@W„U@a„I@aV@@aVUl@Xm‚UXWaXml@@kk@ma@V_UnUV™UUWJUa@kkaWLUmk@@LUVWUkJWkK@¼UnWJƒIkV@b@JUIm@Ul™V™m@Uw@a@kWƒXWKUknW@ƒWUU@k™mx™UkVmIUJUU™VmI@UkaUƒV™UmVk™wVaVmX_WW@ƒUw@™@kUKWVU_k@ƒmm@@VkX@lVLUJƒX°WVU@UIVWUaƒIUġmkVUkWUVWkwWXk`mI@¥kUVƒUƒUn±@m›XkWknV„UVmmU@@XƒVƒUk`@Xƒƒƒk@¥¯»mbĉó@mkU@kU™ƒƒ™KmX@˜UnmL@lULkKUƒWUU@ƒbUaUnƒ@Vb@l„¦Ub@l™@UKmnƒKUnl„UVVbUVn„@`Vn@xƒb@x@VL@nmJ@nU@mmUVkI@xVVVxkXVxmV@bƒbXVl@Xl‚XVxna@Vn@@VVL‚aXaV@n„‚@@V@X`V@@XVJ@XV@UºkXVb@xlVVKnbm„@VXLV@n‚lL@VxšJV„ULUb„`lb°nXalKnx@„lbšmn@lbULV„„š„ƒnV@zšš@Vl¼lb@VUV@bšmLV`„„@n„KlVnU‚XWVLnnlV@xVLU`VbV@'],
'encodeOffsets': [[
113535,
28322
]]
}
},
{
'type': 'Feature',
'id': '4310',
'properties': {
'name': '郴州市',
'cp': [
113.2361,
25.8673
],
'childNum': 10
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@²zVaVlnVl@nšVk„Jl_XJlIVmnL@mV@VXn@lV@‚XzV@lyV¯²U@UlJ@XVKnVVIXl@UVLV`@n@J„I@mlI„KVLnUlVUVVLXašKVLl@nb@ŽW„XV°KUnVV„L@xVJ„L@b@LUVVVU„˜VXbmbVbn@@lUbm@x@XVVVŽ@@˜@bkImx@Vm@Xbƒb@l°XU¤„a‚L„mnL@bl@@™VUX@VxnV˜anLnƒWƒ¥XKVwnUWXmVIUWÆLVx„L„w@wVmlU@¥XƒWUkwlÇn_Uw„WV@VU°wnU—ƒy@aVškVlnL@lVn„w@VlJ@b„X„x@bVKnb@U@WVUl@@Vnbl@XLlK@aVLVKnxÞn@a„LlmUaVU™ƒm@ÅknUmaUKmVk@m™kk@UlWUkVm@w@kUU@W™™¥@w„Ç@aVIlUV@kUWU@UUm»@k@mKVkUKUwƒaUaUa›@k„kUWJkImaU@UK™@maUzk`@zƒy@XmJkL@UUJmUkV@z›@kŽkVmK@¦UbWL@a@UbmKmwUK™Xk›VUUkmVkw@UUKmL@WUIWa—JW_k@@WmI@mk@WkWULUUVKUUVm@šU„bš@‚nUǃ@U@w„™V@Ua@aƒL@ak„›l@k™UƒJƒwó@@L@V@„™`@œƒJ@xnn™šmV@bkJmUó@ƒn—JW„UUmƒU@UV@Lk„WlnnmVXbmxšxV@nbV„V@XVm@UVlXU`ƒUŽkn@lWLƒW—zm@UJVXU`@bVšUn@lWVœLlbVKVan_VxnVVVUXV¤ƒbnl@bUn@LWlU@@amU@V¯L„šVVUn@V@x„„@V@L@VmxUKUVm_ƒJUbVV'],
'encodeOffsets': [[
114930,
26747
]]
}
},
{
'type': 'Feature',
'id': '4307',
'properties': {
'name': '常德市',
'cp': [
111.4014,
29.2676
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@l™U™mkUwUyV™@VW@¯Va—VmUU@KVUVUVLnaWƒnkUÓV_@mVU@݄w@ƒka@kVmƒUmK@IkaUamKkXWaUW@WUk„™@@KVU@aU@™L@J@XÇVUKVak_mWkLWakVUbmLUUmlUVKUU@kUWW@UImJ@xkLkKm@@Xƒ@ó݃@UUk@UKƒV™ƒULƒKƒXkWWbkaƒIUƒWU@mUk@WLaUJġ™ƒ@@XÈÆVIl‚„Vnz°aV@U„m@X`@XWbkakJ@amLƒaU„@V@L°@@bn`š@@XWb@VœVlšUxmb@bUVmVUI™šXVWnƒJU„@nnlVLƒV@JbWzk`m@UVK²V‚x„k„LVl„@Vn@V„„°xVKVkœVVlUblx@bU„‚Æœ@@nVnUll„kx@VW@@VkLWxUL@bÝ@kKkVõV@bkXVVUVƒ@ƒVkUkV›LkV™a™@@™ƒ¯xUxmX@JVb°WXkK@Vm@k„Vb™bn¤‚xUXkJƒblxnXÆK²l‚_@Wnašn@ŽUL@b‚JnIlV„@lUœ@@¯ô@lWȂIVKVm„U@aXaV@lwVXn@@K@UVKUUnU‚bn@lWšX„ƒlJnUšLšKV@„„l@²a@UlK@aV@naVX„WV_nKlL@KUm@a°U°@VXL@a@wWmXal@„k„@VLn›V@@bl@VnX@mwVa²aVU@mk@'],
'encodeOffsets': [[
114976,
30201
]]
}
},
{
'type': 'Feature',
'id': '4331',
'properties': {
'name': '湘西土家族苗族自治州',
'cp': [
109.7864,
28.6743
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@KšL@wnK±nƒnm‚—@WUk„ƒÜÈn@n»@mVamk„mšU„„l@V™nmmU@wUan¯VKšLn„VWlInyWUœI@WWk@KXU˜n@mnUmU@WœƒmkV@ƒkXašaVaUm‚Ikƒƒ@kaƒX@ƒUm@UKWU@UkJWkXa@IVy@UmIUVU@UJU@WXWmU@™VakaU@@Xm@Vm@wnwV@VL„yV@VakUUa@wUUVmlI@K„UVkUamJk@VU@UmVaƒan_@KmUƒ@@anm@ImWX_WWUk¯ƒ@k@Wƒ_m`@bULUKUnUWWXkKWaVmnU@@b¯UUbVޱK@UKUUVa¯UUmJUƒVIXmI@UU@WmVmkUV@b¯w@lmI@W@aƒ@m¯LXbmJVLklWL@V@XXŽmbVVU@@VU²Ul@VlX@bš`Xx›zUmkUVÒlŽ@bXLWxXVlš@V„bkLma@nmVmULVbmVUb@lnzmbUÒVl@°nLV„lJkn@bmJk_ƒVmmkblxÈx@LUb„xVb@V™n@JmLVŽUš@„nV@¦VbnJ@lVVbkx™bm@UxVLV@n`UnVVV„kl°z„xVb@VU@@ÆlXnWm¦nbVK@XVVUVVl@X„KUV@nVL@WnIWŽXLVKVLlxUbVKXVWbn@@UnKVLVb„JšU@aVU°b'],
'encodeOffsets': [[
112354,
30325
]]
}
},
{
'type': 'Feature',
'id': '4304',
'properties': {
'name': '衡阳市',
'cp': [
112.4121,
26.7902
],
'childNum': 9
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lšV@XV@„mXVlXL„W‚X@l@bVxn@šŽšUVkn@VJ@I@alU„JXIVm@»‚LXllIXVVU@Kl@VnXKlb@lVbXIVVUšmVVU`@nbl@@lXLVVVKVbnXWJ@VXbWxXb„Ul™VK„¦nLVVUVVbšb„K@U˜LnK@Un@VxlUV`UnnL@VVL@JV@VUnxnKVbV@@VšIVUnJUVUl@nW„XllIUa„KVbÞLV¼²`V@VIUwlaVmXa@IWanK@U@m„kVƒVUVaX@lšnaVLÈ@‚¥@kkJUWJUaƒXkaUm‚wVXJ@_lWUU@¥n_‚KkamUK„™@amKƒnKƒbV£¯W@k„aWan@@UnwlJ@a@—@UUU@W‚wn@Va@km@UanaWa—UVƒUUVU@K@aƒKUI@wƒKUUVm¯LWUXƒ@mak@UK™LWbUKVUkUmVUKƒLkJ@nƒJ@I@mU_UK@VWkUJmUUL@WkI@V±VU°kzU@Wy@kUm@UWU@@nmKUnkJWIk`ƒIUlm™k@mUUkUb±yUX@VUV@bk@WlXL@nVlUl‚k@WI@ŽkLmš@VV@XVmnnVWbnVUblJXkVl‚XXlWXUJk@±™@nXVWVnL@xUVm@Vn@J—„WK@U™V™@UUVUVKUkkxULW`k¦m„@bkJm¦U@ƒmUX@`UImUU`ƒLVbUVUU@LUbmaU@mJU@U™UIƒKmxkLUl'],
'encodeOffsets': [[
114222,
27484
]]
}
},
{
'type': 'Feature',
'id': '4306',
'properties': {
'name': '岳阳市',
'cp': [
113.2361,
29.1357
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@wUklmUUmU@@UVm@wUaV_mmUKmwkIkJmUUnm@™™@UUƒbUKUƒmÛamm¯xVLkbÇÆƒUƒVUzkVUlƒUUKWLX¦W@ƒVUUUaƒKUbmLKm„@akU@aƒmVaUUVIVWkk@wkƒƒ@@xmLlmÅwmbVlXlÝIWVkK@kkVƒL@VWKU@Ublnaƒƒm@b@bšnW`@XUJk@UUWKƒk@UKƒnn‚@xmLUVm@kbVbV„nV@V„b‚@KnV„LWšXŽÆV̦VblŽš„n„UJWz@ƙVóUVbkV™aÅx@¦lVUbVVknWKƒ„k@ƒwƒK™VU„Å„ƒl@zkb@`m_mJ@xX„mbVbœ@llV@n„@llbXL˜UXalUšl„alVnwnLVKlšVbX@@I„V@blJ@bVL@VVVUXȤ‚VnkVÑXmlbnš‚„VKkÑř@UmaVç@±XUlI„xlV„@VaX¯lUVVUšVJn—V@°°nް„Vxĸł°¦šb²¦lJ@U@aUK@kUm@_m±VIXal@„Kl@„bV@K„K@k„m@UmUUaƒK@_UJƒaXU˜@Xmš_VmUk@WUk›@kU@a@m@UƒaUUU@al@ny‚XXWWwkly@¯n@@bnV@k@mVI‚„œVlUUmlU„JUw„I‚bXƒVaUal@K„b@ƒVKVkXVl@VkUU@ylUœVVaVL'],
'encodeOffsets': [[
116888,
29526
]]
}
},
{
'type': 'Feature',
'id': '4309',
'properties': {
'name': '益阳市',
'cp': [
111.731,
28.3832
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„ŽÆxXL@l‚V„šVI‚bXKl@nVV@„XVŽ„JlbXalX„W„LVKš„„UVLl@VV„@ôބ@@Wn@lLlK@wnIVJX@VX@lVVUL‚VnkVVnKValUXblKnXl`UbVLÈU@W@IšKV@@bUV@Lš@lƒXV‚@VXXblWnLVblb@JnL„VUn@llb@„ƒx@ÞUV@nU`VÔmlX„mbUKUVUV@LVVUn˜ŽUb@°UXš@U‚VzVxnlVškšVnlVnaWƒ@wnIn`@_la@y„ƒVƒšU„L„xl@„ƒXLlmUUVakU@¥ÆwšblUUaôVšU@ÅXyVImƒ™ƒkUaġ¥ÅUWX™ƒKmU@Lƒa@UmUUƒUalan@VUnK@wm„m‚L@V„lXLVVl@VI@WX_™m@a™¯mKUkwW¥UK@_UWWLUVkUWL@WUIkVƒU@JƒwkLUUmJVI@WkXm@VmkKUIU@mmm_@VUV™@™„kJċwUU@KUWkkW@IWW@km@klwkWVkkU™V¯m@kWLU`mIkmkXm@@`@L@xUKWkU@VL@JUU@mbUKVa¯WVnL@`lXUVkU@xW@UbUWVU@UJ@„lnU@m‚nÈmVƒa@bUL™wUb™@@VkxmUUƒ™UV›K@IƒUƒmk@akm@wmIƒŽkK@b™VWXkm@wULUmm@UVW@Ub„mbkKƒVn„U@Wl„xV„U@UXmWUXmlnbUl¯Lmn'],
'encodeOffsets': [[
113378,
28981
]]
}
},
{
'type': 'Feature',
'id': '4301',
'properties': {
'name': '长沙市',
'cp': [
113.0823,
28.2568
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lVUllXkx@lln@‚XX@JlXXl‚V@LVVČxlIšƒš@VU@Un`nnV@VJlLUnn@lW@XUJnIVVlK„x@I„VlUVJ@XXKlVVUXKVX@`VLX¦lxVŽnLš°‚an@„„‚bkmVaV@XL@U„KlU@llLXUÞJWkUknaÆxnŽ‚knK@w„@l„@xllUXUJVVUb„n@blV@bnƒ‚LnKVa„LVbVV„UX@W¥XKVL„VVklUVy„U„VÈÅlaUK°wnnÜbn‚V„VL„aVVš@šn@VmnVlIlJna„@Valkn@na@amwm@„UXw˜K@aUUVUUaVa—wWK@kU@UaW@kKUUƒƒ@k™W¯XWan@k„™mmÅ@@I@U@KmLkaVUƒKkLWVUƒk@UVmU@am@kkk¥ƒUƒVUK™„maUb@ŽUb™I@aƒKkkWm@W¯K¯b@VmaULVxUXlVk@UxVJVbUb@xULƒ@ULWW—LƒĕmxVVL@šVb™KUwƒaŲWwX@@WƒUWLU@VbkV@aU@@VUnmJ@VUn@VƒLUK@U‚mUIk@UÇmU@@UW@J@LƒbUmVI@aUmW@@bkXUx@lmLUbm@UbkJ@V@XmlUbkKm@ma@kUaVU@aUK@mImJUIkVƒUƒVUakbWwka@UWKkLUamKUXm`Å_U˜ƒULmaU@@lUV@X'],
'encodeOffsets': [[
114582,
28694
]]
}
},
{
'type': 'Feature',
'id': '4302',
'properties': {
'name': '株洲市',
'cp': [
113.5327,
27.0319
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@X‚‚Unw„Ė˜KXXVK„@VK@wVaUaUIVwl@kUVWUwVKnb@U°a°LXŽ‚@Xnll„L@bšJVa@VanbšƒVL„U„V@al@@UV¯ÅÇ@Ummk™w@¯ƒyVwnUVVVUkmWV—nKVUƒa@WXkVKn@lUVU„VVVXIlV°VnI@VlKnV@mwVm@LXKWkU¥wWwƒƒ@k@m„X@KX¯V@VUVa@VnKWkœƒV@VUkm@aWa@wkUWwkmV£VÿXUVL@mVIXaò@nW@ašUš@@am™@aUU„UmXmWUk@ƒƒnUW@_maVm™wUkamaUL@aƒwƒW@akI@UƒxUm@kmKUk™lUŽ@b„zV˜m¯xUVU@ƒXVxm`kÈlxXVW„@¦kVUn@xƒxƒKUwÅKVXUJWnXŽmVUxWL„¦XŽm„mK—bmUUwW@UV@šk@ƒšVLnŽlbLm`@¦VVkX@`WIUށxVnlb„WVbXIV‚lI@l¦Ç@UKmbk™W@UbUVU„ƒl@n@VmLXb@JWbUnkbVxUJUxWXXlWL@V@V@XXJWx„zUVVVVKnXW`@bkIUl‚„nLVJUbUIWVXlWV@XklVbnn@xlš'],
'encodeOffsets': [[
115774,
28587
]]
}
},
{
'type': 'Feature',
'id': '4308',
'properties': {
'name': '张家界市',
'cp': [
110.5115,
29.328
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@InWVw°wš„@š@šblUœKlUlV„U„@VUUUlW@aöUlUlLÞ@@aVKXwlK@UX@@UlwkƒVkUm@m›@ÅVƒ@akwVaUk›UUlUL¯wƒƒ@UUmƒ@UkƒKƒlw±UULVn@l_XyWwÅ@VUUmJUXU@@mmƒU@kxW@UaUIWbU@@mU@UxƒnUbmKk„WJkUValƒ@aUkUxƒlW_@WUIU@ƒbkKWUJVnUb™bWb„lU@nl›„@XnVmV@n—mWV@LXl@X›JXVmzkJUXmƒ™KULm°Vb@xnVmnUšk@ƒƒ™VƒnnlUb@nm¼m@Ûǃ„Vl@X˜mnm„²ŽmL@x™K@LUl@nULÆx@V@VXVWbXX˜l„@nLlm@bVKœX‚W„L°bnUš@VaVUš@šmšVw„JnwVK°zn@V‚Vb„a„@Ċ¼'],
'encodeOffsets': [[
113288,
30471
]]
}
},
{
'type': 'Feature',
'id': '4313',
'properties': {
'name': '娄底市',
'cp': [
111.6431,
27.7185
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lL„nJ@xln@bnlV„‚„@JœLVUšŽV„nVlw@Uš@VašxVK@a„bnUmÇnV@km@ƒ‚I@VUVVXVaX@@wlVVUkW@_mKXU°‚UbVLnaV@‚V@IUKV@XlVL@w@K@_n@lWlnnJV_XK@l°nšU@WVU@kV@nbVK„V—lƒ@nLlƒ„LXU@ƒlmkw@nW@UKVa¯IVn@@aVUUKl@nXVKVn²a˜ŽXblKnLlmVI@KUU@akLUaVa‚UXm@aƒ@wVUVKnLnWlXl‚n@@U@anUVm@U‚Inm@IUK@UmKVmU_kVUwm@@VmL—K@VƒL™aUaVUUUmKƒ¥ULkšƒVWaXwWa@UXImWUaULUUWKk@WnXbWށVWnk@UV@bU@@bƒJ@bƒV@XkŽmb™UU`VbkaWzƒ@klU@ƒb@VƒwUL@bV@U`ULVL@VUK@Xm@XWWIUbUxm@@lkkÇwƒVÛÇW@¯Å™UJ@xƒI™xƒ@@VULmKUnUxmKULUUm@@‚ULƒU™JkIWJ@b@LJUW„kJWnUV@nn˜Ü_nJšxU@VbšnUxlškb@lš@'],
'encodeOffsets': [[
113682,
28699
]]
}
},
{
'type': 'Feature',
'id': '4303',
'properties': {
'name': '湘潭市',
'cp': [
112.5439,
27.7075
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Æ`n_VWnLVblKXL@VlbXxlaVb„U„VlUVJnInJ‚@VL@bUVVb@lnbn@lLVank@W@UlIVan@VanK@kVwlW@aX@Vn@bUJVn„a@K‚IX@@VV@nŽVÈl@VJn@VVL„K@UVm@UnIVm@UV@@blUUaV@XK„V@XW@XxƱ„bVxšLUa@™UKWk™@wmmUalk@WXUWkXUVJVaUImKƒVklJ@aX_mWULUUVUƒyXwWI@W@U@UXKWkXWVwU@±_U»ÝKUaƒLVbkJkƒWmXk@UVVŽmIUV™J@UU@UamLmwUVU@mnJ@VUnmV@b@Vm@kkWmXmKULUV@x„Ž@bWnVUbVblK@bVV@LUJknmKkLWa—±bUmULmWk@VLUV@bm@U°JUbVLX@@mlxkn@„WVƒKk„mK@k„'],
'encodeOffsets': [[
114683,
28576
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/jiang_su_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '3209',
'properties': {
'name': '盐城市',
'cp': [
120.2234,
33.5577
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„n@‚°ĀÞ°@¦ULWKkx@bkLWb@lUlVXXJVbƒnUKmxXV@bm@@Xš‚„šÜ¦XlVnš‚mzVJ@n@‚²ÞôkƃÞaȰĉ‚wnljÜó„éVÛnĊīČlj‚ĉ@ō@KÞUlU@ƒkklÇÈњÑlġXɛ@UġƒƒaU@U_ƒW@n™@kaUL@VW@kKmkUV@bkbWW@bkzma@ƒJWI@KUKULƒ@U¦™`@XUJ™U@KmXƒw¯KXkmy@aUIWJXXmV@K¯UU@@bVL@¤VLXbV@@JVXVK@„„JVn@bkKmakVVXUVVVlI@`U@nzVVƒb@¤n@@UlKXLVVšI@V@nV@V‚@ÈUx@šóVōšƒkÅWó@mU@bk@Ýwk@WbXxm@@J@zV@kVƒbV‚nLWVUX™WUXUŽWLUށ@Wl°z@VkxU@UVWIxWJkbƒĬ„nW@@bUl'],
'encodeOffsets': [[
122344,
34504
]]
}
},
{
'type': 'Feature',
'id': '3203',
'properties': {
'name': '徐州市',
'cp': [
117.5208,
34.3268
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@XKVX@WnIVx@K°Lnll@@I°K„nVašU°x²mlxš@VanU@aƒk@akmV@@w™@Ua@aUwVwUw@w›@UK@£kaĉlóIÇVkޱ@@kUKmVkIkxW@Ua¯UUm@UVI@WVI„JV@ƒ@Um@Uana„U@m‚I@J@XV@XaVlkXƒVaUUWLUyVIXmWak@ƒXkJókƒJUL@KWkk@ULU@Wa™lUIkJmI™mk„VbVš@lV°kXUKWKULU„mb@VUlVnƒb@VV@IVKUUmU@ak@@bmV@xklƒUƒU@UKmV@nƒJVbkXƒKUamLUJ¯UUVmI™bVV—Ll`@LƒLU`m@kXUVU@V„lxUK@xkIWbUKƒx@V‚kVVn™b¯@@U™@ƒxk‚mbkLÇK™b™@@XnJ@LmVklƒ@@XƒlUƒVkxƒakVVb@bVnUbU@@x˜VUšVb@š„ŽnIĊ`šXVVôJš_„K@xlU²Klk„U„@VaVVÈm@kVUVmnamUUaVƒXIVJ„@‚ç@¥nkVLn›„@@XVK@VUX@JVUV@UnVJVLUJVLUVlšnI„b‚KnU@m°™VanI@anV‚KVL„an„lK„blš„KÞk@¦@¤@„VKnLVK„L„KVzlWšLX@VmV@VbnU°@Ualk™˜WXLVU„KWkUUWšƒ@£Wa'],
'encodeOffsets': [[
121005,
35213
]]
}
},
{
'type': 'Feature',
'id': '3206',
'properties': {
'name': '南通市',
'cp': [
121.1023,
32.1625
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VJ@bnzWl°L„xnW@LšVVI@Wš_V¥„@VKVL@LXJ„I‚@nbly@aXXla@aVUnllLX@@UVKlbš@@m„XV`V@„„lkČÇÆƒȘ¯šwnĕVĉVÿšUƒUĠƒŦğlXÑVǵ@±ōLʵ˝lÇbÝÞ¯xk@Çkķé™n¯@ğŽġƴǫ@kVVlUbƒL@xULǂóLUl¤@nkVV°VLkxVb@l™aUXUKWĖklVX@¤UšƒUkb'],
'encodeOffsets': [[
123087,
33385
]]
}
},
{
'type': 'Feature',
'id': '3208',
'properties': {
'name': '淮安市',
'cp': [
118.927,
33.4039
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@šnźUôÒɴ胚l¦nĖV‚kbmš„X@xVlVL@xUb@bUJVnUx‚šœ„lKVLÈx‚m„zXV@lW@XV‚b@bȚVxnb‚ƒVIXa°L„aÆVVaXUlK@aXIƄVlXKVUlIXalK@alwXLVK@¥Ý¯¯ÿ@ƒmVk@aX@ƒm„īlaXI‚wXJVUV@lw@U¯yb›UaƒUġUÅaUKVknaġm@kUm@wÆIV±nLÆw„ÇnUUkƒ@ƅÝU¯JÝI¯¦Ul@bƒ@@VVL@l@LƒLÅmƒL@b™@UaVaUWmLUKV¹KƒLWKX¥WI@mXk@UmaUVUU@VmL@W™bkIUWƒUmVóIkbmm™@UbVLUxmJkU@bkJWbnXU`Wz™KUÞÈlVb™Lmx@„kè@Æ'],
'encodeOffsets': [[
121062,
33975
]]
}
},
{
'type': 'Feature',
'id': '3205',
'properties': {
'name': '苏州市',
'cp': [
120.6519,
31.3989
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ôèĊVnX°¤²„lxƒÈÜ@²x@J@b@X‚`nIUƙUUV@bl@VVnL@L@xƒJ@X@blJXnW@@`XbW„kVƒ@UbVxƒXUxkV@LóxVbUVWš²šVJĸklUǬ@ĢƳĠ°@šmƒī°»ÈÇ¥ULUU±a@bU@¯ƒU@KnImUVWUk™mXUVU@lIVaUUVWKUbUkWKU¥n£WakJUkUL›K¯L™KkƒVIn@VaUƒVUUƒ›UkVk@ƒU@amUkJƒ@UUlwX¥W@@UkVmk@JUakL›@kk¯ÝmJUn@nmVXlmbVVkn@„UJ@±WUxV¯a¯KōbżÇxUxƒšUUlWL'],
'encodeOffsets': [[
122794,
31917
]]
}
},
{
'type': 'Feature',
'id': '3213',
'properties': {
'name': '宿迁市',
'cp': [
118.5535,
33.7775
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@XbWnUJVzXKVVUbW„klUWbU@@W@IJ@nƒVmbVbn@@V@„UŽƒIUJ@XUJ@VVn°VVbX@lwlJnUVL@l²@lÈUôJĊklb@¤VLœ@@xVxUxVx@bVbš@@xU@ln„mnX˜mXLVmV@X@lxVnVJôL„LXa‚x@b„@@KVL@bn@@m@™@alLUUVaU¥nIV±‚I@mXI@aWWXU@LlUXWW_XWmaUwǙ@aaWUX@@kWUƒynÇwUKkL›ƒ™VwUmVI@aVa@wUKUk@wƒWn™laUmĕk¥„™ɳçóÑŹV™mmzkVmm@a@Ióƒk@@LWU@`—„WbXLWlkImJVn@`nXVbXŽmL@Vn@‚l@nUVl°Xx°U@LVĠ@z°˜@¦UV@Xn@VJmV'],
'encodeOffsets': [[
121005,
34560
]]
}
},
{
'type': 'Feature',
'id': '3207',
'properties': {
'name': '连云港市',
'cp': [
119.1248,
34.552
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@‚lzXxmÆV„„@@¦„@l`XnlKšXXm‚KnLla„b„@„xmbm@kL@V@Vl@@VUXšJX„mbš@@„°Æ@èÈzlW°XĢJlÈ`lInbšWV_@mš™@UUķnƒôw°ÆmnaVƒVÛVmĸ»Ģw±Ý@@mUIny™UmWkۥݙƒK™@Wn@@aWUnwVL„mUaWIUWVk@kkJUVWLUkŃWJ@bkLWVUbÅUƒb¯KWbUJ„WXX`WXkV@KWVXX@bWJ@nJU²mJV¦UbVVkK@b@š@nm@@aUK@Lƒ@@awWbƒKóKUIUmkwW@U@UnWK—nmWƒn@b„l@bmVUb™@kw±n¯w™VUb'],
'encodeOffsets': [[
121253,
35264
]]
}
},
{
'type': 'Feature',
'id': '3210',
'properties': {
'name': '扬州市',
'cp': [
119.4653,
32.8162
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VUXblVVV„b@xV@kz„V@l‚wVLUbVV@VU@VbUbl‚b@nkͰIÞV@Ɔ„VlmVƒÈÅxmKU²ÅJ@xVn@lĢnmbUlVLÆbĢV„V‚bœV‚aXk‚@VXKVVWšXVWXUmKU„aWaU@™¥@£XW‚UUV@@ynam_VWkUVUna@ÆV@mnkWmXkWU„W@k„@@akklƒlWUI@UnKl¥™I@VVma@a@I@U@a@anK@UmK@ÅVUnJl™kI@aVwka@mVIUW@UWL@WÅbmIƒƒULka™UWƒUxkLUKWlXL@VƒImƒÅVƒU™mĉL™Uól¯I±l@ÒUbVbUVVXUJUnVV@lnbl@'],
'encodeOffsets': [[
121928,
33244
]]
}
},
{
'type': 'Feature',
'id': '3201',
'properties': {
'name': '南京市',
'cp': [
118.8062,
31.9208
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@k@ma@kUUVmVIUWVUUaVa@Ѳk°Jôk@Wmk¯KmX¯aUakKƒƒWU„@XU‚LXaV@@mUaVUUl@VmkaUXm@ƒWUUna°IlmV™m™IUW‚@Uk@@aV@VVX@„V‚I°»nm„U@VKVan@m»UaU@U_@WlIUa™aVaUala@¯n@‚ƒkaUkUUWKU@mwkUUmmL@K@ƒLmUUVƒKƒVÅImU—JƒƒVkVVLšèVLVU@W„L„V„š@nVÜULVŽUL@bW@XbWbkJƒUUVUxVXmVk@WUUkVmIƒV@„nbnVWbƒJU„kUULƒa@Jma@XkK@VVL@L@JƒLUVU@V¼ƒnXlƒbm@kbUKmn@lVb@VXXV‚UV@b@LVbÆxXbl@@lV@U„VV@XVK²VlIš`„UbVbUlVVn@WXn@@VUV@„@KmbVLXқLkKƒV@nX@VVUV@b™nVllbšmnb„IWVXU@`lLlknVnmlLlbUmVInK°nUƒU@l@VU@Vn@„ƒ@alI„`VIXaVaVa'],
'encodeOffsets': [[
121928,
33244
]]
}
},
{
'type': 'Feature',
'id': '3212',
'properties': {
'name': '泰州市',
'cp': [
120.0586,
32.5525
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lUU@@y@In@WwXal@Þxl@@anVô@ÆX„™ôU@™Vw@ÇUU@@m@U™JUUWKkL@Vm@@£„aUUmyV@@_kJUUVUUWlUnblL@aUmƒI@ƒULUW@IU@WaUK@£UK@aV@°V@LnUWWXIla„VV™@£UWlkXĕVLVWšb@kUalwUKU¯lU@mk£VôKȁVK@w„KVaUkķlUI±™ğ¥ÝUʚ™Ž¯ôm¦ƒĸ™‚@XXK@VVXUJ@nlbUx@blJkšmIUV@ÆnL@VmL@b@b@V@J@bnb‚U@UšJk¦mL@VVJkXk„ll@bƒ@@lƒXXVWlXnml@nÅU@ŽmbUVlVUXn`mb@zU@V‚VWX@¤š¦V@Xb'],
'encodeOffsets': [[
122592,
34015
]]
}
},
{
'type': 'Feature',
'id': '3202',
'properties': {
'name': '无锡市',
'cp': [
120.3442,
31.5527
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@nLƒÒlxUVkL™am@™ƒkVWUULUxVVVbUV@bVLU‚nnź™ÞVĠ¦X™VUUaôw@KlUVw„WUwVa„@lUXƒWa@_X@WmkI@a@W„I@w@KmKUUk@@aVUšVVÅmJ_@W@a@I±wÛ@ƑÇkw±ƒ¯£mWĉUóçƒK¯VkUWK@XkV¯UWabƒmUa™UUb™lln@b@xƒbXŽWX`@„VxUblL@bn@Vb@`m@XbWnn@l¤„n@xnVlU„™VLÆWœkV@VbÞJ‚_nƒl@nKVU@aU™U@mVk°WVLUV¯bVXŽ˜bXlVn@VmL@x—V@bl„š‚@œnW@X@VVJ@²VJVU'],
'encodeOffsets': [[
123064,
32513
]]
}
},
{
'type': 'Feature',
'id': '3204',
'properties': {
'name': '常州市',
'cp': [
119.4543,
31.5582
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„L˜ŽnxUbVVƒL@xnnW‚nn@VVXn@‚yœImx„„°ƒšL„a‚¥n@VkšKVw„W@nX„VJ@b‚@UVn„ƒ@UnUV@L‚b@`VLklVÞn„Æ@VaXLl™ÈJšmmVUK@aVUUaUUVwVKXVlUš„n@šblKVUkw„ÑmKUVUI@±UI@U@WmX@›™kƒ@a˜U@wnK@UUmWk—aWU°aVUUK¯XUl@nVŽVš@bUVmLk@m„`ÝIUaU@›lÅXUKƒškVmU@wƒmk£m@XmWan@@_Uam@@akKVaUw@ƒW_XW„a@w@akmm@mL@UJmnUKƒ@@XnJWLkKUb@„Vxk„WƒL—aWVUImVULUK@L@lkLVVVllb„m@@°kbVbUbšbVbkJ@XV`V@Vbn¼'],
'encodeOffsets': [[
122097,
32389
]]
}
},
{
'type': 'Feature',
'id': '3211',
'properties': {
'name': '镇江市',
'cp': [
119.4763,
31.9702
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@šVĊKšn„VÆUn„„J@UWKXkVLlKVwX„šVlbVK„„nJÆaš„ķn¥°óÇIkšWKUbÅ@mƒUÝlkUK@_a@KVUVm„@mƒVU@@aUIWƒ@mƒXUx™LUlm@¦ƒb™„ƒƒnw›Jzm@UW@UmmXmm@w„KUUVamw—ƒKm@UbUL@ŽƒVmn¯¼JƒUW@UUU@@bl@@VŽVXšJšnnU‚‚k¯JmbVV„Xn@VWlbUnk@VVUŽVb@nU@WbKWVƒ@XV„„lLVb°bnW°Lnl@X'],
'encodeOffsets': [[
122097,
32997
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/jiang_xi_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '3607',
'properties': {
'name': '赣州市',
'cp': [
115.2795,
25.8124
],
'childNum': 18
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„`l@Èbln„@„KVLl@„V@bȎlnšKXkVlVL@„lJnb„¦VKVVnX„W@w°@VU„mln„UV`šU„bVUV@„xnKVI°KXKVkVL@al@Xa„LVlULWV™VVL@b„x@VXVmb@x@V™VV@nn¤„šlb°b°KXXWbX`lbXx‚z@x„`VIVUnK„L‚x„WXLVKVbVLVU@wnW°b„@nalX„‚mXVJn@U²mKkVl„U@@xlnœaVmlKnœ@JVLlŽnVššl@XXÆèVlUX@xVLXVšb°W@wnUWmXk@K‚LVwUmUkUKUw@wVaVK@kƒ@WnkUKWkwlmXL@KVUlLVKXmWU„L@ašL@malaVk@aa‚ašƒnXš@VVUblb„Jn˜ƒXa„V‚wn£„K@UWmUk@ƒUaWIV@b™JW@KmmU@aUUUkmKkVKlUU™nKVU„lVaV£Å¥WUUK@UkUUw@m@mIkƒƒUUWƒLƒUw°¯@wUKUbƒKmƒ@kkKUL@UUKV¥U@manw@k@U@Wm@@U@Wwkm„wWaUU@UUmV¯kwƒ@@kmƒkKkUW@UK@ÅV@XWWkXa@Ul@Va@KVaUUU@ƒaXwla@UkVWaXk@K@lmkUmV@Vmbk@ƒ»XIƒ¥VUkƒVUVU@anKVUƒKUalU@wX@˜™@a@K—@ÝwƒL@ŽUnÇlUIkJmn@ŽƒbVVb@VmnkLƒV¯U@ƒ±l—IWmƒ@kaUI@aÇU@K@KUIkbWbƒJUIUyƒƒUbU@méUUmUk„WK—xWIkJm@V¥U_UJUwmVkšƒUU@ƒƒƒ@knƒwm@UmkWJkL@n@VW@@‚U@knm@kUml@xÅxƒ@@XUJlb„@VX„JVxn@lbV„@lULnV@VlnV@bWV@bXL@lVLVb„V@blLn@Vl„K@xln@bX@lašLVbnKUVVb„KlXVVkxƒV@nnVUb‚lV@@z—°WWkbƒIk‚WL@LUJ@bUI@b™`@UmI@mkK¯XW™™mUV¯@UUVUUam@@VULWUJƒIm`IUJ›KUkW@Uxn‚WbnnmlXbmIUVmV@Vnb@V™LUKWLnÒVVV@V„UL@„kJUV@bƒÈ@ŽššŽ@XVV@l@xUz'],
'encodeOffsets': [[
116753,
26596
]]
}
},
{
'type': 'Feature',
'id': '3608',
'properties': {
'name': '吉安市',
'cp': [
114.884,
26.9659
],
'childNum': 12
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lxnb@V@bV@ln@‚n„‚lInš@blVXK‚nk¼@VUKWL@b™L@`UXU`ƒ@V¦XLĠ@lJ„¦@„nV@l°nn@‚mVXnaš@nb‚K„n@l„IVƒš@VanJ@_lKVVnš„L@L‚K@Vn@VbšUVanKlLnbnJVbšnWVnVVanI@‚Vb@L„bVKVanXVbVJVU@aXLll„bôlƼXxVLVK@Xn@ƒxnVVVmb@LnVVKVXV@@mnaVXUVnV˜K@_UaUmšwnKV_‚anKVLš»„K@¯ÝU@›™U@kWlUn™lknK‚VnaUkma@ƒUIUwl»Åw@ƒVwV@n™‚n@ÈXlKVmna@kVw@anm‚@n_WWk@™™mUkUK@Im›kLUn›bkm@wV@kƒlUnLV±m@UInWƒkWmbƒ@¯amX@xUVUKUaULWKƒXwƒKmLUVUJƒ_@wyWwkaW_XaWW¯L¯akaƒ™m£@mUUš@U@wnaWU@Uƒw@aUKšUXUVKUkƒKWbk@@bUKUlWL¯LUJmLƒwU@UVƒa™VU_ƒVkmƒnUV¯@@xƒXmWUUULƒ¥makI@ƒUKUkWl™LkmǍ@aƒUk@UKƒLƒ@kmÇak@ƒ_VlkL@`lbnšlLVanLnbmVÆln@škJlbknmKUbÝmmwULUK@bkLWKULUUma@Kk@UV@L@llbVzšxUxnl@bVLmŽšŽ@IVJXœVlƒLV`@bn²@J™@™V@Xmbñ@WbUJ@bm@@LUĬU‚„¦lV@xXb@blnUV'],
'encodeOffsets': [[
116652,
27608
]]
}
},
{
'type': 'Feature',
'id': '3611',
'properties': {
'name': '上饶市',
'cp': [
117.8613,
28.7292
],
'childNum': 12
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„„@„V‚š„„I°`n²@bVJUVVXUl@Vmb@xV@XbmVVœ@lkLmbn`VbnU‚@Va„UnbVllUXV„a@w°VW@_VWšLššnVlbšLVbnl„KšnVK@IUW@_@am@™‚ÑUólK@U@WU@VwU@UI@aUU‚aXƒƒ@kwmJV@yX@k‚anƒƒ@mkwVmmI@aUU@aUUW@kVkV@@anKš»„XVWnIVUl`@_„W@wlUœV@UWKnU‚bnްInJl„UV@VnI‚b„Wn@VklL@l@Vn²m@U`kI@bWJƒnV@°VXnJm„XVmx@VVL@bkLmWULUmU@ƒbWXb@llnX@‚xkxVV„nVV@¤nL‚nVxnJVXX@˜ššbn`VI„b„@„blmlLnaV@„blWXnlUnbl@„ƒšKVanUVmm_XK@kWWnašU@UnaWUXa›ƒXamUkKmXUWƒLX¯WakKm™nUWwXa@KW_„aXWW_@WnIVl@XU‚LnWVknK@ImyUUÆbXK„Û@W@IÆUnƒVÝlkVK@mUIVwkUVaUm@aVIVyXIƒaÈwmmk@UnanVUmÅaó»lwšW@kkUVmUK@WKLƒUmWULkamK™Lk@Wa@wk@UU@U@mbUIWVKUXWmkUmVm›U@LkakKƒw@w@U™¯ƒ‚ƒUUn¯l@bmn@xkJWxkL@VkI@mƒkmJUI@V@b@VVxnbWlkÈkVƒLƒbkKmVƒL@V@²nxW‚kLUL@xlKVx„bXmVnšWJ@ޙ°@n™xUKUw±`UImVmnU@kalm@akwƒU@UUJmxU@@Uƒ@kU@Um@@Kn™ƒVm@k™KmkU@@WUnkLWxkVUwmKmLkU™bmKUbVŽ@xUnkJ@n±ŽšUxVXUšWJ@LUb™lUnm@ƒW@nknUJUVm@kXllknVbÆK„VVbš¼V„@šUl'],
'encodeOffsets': [[
119194,
29751
]]
}
},
{
'type': 'Feature',
'id': '3604',
'properties': {
'name': '九江市',
'cp': [
115.4224,
29.3774
],
'childNum': 12
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@WUkVUkmaƒVUb@mVUam_nalK@kU›nUWaU@@wna@UVkUWVUUI@a‚±n£m¯_ƒJ™ƒU@ƒƒƒĉ¦Ul@UV™Km™mLlm@ğ¹m`Uk¯@@UVK¯™@UUK@amkmKkVVUa@UkUƒKƒŽUa™L@VVXUJ™@ƒnƒ@™š™WUbƒnVb¯V@LÅlÝIƒJÅkݙm@Ua™WUU@UmUXmmwVUUKWUX±mUam@kWƒzUaVmÇw@aÅLmKXƒ‚UWKkL@W¯IƒwVw™lkUƒJ@Um@ÛÈWށKUxWkƒaUU@KkLVl@„UKUX±KUb@nVVUbUVmaUlUL@„ƒaUL@‚@nUlWzX`@„V@lx²„@Vlb@bšVÞ@°nl@UxVL@lUbVV@n²xVUVmnUÞb‚a„J@IšV°xnbl@nbÆ@VwnK@VnXlK°xnUlVX„V@Vl@L@lk@W_XK@KƒkWxUL@J„nVx@aX@VVUa˜IXlmL@bVVX@VbnK‚a²XVWƒk°a„@UnV¤nbmLmW@XbmJUbVL„aÞK„L@K@U@aVKlbV@nXlJœxV@VnšŽš„ÞKôbźĕČmV@ĊšŽ²xÆIšV@Þ¦ĸ¼ÞVlŽVÞnxln°Jœk‚LXWVUVUVwnJVI@yn@lXlaXmWI@w—»ma@UmK@akKkXmW@_kaWakKWk@@K@IšWƒkUa„ƒ'],
'encodeOffsets': [[
119487,
30319
]]
}
},
{
'type': 'Feature',
'id': '3610',
'properties': {
'name': '抚州市',
'cp': [
116.4441,
27.4933
],
'childNum': 11
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@°V°UnÜ@n@lnLlV@bšV°L„lnLllVzVVXlV„V@@L@xX@WlX„m@UVƒL@V@n„°škVmVUnKlaXxVbšnlU@lVVnaVI@aX@V„šJš@V„@b„b@šVbš‚@X@lUL@Ž@VlIVm@wUVanLšalVnKnLVxlUXwlKVm@k@Una@mWIXKWUÛVƒk@a@UVWn@@kl@@W„XlW@_Um@UVK@a„LnalInWV@@xnI@¥‚K„—šm@kKmƒnk@mlI„¤laXbVblknV@U‚KXVlUXa‚@@Unw@±mU@ak_±a@ƒUJUIƒVKW_Xa@aWU™šK@mmUVa@IXa@UWmšannlmX¯WKXwVUVwƒ@XUlK@klJXa@kƒkmm@Uwƒw@¯ƒkw@WmbULƒaUUU@mVUU™WmkUb™KmkkK@aƒkUƒ¯¥Uƒl—ƒm@akU@mš@KVIVV@KUkUVUkaƒUWb—„mƒIkaVaUU™@mW™„b‚b@bUlkb‚b@n™K@bƒKXVWnULkKUV@LWKknlxXŽVLml@X„Ž@lULUb@xVxVLVlVnUxK@LWlXnmV@x¯X™aWUUK@wVWUkÅçm`@mn@bUx@lmbUnkLÇWm@mšU@Ux@„Æxk¼VxVJ@„nbVlmbUmLklmškVlX@‚VœšV@°Þ'],
'encodeOffsets': [[
118508,
28396
]]
}
},
{
'type': 'Feature',
'id': '3609',
'properties': {
'name': '宜春市',
'cp': [
115.0159,
28.3228
],
'childNum': 10
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@VlbnK@b@JšLlUnx±ĀXxÆW„X@lš@V„@@blJ@nX@˜xUbVVUbVV@b—VmnmJœ„@bmbm@klUbƒLmbœš@lVb@xUX@bVVVbV¤@LVV„bXlVw‚LXÜÇn@@V„IlVškUx„x°J@XlKXLV„‚WnLÆK@bÈxUnVb„ylXn@Vbn‚W²XV‚LVVUŽnxWnnV@VVVšXVbn@ޚÆl„IÞJÆk@K°UUa„mVa@UUUš»@wV@VƒkkUKUVW£U@UmW@@aXkVUnVlKVV„UUkVmU™@kWaUanU„VVamIX¥W@@aUaUVW@_mW@UnIVVn@VbVm@bVL@anKVUkƒWK„UXV‚Ikx‚@na„bVK„b@nVJ„_V›@Vw„‚VUVVXUlUUaV@X@VblašbnKlkVaXaƒ¯@m@U„KVUn@WƒXkW@@w@KU@UƒWkUUUykkmKƒk¯K™U@akUmK@k@mmÛ¯V¯U@‚ƒL™¼UKmLbU`mL™xVnVb@`—LmUVUUWmb@nU@UWULmU@KnaUUmU„wmJ¯IUJWIkVkaWVUIUlWaUIUVkKmbUIƒÒlVUnnŽ@VlLUJ@bUX¯@ƒaWVUKUXƒKUbm@UwKWa@a@VkUWn™@Uak@mbX„WJXbm@mL—aWVk@™wƒL@WmanU@knwWmkaWL—KWUXaƒU@¥l„UVVVbnwƒ¥nKV™»@aUk@a@UƒJ@kƒmLma™@mbUWnm@ULǺ@LXnmxUŽm@UbkbW@@akLmWk@UXmJmUkV@VUXVlULmKUxkL@lmXnJ@X‚l°Vnb@bU@WbKUX@VmKUX'],
'encodeOffsets': [[
116652,
28666
]]
}
},
{
'type': 'Feature',
'id': '3601',
'properties': {
'name': '南昌市',
'cp': [
116.0046,
28.6633
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@šXš™„@„mš@VIUW@UšKVb„„LlV@VVbUŽlUnLnl@bVL@V°šUL@V°@Vln_Ġºn@‚knKnššLVU@VkĊ¥Vk@™Uƒ™»UaƒUÅLUalmkklWn@VUVIlm@m„Xn@VmškVa@KXIV™UWVw‚™²@m@U@VK@k@W™Ua@™ƒa@aUƒ™@™IUƒW@@bUJmbUU@kkV™mUaWwkbmLUVUn™lWbUbklmL™akbUaW@U@VbkVWVUUUVƒUx@‚Uœƒ`UI@mƒaULƒamb@lwJWUƒVXLl„UVmL@bUK@aUnUam@UUmJ@VnX@`UXVŽVb@bX@W¦nJUbƒUmVVbXb@lVšUnVlƒVUUkLmUUVWl@bX@VnV@X¤VUVLllU„U@@x™¼VV@V'],
'encodeOffsets': [[
118249,
29700
]]
}
},
{
'type': 'Feature',
'id': '3602',
'properties': {
'name': '景德镇市',
'cp': [
117.334,
29.3225
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VVX@Vbmz„xUlU@mbmL@V²xVbUVVblbX@šVškVykValKVI@bn@n`lVWnX@l„L@™WKnƒVIVa@¯nK@alIXJVIVWUw‚ƒn@nU˜„nK@alI@a@anKm_™a—™W@UWmIUwmmK@£UUƒmUUlwwW@km@kWaX„aV@VnVKnXlK@aUK@UnwWUnƒmIUW@¯mU„XI@alJV_n@m±@U@kkKUlm@ƒXamJ@UVUkƒmI¯JmamVXL@V›UkV@xƒX@`k_UVmJUXƒW™¼mL@bU@UllX@VV@bVV@bnJUnlx@n„Žm„b@lWŽ@zU‚nIlx„@W„bVV@bVJV@UxV@@X@VkLVôÒ‚šn@@b@`VX@J'],
'encodeOffsets': [[
119903,
30409
]]
}
},
{
'type': 'Feature',
'id': '3603',
'properties': {
'name': '萍乡市',
'cp': [
113.9282,
27.4823
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VWnL@UVW‚LXaV@@ama¯Uk@WmInW@klKVwnLVKUkVW@UlUnVnIVWl@nXlK@bX@laVan@VnwWm@KȹVK¯m@kmU@ƒƒ¥kIğ@WKU¥„@V_VW@_šK@aXKVL@Ul»mWLkU@am™kJƒm@kmU@@a@UmakwU@›„Xlƒ@VXk`UIW¼kWWX@‚œ@l‚xV¦XlW@Ubn„@ŽmUkL@UmJ¯UkUWVUaƒUlm@UXWl„nUJ@LmLU˜nXll@bUVUUmVUn„ŽšxlŽnn@VÆÈU°kbV„VxllnL@VnVVUl@V„„anL'],
'encodeOffsets': [[
116652,
28666
]]
}
},
{
'type': 'Feature',
'id': '3606',
'properties': {
'name': '鹰潭市',
'cp': [
117.0813,
28.2349
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@XV@nlšL@lUnš„mŽ@Ln@@VlV„@@VV@nwVI@V„Vlx@bknlbV@nmnUVJ‚‚VxVLšw@mš¯@ÝXIm™nUWƒaUwkL@wVKlKXmw@±@U„KnUlL„a„KlUlÇXkmaUw@U@a@Uƒ™UkwUJ@zWJ™w@WbkVWUL@VmUklUaWakbƒ£kJ@nmln„lL@Ž™nƒ˜L@¦mJ@wU@mXkJmbƒK@bUL@VVn@`kXƒW@Xk@@lm@UX@V@b„lÜUXVWLXJ@nmb@V@l'],
'encodeOffsets': [[
119599,
29025
]]
}
},
{
'type': 'Feature',
'id': '3605',
'properties': {
'name': '新余市',
'cp': [
114.95,
27.8174
],
'childNum': 2
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@m@@WULUKWwÅ»ókƒakkWK@bUVUIUamWUbULƒa@KUa@mJUbmUXU™mUamImakKmLUb™VUam@@UL@KƒKm™UUkL@`mIUb™@U„@V@bVl@bš¼UŽmL„¦mxUaUUƒVkŽ„VWbXV˜LXKlbXnmx@lmVnb@X„Kšxl@XU˜bnKn@WaXIWƒnal@Vbš@XmlV@U@bXb‚LVxn@Va„LVWVLXU„b°@VW@aVIkK@UmVmkU„ÑVJnalLVUVJXbVkVJXUlblUXJVI°JnI'],
'encodeOffsets': [[
118182,
28542
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/ji_lin_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '2224',
'properties': {
'name': '延边朝鲜族自治州',
'cp': [
129.397,
43.2587
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Wxĵ„mš@„ó¤VX@@xܼƨš²xWxƒV„V@„XVƒ„„„ƒbWšXllaÞU°Ċ„@ô¼„LôÝWanƒÑnĉ°¥šÅX¥°¯@w°w@»°k£°mÈŹ‚mÈbƃŎ¦„K°z@Žkxl¦UbU¤šššklV„KŤÞȰ@@bšV@nVVUlÞ¦lUllœVlU°ÑU¯Vƒ°w„bXxl@V޲„˜@n„ô¼ƒó°™kmVk²ĕ‚w@wV™ÞÞ@@Ġƒö»˜¯œ@‚„šbnb°mÞ¯°V°„ÈJmX¥mam™™ƒUƒlaU¯™ƒ@w™Kk—l±n@@wƒkÝVUUl±¯I¯b™a™lƒ@™kLmakbƒƒŹé°™Þb°šékƒƒLm™„wX™‚aÅb@bVlƒbVb—ÒVbUb›UUanwƒakbVŽUV›ak„¯„UŽƒLmxV°UxnôŻX@J„Xkl‚bkbĉaƒbƒWU„ƒ@ƒk„WUU¯@@klmƒ@@™Å@aƒwWXlKkI@WbUaVIUanUƒƒƒ¯K™„mUnWUwm@£ċèkUmbUmm@@nkJUalwk@@nmWUan_óaWmnw±KœIƒwl@UmƒI@an@@mlUÅmV_™KUkƒ@U`@_ƒKUmU™@U¯™mmb¯@kb™ImV¯ƒƒLkbƒKƒƒÛ@ÇnɱJóaÝĢkb@„›x—ÒÇllœ@‚޲V‚„ÆUVV„UÇ°X„óxlV¯„lV@bƒV@n—x›@—¤@„șŎnxV¼knšJ‚nšKX°˜¦UlnVbUbÆVnÞWVX¦llšb@l°œVJôÒnLVbšbXŽ'],
'encodeOffsets': [[
131086,
44798
]]
}
},
{
'type': 'Feature',
'id': '2202',
'properties': {
'name': '吉林市',
'cp': [
126.8372,
43.6047
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ôl‚zšaÈV°„šK@„mŽ—LWl™nšVxUV‚È@ŽÝĬUÈn‚ôLša‚„²VmĀkV@„ĠĊnU@b„V@b˜@nl°UVnÞaôJ@bš™V„¦mlkššbmVXx¯@Vxm„nbƒ„šbÈK‚V@bÈL„wĠyônšmnbÜ@nn„V˜x@n²K‚„„J@k„al@nxÞU„Lź±Vwkw¯LWWUš™kŎīVwƒw„°y„Vĕ°wÈVlkÛ»@wW@Uô£@ƒn™ĶƒXwW™aUamKóÑUI¯›@k™akkW¥XUmÝÅUVaUa‚mVk—¥W¯™Lm™IlmU»mwȚō@ƒ˜£kJUÇk@am¯y¯UVwƒa@wġx¦ƒKƒƒ¯X°Ċ¯¦U°ċWULÅa±b¯@UkÅWmVƒ™ƒkIUlóŽċ¹™`óIƒlX„WŽXxmbUƒƒbƧ@ƒx¯bƒÈ—l@xƒš¯zƒaݤ@nšm„VWb²bmn¯J¯Ò@n„š'],
'encodeOffsets': [[
128701,
44303
]]
}
},
{
'type': 'Feature',
'id': '2208',
'properties': {
'name': '白城市',
'cp': [
123.0029,
45.2637
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ó™ǩŁ@WlwUaƑwÛÅÇéĉamKƒōÇ@Iƒ™ôġVƒȁÑŹçƒ™ÝUƧċĉwóóÝ@Ƒ»ğL¯ll²@ƆÅV@¦m‚Åb@nmlU²VxšlUn™@VbnW„bÇbk҃š„n@èlnlš„Ž°Lšx@¼ĉb@҄šUŽċxՃènLVxƒÒƒbÅJ±a@_ÅJÅnƒŽVb„Kl„nUÜĊ@„Uš™xXVÆn„mšVššJÞ¯V™ĠwšƒXw°xWL„x„KV¦ôU„wVÝǬóÞޙ¼‚‚„ÞkŽVôȘxބU„lVn¦ÞšĊa°w„b°@šbÆw„lŤL²`„z°@V@@™nJVnl@@¥nUmmn„@mwnmmUnk@mlwUaƒLnƒ›wn¯°anƒWakI„ƒÇmXwÆamUXUlJXa‚UUklKUknmÞV@‚K@VWÞ@VkUwVƒ'],
'encodeOffsets': [[
127350,
46553
]]
}
},
{
'type': 'Feature',
'id': '2207',
'properties': {
'name': '松原市',
'cp': [
124.0906,
44.7198
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„šźèȂÒU„óĢ„š@JŎȄ‚‚LnŽĊbÈêÜÆƒxVbkx@XǪłôš„kÞ`„šW„b@n°ašbšKšnVw°`š_X`W„š¦„ĊIkmVšakw‚K„x°UÞb„U@lšƒl@°¦œVW„šaÞbšxÞI@mVI@ƒVšUWK„¥nL‚a@ƒ„@ȍ„@°ƒÆ@nU@KÞalkUwVékUWw„™kU›VkkƒJk¯@»ókƒV¯ÆÇI@bĉô¯@™ķw¯nmmÅL¯wƒVƒUÞy@UówÇLkmm@@UóxkkĉmL¯wVwkWWX™mLõm@kűV_ƒƒô»ÛƒÆ¯@™Va™VšaĠVlmğwķUóÝƽ£ÇJkbǫaƽLW@nxݤkzƒy¯XɅm@VšôÇX¯Ė¯ºÝnUŽnLVlUÔmV'],
'encodeOffsets': [[
126068,
45580
]]
}
},
{
'type': 'Feature',
'id': '2201',
'properties': {
'name': '长春市',
'cp': [
125.8154,
44.2584
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„U°xÆKnn°mĸxš°@Ċó@aÈJ°Å„Uôl@¼l°„IllœUlVƒšXxlVUêVxkllnÈUVll@Vx²IÞ¤VUlVnIôlރlwô_„›„bVaĶLXÅÞÇ@K˜¯@wÛaƒçn¥š¯WXyW¯XwƒUmmÛ@ma™nómğzƒxÇK@aUÇL™a„ƒmanƒUw°@WwnU™al™nkƒ¥šU™@aóIÝbUm¯Vmk—@@aƒU@amVğĉ@ƒlUnÿ±Uƒ™bóKmVÇÞī@ÇVUUw‚™šmXk˜Kn@ƒ™ƒÇU™byókōè@b‚n@lÝX@x¯ô@ƙUV_maXm@aóƒJWxnX@ŽVVnĖVnUJ@nōÆÇ¼V¼kxƒLklÝw@xƒx@zV`ÅbmxU±xU„nnm‚kn‚ŽğU™bUŽ‚šUb@šÅ°Ü„󼄄U`Ʋ@lön‚KšnXWlXUx°xnKĊllôw@Vn@lnÈKôx@VÝz„V'],
'encodeOffsets': [[
128262,
45940
]]
}
},
{
'type': 'Feature',
'id': '2206',
'properties': {
'name': '白山市',
'cp': [
127.2217,
42.0941
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Ušl¦kÒÆ°„IlÒU¤ôz„¼lJš„U„n‚ÆXVl°@²aÆbVKČXV¯°¥¯ĉ°W„„„L‚¥Ģw@x„bUx°V°zn‚‚b@ÈlVŽlIœ@˜w@m„U@akU°ƒkUôwWƒÈ¯VUƒVUƒÅ±U›@kÈk˜Ñœw@ƒlaÞġƒUÞ£@ƅ‚KnÑ̝@W‚aUaVUVkkw@a¯™Ý™ƒVXnW@@WkXmK@xkKUb@bW@Uw¯„mmb@WKUbmUbUaWbƒJĉIVW@I—l±LkšmU™bUm™@ƒnkKWa¯n™@„`Ubma™„ĉL@bƚ—@W`ƒL@n¯‚Xb‚@kb@x™Lƒ„™@V‚kL±™™mlUIU¥mL@lÅx@_laƒƒ@U—aƒV@kmmƒK„£ƒƒLƒƒmKUnÅKVbmXVlèĉUUbml„ĢŤƒIlޝbǦœl‚@ô¼Ģ„@x°„„n„a„l@x™b'],
'encodeOffsets': [[
129567,
43262
]]
}
},
{
'type': 'Feature',
'id': '2205',
'properties': {
'name': '通化市',
'cp': [
125.9583,
41.8579
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ÆlXnĠx̰lȰš„K„°kXm‚@¦Vbk„ŤJšnݤk„VÞVVkȄb°y„™@w˜k„ǰa„wƨ@„„K‚VnaWwXWƒ„kôJš_ČºôVkƒ»óyV£kуJůlÑk¥V™ša@wƒkƒbƒmk£¯ƒ@wġƒó»@›kÈ¥°ak„JÆ£ƒġnkVaĊVkçWUnUaÆLVmnL„„‚KU™±@—„m@a¯U„bmV¯m@_ƒK™™U™ƒaƒÅ™Wó¹ƒ@UanmWak@@wmI@y™@mk„JVa™@UaƒIkJ@n™@Um±kkxƒm™Ik„ƒbÇm@ްbXn„V@ްÈmlÞ¼¯XVº¯Lm„kWWXLmVVlknƒ@@lnWƙ„Vxbmšnšm„¯lÝaVȁè@¼V„„b™„ÆŽ°ÞUVšJ„„kx›I—xƒƒƒIV¤™ÒXxmn'],
'encodeOffsets': [[
128273,
43330
]]
}
},
{
'type': 'Feature',
'id': '2203',
'properties': {
'name': '四平市',
'cp': [
124.541,
43.4894
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Ɇn°W„zlyÞ£mwX@ƾKǬblaÈIƾ¤ôÞĸVĠxnmmVƒ²w‚VnwÆaU_@y„w@wÞxlk„KlwU»È»ŎÅ@mVIUmmĕUU@mWXw„‚@bWnnbU`‚šV@Űó@wÞW@km@aŎ烙@m°Ñ°Inm±aXaƒU™n@mƑšU¦@šÇޝaU£šaU™ġ¦ÅҙJōUŻókUÇ@™¥¯ak¯mUVak@@aċçÅaUƒm¦Ý`XbƄ@n`ƒI™xĊÞōÞml@šUb@Wl™_¯JkšÇUÝÆÅb@n™„llUb¯„±a@ƒ—ƒWĉJġ™UnóšœxôaVnƒxôI@x„V@bmƙ„@lnLmޯޙxVb¯þ'],
'encodeOffsets': [[
126293,
45124
]]
}
},
{
'type': 'Feature',
'id': '2204',
'properties': {
'name': '辽源市',
'cp': [
125.343,
42.7643
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@żôŎVšIÆÑĢ¥Vš™bV¤°bȍ@™V¥ƒ™Þ£lÇUUUÝlƒÞ£™mţIlƒUa@¥nlWƒ¯ƒ™kÇġ¯ğwWmÅk¯UƒVU„„bWlXlmnƒbUx¯xVVknlŽUbV„ÇKUb@„™VnbmlnzUº±bmJUbWÈnèm҄š@X`WL'],
'encodeOffsets': [[
127879,
44168
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/liao_ning_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '2102',
'properties': {
'name': '大连市',
'cp': [
122.2229,
39.4409
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@‚IÞmVk@wXWÜbnwlLnU„@‚nLlbXW@a‚wnbl@XL‚aš@Ċ¥@LULnJ@xVnmV@VXXV@VJkn@VÜKXXôJlb„xl@„IVbnJVLUbn‚lnVw„JVU@ƒXU‚aUUlwn@°ƒn„VKnV°_VJšwl@nwlV„IXWlIVVnK@IWmkIVaVU@WÈUlmU@U„WUalkXġŻ@kIƒ»mm™akUm›ĉUŁV»²ġVĕ@aUU؍IɃ`ȃ@kƒw@ƒUƒmwĉ™@ƒWķсÇbÝLkymbIƒwÇmÛbmbU„¯ÜõÈkÆVbŎxnXVÆnšǪ¦„bš¤Uš™xÝnĉÒmĊVȄ¤Èš„bƼ„Ā„„ÆÆÞ„źb„VVbX„‚°²¤'],
'encodeOffsets': [[
124786,
41102
]]
}
},
{
'type': 'Feature',
'id': '2113',
'properties': {
'name': '朝阳市',
'cp': [
120.0696,
41.4899
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@na@UVI@m„ÑW™kaV¥UI@wl@„aÈbšm@wVašk„@@K@kƒ™@a@UUmƒUUalmU@KÇUű¯@±kUKVkUaƒaU@¥m@@¯k@WLUmkn@mmIkm@amU@wVmkU@Klk@U—m˜aXIWWUL™aULVbƒmk@UUmUk±™_Uym@mbkImaX¯WW™xWKzU@WƒkJWwkV™@Um@UbVVVVXb@VWX—@WŽ@Vkb@V™nUK±aUUlwX™ÇWKknU@mmUkƒLUVƒVUUVƒUaƒw™bkKmwnIƒ™kJ@nmbƒ`kmVkLWwUm@UUU™K@UmaUa@UUaWK@mUƒ¯Wkk¯VmUUŽ„xVXUVmL¯ymXkWUbmXUKƒVknWx¯JVnkLƒl@VVxnxlĀVL²WlX„l@bÝVUn@bnlÜaXblIVl@šš@Ȧ@VmbXV‚@@x„VVnUn@`°@VnXU@K@„VV@VmbnVn@ln@b„xƒ°Ub@bšLV`Ånƒ„W@@lUšnnWVU@Vbkl@Xl`XxV„UblŽkX@ް¦V„UVVbUlkV›@UbVbkLUxmJkXšš@b‚bœxVKÆlXX˜bnŽnala@ƒUk@U„VVklKVUXKVU°KVan@VUnLšKVL„WVaU_@mmUXa@m˜wXwVkVWXk‚k@›„k@klm@wXKl@U@KVUUUVaUƒV@„alL„xUx@b°°VnnVšxlIXJmx„LUVlV@bnX@Všb„aVx‚@XJ@b‚n@VŽVXȄl@llX@lU„Vô°°@ބVbn@‚V„k„@VW'],
'encodeOffsets': [[
123919,
43262
]]
}
},
{
'type': 'Feature',
'id': '2106',
'properties': {
'name': '丹东市',
'cp': [
124.541,
40.4242
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lzXJ‚U@š²x‚@@Vš„@bUVmKUn„°n@lnVK„„nV@n@VlV„°WbXn@‚VzƒJ@¦@bkb‚bUl@bkbƒJ¯zƒWULWbklV„nb™¦VJ@„„K°U„kl@@W„bVn°@„Všm²U˜nX`„UÜLXmVXlKVbUVVnUbn˜ƒX@VUL@lUbWxš@²kl`n@Vlb„@nUVWVLVU@aV@²bl@ÈmšxWX„VÈU„JV„l@„„la„WnX‚KÈkÈ@Va°bÆm„@XV°IVV°UnalƒVUn@UwVU„@@VVJ„I@bl@XK@wWmXU‚UVbkJVXnJVI@mƒknwlKXL@`l@VI@UUaVKÞn„aVm@aÇ£XW„U@aÇUU@mbkKm£™@WW™ƒL@@Kk@kl›U—bWKUkUU¯UõÛƒmUUaVU„U@WU_W@kVkJƒ_WKkV@bUL™¯¯ƒ±mk¯ġƒğÑ@UmwƒKUakƒ™ƒa@a„m¥ÝƒIUWmk@w™—L›KʝbȗKWĢklVbƒX@VV‚knÇV@XUVUblJXn@J'],
'encodeOffsets': [[
126372,
40967
]]
}
},
{
'type': 'Feature',
'id': '2112',
'properties': {
'name': '铁岭市',
'cp': [
124.2773,
42.7423
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@XJm@¯šmXUlnVbUJƒU@bV@UJWL@VXLmJVbkXlJXxVL@b@V@n@b@`Vbk@lxknV@VV™V@bUL@bV@@bVK@VXLWLXJ@LV@nbWJ@IUV„x@LVJUXVxVx@VV@@LXJWL@VU@@L@VnL@bVVmVX@@VVInJmbnLWVnVULVVU@VVmX@@JVz‚l@„nVVKVXރ@mk_lm„UUWV_nJlUÞÑÞVVUVƒVL„UVJ@I„Vna‚@@KV@XwWknwnKlalU„w„aĉݚwšJl_@aUaƒKUUU@WU@WXUÆ@@UVK@n@UnVVšblK@bœllb@b„bW@Xbl@UlnLl°°bš¦nKlVnI„V@UWU@WXkƒw@am@nm@aVw@I@KUaVIm±XÑlknJVnVJšaX_VaUaVKmwnkmmn@lU@U@mnašXlKUmUIVmklaUK@UlUVUW@U™kVm™a@UUU@JmUU@@bmb—KWV¯XUKm@ka@UVKVk@aUKmLkKUUÝUmbXbÇJ@k@WU_@m™™@klm@UXKVaUI@KWUXaƒÇWk™aWUkWUL±U@lUU@ƒUJƒI@V¯JmIm@@aU@Uwƒa™@UV@VkI›V¯aUkƒWkb@bVL„@@VVVUXW@Uaƒ@@b—‚ÝbUV݄@ŽƒLmUkVUbVllLUV@LššXŽWbUXm@U`@„kxlnnJlbnIllšLX„lVlUXmVK„n‚V@L'],
'encodeOffsets': [[
126720,
43572
]]
}
},
{
'type': 'Feature',
'id': '2101',
'properties': {
'name': '沈阳市',
'cp': [
123.1238,
42.1216
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ȚĊܰ„b„L‚lÞxUbUn±‚@ÈnVÆL@xnLšlUVƒbƒxkImJkn@V±LUxkV@bšbšKVKnzVl@L°@Va„xÞUlbôxVVœ@@V±bnŽ@llXL˜ŽöXĶŽnal@nkVJVI@aU@@aVK@ašUUUU@lmkwl@Ua@_@a@m@U@aUKWwkIlWUanIWK@UXKVIU@@a„VVIUa‚mVknW°™n@WI@KUƒmULWnkVkUWƒ™KkkmJkamIkmlw@ƒV_n@VWXaW™™@KVUkKUkValUnV„K@ÞƒVUÞa˜@a„@VbX@VWUU@Uƒ@UK@ala@IkKmUUa@U@ƒVƒkk™WVwU_@KÜUXbl@V¥XUVmƒƒƒXa‚ƒlUUkIm`UIUJW@UIKmkm@UUJƒImmU@ƒVUXU`mIUbUK@LƒJUU™l@Xƒ@UbƒJ™kU@ƒŽn„m@Uam@@ƒ™aUmLKƒwƒ™mWXUK@kUaÇa@JUIUa@aƒKVUƒUXmƒUy™_@lmbkLUKWLX`‚n@bVL@JXL„‚WX@Vnb@Vm@UbnVmL@V@x@LUbVV@V@LƒUVl@mb¯U@xU@UVVV@X@VVblJ@bn„VKUn„x@llnL±¤™b@k`VXÆK@„kV@¼kl@bWIUl@VmLnbm@@JXXmb'],
'encodeOffsets': [[
125359,
43139
]]
}
},
{
'type': 'Feature',
'id': '2104',
'properties': {
'name': '抚顺市',
'cp': [
124.585,
41.8579
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„XVl°bœUlJ@UVUš@„bVxV@@bn@nJ°I@U„J‚I„VV@V@k²VVKlXXVšb‚lÈX„ŽWbXV@LVJUbWL@Vkn@lšš@nV`@X@lÈIWanaÞVVVlLnKVL@bUlUL@Vlbn@VL°WXU˜Lna@aV@nV@IVV@VšbUnšl@V‚XnKVa@U„UnyWkXaƒaVk@ašašbnm@_WKXmWanU@alaU—l@XJVLVxX@˜wnKnVlwƒƒ™@V_@a¯¥@UkKWUaUU‚anK@IƒaU@WUaVw@klUVyUUVUUÇ@Iôbša@mnUma@kXa@UWak@Wa—l@a›@WUƒLmU@U`mIUU™`mUk@@UUK±nkJƒbUam@kwm@@a@UU@Ua@@K@ƒVK@kmKU_UKƒUUaĉWmkkL@`™LƒnmlkLkbmK@k™@Ulmb@b™„@Ž„xUVƒIUlmVXXƒxm@™JUUk@WUk@ƒakx±@¯x¯Umb™KUUVmUU¯UmVVn™WkÆ„lWb„„„ŽUnWVU¦k@WaÛV@LV`UxšXllU„@„@VVbnVlL@J'],
'encodeOffsets': [[
126754,
42992
]]
}
},
{
'type': 'Feature',
'id': '2114',
'properties': {
'name': '葫芦岛市',
'cp': [
120.1575,
40.578
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ll°X„ŽnV‚@XLVb@VVbnb@VšLVV@VVnXxlKnU‚l„_na@mlI„šmJnxlLša„xVbU„VV„UVU„KVlnnV@lmXLšÈWŽkxVV²bVLšm@Ula@UX˜@XW@UWaUUUUVan@V‚š@lUXxlIX„V@‚yXLšw‚ŽXXW°nblJnan@Vzš`l²nVVVl@„nUaVKšbVKnXVaUaVUšyšnXK@kVK‚@X@m@m‚LXa„LWƒ„w@™ƒa@UVw„¥°™ó¯¯y¯ƒUǯ»›w¯Iƒm—¯Ç™UUl™¯»ţKċÑţķm¯w@mU_ómk¼VnU`±IkbVlƒnnŽU¼±Lk`@X™Wl¦UbmVUxkXVlkbllU„Vb@bkVmx@XVV@Jb±aULkKWXkWmX¯aUJmIkVm@ƒxU@n„'],
'encodeOffsets': [[
122097,
41575
]]
}
},
{
'type': 'Feature',
'id': '2109',
'properties': {
'name': '阜新市',
'cp': [
122.0032,
42.2699
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@šXnb°lš„VlnXVJ„LlVnl@zÆxnK@b„blKVLn@@V„aVLVK@L@Vl@XVVInVVKVwlUXwlKšL„ššVVb@aV@X„lUXbVW@n„lWnXKV@@V@XUVVLUVV@@bVVV@@ln@VbVUXV‚I„xVanJ@UšIVWšL@UV@@¤V@nInw˜W„k„lnIVx‚lnzUVÇJ¦VVÜLĸUnW@aV_šWĊXXa‚Knkl@nm™L™a@alUVw²K@UlmnIlJ„w„aVU™kmK@wÅKmU@DzVmVaÝwkƒKƒaÛ¯șĉķ¥ğ¥ƒ@kUWkƏī݃ƒ@@akU„K@KWIUm¯nƒU¯JmwUVmIkJÇLm@™UImJUU@aW@U@@nUb™JƒaƒbXVWn@UVmX@V@b„š@l@Lƒ@™lUb@x™nÇaƒbk@@xVJU¦lbXšƒÒ@nUJ@Vmb'],
'encodeOffsets': [[
123919,
43262
]]
}
},
{
'type': 'Feature',
'id': '2107',
'properties': {
'name': '锦州市',
'cp': [
121.6626,
41.4294
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@nJ@nlmVnXKl@@°n@@¦‚V„bVbUlVL²l°@ƲÈV@LV‚knVb„VVnnWVU‚@XmWU„a„bšIVa@mV@X@@bVVnIVJ@š‚nÈKlInJVUnx°I„V°mVnXJ@LƒLlV@b„„ƐĬXllV„@Ġ¦ĸ¦naWW@In@manK@UVkXJ@alk@»lU@ƒÅLUWl_@ša²£‚Kkm@kƒwVmULmƒ@akIUa@U@WUUVU™aÝ@ğ›wkƒƒmĉ£UWƒ@@bÇL@m—a@_mKƒlƒXUwKƒLţÓ@UWw@K@U„I@m™U@UV¥„@°UnJ°@@_™KUwƒW@UnaWUmmI@m™ķwUaÇLóVĵwݙUUW™¯šƒ¦Ux@V„b@šƒxV°X„ƒKWbK@n@nW‚@UL@lWL™m™zUVVbUbmWXXWJ—b˜n@Vkl@LlVUn@xnV@bln'],
'encodeOffsets': [[
123694,
42391
]]
}
},
{
'type': 'Feature',
'id': '2103',
'properties': {
'name': '鞍山市',
'cp': [
123.0798,
40.6055
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@l„œŽÞ@šbV@@w°Vna‚@Uk„V@K@UUUVa@K@w@UnKmUVan@@Uma@UXWƒWK@IUK@amW_XKVLlKna@kmKVak@VU„@VmšU@anIÆan@‚a„šUVnb@blLV`ÞLlU„bna‚Kn@naVU@¥°IVK@anUUKVaƒUVak™@mJƒkXƒ™UVwkƒVUUa°U@Wƒ@WlkXWlIXUlJlaœx‚IVVXLšll@nLV@lLXl„KĊzš¥maUƒlkXaVK„X°y„Ila@aVkala@a@¥„IUy@WmXaƒ¯kU@U@mmUƒƒULkmm@ƒ¯VmnLVU@a™ƒ@U@±w@™VWIkymLUUkJWXƒJkUmxk@™xUI¯`mUULmƒ¯„m@kxVVbWV@„UVƒIUx@bkšVšVVšxUbVV@V@zšJVXU‚lnk@@lkLƒlƒLUU±Jkšm@UIUVƒLUVU@™K@UƒnnV@l@Ll„ƒaUJ@zn`@nWlƒIUVUUUV±Ln‚@nmL@VUVkLVlUxVLVlÅXma™@@akLmWUX@JUnVJVkXJ@X@`WX„VUVUIlb„W@bVUVL@`Un@¦U`@bUV@z@Jm@@XV`„LUL¯J@IVKmKÅI@J™nWVnLnšVxV¤™z@bmV@VUV@bUL'],
'encodeOffsets': [[
125123,
42447
]]
}
},
{
'type': 'Feature',
'id': '2105',
'properties': {
'name': '本溪市',
'cp': [
124.1455,
41.1987
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lb@Vn„lnVVUb@šVJ@nnJ@bmXUx@xVbkbkŽWLUxnl@Ul@„xWx@nUV@¼Ull„knkK@bmbnl‚LVJX@VIVJn_lJVVšXUmnU°VVVUnVVšLna°V°w²@lw„bl@XVl@VVšIn@„wWWnUVk„JVUƒw@šƒ@anaVkš@@lnLlalKnk„mšK@_lKnlĊXVb„VVLV`nL@lUL@„@L@‚VbV@@V@bn@lxn@Vb„alI²mVL@Vl@nVš_VVnJV_‚@nV„K‚V@Xœ‚@b˜kXbl@XblylUUkš™@Xa@UVIlK@UUWVU„Llm@UUUnKWU@K@UXm„XVa@U°KVUUWUk@ašUVKkaWkƒKUknaWa@U—@m@mk@ƒaUJk@@_WKkLmx„l@nUJmIUWlIUaVWVXn@xWLk@@aƒJUI@Uƒ@UVVxm@UVk„mb¯VUU¯JWUƒ@Ån¯aUbÇ@ÇlLmWƒXkbƒƒk@UƒƒIÇVƒUXW™wÇnk@±aU@@bUVUKUXmVƒ@kaUm@k_±l™@XwVa@kVK@U„Wm—VaUmVUUakLUWWnÛKƒVW_—m±V™nƒU¯@Umƒa@Xk@ƒl¯V'],
'encodeOffsets': [[
126552,
41839
]]
}
},
{
'type': 'Feature',
'id': '2108',
'properties': {
'name': '营口市',
'cp': [
122.4316,
40.4297
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ĊĖÆ„„°Ċ¯ŎWšô„@xXb‚wnKl@nX@VUVƒKmL@VU@Ux݄@Vlb„x„U@VUb@b‚kœ`‚IUlVUn„V@@UV@@JnXlK@bš@nbÆWUkUKVwUklKVU@UnK@mm²KVUVVVU„JXk@mm_@yVI„bkƒ@K@kmU„m@VšLV@VU„KVUVJn@l™²IVV„K„klK@kl@kmVUW™I@y@UUUVa™wUUU™l™@akmmVaUKmIUaƒJk@ƒwkaóIWWÛL@UlmUIU@WW@UnUUm@wmIVK@Kĉ¦™@bWKk@max@bWXkamKƒ@mVkKmxÛaWX@xUlÝnJ'],
'encodeOffsets': [[
124786,
41102
]]
}
},
{
'type': 'Feature',
'id': '2110',
'properties': {
'name': '辽阳市',
'cp': [
123.4094,
41.1383
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@š`Vz„‚Wn„VUV„L@bVbVJ@IÈbVb@lVLXW‚n„š„x‚LnKVŽšb@„n@Vbn@mƒ„V@šl„IVa„@@WškVV„I@KVLVanJV_VW„UV@nn„JVI‚Vn@na@alLlmkƒVk@»VU@mXwƒwk@@VmkVwXKllaUa@wVwnW@amI@mUI@™VaUUkmmƒ@UkaƒL@ƒUIĉyƒLWkkKU@mKk@™kWKUUJ›wkbkIWVkJWXkl@X„‚@X¯VVbUVl„UxšVW„„lnIš@l‚Ub„VUbVLmV@bUL¯J@¦UVmbm@LmbƒakVÝKU_kK@amaVUƒ™bm@ÅbmJ@b™VUnƒ@UVl@UbnL'],
'encodeOffsets': [[
125562,
42194
]]
}
},
{
'type': 'Feature',
'id': '2111',
'properties': {
'name': '盘锦市',
'cp': [
121.9482,
41.0449
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Vbĸx‚š@nnJVnXŽmb@V„XVxšL@`¯@mI¯Vƒ@U¦@VšV@nƒJ@V@LXx@VŤÔ„K‚LVx„W„knL@`˜b@nÈK@a„@VXĊ¤„nVK@aVU@UnU@ašyU£Uwm™mKXUšm@IÆJnLUL@J°IVKƒKU_@Wn@@I@yVU@aV_@¥Vm@_UKUV@aƒXkaVJVUƒUXW@_@WWIUlUIVm@IVW@IU@@VU@mƒUVVkJ›_l@aVa@UƒVƒwka@UރVwV@@UnK„LVU@UmWk@mLxWa@wóƒUVUIÇÆĉ¦¯¦¯xʟJ'],
'encodeOffsets': [[
124392,
41822
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/nei_meng_gu_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '1507',
'properties': {
'name': '呼伦贝尔市',
'cp': [
120.8057,
50.2185
],
'childNum': 13
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„m@Łkƒ™Žƒklƒôƒ@£kJ°ý™ɅķÑó¤ğLĉÅlÇğŁW¯¯›™ƥóÿlwkţÈéÝƛó™°ÞÅxV¤ĉĖWƒ¯lȭţυ̃ɱÿķƅˋğɱřÝţϙȍƧĊţ@¯kWKUKm¹Å@ķJU@ƧÑƧ„ō¥˹Ɔ@L@„Þ‚VLnš@VōČWJX¦@JŻbU@ţÞmVU@ȁýóbkWWLƒƒÅ™¯UWġkmóƒ±UŹôV¼ƽ¼ƒł̥ĖƽǬʉxĉŽŻȗKΕ̛ʵƨʟÞ˹»Ƨţ»Ǖō˷Ȍ±ȚʊĠUɾɜɨmÜ֞߼˸ƅȂ¯ǖKˢğÈÒǔnƾŎՂ@šĊbôô̐¼ƒ@ĊôĊŽÞĀ™xšĖƧŽœŽ‚Uš°U„°ĬƒČ°ÜƒêɴȂVł°@ƒ„nxŎ胄ÞȌ΀Ǹl޲IlxĊl²ÒmšôĖ™Èl„ĵºm„ÈêVþ„xɛČʉÇĵVmš„ÒƒÈɆôƐŰǀĊ°ÆǬĮƾb„yĊ@ĠšƒXǀċm»ôw°Ûk¥Çm¯ç™kkÇǫţǕéX_ĶWǖīŎaÆĵĸĊ@ȚȘ‚™ĊLĢĉ„VÆĉʊÇĕóaU¥šĉ°mkŰġUĠřk°mƒÑČÿ˜ÛƒWĸ£ʠšÆxÈÞŎÞ»ʈ²ĊÇČalÒ°Ť±ĸz„ŽĊKȲm¤Ŏ@Ò°¼nyȂUźīǖƳÈē°@šÝ̓@ƒÈkl¥Ççkxk™›JXÇƒUÅ@˜£k»„óƿīÛ@lÅJl¥óý@¯ƽġƍÅan™ċ™°é¯¹'],
'encodeOffsets': [[
128194,
51014
]]
}
},
{
'type': 'Feature',
'id': '1529',
'properties': {
'name': '阿拉善盟',
'cp': [
102.019,
40.1001
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@™ƏnǟƨʫšŹɆÿ°¯ÆV²ˢ™żÿ@ÝÆŁȰ¯ȀƳĉó™™@ğkyš¹@īš›ƒwl£Źƒƒ¯Ŧé@™ÇÇxŋĉƩUUŃōL™Ç™ĵóÝnƒóç@™™ó@ġƒƱ„¥ƒç™WUçÆōƒ—çťK™çȭVһƽ̻aW¥ȁ£ʵNJǓƲɳޗǔlżÞmĠóĬȂɲȮ@ÈĢŮźÔnĶŻǠšŎȭœгŃċóȭţΗÆƑÞƧÅΫóȘǫɱȁġlÛkǰȁÈnšõl¯ô„ÞɛÝkĢó„zÇɼʝ@ÇÈķlUČÅÜķnέƒǓKȮŎŎb°ĢǀŌ@ȼôĬmĠğŰōĖƧƧōx@ķó£Ål±ĀƧīXÝġƃêĉK°Ýʇƅ@ΌʉżÅÒϱʈ@˺ƾ֛।࡬ţશóЈèʞUš¤Ґ_޸Ƒʠɽ̦ÝɜL׈ɛϜóȂJϚÈ@ǟͪaÞ»Ȯź'],
'encodeOffsets': [[
107764,
42750
]]
}
},
{
'type': 'Feature',
'id': '1525',
'properties': {
'name': '锡林郭勒盟',
'cp': [
115.6421,
44.176
],
'childNum': 12
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ʶĬĊIȘƨƨŽ@ĬÛĢșŤĉĬƒĀóšU‚ÈŚÜènŦƐȤȄłϰUƨťƾÑ܆ğɲƜǔÈèʈƲĊƞƒšɆ¯̼V˺Ò˺ȂŤVĢêU܃x„Āˌ˘ƨ„ưѢmÞżU¼ÆlŎ@ĊçŎnÈÒͪŎźƒĸU°lżwUb°°°Vš£ÞlĠĉĊLޏɆnźÞ„n¦ĊaȂīġѝIĉůl»kƒ„™Çý„¥Ŏ¯ƒén£ġљÝȭxƒÇ™@Åçķ»óƱŎ¥™çWÿmlóa£Çb™yVÅČÇV»Ý™KĉýǕċţnġ¯»ÇōUm»ğƒÑ™wƏbċÇŎċwˋÈÛÿʉѰŁkw@óÇ»ĉw™¥VÑŹU™mW»ğğljVÿŤÅźī@ř¯ğnõƐ@ÞÅnŁVljóJƒwĊÑkĕÝw¯nk¥ŏaó¦ĉƒV¦Å`ğуÑÝ@mwn¯m±@óƒÛKˍƏǓ±UšÝ™a¯lƒōšșk„èƒĬގn@ŤġŰk°ċx@œĉ`Ƨĕ°@ţÒĉwmĉ@ƒƒnƒƒa„™¥ķnƒÞĉVóÆókĉŽķ@ÝkƧƧÛaƒ°Ç@ÝÈU˜óbݼ@„ÛÒV°™@V¼ˋL™ÞɅŤŹǠVÞȗŤÇĖŚōbȁƜ'],
'encodeOffsets': [[
113817,
44421
]]
}
},
{
'type': 'Feature',
'id': '1506',
'properties': {
'name': '鄂尔多斯市',
'cp': [
108.9734,
39.2487
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ĶL²ĬVłƑkkl@Ȏ™ŘWńÈĬȗ¯™ºlz@ĠššĊôŦô„ÒĠ°kÞܚ™n@¤„UĸèĸbŌÈXŽĸLlÒĢxɲÆ¤ÈÛƾJÈݰUšÅĶ»²VW¯ĸJôšbk‚V@ôlbnĊyÈzVôašb@ĸ‚ÞUl°yǬ²Ǭm°ššk„±lbn°@È»˜JX„VŎÑÆJ@k„LšƒÆl²™Ġ²ʊůĊġ‚řóƛÞÅ@m„ƒmLUÿóĉƧ@™»L@„›`ČĸmšȗÑţů±ĉğl¯Ā™ŽƒçƧŤÛI@±ÜĉǓçō°Uwô™ǫůķƳř±bÅ£™ÓÇwnÑó@ȁƽ@™ƒÇƧĢón»ŏĕóĊ¯b„Å™™VȯÅImƒōKU„™LǓ±Ýxċ—ŋ˜V±Āȗ°™„Źl±šÛ@WÒȁŚŹНŚÅèŌô„¼°ȰɞȂVĊ'],
'encodeOffsets': [[
109542,
39983
]]
}
},
{
'type': 'Feature',
'id': '1504',
'properties': {
'name': '赤峰市',
'cp': [
118.6743,
43.2642
],
'childNum': 10
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ɲŁĢljĊwƾōÞĭ°_ŎŃźȹƒUČÿl»¯ôķVÿǬƽ™ɅġÅÑǫ»̐ʟȣU™¯wVWݍÈġW»Þ¹m݃ɛŎÿŎōͩůV¹›ō™éċ™óŹÅVVĢǩʈ@Ėċ@ķšÛšV°¯xÇÅţ¥™»°Ûô™ĉʟ„¥WýČ¥™w‚灻±mnÅķ¥ˋVƒbUÒġ»ÅxğLƧ™ƒbWĖÅxš¦U°ÝVóŰlô²@š¥ÜÞÛô„V@²±`𦙄™¯Ý@„ŽÅ„VÒō¼ôš™¤V²ŹĬÇĊƑƒţxƒç¯Lk»ʟlƽýmłÝÆƏ@mö°Ġ@ŚŹĬţÆUĀĠNJĠŽšnźVUҚ¦Ċxȼ@ôlx¯łʊÒÜĀˌÇČxƍČÈƐašx„ÒĠŽn¼ŎVȐ‚¼Ģ°ŤmǖČĊþšLV°ÞŽU¼ċÈUƚzÈa‚¤ôbkŽ‚nXšè'],
'encodeOffsets': [[
122232,
46328
]]
}
},
{
'type': 'Feature',
'id': '1508',
'properties': {
'name': '巴彦淖尔市',
'cp': [
107.5562,
41.3196
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@²@Ζǀݴʶհĸ„˜ƒ¦Ķ™̒Uˌ¼ӾÇƾ¼̨UÞĉ˜Ƨ—éÝ»ƒĕĉ—ƐȍœōǪakó‚ó¯a@™ôţ™aV¯Þ¯°@²él¥ĵğťwōxó¯k±š—Vó@™aóbUÇyĉzmŽkaóŽU@l™‚ķIX°±Uĵ¼™Æ¯VÇÞƽIÇÜÅ£ɱŽġwkÑķKWŋÇķaķçƒV@£š™lÝğ¯ƒÑťóǿƴȯ°Åł@ÞŻĀˡš±ŽÅU¯°ɅĀ™źƧʬmǠšƐ'],
'encodeOffsets': [[
107764,
42750
]]
}
},
{
'type': 'Feature',
'id': '1505',
'properties': {
'name': '通辽市',
'cp': [
121.4758,
43.9673
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ôƲĸ¼Æèš@„ÈȮwƾ»ʠĢ¥VÆ@²¥@»Ŏњ¯ĊJŤ£k»ÆÇX¯̼ōšī°aX£ôƒƾȁꥄƒ™Ť™ĢL°ƒĸ@Ȯ¼ÈÒʈŚôVXůÆaĠƛÈKƒķšĉôÿ@ğÈĉ™»ÇVn™ĉV›wXĠݰšČÿĸwVƒ™¯¯ǵ±™ĉ‚ǫ™ÅÅm»²Ż±ƽIm¥ţÈķ@¯šƧJV»ÞUÝç¯UġºU£ţŽóaÅÅlƒƒ™Ƨī¯K¯Þ݃ğL̑ȍƽ@ōŎōĀƑɜnÞݺX¼ÇĢގUX°xVšʠȤ̏Ǭ¼ÆÒɆ̚ŽǫƾUĀóĸ°‚k¼ċĀƑVŹȺōń¯`ÝĮƽŎĉxġNJɱłō¦'],
'encodeOffsets': [[
122097,
46379
]]
}
},
{
'type': 'Feature',
'id': '1509',
'properties': {
'name': '乌兰察布市',
'cp': [
112.5769,
41.77
],
'childNum': 11
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ʠǠÞĸɲȺƒÒȂƛŎaƙÈĕȘţUÝźǟɆţšÝˌKU»š@U¯ÜÑ@ƒÞ»ôaV—ÞÇÈ@„¯ÜbƨƨÞlĸ@ĊôlôÅĊU„Ýĸmš¦ƒŽ„bm„„„Ċ@n‚ĊxŤÑ@¯‚ƨĖĊ_@›Čwl¯™ƒȭL›Ý„»ƽ¯ķů„Ǔ@ÇǓbċ™ÅÅÆwÿĠÇU£óaƒ¥¯aŎğĠţkw°»¯ůlÝĵkǻݰɱƧǫaóôɱ»Çk¯ŃóƒʇŐŻ›ĉNJŻĢ„ޝÒÈUl°ƒx°n„Ò™Ĭón™Ċğ°ÇŚĉ¦ʵVƒ°°ĬÛżÇJȁńʇʹó˂ƽŎ›Æţ¦'],
'encodeOffsets': [[
112984,
43763
]]
}
},
{
'type': 'Feature',
'id': '1522',
'properties': {
'name': '兴安盟',
'cp': [
121.3879,
46.1426
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ÆXnlŎ°@LVLĠþœxĊUȮĊnU„ĠV@żaW¯XIŎġƒ¥Ý@K@w@K@I˺ŻŎ¦ƨƒƨÒŎIÆ@X@VºnX°lŎ@ƾĉˤƒȘǷȘÑÝݚÞbVţĸÿŤxÈĖƐށêÇKnĸ¥ô@›ķÞUnÒl@UŚaƒīˋƒ¯ÑƧx@±kXřƐƏÛéV™ˋ»lō¯ĉ„ÅÇÓǫޗĖġV@ğ»›°ĵ„ÇÞǓ¼¯m˜ÛÅŃĉĠÇƾb²çƒ™šéż¯VƒƒğÞml»ōÑV痻V¯™¯šĕÆU¯y°k¯¯V»ôDŽѰa@Źk™ġKţšóŽšbƒ„ʦƽȂó„W¤¯b™Ĭ̻ŎW°ÅÈl¼ţ¤ĉI™°ōÒ@¼±¦Å@UŽġ¦ʟŽƽ¼šÞĢÒm¤„êō°ƒ¦Èþƒšl„k¼Ċ۰JĢńȁĬ„°ƒżn‚ÇbV„ݼ@¼óĸţ¤@°Ånšl'],
'encodeOffsets': [[
122412,
48482
]]
}
},
{
'type': 'Feature',
'id': '1502',
'properties': {
'name': '包头市',
'cp': [
110.3467,
41.4899
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@źxżĀǔÆǬVȘĀŤ¥œÅƾōôˁʈͳȂŃÈIÜŻ¯ī„¯ōm™¯ɱ˝ƒķÒÝIÝ»ÅV™ƒlÅôфġ™ğVmÞnnƒWçkW܁XƝÆwU»Șĕš£ĉÑ𱱚Åk™„ƒK@lÅIō҃UW‚—IǼ¯@m‚kaƒ²™™ǫnǫ±¯zkŽÝV큙˜l²ô°ŎwŦxĶĠk¦±ê¯@ݰU°šbóŤ@š°bôlôǩb›ŎƏȎĊ˜„ĖÞ¼˜ê—ƨÝĊ'],
'encodeOffsets': [[
112017,
43465
]]
}
},
{
'type': 'Feature',
'id': '1501',
'properties': {
'name': '呼和浩特市',
'cp': [
111.4124,
40.4901
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ʶUĊ¥ÈřĠ¯šĉômšīƒÑ¯m„wk¯ÇV°ÑƒżġĊljǓɱţǓ›ƝóX¯ƒɛÒóa@nÝÆôƜŚĉĢʉŰĊҙ¤ȗĖV¼ÅxWƞۂlXXèm„ÝmUnšĠƒĢóÒkƚ„ÆUÞ¼ÞJĸѰ„ɲĕš°Ŏn'],
'encodeOffsets': [[
114098,
42312
]]
}
},
{
'type': 'Feature',
'id': '1503',
'properties': {
'name': '乌海市',
'cp': [
106.886,
39.4739
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Ș°ÇīXњŗ@ȍlkƒlUٱīĵKō¼VŽÇôXĸ¯Ž@šťê„°ź„„x™œ@Ĭ'],
'encodeOffsets': [[
109317,
40799
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/ning_xia_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '6403',
'properties': {
'name': '吴忠市',
'cp': [
106.853,
37.3755
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@nLV‚@šVLšaÞbn@@l˜š@bUVlUV„zVx™¤kÞVèšXnš‚@nm°a@UƒÑ„@VŽXnV@Va„UšŽVKUUU@@U‚@@KVa@U²@‚wXkWnk„±lLnU@UmmVKnIVWnI@UK›@UK@@UVKXkmWLWUXmlkVwUyVa@w„w@aVI„K@aVÈw„KlLVV@LnV„VVnU‚ܲ°WÈIUÆ@nÞ¼‚‚@¦™@UÞUVW@UxUxVn„b„K‚b¯ÞU`VbǬ™V@XXÆVVl°InmnUôƒ°¯‚anam£œWVX‚KXmškôaVU@ƒVak@@wmaƒn@K@UÛUWKXUƒÇƒ@UI™b@alW@akLUKV@@Ukw±Iš›nL@kmwkWmk@JUIƒůVmnnU@m@UƒK„VKlkUwkƒƒnVUKmbkI±š—KƒkmVkKƒb@U@aƒVkUmn™`kIlaUK@UUKmbUIݚUa@mUa@aƒ„m@UUULUK@bmKkbWI@WXwlkXƒWa@k@kKƒLVkkK@L@JUVmzUKlwUUnW˜£XVlKUwVU@aXI@aWaUw@W@_nam@¯‚UkWVkUWaU@nwmJkUVkWVUmUkJ@ImbUaƒ@@WÅ_mJknmak@@mƒXƒaUV@„ƒxUšƒ„@‚ƒ„@VUnkVƒ@Vn@`ULUbWLXVW@kbUJ@XW`@ƒnÅĖWJƒ@—m°@xƒxšbnUa‚w²lƒÞ°xŤIVVULۂWbšbkVVXÆ`UbVL„@kx°LlV@Vœ„WbƒJn@bl¤ULV„°@lmL@ƒƒ£U@@aUwmKULVxUVVx@„™@kU™@mK¯LÇa¯@'],
'encodeOffsets': [[
108124,
38605
]]
}
},
{
'type': 'Feature',
'id': '6405',
'properties': {
'name': '中卫市',
'cp': [
105.4028,
36.9525
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@°@Èb°KnLš@lVš@@ƒUwVUUwVKnLVx@bV@„¤@„nK@k‚¯UƒVKk£@a‚m„IXa›ƒ@UkU¯Klwƒ@UKVaÅ_UWlU™aXa܁VKUUţJ¯w„ݱkxVbmŽ™a„w@wn¯˜„@XIÆĕ„m‚@X_@WVIlaX@WUXKVaVK@_Um„@lUVm@U„ƒ@„ƒV™„w@ƒVUÛwm@@W@ImKUkU@Ua‚aXƒ@wWaUKkw@UVaUamLU™nk@»±`¯@k—W@Ua™ykbƒI„„@VWJkLWUkJƒwU@ƒn¤mL¯wm@Umƒ²XVWbnV@bmxƒVkxUblLUV@kVWKU¼ƒŽkUƒ@mn@JnV@bUnmJUn@„k‚@XlxšLVVnKlLVV@š@LkKULVbk`WL@lkXW@kVƒ@UÞUlÇX™lkaUbmV¯@@L@šƒV@bkb@xƒlW„—bƒbW@—±@UJ@IU@mVk„VxV@@l„Illœn@Vm@ƒVUbl„@JLmKÛXmVkU›KULU`@LĉwƒKUX„lVUl@Vb„JX¦̼bÞxŎxɜĖĠ„Ŏaô@'],
'encodeOffsets': [[
108124,
38605
]]
}
},
{
'type': 'Feature',
'id': '6404',
'properties': {
'name': '固原市',
'cp': [
106.1389,
35.9363
],
'childNum': 6
},
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@Vnn@°xnK‚£„mV@„xlIXVlKXI@Uƒƒ„JlašzVbX@l˜°@²_@¼mlVšnKVbUb@VlxVLXb@xW„bVbV@VlnL@J@Xn@Üx„b„W@nl@nblmnIÆ`@X„@Vbna@aVUUWVkƒ@kbWakbU@VwšW@_l@nmn@@alVlk@UkmVak@@a‚UXaƒL@¯@KVa@axWI@KnkVaVJn_lJ@„X@‚m@nVanUVb@mXLlJ„VWnLla„VVaVX@KXVVkVKlknKVa@aVU@KXb@klJUknUmƒ@K@_UW@alIUamaU¯kJma@IUK@U„@@UW@@aXLVƒVJVaXIƒKlaUkUV@ambUUJkIWJ@wUI™V@JU@UwV@@Um@™nU`@UkUmVUxWUUV@aÅb@aWXkKUUƒUUaWK@wnm@IVU@aXwm@UmVaUalk@anKUwlƒUwlkK@wmaƒUkmmIk@VmkUUbW@UVUnW@kV@xkVmbVnU‚™@UbUV@a›k@kkW@„kLW¤@„nV@VU@W_UV™UU`VLUV@IUVõVULU@UUUJ@wmkUJ@šWI@l@bkKkbVVƒbVbUL@UUJ@Vm@@L@xbVVVLVlVwX@Vb@bmUkbk@@JWIUVÅw@Km@UkWKXxWLÅ@UVUnWK@xkVW„@KULwWVXVWzXVVKVXkV›V@VUbV@U„VV@š@LXxVL@V„b‚Ž„LnKVLVxXVmb@l'],
['@@@J@aƒU@LWK¯UUxVVn@Ġ„„LUW@UbUUUa@KUX']
],
'encodeOffsets': [
[[
108023,
37052
]],
[[
108541,
36299
]]
]
}
},
{
'type': 'Feature',
'id': '6401',
'properties': {
'name': '银川市',
'cp': [
106.3586,
38.1775
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@šUšwVK@UVWÞUšbšw„V@knV˜@@KU_VK@K„ƒn@W_XWlL@Vn@Ċw@Ulaœ@Wanamī@aƒ»ŋó@aÆÅɲÿUaV_°ÝaƒLƒaUmVwVwX@VUVݚ@@¥Ý»@mVÅÇJ¯XÛ±VUmƒUmU@KUUkKƒLÇxUŽ@bƒLUJ@bƒx@xUbVzUxklWnXV‚KnXWlUL@V@ŽVLœ@VL@ŽmJUXmJULnn@VmVkKƒ²mlXWlx±@@VUb@L@@VV@VVUL™ƒVUbU@WmUƒ@„Ò@V¯bmn@VŽƒ„@lVnUšnVWŽXVl@¦VVUn@x‚š@‚XL@¦‚lXxš„Vb'],
'encodeOffsets': [[
108563,
39803
]]
}
},
{
'type': 'Feature',
'id': '6402',
'properties': {
'name': '石嘴山市',
'cp': [
106.4795,
39.0015
],
'childNum': 2
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@U¯ķó±ÇÛ¯™ķmbXb›@kb@Vĉxm@@UkKWXX`m@ƒ„@LULV`@L—@mU@lƒU™x™aÝVUX@VUL™x™VkLWVšš@J„nVLXVlŽUV@zl‚VL@V@b„„n@lU²WVLlLVbUŽVxUx@xǀL˜xôҜk‚ŽVa‚U@wXa@W™ÈĉUa@‚bÈk„m@¯'],
'encodeOffsets': [[
109542,
39938
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/qing_hai_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '6328',
'properties': {
'name': '海西蒙古族藏族自治州',
'cp': [
94.9768,
37.1118
],
'childNum': 7
},
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@„V£°š@laœXô±źwš™ô@„Ulƒża܍n™Kƒw@U„aƒ™ša²L‚mÈLƚÈxlaUa„wÞmÜbÞUšnJ°a„ƒ‚ÑkwÝVğwÇ@ÝkkV¯¥@ò„»„nŤ¥XImw@mVwša@Åw™mLkaW—wƒ¥l»kçƒó„»@ƒWÑĉŽğ„™‚Ń„UwóřVómĵ»™™Ý@VǕ¯kšÝĊÅk™°ÓUklkU±šI„ÇÞkƒ±@šƽJƒ™@UġIk@W¦™VÑșÓÅnťKULnޝX›ƒ@¯mUÛ@WřmóKknōbƒxÝ@ƒŽU@kw@ÿÇLţšÝUkšmwƒŽk™lċVŚ™ŽƒLkUWlÅÑ@aƒ@ÅѱUóġʼƒÈĉmŻ@@wkw™Kl¯U™ġ@—„lÇU™Ó¯_ƒ‚Waĉ²Åló¼VbknƒŽÅ@ƧĢō°Ý@ğ„W™ÅxUUm@™‚ÝXۂW„ULUè¯@mbUaƒLƒbUWġxIUJWz™a¯b™y™@ōÈóLU`ÇXUl™UĉV¯n›mÛbǕLklƒUĉVƒšóaġ„ƏbġKţnkbÝmmnÝWȭȃŽÝXţWókUÇl¯U¯‚ġUɅĀ@°¯„„š¯„VÆnmJ@ĊķnóJUbÝXUlVškL@lVxnnmb@¤Vzš`ÞÞŤ@„VnÆJV„°b„UôJkzlŽkl@²óš@ÆÇ°k˃šÇbÛU@lmb™XV˜kzƒV™ŽɅĀXˢlń„ĬŹ@›éÅ@ĉńưğbUšlŽɜ_°‚@xŦ˜škbVbƒKĢ„ŤVŎް@żÈźlĊ„ôKôb@nôxŦ„Æ@ôŽŎL@þÆb@šnnšWˌbÈx‚InaŎxlU@Ѳ±ƒğVŨƨbɲ@Þ¥ôUUķWVô¯ĊWʶnôaŤˁ@£nmnIôŽǪK°xUXô@Ŧa°m‚kXÆÞVŎkĊ°ÞLȄôyVašIlwX°UVwĢÑÜKôw@nV@œm°nmŽn„Ü‚ɞ£VbmŽXnƒ°ÜÒ@xx@V‚b²UlbkxVnšJUnVVĊ°KȚm°nxÇnn¤±¦@ŽUXVV@„lV„„bmVVȁŽVxšÒ™°šIšbźaȃšbVwš@šƒVL„™ƾÑ@ƒŦô¯ĊkôÑ'],
['@@„@šƒ„@n„òVœa‚w²bVxšxÜaČVô_ĊJšIVmšL„a°@Ŏ¥XlK@ƒšk„l„KVbUb˜@nUĢn‚aÈ@lmǬ»Ġ¯œn‚mnƒƨVy™Ñǖ™Ġ»ɲInŽ‚@@ÅĢƳ@¯°™ôV„KÈbVIÇ¥¯@Ýó„™@ÑnīWKšƒk™‚k@¥š™¯™Åa™Xƒ±VÅw@±Ġ¯@»™š™n™Wmw@ƒ™@¯ƒVƒUUW烄a±VkkƒV¯w™x@šUJ‚x@bknÇb™mÅ@Uw±U¯¦UŽ™Kmš¯I¯Žť¼ğĊ™@ǃŹÈ¯@Ý»ÇnˡJƒbÛèÇnƒ„ÅK¯„ġĠʐW¼Ålm„@¤n²ƒŽÝb@b„š¯lƒ¯@ƒšÅ¤W„™¼nV@x„„°@Vx„@lbUblbX¼W‚œšÇ²lšUށŽV¦@bÇlVxUbVxÞbVšœbm¦ƒVV„']
],
'encodeOffsets': [
[[
100452,
39719
]],
[[
91980,
35742
]]
]
}
},
{
'type': 'Feature',
'id': '6327',
'properties': {
'name': '玉树藏族自治州',
'cp': [
93.5925,
33.9368
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ɆÿĢV°°VÈklVôŤXÞW„ȮÇÞXnmÞnlaŤmĢLƐãôb„™ĊU„VlkǖKÜaœn°mĊUšVVkÈWV_ôKŎǚ@šz°ašbXyVI‚JĢwVX„a„KVbna°@VçVKXƒÜÞWšn@VVÆwXšĠƒÞ@Ŏ¯ƨġÆ@ȍ„LlmUaô»ÆkĊ±Xb„°`šÔV‚˜ƒĢ@VššLlx@xż@Ċn„Çź»ô̲VÆÒ„@@bÆÒXklV„KšV¥Æ™ČUšk‚l„nxl™çƒ¥ċç@±ƒwÅJƒ@™™™Vƒ„mÈIléÈa°™™@kÞV‚K²ÑWƒ°w²Ñ‚K²ñš„ÝšVmw„»kkWĉ—JWUƒVÅwƒL™mÅ@@ƒmw„kn¥Vу»°™°@@»„¯„Lla„nV‚UůƒU@W¯Umѯ¯k@WykU@¯„wV¥ƒkVwţƒšwWǜĉĶçšK„ƒÞ™ÇaĉbƒI™lUƒ@kwƒWƒXUƒ°w™±@UšKn£Wĉ—KWxƒkĕVƒšamwXw™@™„Wmnk@aƒVkƒ™bĉLƒl™Imm„wUÇ‚Wx™nÝJn@¥Æ™kwƒaXƒÜĉ™¯ÅV¯¤mkƒx¯kķܙ²VWôŹVUƒƒ@V£™¥@ƒ°wn@™m@¯@UbUôķŽmn@ÆÛ@ÇýVaUÇĊVƒ@Çlğ—¯xÝŤ™lVÈÈVƒx„ƒ¤Vx™„kK@™@ƒx@„kVƒĖġ¥kIWbXŽŎx@nƒxÅUW`ƒ_—ŽUa™LUxƒ„WbkVlb—bmŽƒLÛÆWIUwƒWkwÝV@kI›ŽéUb›UUk™V¯Km¯k@Umݐ¯m¯›m—L›Þĉ‚ÛUm™ġ£UxkKm°™Lw›šk@kšƒVm„ƒKVUk›@¯a¯Ģ™móKUU™x™ImlÅn™™ÇbXèVVU„°„@ŽšŽ@„‚xXnmš™ššŽ@¼ğ°@²ÆxU‚„²šWÆb°š™šllš™„XLmĬ@҃šÞô°@ȦUJÇaƒLóU¯š@°ġƴ@Ɓ@mɱJğ¼ǕššÒUzƧ‚m„n›mğ°ǫ¼knÇ@bġmmV—@VaUaƒLƒk™l@„kLW‚ō¦¯@ƒb™KUn™JĉIó`ċUÛb™wUw±ax›bñUmƒƒ@™„ƒ@—bƒaƒÅXm˜„ƒÝ„ÅôVbގ™bl„UšÞVޚ„U‚°„VUxƒ@U„V„@l`™¼nL@Ċ„LW„„¤kXķWġXUVVVķ„UbVb@°kVVxÈa‚@ȦĊbšaźJ„U@Ț„„˜Vœƒlš@XkôaWƒĢ™Þ@laĸUÆb²mÞLĠ™ÞÑôbšÒĊa„JVbm¦'],
'encodeOffsets': [[
93285,
37030
]]
}
},
{
'type': 'Feature',
'id': '6326',
'properties': {
'name': '果洛藏族自治州',
'cp': [
99.3823,
34.0466
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ÞVŤ™ÈK@ĀlxV@„Þ@„wŎalmôLšnXÆÜ@nV‚°@œ„°WmVKŦLÆmȚԂҚUX¥l@ĢJVš@„ŽƾI@w™™™Ån¥›kÅÝVwôƒÈç„@lÑĊĕša„JnaÆLVw°kny°UnkÆVȍĊll¦„Vƾ@@™nUźƒÈǂIn°X„wÞKô¦VWV£„@£°ókċ±I™™am¯Va™»ČĉV¥°™@m„k„¥l@„Ċm@ašU™mwXƒ@wÆxšmĢ_„`VnÆbšKVw„@@ƒnUVğVmVVöIlŽl@@çÛmƒ£UDŽw°@VUƒ¯»m¯ƒJōĖÅLƒa@»ĉ̱`U_k`ÇçšóƒkX™lK@ƒakÝރš£WċkÝ™kxƒJݯÅw™xķxmIÅx„@k±J@ýŋš›¤UœkŽmV™°ÅÝxkwmġƒnÝVU„š¦ƒŤlmšóXk¤™UKƒç™@mVkK@klīƒ£mš¯VUbƒW¯¼ċb¯ĵam¼mVX„m@k¤ÇX‚ÇbƒUƒ„¯J¯„¯È@˜™bVXVҙ¤V¼kxݚV„@l‚V—„WxÛ¦Wš¯šmKnlŽkŽ‚šU‚@nƑUĉ„Ý@ǺۄċUĉ¥™UƒÞŏ™z±òL±Ò¯xX„±ÒLÝU@lššV¦¯‚ÇbkêÇJƒnU„šš@š„‚ÆI„xn¦‚‚@²Č脦‚è'],
'encodeOffsets': [[
99709,
36130
]]
}
},
{
'type': 'Feature',
'id': '6325',
'properties': {
'name': '海南藏族自治州',
'cp': [
100.3711,
35.9418
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VxƒŽńƒš@ĊĠŽĊXÒ°UƾĕÞm°£nb@‚@LUUW„Ûº@nlÆǬšĠ£ÞV°UXb‚VȂǵ„éƒ@kWanm°@™x„z„K°¯ĠVšƒVƒkw™Lnm°kÞxÆa„¥@‚wnĉƏ@™œ_l›š_VwšmĸèŤÅČU@™˜Wn@ÑmKU™ƒK@ƒ°¯UÿV£nmšLl™„UƒUÛé±óókkmƒnƒakV@ǰóÝXƒWəÞťIţxmm™VÛUVȂÓnWyȁĉkƒVš°WnkĊa„¥‚_œK°ÿWna@ƒmU¯wƒlÝIU¤UXó¥ÝLƒx¯WmJÇÈŹ„mV@šƽ@ƒUk¥ĉkċŽÅUml¯Vmz¯lUxÅKmbƒI™bĉĖk҃@Çèó„UxÆÞœlm¦šÆ¯ššX@x™Ž@Ž„²ÝlƒÈ™JV²klVl¯ÔlšĉƙްlUǖÞ@ššĶ¼nŽUôôŚ'],
'encodeOffsets': [[
101712,
37632
]]
}
},
{
'type': 'Feature',
'id': '6322',
'properties': {
'name': '海北藏族自治州',
'cp': [
100.3711,
37.9138
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ōmġxƽUm±Lǿþġԙ@kxmWƒb¯I¯‚mIUx@bƒbŹVǎƒkĵbƒlĉI¯¥ƒUšm@ƒÆ¯È@šašóšUlƒČ»@w›œ»›wXaƒƒó°ţç݄kUƒaV¥ÅbÝw¯lmnšKlxU„™„ğU¯°ƒLƒyšw¯@mnXb‚l„@ƒêȁǶUWa¯VÝUğ¤ǫ™kÅ@mܹXƒVV@K@ma¯¤Ýnƽ˝V@„ƒ¼„ôlèk¼„¦˜xXŽlbnKšÆx@Ž™bUx@nnxWJţ¦ƒmƒ¼ñ@ް¦lUÞlÈ@ĠxÞUlxÒó„ƒl¯bmI™ŽÝVÛaÝnƒxVbkbÇwřÇKn±K™b„šƒb@V„xšLmŽÛŽŻbk„ƒVó@™šŹxó²›Wkb™ƒźĊ@lUX„°lÆôU„ƒlLX‚aœV°wšxUb°xÜôÈKVkÈmlwškÈKšwšK™™VUŤĉŎ»„»„Il¥na°LV»²¯Üy@w̃°ĸwlwĢw°±„_lVkšƒbƒÆ¯zƒ‚„š„@l_„@̱lŚVlUaރ„LVƒnKlnȏ°IllČa˜wÞѰx„UU™@wƒVkmĠLô»„KÞýôaÞ¥ôĀÞmƁ„™‚mUƒŎV¥Èl°²°a²¥V„@@w„amm@Ñn@Æ£żƒVƒĠ£@W„¯Þƒšl@š»@Uk@'],
'encodeOffsets': [[
105087,
37992
]]
}
},
{
'type': 'Feature',
'id': '6323',
'properties': {
'name': '黄南藏族自治州',
'cp': [
101.5686,
35.1178
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ôl²ôÜê„VƒVkš™KmnU¤V°@„„LmĠVšnLÈL@alb@al@n°Vš_XmWUÈamaVIn@n‚aV£œóVWƒ™U£°ašxÈ¥@™‚aĊwȹ@óša™ƒğbm@k„w@mƒaÆw@ƒ„In¯mmƒ@UkkWƒÑÅ@@kċÅçVkÝJÅkVykŹl¥@¯š™ĢU܃X¥òý—mmX™ÝÅlmU@£™Wly™XW»Åbƒl@aI›»k@klm@UxUUƒVƒ¼¯Xƒl™aUnķ‚ƒI@x™„ƒK™„ĉUU`óšlȝô@¤ƒÞJ„k°xVŽ„n@ŽmbXޝ›L`ƒ¦ĉbml¯X™ŽUŽl„ȂĊXzm‚ȁÔU‚ÜVšUnnŤwŦJɚ݄XÞW¯ô@ÈlU„b„mln'],
'encodeOffsets': [[
103984,
36344
]]
}
},
{
'type': 'Feature',
'id': '6321',
'properties': {
'name': '海东地区',
'cp': [
102.3706,
36.2988
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@҄bš¤ÆI°ôU¼š°UŽnnWx™š@b¯L@lUUWbXxWl„ƨnxVUllš„XVŽUŽnL@lȀý²KVnƾ‚ĢwV»ƒ@mÞ£nÆƒÞÑmL™ƒKUaVżĕƒWVk²ƒƒÆÝ@ƒXw°@„ô™@a°wóUUmIk™™aVmÞwmknyƒ¹VÿƧm£X»˜™naV±„Ýw@ašb@aƒ„ĉVó¦kÝWKUU@WanU™b@ôǺĉxb@šÇ¦™w¯bV¤„šUX›ôU¤bmm@UJnbÇbXVWn™`¯Umk@@bka@bÇK'],
'encodeOffsets': [[
104108,
37030
]]
}
},
{
'type': 'Feature',
'id': '6301',
'properties': {
'name': '西宁市',
'cp': [
101.4038,
36.8207
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@kmKVUƒWk™VkUmwƒƧXkWwXaVV@k°K@aš™XwmmV™¯V»¯óÅJ™£ƒamŽ—X@šċVţÆķç™nUx™`kœ›`@šÅx@Žƒ¦U¦„blVރŤèô¯„„Wbœx›¼œŽ@xċ¼k„™V™ô™bÇ@Ű@„™n„V°¦ĊJ„kĶa„źU„a@aVwnJ°°J„anXlwš@ĢÓ'],
'encodeOffsets': [[
104356,
38042
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/shang_hai_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '310230',
'properties': {
'name': '崇明县',
'cp': [
121.5637,
31.5383
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@uŏu»GPIV±ÐɃŜ{\\qJmC[W\\t„¾ÕjÕp‡Ž±Â|ěÔe`²„ †nZzZ~V|B^IpUbU†{bs\\a\\OvQ’Kªs†Mň£RAhQĤ‹lA`GĂA@ĥWĝO“'],
'encodeOffsets': [[
124908,
32105
]]
}
},
{
'type': 'Feature',
'id': '310119',
'properties': {
'name': '南汇区',
'cp': [
121.8755,
30.954
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@`y”ĉNǕDwǏ»ƒÖLxCdJ`HB@LBTD@CPFXANC@@PGBKNECCBB@EBFHEDDDSNKAUNBDMNqf[HcDCCcF…@EFGLEBa@ACoCCDDD@LGHD@DJFBBJED@BGAEGGFKIGDBDLBAD@FHBEF@RFDMLE@SGANFFJBANPH@@E@FJjRIACDMDOEKLFD@DbDAJI@AP@BGHFBCBGDCC@DCA@CECGH@FKCEHFJGBFDIHACEDNJDCVFBDCRKRLDLITB@CjNJI^DBCfNVDHDFKHAFGDIICDWBIF@@CFAjFJNJBBHD@CJ@AEFJ@@DH@BFBCPDBMFEQGDIFCNDHIP@HDABFACBJFHEBSZC@DP@@JDBƤ~'],
'encodeOffsets': [[
124854,
31907
]]
}
},
{
'type': 'Feature',
'id': '310120',
'properties': {
'name': '奉贤区',
'cp': [
121.5747,
30.8475
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@~T~JjZdDbLXDLCB_J@@FHFZJJIAGH@HGR@BENBLID@@LFCDF\\FpDBDb@FAHKFE†@dEDDdC\\GreNMACVMLBTMCCFCEGFAA@DAFDLMHA@OD@BMEWDOC@AS@KGAI_DcKw„ÕísƝ‘åĆctKbMBQ@EGEBEJ@@MBKL@BJB@FIBGKE@ABG@@FMFCPL@AjCD@ZOFCJIDICIlKJHNGJALH@@FPDCTJDGDBNCn'],
'encodeOffsets': [[
124274,
31722
]]
}
},
{
'type': 'Feature',
'id': '310115',
'properties': {
'name': '浦东新区',
'cp': [
121.6928,
31.2561
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@EN@JJLNHjLJNR^GRYVBNZJRBV@PDvbLNDN@LGNER@nCNQNuT_TIVFV\\Z\\XnDrI|[Ʉś²ÏJUHOƣ}CA@IO@@CYDATGFIEDAEBBAGCO@GJMCEDCJRHEFANOCADAEG@@CI@FE@BDIC@AGIAIMiEEB@DE@AJCXJDCJEHGBELGCUCeMAD]CIJiM@DSAKJKCLQDQACUECDMIFCBDJGECHAEIWCK@GLMCCGEACNKCEJG@MMBMC@@CIJUINT@JAJSTEPZZCP'],
'encodeOffsets': [[
124383,
31915
]]
}
},
{
'type': 'Feature',
'id': '310116',
'properties': {
'name': '金山区',
'cp': [
121.2657,
30.8112
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@L@BIHFN@@EE@@EFBDGDAADVDD@@EF@CA@IIsRE@GDAF@BF@CV@|FBCHBLCNHAFCADBMDCFZXHILBVEEQA@MWFARJJ@DCX@@TEFBLHAAERE@AJABRPBNK\\BrJ\\VHGND@CNADKDADQjGAGNC@GJ@FCFFHC@JF@@dLBDSFADHVG\\DTEPDDHJALIJkJDJCDIPE@YDCBiK@DONE@EH@BAF@HLJA@EIA@ALKNA@@FIFAFHR@NALadsæąyQY@ƒA±DʼnXUVI^BF@FFF@HBJEDFFGFEBSRkVEXGHFBMFIVW@GAEEFOIAIPKABGWEKFSCQLQBSEIBC\\FdBLRR@JGACFDDEF@AWB@LJJYNABBA@CUEGPaO_AIE@MYMFIGAEFECHSAAKAO\\[JEDB@E@MMA@@AGBKMGDFFCDDFEDFJF@NPBAFLHFH@EDDHBADDC@DDCDHHCDDFDABDAD@FEFOBCJ[D@HEDDNJBDDHABJIBBvGLBJAH'],
'encodeOffsets': [[
123901,
31695
]]
}
},
{
'type': 'Feature',
'id': '310118',
'properties': {
'name': '青浦区',
'cp': [
121.1751,
31.1909
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@RUNKdOFDJCbRFMLAHPLDN@JGL@@APBWYCKN@TU@SHGCEJIDIJKVIZVNM`iNY@CIE@CA@KBOEGEUFCCSADEIEFCDDDIDDHC@CKIeDCG@IG@DHWFEEGCH@@GO@@O]CNpeEQDBFME[JC]DGF@CKOA@QSB@GB@@GW@@ED@AQIJIAAFE@@DO@CFI@KNG@CDACAFEGKGBEGBDCCAIFCCLIECFI@MBCLDHGNAHSF@DMB@EEKBA@@C]DEICFG@ADBHGFKCDAKKHKD@@FHGAANGEEFCHKCECBCKG@ADKCNE\\[A[I@@mGBDQQEO@BCE@AI[AML@JGACLOAFKEMM@EQKC@CUCBCCBCHEA@FF@@FM@GEAJK@GNF@EXPH@FD@M^@HIADJCFDBER@DK@@DE@CAKFOCCBDHIBCNSB@GFC@GQEEOWFICGDUAEJIDBTAHJHEB@DIF@NE@H|HBDBEH@DKBAHEF@HEEUB@FGFGCCCE@AHOB@NH@PRLVNNFBX@RC€PbAvMtBfH@DJF@ELBFA@EH@HNED@FFB@HLC@CJ@@DJ@PIRf@HE@CFF@GPHD@DKE@FFBEFFD@DEFCA@DD@IjCRFBAHFDKD@HF@@PM@H@BlbDJDBFEF@DLXB@HCD@@IFCBIFEJD@FDC@FBALLF@PAACJERACAJCBD@EL@JD'],
'encodeOffsets': [[
124061,
32028
]]
}
},
{
'type': 'Feature',
'id': '310117',
'properties': {
'name': '松江区',
'cp': [
121.1984,
31.0268
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@DLDFRN@FNELPBDKHB@INK\\BBJF@ADP@RFCRHA@nJ@B\\[\\MFLDBCH@DLDADFGLEDFFMHBBGH@EC@GLLLCBLDHEAGBCH@DEFJ^C@DB@LAFFA@CNE@GTMBGHKCAD@NEJFDKJDDJEDBCDHAAFLHFHBEBDDCH@LMJ@DEP@@CF@BEJBJIBRC@@FX@@HA@@HTA@RPBDLE@CHD^\\INFAERCfFMo^D@PP@@HG@HDFFXECGH@@JDHfCLJ@DGDCCCJCCEDJFCFTBDDVEHFPFLAB@NBFCFKFC@CHIACNOHWHCAAFIDD@CDAGEI@ACFMF@R@R_@GQED@EGFEQEDE_IAHKAEXCQUOQCUDEN@ZI\\DDmAMHCICDSOC@EG@BKHIGMIBCGOCSF[CUHCGEBCTKA@cE@@IGDEEEDI@@HMDBHiHCRCBCLMB@DMCGH[UqI[AMLOAAQIB@BQFBFGBAKFE@SW@CDI@QIEBNXB@FRUFKAGJYWDENCCADBBEMGKDGAAD{EU@@DAEE@CB@HQFJt@JDBE@@FC@'],
'encodeOffsets': [[
123933,
31687
]]
}
},
{
'type': 'Feature',
'id': '310114',
'properties': {
'name': '嘉定区',
'cp': [
121.2437,
31.3625
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@F@LI@IDKJADKIEJICADGACFECCJ@HKCAFOHAJI@aCBEE@ICAEB[GFGCKL@FGEIFADMLCAEJM@ELQECEIG@BE^QKKLQCA@EHBIGQ[GEHOMGGDHKH@JOECFCjCBEFDNCACMBCILGTABDLEEOEIG@GFIMM@CGKFBFCDE@@GEAGEEACIcGaHMFITIHDN[AKF@FS@OA@BK@IHM@KCGOKBENaQIDECcPMLQVFHFB@BFBKLGD@FAJOVGIACQ@A`LPCB@JEF@RU@ANS@@RCL\\HIFpRBFRBBDKLLDADJDGBFDABHBEDNF@DGBBBADKDAHC@\\JJFBDEH[DEFDH\\LX@XLBLbT@DNJLDCEL@VJABJNDHB@HBHYFBAA@GNFB@@AFB@AFABFLFBHFCL@HJBAFBLC@DN@HN'],
'encodeOffsets': [[
124213,
32254
]]
}
},
{
'type': 'Feature',
'id': '310113',
'properties': {
'name': '宝山区',
'cp': [
121.4346,
31.4051
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ˆmÖoÖiƒ½[s[YEUJU`SCIEBCCWJY_LIICDWU@@FaBCJIB[ICH[@@CDKEE@MK@@IMCAEBCH@AMFI@SMGEFGB@FK@BHCAIFJNQD@FEBDFMBKGACG@ECWH@@CDDTOEEBGEK@GC@EE@GPHFR\\JHGA@FDBKRLL]RAFH@FJFDKR@FINBFKDCNEBFJEHK@DLEH\\HFADB@JFFDA@bIJGBEPDBGLI@DDEFBDCHDBIJJFCLIBCL@JKJE@ADHDBHJ@HIBBDFHBBAEIJ@BJFAVL¢ˆ'],
'encodeOffsets': [[
124300,
32302
]]
}
},
{
'type': 'Feature',
'id': '310112',
'properties': {
'name': '闵行区',
'cp': [
121.4992,
31.0838
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@T@@ELE\\BCMJGJSNEbGdHDJFBJAFIEIFCEWG@@gMENSFCVJFAxR~B@IH@AIiI@GE@FGEAFQPDRiV[\\DFSGMHAXHDOMCJCDETBBNVJJI@DD@ANNNH@FILDDMFBDHNDHKL@XDFGLD@EHGFD@DDB@CDDHCDAEAHG@ABOJ@BIaC@CECLKPFNCDCJBiQEIF@@@OGBMIAEEBMTHF@NKEC@QFEGA@EBCKAACHCLJHEFHHB@AFCAIEACIC@HG@KCCDC[ECEED@KC@KJMAAFQ@GHG@BHIJYIGE@EI@A`KDWCaKcCiY}I}S[CYJM@CFDVPRRVWDFžLBBG`JCFRFEFFHC@RF@HQ`Q@E@ENBDJ@HFCB@DCCEJBBGDGXMPBDGJ@DEDELEDMA@DJF@DMZ_jMNYUUJILCJIJDFGH@TSVM@DLXZ'],
'encodeOffsets': [[
124165,
32010
]]
}
},
{
'type': 'Feature',
'id': '310110',
'properties': {
'name': '杨浦区',
'cp': [
121.528,
31.2966
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@V@CXJDKJZ`XIDDFADJvSRMDM@mFQHM@KCMKMuaOCU@BDAJSX@HKJGD@PNJCJWAGT@R'],
'encodeOffsets': [[
124402,
32064
]]
}
},
{
'type': 'Feature',
'id': '310107',
'properties': {
'name': '普陀区',
'cp': [
121.3879,
31.2602
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@F@@FHDL@HFFAPFCSDC@@XGFDH@BDLHNACEFA@ERCIMJEDBAGL@@EHAFENHHJ\\ONQBQCIBC[MKACKI@GGGH@I_G@CW@[DMHCDIBMTDHN@JNHEH@FJFPKFACSBKHDJNABDMDECAFiDEDFDIPG@GLHCNH'],
'encodeOffsets': [[
124248,
32045
]]
}
},
{
'type': 'Feature',
'id': '310104',
'properties': {
'name': '徐汇区',
'cp': [
121.4333,
31.1607
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@RADL\\NCPHFfLJaJ@FWLGMGIK@IFMDOYYFOTSBI@IMSAMSACFIDNDCPWGGBHNET[CU\\QjOCERFBEHF@@HjJBJG@@J'],
'encodeOffsets': [[
124327,
31941
]]
}
},
{
'type': 'Feature',
'id': '310105',
'properties': {
'name': '长宁区',
'cp': [
121.3852,
31.2115
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@HFFB@HF@DCAELENSJADCNG\\CX@@D`H@JHGHHJ@BINBFUGEDO[MCKQB}AwQEBUIEDMTNF@hH@FXEDFJEJIB'],
'encodeOffsets': [[
124250,
31987
]]
}
},
{
'type': 'Feature',
'id': '310108',
'properties': {
'name': '闸北区',
'cp': [
121.4511,
31.2794
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@CSG@BQGODUPWTOBQAAFMECKBGEMFKEOHADDJARMR[PGI@TEJBNG@ADBFND@JL@@NFFCL@D\\@DG\\JJADI'],
'encodeOffsets': [[
124385,
32068
]]
}
},
{
'type': 'Feature',
'id': '310109',
'properties': {
'name': '虹口区',
'cp': [
121.4882,
31.2788
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@bA@E@QHSXBDIMI@OHCLI@GTWBIACQAYIOFGCENBBARSPOXCVHPARH@DT'],
'encodeOffsets': [[
124385,
32068
]]
}
},
{
'type': 'Feature',
'id': '310101',
'properties': {
'name': '黄浦区',
'cp': [
121.4868,
31.219
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@NEHFLAFDHDPEAMZUHQQ]IMKJG@EPERABHBGRUCCNGV'],
'encodeOffsets': [[
124379,
31992
]]
}
},
{
'type': 'Feature',
'id': '310103',
'properties': {
'name': '卢湾区',
'cp': [
121.4758,
31.2074
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VDHQGABAFQFOH@LIiKKHEXI@IbAFZB'],
'encodeOffsets': [[
124385,
31974
]]
}
},
{
'type': 'Feature',
'id': '310106',
'properties': {
'name': '静安区',
'cp': [
121.4484,
31.2286
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@DLLB\\NPGLFHUDMYABEeKEVMAAJ'],
'encodeOffsets': [[
124343,
31979
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/shan_dong_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '3706',
'properties': {
'name': '烟台市',
'cp': [
120.7397,
37.5128
],
'childNum': 9
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ŤLšLllVń²è°xżĢĠÆl҄šŤbœ„V¤ĊXnŽlĢVĊ„Òš„ȰĊŰÞè˜L„±@џn»VUźċ²»ÆkôVɆkĊѲkŤVVwUUVmUaƒ@KkU@ƒmUmmk@UwUkmW@UVIXa@ƒmw@a™KULƒaƒx@Uk@UbWU@yULmK¯@kXƒVUwm@@JUUknWKUVƒLUbU@™wWykIƒa@w@mUI@ašUVynIWa„k„@@W„bl@@knmƒK@wnIl™°Kna@V¥ğ@ġUķ»™¥@UōJƒX¯¤k@™wmI¯‚k@mwƒak@@šlX@bUJ@VƒbknWxkLkxlŽšLVlkLmŽšb@bU@ƒbU@VbU`Vb@n„L@Žmb—U@˜VnUVmnU@mm™@kIUWVIUK›VkkUJUnmL@VmLUaVWaXamU@™™U@KUUmVƒU—JƒU™VÇwğn™mƒ@mXĉV@l¯xnô'],
'encodeOffsets': [[
122446,
38042
]]
}
},
{
'type': 'Feature',
'id': '3713',
'properties': {
'name': '临沂市',
'cp': [
118.3118,
35.2936
],
'childNum': 10
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@˜bXlƒl@zlV@lXXmŽkbVVlš„U@Vn@@Vmb@XšKšVX„WJ@XXl@„‚ŽÈbVLšUl`„@XXV@VVUxVbUxVbš¦„@‚WnXVJ@bnVUzl@„°Æx„U„KlU@mUUnUlUVWVUnVV@XX°V@Všll@Vk„aXVl@Ux@bmbXLlKlb@b@bUJn@@„„b@n°x°K@an@@UlLVKVbXb@bVVnK°LVa@UVa@™Xw‚KVxnLšU°@naV@UWUkWƒULmV—wÝKUUla@aó_@mƒK@aUU@ƒWUkwVm@aVI°W„@@IUw@a±¯@¥kUVUm@a‚wkw™@ƒK@kVKk@maXalI@alL„WXblaVLVU„V@LnKš@„l@w˜aXašLlnUl„LšmV@n°J@_VmnIVym£UKmI@WnIVm@anUVmÇ_kġIÅWUXÇm@U@ݯÅ@ƒ™@naWƒ™IVW@IkK@klKn@naWIƒmk@ƒaƒbkKkLWn™WkLWmk_ƒ@UaVƒUKmLUw@mn£WwUmU™ƒaóV@UkUm@UKULUwmJUX@WW@XҙzVblJXŽWXk@UVWK—X‚¤UL@xU@ƒ@ƒVUaU@@XmVkLmWkXUyÝLmKXnVŽ@n@l™x@bWLnVVn™`knULmxUl„„WLXŽVb@VƒK@z¯x¯¼Wx™KUn@bk@ƒlƒVVVz'],
'encodeOffsets': [[
120241,
36119
]]
}
},
{
'type': 'Feature',
'id': '3707',
'properties': {
'name': '潍坊市',
'cp': [
119.0918,
36.524
],
'childNum': 9
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@l@@UšK@Ž@L@bX@@VlL@JƒLUVnX@`ÜXn`V²mJ@bU@@n„b@l°xnnĸVƚ°@„ƒĊ£Þ@lWnÑnkʶJmó°w@kk»Vƒ¥k@V@kw@wVm„a˜Å„mšaô£ŎƒXI@mln„Kla@mV_UKƒ@kUkw@alW™IU»™mƒ—@WUIl±UUÅU›bkJƒ@a@wUKUaVIÆmXIWaka@m@Ul£XKVw@ƒUIƒJUkmJ™ƒVkU@a„ƒWK—ImVƒ@UxmL@bX`WXU@U`ÇkUak@@°UblXk‚mLUKmL@VULóƒƒVk@@Vlbn@Ub@ċaUJUbƒIUlVLUVVbVKX„VlVXU@mb¯@™VmKUwLWx@šUb@VUb¯KmLUU@aWaUaULkK@Vm@@b¯L¯w@mƒa@ƒm@UUU@U¦lJUXƒVƒmkb@nm„XVWŽkb™IVxUV@VUbWLXVƒLW`Ux@nk@Vn@x@VkJ@œV`mXkŽ@V„xV@lVššI@VULš˜VU„IV`°bVXXx„V@VWVnL@xV„Ub'],
'encodeOffsets': [[
121332,
37840
]]
}
},
{
'type': 'Feature',
'id': '3702',
'properties': {
'name': '青岛市',
'cp': [
120.4651,
36.3373
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„@nU˜JXLƒ„@blVU‚š„nIVl„IVJ@„UxWLk¤@V@nlbXbWJÅnUJVbVL@x@b„ŽlIœaÆVVVk²VJ@X„˜šnV¼šJkX@blxlV„@VLU`@nkbƒLkm@nWJō„ó¤™bƒn—ƃbUn@xlxU@l@„¦@¼UŽl¼ĊUnW„@šnĠmÈxšU„V˜I„VnUVV@LšV@šnVWbXb‚UVbnK@UnKVmVIllœUVLUJVXlJš@nnV@nmVUUm@—˜Vna@ƒK@mUaV_UaV@„aV@@a™anlKUk™KklwlKXwlm„a@UVI@akW@™l@„bnxl@°nJšxl@°£„WŎIUÑn»lašmô¹Ŏ¥VaUUkƒmkġWɱIUUŹ`›@kk@ĉƨřV¥_Ç@™Ĭƒ¤ÝL¯m¯£ƽóķwUW±ī¯kōaĉĕ™kğmó°ƒbW@UKkLUaƒVmz@V@ŽUxVn'],
'encodeOffsets': [[
122389,
36580
]]
}
},
{
'type': 'Feature',
'id': '3717',
'properties': {
'name': '菏泽市',
'cp': [
115.6201,
35.2057
],
'childNum': 9
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@¥šIVUÈmÞ»@UlU@Un@VW@UVmkk@aVUUKVÝ@UVknK@UV@VVnIVƒ@wnƒmwmKXaWaXI@UV@Vy²blkVKkam™U@kb@Um@VmUkmƒKmkXKWwkU@Ulƒ@UnK@UVUUm‚KXwšUVL„w‚K„U„@@Wl@@wUkV¥—@@I@W@_V@VWUw@UUa@aƒaWa—@@_mKUw™l¯amzmV—@WK™nU@kƒWLķaUKbÝVmV@UWÇbÛ@ƒX™°UbW@XŽm„Vlk²UJUbmLÇxÅWUzl‚¯Ll„@VkK™XUbWJ@bU@¯@™ƒkbƒLmKka™„@l™_WšXºVbUz@J‚n²V@¤lX„Ž„nV°šLn`WbXLôVlKVUšxXn˜lXLlU@bVV@„XJWLUVnVV@„„@n‚l„°nn‚V„KÈbVXÆJU°VnXV„kV@@xVL„@šWlb'],
'encodeOffsets': [[
118654,
36726
]]
}
},
{
'type': 'Feature',
'id': '3708',
'properties': {
'name': '济宁市',
'cp': [
116.8286,
35.3375
],
'childNum': 11
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@nam_nKlVLXa„Il`š_@KVVXI@m@w‚ƒ„@@k@Kšnô@n`VbV@@L„L@KVVn@VX@‚VL„Jl„š@VUUƒU@Uam@Uk„wšKWaXamkJmIUVUÈblašUnV@kVKl@@lXL°kVJ@VÈnVJUX@V‚LXl@xVLnU‚@VK„V@a„IUaV@„bĊU„x„K‚kVJXUlV„ƒ„UVašI@WUI@KlUnw„mWk@WXIWƒ™U™L@Wna@Um@@UƒVk™UUlanWW@kkU@y„kWk—aWVUlÝbUU@kƒJUIU@@ƒ™JmaókƒLƒUUkKWLk@WbkUUaƒbmKn¯°¥V@XwV@VanaVaU_@Wlk@WÈ@VUÈVVۂm„aklKȯlLVUX@lK@aX@@kV@VmV@VwnJV_UWUwƒX™am@kW@wVUkKVIUUVmU@UV@IVK@aUL@aƒV@Lm„UKmx@ށômLkUWJ@šnXmlUxUL@Vkn›VUšU„@V™L™`Ub±LkV@kUKÇbÛ@ƒU™Wó_mJƒ@Wk@@Xƒ@ƒVLƒxUK™VWxLVnUV@VmL@Vk„@VlVXxWLnl‚Ln„VlUnn@@VlaV@nšlbULkl±aUzU@@VWJXbWbnLnxm„@xU„mJUUU@@VmLUl@VUÞVLUV@bllUn@VUXm@@VkV@VݼÇnUV™J@¦nnƒlnVlL@„Þb°KVV'],
'encodeOffsets': [[
118834,
36844
]]
}
},
{
'type': 'Feature',
'id': '3714',
'properties': {
'name': '德州市',
'cp': [
116.6858,
37.2107
],
'childNum': 11
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„¤@VmbVXnVVbVJššX@Žll@z„lVInl@„@bVxUbĠ‚l@Èbla„IšxXVWb@L™@n‚ULWVXXšWWLnL@`@LUVVL@lVn„JšU@UUk‚a„™nš‚Vôô„b°¼V‚ސXš˜‚œIÜbČa˜bôW„XÞWÈzÆmnLVJ°ÈnlV²lbnW@™@UƒUV™šmnwmkkKWƒkla@mVIUKUa™aUwmn™JU@@amIk@@bVlkX@mmUklUUƒƒa@_UaUUƒV@wƒw™WkXmW@I@WUaÝU@UXaWUU@UUVW@UUUWUn¥nUVa@m@k@alU@wk™LWa@UUm@@wnmU™wla@anKn_@alK@ݙ_ƒ@@WUUUmlkaƒIƒyU@UwU_Wa¯yU_mWUwkImm@InWWUk@@UVWV—kW¯U@VƒL@b¯b@l±¦@šVV@lUbV„@škxVnUšl¼XV@b@lV@nIWxnbƒ‚™@UU™LƒxÅxm¯ƒaUƒ™wU@mUÅVÝKULm@bmKUXó@'],
'encodeOffsets': [[
118542,
37801
]]
}
},
{
'type': 'Feature',
'id': '3716',
'properties': {
'name': '滨州市',
'cp': [
117.8174,
37.4963
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Vb@`„bV„kVlnV@nlWUk@al@nJ@bV@šInmVxšbVbVLUJ@nkb‚lX„lLnlmx™nUš„V@V@šmXn˜lbĸ@nnVx‚b@lnXV@UJ@nVxšxnxVbÆVn¯ƒĕ‚@@wÈçUÇlķVIœb‚@„Çmk@¥k@UkUK@aWakUóJW_UW@wkkWK@U@Kš@XUƒƒUkmUUalKXala@U@kkWlkÈl@kšV„mVIVmU_‚a„ƒƒwnwVW@wƒwUƒ@wU£ƒwkJWIyUI±bk‚VUJ@nmV™Ukl„Xmx@lnbW„kVƒUkLWŽƒxkKUUmUkb™—LÇxUKmkUmkkW™™a„mUaVkšJÆ_²KĠ@U„W@w„U‚¥nUWwK@aÝUkÅVaVK@akLWƒƒƒ¯I@bnbVx¯JW„ñšWbUL@šƒŽnV@VmbkUUV@IÇak@@bWak@WJUœJWL@bXV@„‚@„V„Jlb@zUlUŽUImšnbV‚mz@°UV@V™bV@@V@L@xLmKUnmJVX„J@VkLW@UVUL@b'],
'encodeOffsets': [[
120083,
38442
]]
}
},
{
'type': 'Feature',
'id': '3715',
'properties': {
'name': '聊城市',
'cp': [
115.9167,
36.4032
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ô@VWnL‚an@VKÞLÆUnVV@šxV„„bn°Æw„wšKVVš@„maXwmJU@@k@aWUk»V™Umlw@™UƒVa@kUU@™²¥@k°a@a„K@U›ƒU@mmm@ów—ѱ¥¯@@w™Kmw—I›¥kU¯UmakJmIUaƒVkKUkm@VUUa™Uƒ@UaƒKUK¯@™w™UVŽUIUKVw™k™¥™wƒbVŽ@xn„@lWnXxlL@`„XlJX¦l°XxW¦@¦Ul™n@Ž™@@Um@@VXVmx@¯bllUnUJ@VULVn@b„xV‚VL@b„„VlnVVblV„ÈnVlIVJœ„lJ@xl²„'],
'encodeOffsets': [[
118542,
37801
]]
}
},
{
'type': 'Feature',
'id': '3705',
'properties': {
'name': '东营市',
'cp': [
118.7073,
37.5513
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ͬUǪlô@°Uœw°ōĠ¯š»Ģ炻XÇ@w™wƑa™ÇƒkwVƑ¯@řķUmm¯w@kƒa@mV@@anIU±m_ÛW@_mWVU„K@IkK@UW@@a@K@™L@Vk@±U@UV@lm@mUU@kLm„„xV¤@xV„„x@xUXmx„xƒ„bV`UnUJƒn™U@lÇkkllX@l@VkbWbkLVbnVVl„„WV™@@L@VXLll@xVXX`ôIlVXb@bVLVll@@¦nlƒÈ@›aUJkĸVÈÇè@x'],
'encodeOffsets': [[
121005,
39066
]]
}
},
{
'type': 'Feature',
'id': '3701',
'properties': {
'name': '济南市',
'cp': [
117.1582,
36.8701
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@²¦˜Òôxn@nn‚@V‚œ„°VlXU˜UX@Vl@XVmX@JnnlJVxnXV`°zXbV`VxV@„z„JlbkŽVnVV@X„@š`@ÞkL@bm`mL@bkbšxnVm@xn@VV‚@XbšKl@xkV@b@l@nUbmVm¦XVVV@VUXVVV@XVWb@VÞVVb@X@JnXlWšX„x@x„UVV@aVKVUX@lK@UƒIUWnIVmnL‚K@w@K@UU@ša@UVU@¯nyUman™VJVVk@ykaƒIƒU@@ƒWU@aXK‚IV›XIl@Xb@al@Èb@JVUlVna@UmU„@™VKXaò™Xƒ°IUwma@aU@UU@wVW@фw@a™I±`kbƒUkw™UmJ@UkmÇUUkmKknUVƒ@mJUkaWkƒa@KmKkUƒLmyXa¯_@WmImmbƒLmUkVUbUVƒJ™bƒUkkWJkUƒl™IUm™k™Lƒ›„lK@knaVmkI@mWaƒLUK™UU@@VmLUVLWK@UUUƒWUkkVmx@„Vl™¦'],
'encodeOffsets': [[
119014,
37041
]]
}
},
{
'type': 'Feature',
'id': '3709',
'properties': {
'name': '泰安市',
'cp': [
117.0264,
36.0516
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@n¼šŽW„nxšL@x°@š¥Uk@ƒnwlUVl„XVV@VXL‚KVUnK@UV@šVVL„KXb@nlJUnmb@lkLƒ‚„œšKšlVnšJ„klVXIll„Vša„IVUValUnV„K‚annnJ@X°`Wbnz„KlVnL‚Ž@L„bXl‚bVlnI„@VUU@UmVƒ@U@Uš¥@VmV@@_Ua@m°@@ƒ„kmUUm@UVmn@nX‚@@a„anJVUVL„mlIVJn@nkVLVa@KVmVLXVVLš@@U°bn@VaV@@K@aVkœbWaXUVymU@aUImWXƒ@™¥UaVwUaVwUUU@WWƒ@k_™VUKÇa@ƒƒnmxkV@LVJ@X™JUbƒVƒ„kUWVUIlƒLƒwĉVƒaU@VbƒJ@bƒUUL@mVUK@wWkK@UVWUIÇm@UUI¯lWK@kk@UL@lmU™VkbÇaUVVnJlIn‚WbXb™LƒxVln@VbV@V„UV™@kƒƒIUK@UWm@UU@LƒK@KU@Uam_ó@™m@L@lƒ@„@x@nWJUU@L™`k_ƒJWbUKkmLn`mb'],
'encodeOffsets': [[
118834,
36844
]]
}
},
{
'type': 'Feature',
'id': '3710',
'properties': {
'name': '威海市',
'cp': [
121.9482,
37.1393
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VbUnVVUxĊ¼š¼ô@Þф¯‚WǬLŎUÆW„¹Uǃō¯ÑƒÝkţ™™ţóġ™óL™ł̥U™wm¥kÝmkkKóbÝ@U¦@‚mb¯LkšmJ@x„Lmn@lk@ƒa@Xƒ@ƒlXbmJUz™V@bVJ@n@x„blJXzšxV@Va„KVUXLlmVV@In@Vx„UlW°@nLVK@zXVVal@@V„w„bVKšL@bnx@„WbUJ@VnXVlVxl@nnnV@„lV@L„‚'],
'encodeOffsets': [[
124842,
38312
]]
}
},
{
'type': 'Feature',
'id': '3711',
'properties': {
'name': '日照市',
'cp': [
119.2786,
35.5023
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@UaVUUKVk„JVaVIČb@Vam@ka@Ul@„„VK@UnKVLnKlkWVa@¯l@VbÈlV_V@XWW_@anKVwUmVw@@Uny„UVblKVLX@„aô¯ó¥mÛĊÿÈ¥š™Þ¹lƒ¯Kĉ¼ʟbÇV™U™ŽUŽ™XmakJUnmV@bUnmJ@XnJVLn¤UzmJUn@`¯ImŽU@™nƒKVkkm™KWb—b@xƒk™@mL@KƒUUVUKkbWaƒXkK@bkJWbnbl@UL@l„Lš@lxx@b‚nUVlV@¦²°@bVx@Jƒ@¯XUJ@bUnlxVŽ„X@‚VV@b„L@nô`@bkbVVÞL˜xnU'],
'encodeOffsets': [[
121883,
36895
]]
}
},
{
'type': 'Feature',
'id': '3703',
'properties': {
'name': '淄博市',
'cp': [
118.0371,
36.6064
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@nƒlKV@nVn@@kVU‚@²VVaUƒ@wmKXU@UƒUWwUW¯aU_ƒJUV™—VK@U™JU™@kUƒw@UlnWU_@›lI@U@wUml@@mVwX_„KWUXKVa@UVUUwšJlaXWUnƒ@mla„n„UVWkIV¥V@VVVI@a@akakLWKna@aVwk@WUƒbUlk@™k@U¯UWWU@mUUVUXkVmVVV@nkVƒLƒVÅwƒ¯k@WVXb›aUl@bV@@b@xkVVXVxkJ@nk@@ŽVLUlVb‚VXUVVUzV‚™LVbUbV„VWVkLmškJ@n±@UxU„VVkV@bƒx@ÒUX@xVVV@°J„„X„lK@bULUblÆÞV@b‚LXxmV¦ƒV@xƒXVŽğ@±LÅ`™IUlVbƒnšbXšllVnnlVLÈw˜ŽšIlanVVVlL„wXlK„VlUXƒma@knwƒWlkšVnU@mVIUl²aVJ‚zXJlI'],
'encodeOffsets': [[
121129,
37891
]]
}
},
{
'type': 'Feature',
'id': '3704',
'properties': {
'name': '枣庄市',
'cp': [
117.323,
34.8926
],
'childNum': 2
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@‚yUU„U„kl@@aVmšLXw°»°w@y„L@UUaWXKƒƒVknwVKlmš_UmmUXK@ašw@k@mUWmUL@ƒ@™@£@KƒbÝV@akw™aULmƒƒbUK™LUU@lm@—°mL@nUJVxVXU`mIUxU@UnU@@lW@@bkLW@UVkKǰkLlŽƒbnUÜÇUUVÇ@@Xkl@XV`UbmbUbU@WxU@¯¦m°nL„aVblVXal@XKlLVVȄ‚L„KôlnbšI@„V@VJ„I@lVVÞaVkXU'],
'encodeOffsets': [[
120241,
36119
]]
}
},
{
'type': 'Feature',
'id': '3712',
'properties': {
'name': '莱芜市',
'cp': [
117.6526,
36.2714
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lmnLVlÈVln@VnIšVlx„Vla²_šJlUUUVƒVw²@@mlIn™lKXU‚UUƒVaUašKUVyUUWVUUaVkUK@l@@mlIUwUWlU@w@aU@@LU@Ubm@¯a@V™@UKWUUKUn@LUbUKmlm@UIkJƒnUKUVmIƒb@b@mWm@Un@VVnnVƒl@„¯@@nVb@`U@Un@Ž™¦@V@VU„VnV@'],
'encodeOffsets': [[
120173,
37334
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/shan_xi_1_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '6108',
'properties': {
'name': '榆林市',
'cp': [
109.8743,
38.205
],
'childNum': 12
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@™ýVƒnIW»ƒW@»kUÇL—݃U¯¥ÇIUWWїUWwX¯mƒ@»n@ÜÈķô™@a±kȱƒw„ÑmwçċmU»ÆkkVyIm™ĉÿ@ƒÝ¹ƒWnwÇVš™Åaƒzmmĉ¦ó™kVmx™xU¼VškVm_UlVlk„°IV‚kmJa›¦k™™LmmV@XmKnšlUô›VXbƒbƒ@UaÇLğܙ™Åwƒ£mKnmċwÅ@UkƒbmaVƒƒƒn@m¯aU™Jm_k˜@kWXyl@@kÅamw™LU™Þ™ƒ™mWÅzUKƒš™Uk±@™b@nnK‚bX¤mzVšŽVxÇn„‚¯„@ÒknWƒƒVUbkķÈÑWkk@Va™™U@„mUkbƒÝÅ@Ý¥ÇbkĬ™XV`kLǍVmalUUa™nV±nwmkƒJ@Inƒ°KVw¯UnÅ@¥™ƒ™U±bUU˜±œmWbÛKWnUm`UƒVK@bmnœm‚Èż@V„L@xƒxmš„Ť°nŽ@VmK™²VlšlKk„ô@„êÜV@VXLlmš¦UššȘ¯²ÿ@¥š@ƁĊ˜²IšmĶnnb°b„KVƒĸLl„Þ@UȮš™Ü°IVƒÞÝސlŽœx@ŽķĀWŽ„Ux„èƐ@š°ŽXnšlĊ˰m„nƒšV„²V°ÒƦ„„„˜@zll@bÞšlš¼nKĊ¼óȂb²±šIǪÒ¯ĖV@„lxnVlk„JlaXwŌĉ„„@VnŽššlÆĕ„UÆLœèŌŤôxȚlUœ@šxlaUċĕXm„IWmnkšVVƒ„VW_@aÈWUUmk@ƒ¯çVm»™±W¯n¥V™mkXw±ÇVwƒ'],
'encodeOffsets': [[
113592,
39645
]]
}
},
{
'type': 'Feature',
'id': '6106',
'properties': {
'name': '延安市',
'cp': [
109.1052,
36.4252
],
'childNum': 13
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@kkÇmIšmUwVkUƒƒU²WmšVkm@m`mIĢĕUƒVa@™mXƒƒÿVVkyUýšĕ@l_UmnƒW„KVkţ™™¥™aƒwğ@™@aôƒ„ƒWa„kUmƒa¯¯™a±£kx™mmxUwÝ@xmU™b¯K™„Ý@kmm¹Ub@lklVbmnnVUV@x›UknƧJUX@ŽƒLÇWkw™ƧÅwWJk„ƒLkþĉxWz™JUnǚkš@Ɛk¼ÜÔÈKšè@°lșÆk¦l„n@l¼@l¯L™°UU™Vǰƒ¹—`m¼mXk‚™bUaƒV@U¯x@¦™Ç™„UUmlmUVm„nnmlkw™@@šƒ¦Å‚ÇLmx¯Iklš„@¦mưVUx¯Lm„@J„InlmxU²šmVbkV‚bUnȎlKU_šWlīÈaÞ¦Æ@„ÞlanV@ƒšVšUbl@XlÇÒĸlŽVa„UX„lm@ѰƒƒÈmUw‚U™nyW£amL@mša²@lšV„™VLÆynX„šÝšVššKnxÆb@lk@WzXŽ@ll—n`šIV‚°b@n„m„„‚Unb„aVlÆ@ČxmnnL„¤ÆxššĠÛÈKVb„@„aWaœU‚ókVm™nL@W‚UnnšKlšœ¥‚bnIlU¯JlƒUkVkn`lUU™šwnwlUôšĊ¥nn„yÆb'],
'encodeOffsets': [[
113074,
37862
]]
}
},
{
'type': 'Feature',
'id': '6107',
'properties': {
'name': '汉中市',
'cp': [
106.886,
33.0139
],
'childNum': 11
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lKnb@n„lWb°bkxĸwVb@ł„nlŽ„ƒĊ¥šL@XŽl™ÈƒVblÈK‚b„akVwôml²`‚nœ@‚nVKœl˜k²xŎƒ°¦VU„JĊw@çnWçރVkUóÛ@¥kwš™šUmƒX¯WšÑkƒ@UymIUwlUn¥‚mUk²a°¯V»@™ÝVș„ÝċÅÅVl»@l@a°±@_kammÅb™a@ƒƒm@ż™KknõĠ—@mšƒ„¯LÅw›‚—LVxmb@¼kV™@mw¯wVakKW»X±¼¯Vkxƒb„¼WŽ@nx@x±bóakbƒ@ÝmU™@ķÓÛL™kƒVUm™k¯¤ÝLUlÝ@Ýz™š„x@x™°™™™bƒmƒX¯aUJW¯—k@bÇWƒwÛwWxƒ@XWlb@Žƒ„VŽÈUlwšLnl°VlUô¦œU°¤VšUxVXUxlbkVVlƒI„°„ÅVlU°m@k„ÇU¯xUlƒLUlVL@b™°ĠInĠ°ÈnK‚„@xÞa²n‚aUyšXUKVkšWô¼Èa‚z°JXUVÇV_„JVƒšz@Žnb'],
'encodeOffsets': [[
109137,
34392
]]
}
},
{
'type': 'Feature',
'id': '6109',
'properties': {
'name': '安康市',
'cp': [
109.1162,
32.7722
],
'childNum': 10
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„bĊaƨ蚐ô„¼šb°ašXVƒÞVUÞ@‚aXƒm¥kImx¯¯ƒV@anU@UÇéğL@ƒ¯¥V£mƒ@ÝÈb„K‚™„X°wČÿ˜ƒ„b@xÈblxȯĊ„„mÆUVƒ„nÈ@ƨÜLĢ¥ƒŹnƒ°Vnn˜K„aô_ȃšwU‚aXmnW‚¯kl›LXƒÇ™ō¦ÝaÅVmbğUn¥±wÅéVƒan¥ƒ„U„»°am¥„£ƒÝ@ƒ„wVw™¥nU„уUmmVwmķIÅaóVWxkblb@ból@œğÒĉ¤ċXƒ˜¯X™xk„Ç@óÆÅx@š™xķ_kmݎǣkblb@`¯²@bk‚‚@k¼ÆUČÆƒÞǚÞU@šU¼¯°±bVlnm¦kVVxnJVz@‚l„™ÒXW°n„™V™šlx@¦ôÜVUl݄Xèm@è'],
'encodeOffsets': [[
110644,
34521
]]
}
},
{
'type': 'Feature',
'id': '6110',
'properties': {
'name': '商洛市',
'cp': [
109.8083,
33.761
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@²nl‚ôbš„°aVwnKÞIš`°wšXôw°VĊ°@ŽÅš„ÞÆV„zÞK@xšŽ@a‚š@b@ŽnLlƒ@šln„mnLVw„a„bVƒ‚VnbU¼„Vƒ°„bl„šbÈ@ĶŦb˜@nÇ@amIyUI@ĠVmôƒU™ƒVwkwlanJ„¯lwó¥@an°Jš_„‚@š™nóƒó@£l¥UwmašÑ@ƒUm±V_ƒJ—£›J—UW¥¯@ƒ_k¯¼mUƒVUè¯b@wmL™»ğVmağI¯¤ċIUW™XƒKĵ¦ķaƒJUb™IƒlUóVmk@WÅÅÇ@ƒmU„ÅVƒƒÇ°kwÇa@wƒa—„ċxƒWšƒLÇa@Þn„U¤°¦@„ĠKÈê@VmV@b„U°°nwlJn¦W„bÝ@VŽ'],
'encodeOffsets': [[
111454,
34628
]]
}
},
{
'type': 'Feature',
'id': '6103',
'properties': {
'name': '宝鸡市',
'cp': [
107.1826,
34.3433
],
'childNum': 10
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@ƒ„£@›°Išb@¯°ynʃaUƒlƒ„Umšĵĉ@@ylUÞ@@£kWU¯WaU£¯ÇV¥ƒ@kb¯wƒn™¥ÇkUÇnUƒ@¯±›kULm›@m±_kŽónUxlŽƒbaÇLkŽUaDŽkšW@™Kĉ¦ƒ„kƒm@ŁUaķxlw¯aXaƒk@mmakL@šmšÛŽ@¼m„@l„XV`ƒn™KUš°°@²š¤UÈ@VxmôƒxKl„VV²aVw„Xla„Vlx@UVnŽÇnk°ƒVVL™lkI™šƒJÇk¯V@šknƘn@lznmlVkzVŽ„VVxš@Ux„z@x±¼VxxU„l‚kb˜@„¼Čk˜VXlĠkôV²w‚LUKlwœJ@a‚IV¥Þƒn¯Ün„‚„@nk˜l²kÆ@š°„aVbnI@™š‚Ťn'],
'encodeOffsets': [[
110408,
35815
]]
}
},
{
'type': 'Feature',
'id': '6105',
'properties': {
'name': '渭南市',
'cp': [
109.7864,
35.0299
],
'childNum': 11
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@ÈôL„xUް„Þ@mŽÈnl¤nUôL‚wX`@ÞÝL™ŽUšmLô„„ŽôbVbnºlnÞ@ôƒšx°LšanV‚wÞ@Vxnwšnlw²¤šb°°„bVnƒlXbƒ„ó„@bš‚Ġ@„xšbš¦ŤšV™„£W¥ƽɽƒó@ýóƝÝ»„£X™šĊkUƒ„@™™šó„kťaĵŽÇ@™akƒƒa„¯ƒUV»maUU„ƒaƒbUxmKƒnkm@™k„mK@ƒxó@¯n¯KǦ@ôÅèlxkx°nƒƾ¯KU¯WķL@VÝIUb™yWbX¼Ç°'],
'encodeOffsets': [[
111589,
35657
]]
}
},
{
'type': 'Feature',
'id': '6104',
'properties': {
'name': '咸阳市',
'cp': [
108.4131,
34.8706
],
'childNum': 14
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@šIXyĊwlý„KlƒXIVaķƒ™»a›£„¯aVU@a™‚wÈō‚ašL²»‚VœUln°WȯW»XašzVaÞJ@Uƒ»@¯Ýbğwly@£kÑţ±Wу@ka™IUƒƒnƒƒómţU™b™U¯lÇIÝb@¤Ý@kV@zĊ@™ĶnƒVV¤k„V„„bmź¯z@°™a¯J@œƒ¤@„„bUx™bƒ„@`™xUÔ±ºVXœW‚„UnUJ‚L̝ÈKlblmÈXŎ°šU„°LšŽlkÞKš@Èxl_°ĶUÒkblš'],
'encodeOffsets': [[
111229,
36394
]]
}
},
{
'type': 'Feature',
'id': '6101',
'properties': {
'name': '西安市',
'cp': [
109.1162,
34.2004
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@°²@‚„mVVÈÈlš¦„m°xla„@U¦°ÈV¤XbV°lXÞaÈJ°kšVšaŤVôn°„„@„mV„šJlb„@XÒŤ²lÒ@¤kzĠxÞa@°„¼ĸK°XV‚°L„ƽ¯mlwkwÆç@óÈ¥°L°mô@„w@aƙK@b™@wÝLƒyÅUƒÝƙ@ĉ¯¯Uóx™W¯x™_ÝJmLUx¯b™ƒóak±mÝUU„™W¯b™aƒ»óó™xƧçĉbƒaĉxƒIUV¯¥ō„±w—l'],
'encodeOffsets': [[
110206,
34532
]]
}
},
{
'type': 'Feature',
'id': '6102',
'properties': {
'name': '铜川市',
'cp': [
109.0393,
35.1947
],
'childNum': 2
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ÆxĸƨšKlxÈX„K@VWƨIlmœV@wVUmUnmUalk@kVaUaóaƒóƒnKV™šÞK@ÝW_xóKmVk£ÇmnÝ@¯ƒVƒwóK@ǯXkm›VU±¼™KbÇŎx‚š@bUV°bƒœ¤‚bš¼ĸ„Ub'],
'encodeOffsets': [[
111477,
36192
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/shan_xi_2_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '1409',
'properties': {
'name': '忻州市',
'cp': [
112.4561,
38.8971
],
'childNum': 14
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Vx@lnbn¦WlnnUšmš°š²VšV‚VVVnUn„ºlz@l„„@Jƒ@kXWVXl@Lƒa@„ƒKUL„ŽlbnKlLnK‚LnKÆXn°šbVV@bUVl°Un@LnaVJUbW@UX²l‚@ČwlVVIšWnkÆa°„„anV‚Kn°™UW¯@™aVUVk@Un@„aV@ValwUanmWU„k@WVUUanaVwnLVl°@nk@mVU@UVK@w„LVKVU@ƒ„K@UUKVUV@@bnL„a‚V„šlIXmlKX_°KVV@bVV„@šzV`kblI„V„Ul‚šL@bnV@V„Ċll„„VlIXW@k„a‚U²blKšVnIlJ„albXXlWVn°JnšnL@l@XlJlaX@„X˜W²@l_VmnKšU„blU@mnkVK„¯@U@ƒma@kX¥VƒmakkƒLƒa@aƒ@WIUUVXWWnk@a°a@kkm@kUUmJm@WUUUIk`m@V—kaWWkX™KmƒXk¯ƒ@WKƒLkak@±bƒw@ƒaƒa@akaƒ@ma¯@ƒL—KÇÅkKWbkmġ™±ÅUƒLUK™VVkƒm¯LUVVbƒ„UwUW¯bm„ƒULƒxWJ—@ƒklmkUm@@KnwVkVK@akwƒ@@a¯bƒKkn›VUI™b¯mmbk@UbmKUL@xUUƒ@klmLUŽlVXI‚VVVUVUœU`mLXVWbXnW`Ų°xmށxU@mĉƒƒwU@mbU@UƒmbkVW¦kJ™@ƒX@`¯Im@UlUVVnb@bWJXnmbƒJUU™UUaƒ@UamIkaƒxƒ@@x@b'],
'encodeOffsets': [[
113614,
39657
]]
}
},
{
'type': 'Feature',
'id': '1411',
'properties': {
'name': '吕梁市',
'cp': [
111.3574,
37.7325
],
'childNum': 13
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@a@w„@„wlbnJVb„@VbšVVV„InaWmXI@a‚aUmVUVkn@°J@_„Wš@lIX¥lUnaV„V@naV@„„n‚V@‚wn¯wƱX_WmXaWUnKV_V›VUUUUWJkUVnKlk¯™@@kmKUaٱKkU@WmI@WUIlUUmVwXƒ‚w@ƒUlUVwœV‚@„Lnb‚W@anU@UšaVkô@l»n@na˜JnUÈLVaƃUUVm„VKVƒ²L@mU_lK@UVWkU‚a@a@U¯aUaƒÑóÑUb™„ƒKk@@aƒk¯mVaUwVƒÑkWUmK@UUKmXUWÝwUa™LUU@aWJUUU@Ua݄U@WL@VKVaVI@WnU@alIVKƒƒ@kIƒmIkJ@™m@ƒ™@@_™K@xƒ@kaW@U„@Vmn@ŽUK@mIƒJUXV¤XXWlkKƒkkK@XmJVakImJU@ó™¯LWKUV@nUVƒLkxmKkLma@kXKmmƒLƒab™LmK@V@mXVÆUxƒX@`nL„aV@@VmLUVnLlLš˜„b@„šŽ°²nx@b‚VUxlb@V¯bUV@zV‚XVĊXVx@lVn@VnnmŽUš@LlJXVƒz¯VWVXbšV@bmn™VUVk„Çþń@XVxmbUlV„Uln„W„@„Xl‚@VLXÒ@bÞJ°¦„L˜ò„@nU‚b@°„X@ŽXbmVU„V„nb@x‚x'],
'encodeOffsets': [[
113614,
39657
]]
}
},
{
'type': 'Feature',
'id': '1410',
'properties': {
'name': '临汾市',
'cp': [
111.4783,
36.1615
],
'childNum': 17
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@nW‚@@UnLšK‚a„b„KnnWL@lnblKnLlw„KVU@mVUXL°KôšV@nIlJUbnI@WlL„llLXkWWU£VW„InJ‚@VL@nm@UVƒX@lb„@@wšL@`‚@„šn@V@lw„@n„VmVX„WmwnUlƒœa@_lK„wVlUn°xVKVXXWlUšVVI@K@K„n°KœwlVlU@kna@V_„Wn‚m„UVm@kXml_@m„LlKXw°m@_ôJVUV@X™l@UaV@Va°I„lk»VwUkVmwUmmVn@V¯@KƒU—wmK@U¯wUVÝ@mJƒU—nWK™@@UnKVa„_lykUmKÛnm@™x@ƒUUlwVk™ƒXW@ƒa@Uƒ@@K@ƒkIV™nammVakUlƒ@wX@@kƒ™¯@ƒVVbml@„„°UbULmlVbnbÅK±VƒKVXUJWa@ULWaUU@@U@aWK@UkxUKƒLUUUJ±UkL@V±kk@kam@UV@l@LWl@n@VVUx„LlUUx@VUV™U@aƒIUl™L@°mLU‚ƒbkUUaWUUaUU@aWK—LWJ@bUL@VUVVbU@m@a@kmKmnĉlUK™XƒWUblb—xmIkƒƒU@xWb@lkšVx™LXŽmzVV@bklVVUzm˜@bk„@Vx@xlŽU„@lUbVnl@„Wxnl@n@ŽUbV„mL‚mƒb@`X@lUX@@xlnkLWaUJnnWV™Vn@l„@bULVV@l™V@XnJVX'],
'encodeOffsets': [[
113063,
37784
]]
}
},
{
'type': 'Feature',
'id': '1407',
'properties': {
'name': '晋中市',
'cp': [
112.7747,
37.37
],
'childNum': 11
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@šlInJ„lJ„@‚„ULkJ@bmV@XUJUb‚L@UXKV@ރVbV@VVXI@bVVšKVbÞxVXnWVL@VnLV‚lX„ÒUŽVxUb°n„l@bl@„LšƒVaô҄ÒVb°b@VnLnnV@lmn@lb„U„V@„‚JœUVV‚Xkl@lUzmJ@xšXkl‚bUn„JVšUb„nU‚lb„V@nlLX@lakšV`Ub°š@XVJnU‚L²KlxnI@KV@lbUbVV„KnVl@„zlm@Uš@nŽšI@WUaVl@@mVU„@XkW@ƒnkVKVƒ„_Vw„y@knwVa‚@XalU„@šVnml@„X@V„L‚KVaÞbnnlJšI„mVKn„VVVInVlU„@„m@™mXK@UmyUI@mWUUakamw@wUwmLkakwVƒmK™w@wUam£y@am_ƒW@™UU@knmm„amU@WUa@knw@ƒUUUUV@nƒJm@mVUkKVUUUkKmwƒKULƒKUImV@lUn™nŽm@mbUK@°™bUnmbUmkkƒWUb@am@UXkK@a±@™V™@ĉř„V‚UXVxUVkLWl¯@@bULUlm@@nm`—XƒlWakIkm›VUbUL@Vm@kIƒ@@Kšm@—VaX‚I@W@aU@kUƒVU_™KƒbƒJkkǎ™b@nkKmL™wÅW@kVUUƒVU@WUIƒJmIXmma@_kyVaUUlkUm@ƒkU›x¯Lƒm@L@LUJ™UkVWXUWUL¯wVmUkƒxkL@`›bk„mVnxƒXUWUnmƒƒ@kxU@'],
'encodeOffsets': [[
114087,
37682
]]
}
},
{
'type': 'Feature',
'id': '1408',
'properties': {
'name': '运城市',
'cp': [
111.1487,
35.2002
],
'childNum': 13
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„Vl„nJ˜wkaVa„XšWVLĊknmnL‚l@@bn‚V@UaVU@UVK@aXI˜KXL@bVVVbXVVblV„aVnK@¯šKVk„J@bšVVU@UVwkVƒKVwUUm@@Xk@K@kVUn@lbl@²l@UlK²VVIVV„KVLlw@VXL@b@VV@VŽXbVK‚@XbVIUW„L‚ÆLmaUankVKVaƒ¯@ƒnkUa„U°@„š‚n@@kWa„UVaXUW@IXKVw@U™ƒ„™WU@W@@UUƒU@mn@ƒ`m@UUULkUmJ™IUƒ@@UƒK@U@›anƒ™ak_@wmKUwmakV™kmK™V™k¯b™wƒ`kwUIÇx¯»ÇaŃmn@@™mƒmUkV@wkKW@kxmL™UkĉLÝk™xÝw¯lóVU„mV@ĀVVX¦W¤kz@`Vx°„²ĸ‚š@„Ul@x„êĸNJ°¤V„VlXLWnXxmV@nUl@„'],
'encodeOffsets': [[
113232,
36597
]]
}
},
{
'type': 'Feature',
'id': '1402',
'properties': {
'name': '大同市',
'cp': [
113.7854,
39.8035
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@²£šyl@Ȑ˜Ė@bĸŽĢbĸ„˜X„a‚KŤnn@ŎôllÈx„nVnÞDŽV@b‚nXllL°KšbVb@J@b—„‚„@ŽU„„xlKXLlKlXk„@Ulk„JlkUƒVKXUƒÇVIVm@_nǚLšašl‚w„VnU@UUwma@aƒaÝaLmUk@@Wƒ@U@@X™wVWÝUUUk@@VmLƒKV»nwUw™aUL@`mzƒJUIVƒUaUw™KUaVIlJôanÑlLVUn@ša„@VV„@@UUwVK°Vn_lJÆLœéW@UUUÅ@»lm@aÞIVwXW˜UUkkm@U@aƒU@mwU£VWU_kWmƒXwW_°yUkkK@UÇK@kkUVymóK—U@KWIƒbUak@mJ@bkbmLkŽ™UmƒkVU„W¦@lnb@„@Vƒ°ULml@nkVƒa™VmLUnk`±@—XƒWW@kbǦXޝ„WxI@xmbmxXlWV„„@bŎUz@J‚b@bÞb™ŽU@Wbk@ƒxk@WX¯VۙƒWÝbÝUkVUU@alI@a@akLWa™m@U¯UUmÇL@K@aU@¯VUkƒKmX@`@œkJ@nV‚Ub@lbVÆXVW„ULU`VbkLUV@XWl@bXJ˜@VbV@Vl'],
'encodeOffsets': [[
115335,
41209
]]
}
},
{
'type': 'Feature',
'id': '1404',
'properties': {
'name': '长治市',
'cp': [
112.8625,
36.4746
],
'childNum': 12
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Uk™Lky@I‚JVa@mÞaWšy@_W@_WƒXVlUVwš@nw°K@m„UƒVaƒmVkU@mmmnLVUmKXa™U@IlKVUnK@UmWkX@WV_Vƒ@akU@a„KWIXyƒIUVmUn™Ua@WaXUVKVmkUWVkUƒLU@@VƒbƒKbƒIUmƒ@mbVL—x›WUUkn±V¯wƒbÅJUbmLkbmKÅKƒbVnUbƒV™KUb™KUbmLKmƒb™aƒKkUm@UŽnn‚VnxUVlUxl¼ƒk¯JUbU@Vbk@WšU@UVóI@`¯nWxkLƒK@nk`Wn@lUnƒVnm‚ƒXU`@mb@lkV@„VnklVVUblz@`nbWnnJ„IVJ@XUVV„UV@lÆXšxnKlL@mšll„I„ašLV`„UlVV@@b@XJWUb@˜™n@L„@lJn@@UVKVaœUlnlJXb„k˜Wn_@mn@VkVK@a°@XklKVUUwVWUšƒĊƚ@šU²@@blLVWn@@bVa„XllVnnaVmša@¯VLnan@‚šmVm@knUVJ'],
'encodeOffsets': [[
116269,
37637
]]
}
},
{
'type': 'Feature',
'id': '1406',
'properties': {
'name': '朔州市',
'cp': [
113.0713,
39.6991
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@XXWVXVWnnlnn@èÆ¼@„„xlš„ŽV„nblšššVŽÈUVl‚š@„blnœƒĊmUkU@Ua‚—@WI@aXk@WVUlKUaV_VKXƒWUUÅka@VaU@mlI@›@_nW„LVl°UV@@b@LÈKVn°V@VšnXblK@b@bkJ@bVVlUÞVÞa„š°UXWl@„wl@XaV@šÝa@aa@IVyƍ@aƒƒXUWknwna@w‚JXw°ƒWÈ¥kI@W@kmKm™¯IUmkXWWkaƒbkImJ™UkL±aVƒb@lWXkJƒUkƒĉkƒ@UmU@a™KkƒVƒUkJlaU_™yƒ@UU@aUU¯LW`kLWnkJó™ƒbUƒbmK@aU@UVVL@VƒL@„UVULƒK@xUL@VUV@nml¯@UkmKUxmbVbUV@XƒlXVmnVbkxUbU@ƒbm@@VUlUVšb°@VX¯šm‚'],
'encodeOffsets': [[
114615,
40562
]]
}
},
{
'type': 'Feature',
'id': '1405',
'properties': {
'name': '晋城市',
'cp': [
112.7856,
35.6342
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lV„Lšb„an‚LnKVašLVašL„UVaUm„aÆLnLlanKVaÆI„a°x²UlmVVœX˜wUKna„@Vn„J‚a„L„a@UV@@alUkKVKnkmmVwUk„w@ƒ™@kxWUXƒW@@mƒk@aUa@a¯aƒLkKmwkUm@kL@K@aWIXmƒVƒXƒWkUVakL@UVKƒw@aUK@UUKmLU@¯n™KUwVƒUIWJUWmka™@UXƒJƒk@UkmW@kLWKVƒx@bmI@VUaVU@a¯@UUmVKmX@±`kÝKVxUL±akL@V™bƒLkKmVƒ@XWVUbƒVXb@lm@@lW@@xk„lVUbnnmbUšlJ@„@L„@@V„b@‚WXš„UlkxVV@„šwn@ÜmnLlVkzƒ`UbmL@Vš@XL˜m„VnIÞ@VU°x@VnL˜x„V@LU°'],
'encodeOffsets': [[
115223,
36895
]]
}
},
{
'type': 'Feature',
'id': '1401',
'properties': {
'name': '太原市',
'cp': [
112.3352,
37.9413
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„@VV@wVKnLVal@na°nšaVJœUlm„L°a@b„@lx@bULUlmx@Ln@lVkn„l˜@XI„w‚K„Vnƒ°aVXVx„ƒUaVU°K„nUlšUVL„KÆVš²Ģ‚lnXalLÈÆ˜L„KUaVkUanmWU™a@WwkUWU¯y¯Ñ@anIl@@aVU„m„I„ymUƒLUUVakaU@@LmJkw±LKmVUI@W¯™VaU_l™kbW@kK@mƒUkaVƒmVaU™ƒIVmalk™W@wnIVy@klkWUU›VI@ƒƒUƒVkam@knU@mmmK@bblVUX@VkLV`@n±KU„ULƒ‚UnVVńUbÇKmV—Imbm@k¼ó@Ul™b@VmV@bXmaƒK@›UUxkV‚V@„xW„UxVnkVVJ@XnJ@XlV²LƂVbnL@lš@°'],
'encodeOffsets': [[
114503,
39134
]]
}
},
{
'type': 'Feature',
'id': '1403',
'properties': {
'name': '阳泉市',
'cp': [
113.4778,
38.0951
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@°@nb„@lb@b„b„b‚@„x²al@lb„KXU@m‚kUWkkmUUƒVwV@XUW@™naVklKXblKnL‚ƒnLVanImaXKlL„ašV@U@KUKW„alƒXK@£WKXUV@VU„ƒUUVW„_V™@W@@K„@šƒUƒƒIWmXUmƒULƒn™JkImmÝaUbLƒK@UƒWk@mn™Uƒ@kVWb@Ubmx@lƒzUxƒ`U„ULml@„XWlƒ@UV@nk@U‚Vb@X™Jm™@@Vknƒyk@ƒzƒJƒnUV@bk@mJ@b°Ò°zXVlVXx‚@šbXVmnVbUlVb'],
'encodeOffsets': [[
115864,
39336
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/si_chuan_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '5133',
'properties': {
'name': '甘孜藏族自治州',
'cp': [
99.9207,
31.0803
],
'childNum': 18
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ƒaXamƒ¯wm@±°wUwV@UaVw²Kš™„U@UƒU„¥‚a„ƒ@£Þ™ôx‚Knkm™™IUƒÝUwlk°V„@ƒÈ™‚KUwlkUyV¹„mšx²Xll„ÑW»š„l„w°UŎ„nƒ„„˜Jœƒl¯°V@wôIVÇn™nUllšLššLô¼XW£@±„@¥k_ÇJƒkUéƒkšƒƒwXa@ƒšLlw²™Vx„b‚mš¼ÈxlLȃ„VWÞn¯mǙÑUÝlÛkwlĉmƒULmwUJ™ç@wkm@ÑlUX™ƒÑôġƒVa™ƒ„¯@wķÓkbV„mnU@@y¯IķKƒV@¹šaƒé@k„mÞU°¥@a¯@anKlblU„¥@óğç@Çw@wkla„çݱk¯±@ğÝUÛmݯwƒ@kb±¯akXWÜkXUÆÇUš¤X_Ɛw„V@¤ƒXU‚ƒbUƒŽƒIUlÇUkŽġ@™aXČmlUlèUV@„mVk¦Vxš@¦±š¯ƒƒ¯¯anlWš¯nƒƒÅw@w°KVak£m@klƒKknÇU™»óKšīlaUaV£@™™¯@ƙU™VƒÛÝÇXƒÇl—ÓlŹ„»WUğJ¯£mx™Lĵô›ºX„VlUll²bl„„lŽƒxónn°ÝšU¼mJUš¯nƒƒƒV@êĉ°Uĸ™w™@mƒ@¯kmXamѯaUwÝKU¥„mÅn¥Wmn™ƒ¹n±ƑƆÇôXê±NJnšƒ‚UôlĖkȂVÒ¯¼VnƒȮ¯ĀnƆ˜Ģ@Žk°V°¯ĢVlkšVxm¼X²™Ŏ@ŽVxknWܰU‚¯n™ÆÝœ@`„ôݲÒƒ‚Çzn‚mX@x„è°K°Å„UČĬóĖ݄ƒ˜ó¼ÅêƒÒƒbmšk@V„Ž˜„l@nĉܛê—x@Ėml՛J¯¦óxȭ°ÝmޝLĵè›Ā@Ɓ„l°żƒ‚šX@xmŽkV@z@‚„°blŽnÞ°J@bn@ƼUVƒŽóLƒ°X°ÝLƒxUn„°ƒĬƒn@lnL@ŽÆ@šn„KÆxnUnV˜InĬmÆnxŎ¼ĊIĢóÞ@ĊƒƨbUƒ‚mV¥lkƒ‚wnL„mšÅÆ¥Xƒ˜wU@w‚wUÞ™@alUUŚU™Vkkm°aU—°Ó°w°U„ƒ„b°aš²K˜¯œĕ˜@ÈbޏĊaš»„XVm°In„‚Ĭk¼Vb„ašJšôš£VĊan™‚k„ů™™nƒÜU@anKnĮ‚bÈmƎš»nI‚霣Ġ™'],
'encodeOffsets': [[
103073,
33295
]]
}
},
{
'type': 'Feature',
'id': '5132',
'properties': {
'name': '阿坝藏族羌族自治州',
'cp': [
102.4805,
32.4536
],
'childNum': 13
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@l@@þ²I@lƒ„VL°wnJ°Uĸ™Ŏè„Ilw„V°¤nĮ™¤Ý„„L@„ƒ„@x„l™è²ôĊ_ĊġVÈôJżīlbXšÆÈVŽkxÇVƒ„„¦Üb@è@nn@@°šUÈ¥WDŽ_Uala¯¯UǙkƒ»„mVwk»˜k²°VxlL@¤œ_@x‚‚Ėöb˜š@l²alX„a@bnK°¦VK@nnWmx@nUnl@@lƒk°l°UXkmW@Unš`k„ÇL„ŽW„ÛÈVxšVVlVk@l„IXb@ylXÈW˜Į„WŤzœy@šmIƒŽ²šJ‚š@nް@V„„J°a„Å@ƒŎkVǚk™aUw„KVw™™Vƒ„@nkm™@±ôkô™ĊJš¼šInÑm±nIššÞ‚ƒĊxĊUÈbÜyÈ£Vkw@kVUV™„m@ša„»ÜbÈmƒUXwÝxƒUn¥@°ġ™Å‚aœJVk™aW¯Û@W¥—UŏĶ™kUƒŃ@ašI@mmanwސ‚W@œ™mw°»Uřk¹±W„xVx¯¦U°ƒzţW™w@°ÇVÑk¯@„y°aš£š@šmšnl¼„ašÝÝakwUƒ±aĉImlĵn@ƒm@kkVƒ¯Ñm™ĸ™°x„l™œ@˜ƒXVÞmlÛݙĉUÅ¥mwÅ¥VaUw›™XġċaVůÛŹlwU¯U™ó±™xÛV±¯¯n¯mċƒLmnĊm‚™@™_kJWaXmwUƒĉK™»™@mwX݃„kKÇw™»nƒaUw±škx™K@„Wb„x™„„lVê„lÈIl`@¦ƒŽ@²X¤Wó»™KUșŽ™KkkmVmšUÈóJ@x¯Uk°›„—Iƒƒm„ōƒ¯Vƒxƒk™ŽƒÒkk±W™wƒnUºVzklVxš@„ƒŽ¯UklVxސV„šJW¦nšmlLówݚƒ„bƒ¦„V@VƒV™š±LUxVbU@Vx¯x@²n‚°xn„Wb„b'],
'encodeOffsets': [[
103073,
33295
]]
}
},
{
'type': 'Feature',
'id': '5134',
'properties': {
'name': '凉山彝族自治州',
'cp': [
101.9641,
27.6746
],
'childNum': 17
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ĶóšKnw°¤ĠIXVƒ¼kź˜Ôk‚„ÈWŽÞȄÜUVšÅš°@šš‚@U¤Vbkb™ĬôLš¼ÈVlm„Llkn@l¤Ub¯L@xÆx„„°mX™mk°b„°°„²™‚™Uwl¥nU@ƒVUkçVnkWċšbĢ@lÈVVk„J„‚V„aV„W@£ƒUƏxW`™£ÈVVÅlWXÛlW°b²la„@°xnÞVÜĠÞ²@l°Þ²ƒèkblŽ@xÈx@Ġènal£nU‚Dz@‚ÞK„nn¤@¼˜°U¼„nV‚šXU‚šbn™ĠUVbUlVš°LX„@lV„èÜUnK@_ƒyXVyUwmIU»Vƒ„kÇ¥šÿkkV¯m±n@ƒn¯ÜanVVƄz@Ž‚bœwÜb„m@wša@kƒmk»@™a@VUUó„w˜@nb°mš„XŽmnVbގVôanwšJ‚ak£lw„˜šLšÅnÝ@wl¥IÇӃ@U™™Lƒ¼kVǃÅó¯kVmmw@ƒn_‚Vn»°LÅ»@éÇçŹīVÇÝ@ÝğU™ƒa™™š¯ķlŭġlƒ@óÞۂċ@¯nkUӄ—™IVġUwóKUn±¯—K›w»ƒV„nl@„óxUwţ›£ĉƒUmŗÇ݃K™„ÝUlmKƒ£UVŽ@ÞȎ„Ò@Ĭšnny‚@nÒmœVŽ—¼@°Vbl@VlnUUwl™°a@„œ„@llnk°lbnKWĀnŽU„VxUŽ‚²Å‚m¦Û›ÇڃaU„Vbš@¦m`móX™Umm™xÅ@±Þn虲™U¯»m™ƒV—m@wƒU@wݚÝmLƒa@„™VÇUk„l°¯„VlkVƒ¦UšmxƒaULUèVx@„kIUxmWV¼¯VmȯšU„nl›È—@m»Å™ƒVWxÅbÅğW@kƒm@kVV¦mlnn@‚ō„l¦Åƙxkœ'],
'encodeOffsets': [[
102466,
28756
]]
}
},
{
'type': 'Feature',
'id': '5107',
'properties': {
'name': '绵阳市',
'cp': [
104.7327,
31.8713
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„ńlV°š@Őĵ˜VX»ÆUĊќJ‚w„@È»m»š£°Kšk@ÇnÑÆš@„w°JUwnw@wšbVbš@VlźLUw„aƒ»„aUklyUUVakwWXwWƒUxkLƒmn¥mšwk™˜UX™lJ„w@aƒIk°X„¥Wƒ²šaU™„IlmkklƒÈL@m°nlWU™aW—š@Vƒ„@UaV¥@ašk@Çk¹ƒK@a™K@kƒKkšÇX@VU@kx±V™èkIWwUVUkkKÇ@ƒa@wkml¯@kUWn£Wa„aVwnaV݃w¯@UaWx—n›„UxUšma@L@„mbUށU±VVnkxUƙ„VŽm@kkKW°„X@¤ÇUkÆÇnU¦¯ŽkƒmLVwÅK@UóbÇÆVƒ¦™L@‚±êX¦mVޚkÜÝnWU—„›@kšƒŽ¯wķšnš°ÒU„lln@@„ĶmnkĊJ²bV„lxÞb™Þƒbk»™m™n™@™¤¯bƒz@Žl°UÒ¯È@ŽšxŤX„yV¯°¥Uwƒw²XlºVڝ¼nx›š@ށmxnb@n™J@b'],
'encodeOffsets': [[
106448,
33694
]]
}
},
{
'type': 'Feature',
'id': '5117',
'properties': {
'name': '达州市',
'cp': [
107.6111,
31.333
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Uxn°‚bnŽlUnÒÆƒnn@n‚¤„LnxlU„ššV@„Æl„x°XXxl`XœƒVW‚œL˜è—„±nÈbƒŽ°b@š²x°Kܼ°ĉ„V¦lJnU@¦šÞ‚JÞğ„mšLÞ»šxU„lb„VÆann„alŽ„X@lnŎV„mU™maÅXƒa@aWmœ@‚£@wĉJVƒkk‚kkmƒnk@ƒmna@šal„Kš™‚J@Þwm‚ÅŃ@ambkUƒƒ@™™KUġKU@m‚ak¯±ƒ„a@aĉÑÅaVwšXlwƒ±—V¥l@@a™kƒ›@@£šmƒĉÝónWV@ށnÝÇÇx—UmbƒaVkkk@m„@m°ƒÝýXm›akÅīƒ@@ƒmb@@xmšnbƒ@mxšŽkWL@ƒ¯b@WUXmWœWKkbm@kx™Xmm@LUl„xlêóK™nUš„all™LƒlLó°m¯JVšU„K„„@x˜K²Āô¦l°'],
'encodeOffsets': [[
109519,
31917
]]
}
},
{
'type': 'Feature',
'id': '5108',
'properties': {
'name': '广元市',
'cp': [
105.6885,
32.2284
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ÆL„Ċx°»Ŧ¦˜W„™š„@xÞKܰÞnVxÅĀlÒnJ°a@w„V¯l@XWknKnw˜š°XXa˜lX°VI°b„W„nšaššš¥@ƒ™n@šyÆ@nkÞ@°¯lJn„°IÈl‚UšlXÅ@ķlUV¥VUUÝޙUUƒ@UwƒJUkĉm@ýƒƒlk™WUwVwWJk@VUK™lUkaVƒUƒmLk„m@ƒƒ@Uƒ›Ik`@„™UmlUkV¯ÇXKÝ_mm¯@Uƒ`kwmƒl¼±KV¯—¯Vk±Vk±kzma™KUnDZ™bk¦±ŽX„ƒ¦¯Wl„J@bƒxkIWš—Vlš™xnŽ„nlKVwX„WxXŽlxUbVVkzVlƒb„¼ƒbVxŹKUk™@Ua™a@xmxVx¯Iƒx™ŽmÒ@șl¯L™¤n¼'],
'encodeOffsets': [[
107146,
33452
]]
}
},
{
'type': 'Feature',
'id': '5118',
'properties': {
'name': '雅安市',
'cp': [
102.6672,
29.8938
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ln@xšèVInxVKn„‚ĊklxkÜVޚÒnÈm°nxš@š¼ĊLV„nx‚WXblIš`š@nmĉn‚„ôÅlUÑmU„K²¹@ÇÅVÓůVýÞW„‚UVmX„ÆbnwšKUÿ‚™@UmmIUb¯¥Uwƒ™¯™Çmš™„çmanUm»UUƒl—kƒ¤ƒa¯bV™U_WĕmÇŚ±ĢUlƒUl™ÛVƒçkUƒ@WޝKU™VkUağVmš™aV™WUƒmV»—¯@»m£ƒmÝLŽ±@ÈmVk¤mb@ôƒ¦kVkamL@b°‚@b¯¦ÝVƒn@l„ê™b@º„UĸL°J@zV@nmUƒlaĸÔ@xƒ°VҚ„Ub„‚óĢ„ÒWškV@Ò'],
'encodeOffsets': [[
104727,
30797
]]
}
},
{
'type': 'Feature',
'id': '5115',
'properties': {
'name': '宜宾市',
'cp': [
104.6558,
28.548
],
'childNum': 10
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VlÈnl‚XnWLX`m„²nV‚@b°xĢçlnšVm‚nn„@@„°‚UzšlV°nޘÒkxl„w„`UnVb„mšL@albÞKÈۚmܼ°@Xǚ@wmW@ńKĊL„lV„šLVŎçÞL²±‚ğkw@Uƒy@¹lKX™lKVa@w™™Č@‚w@a˜ÇU¯n™@@wġak—™‚ƒƒK@Å»VakUWmķwkbğ¥mL™akš™@ġރ°¯xVVÞ@VšxVš—VWx„XlxU‚™@k²WVŃULmèULVĊklĠ„VœJVx±nѝ¦mwğ@mƒƒlğkkl±@kšUk@¯±Ç™Kƒ—kxl¤b™Imx'],
'encodeOffsets': [[
106099,
29279
]]
}
},
{
'type': 'Feature',
'id': '5111',
'properties': {
'name': '乐山市',
'cp': [
103.5791,
29.1742
],
'childNum': 9
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@kšVŽk„ššÆkšV²UlºÈIlxƒLXèÜlU„„XU‚mkƒbVè„x°@„@¼°Knnn@m˜ÆIUbnJ@bVI°b°±@nK@mVakkƒKl¯nbš„èl@VnÈl‚UUw„wmwnm°¥„L„™lLnU@Va™ImbkƒmK„ƒƒnk@mƒb™ƒƒLV„JVUUƒ„VnkVmb@a¯JUaÆkk¥„IW¥„Klw—ÑmÝU¯™kVy¯@ƒƒ@mmn™Ukmġè¯w@aU±mnƒW_XKWmkÇmUkóbUÝUanmW™ƒ¯nma—@ƒxVôUV@šb@‚„n@l™b@xƒnÛa›xa@ƒyUÅmUÛbm°@„m‚n²U°ll™ĀȦƒlU„V¼nJVxUz‚W„z@`mL'],
'encodeOffsets': [[
105480,
29993
]]
}
},
{
'type': 'Feature',
'id': '5113',
'properties': {
'name': '南充市',
'cp': [
106.2048,
31.1517
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ȲVmšLnblyl²²UUl˜°U°²L‚»„knlx„_Vް@nnÞ`WL°ÈUŽVlnkšV@ƒl_œJV„‚@„„n@lƒnKV£™Çšƒ„UV¯šm„@laX˜U„‚UbVx„@VkôJU°Jn™@™‚wUk°wnUƒV_nJmknmm¯Vwk¯ó¥±ÿ—L@wƒƒƒLVU™kU›bX¯mykI@a±Kk¦ULmaXƒƒVm¯ƒK—ƒklUIVbÇJšƒkL¯™l™ƒU™ÿ™UƒlUkJƒUmŽUUkVVklKk@@a™U@„™J„²ƒxƒ¦kĬ@¼±ºXnWb—xƒU@xƒx@lšL@b„Llº@șl@bU¦Vbƒ@U„™@X˜‚bVškX¯m@nÇKk„llknƒJVš'],
'encodeOffsets': [[
107989,
32282
]]
}
},
{
'type': 'Feature',
'id': '5119',
'properties': {
'name': '巴中市',
'cp': [
107.0618,
31.9977
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@V„U„lbkVšŽVLUŽl@XI‚ŽUxVxšXkl„„@þĊnVl„IVx„@VVݚVÞUVU¦kV@ĸWÆô²š@VÞnš@Vaôb²W@‚K@XUmÑUW°¯°Ina@y„_lWn¼lLUbô¼„Kla@™nkUyô—Æx°@š™Ý@¥mVkIU¥Ċƒ‚¯Û»¯L±w@™¯a„Ça²m˜ƒ—ç›KX„UW›k_Ww¯WƒwÅk@ƒ™Uƒ™kVmwƒK£@mmmńmÑkVmamnnlmIU`V„m¯xVlx@šmš¯IV‚óIUlƒ@UwVaƒ—VW‚kbƒ@™nU°ƒV™„šÈU¤'],
'encodeOffsets': [[
108957,
32569
]]
}
},
{
'type': 'Feature',
'id': '5105',
'properties': {
'name': '泸州市',
'cp': [
105.4578,
28.493
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VVXwVKn„˜wnVƒn„l@b¯xmKUbVn°°X°@blLšènV„@Vn‚l@U„LnmmUna„VV_ĶV@wnJ„„l@@kkKVólaUwnJm„wUlm@ašUaôKVnJWbޚ@VšwVLX¥VVš_Þ`šw„WƒÞŹmmnIn¥Wƒ@k„WV¯@ƒ°kI™ŽƒLk¼Ç@k¤±Xk˜™nmݯUlÅÛKWV¯kƒlUwkLƒÓ™@U—@ƒ‚w@ġXV„˜WX„š@UbVbšV›š_kÇV™lU°lnwŎ¦ÞaƯnmm¯šU„™m¥nkVmkƒl_ó¥¯UÇl¯@™ƒ™L™kƒķLUy¯@mw—¼ķ°ġ_řU°mlšnÇVUޚ„@‚ƒš_ƒJUnV‚UXšbl˜Ģb@x@mš—È‚b@‚xċ@šš@xUbkLWškL@º„zV‚@lxĠ±²'],
'encodeOffsets': [[
107674,
29639
]]
}
},
{
'type': 'Feature',
'id': '5101',
'properties': {
'name': '成都市',
'cp': [
103.9526,
30.7617
],
'childNum': 11
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@°n°m²°ÜUšŽôVš°ŽVkxÜźUŰČb‚ŽĢlaÈL„»ƒ@k„wVǂ@„ƒnÛÆ»È™UݰKl_„V°Uš`Vbn@VbÈLšaVU@ƨ»V™nIl™šUUa„±lIk±š@VnKmÅ@WaƒK¦™lVōškK™Ý@maXÇmw¯IU‚@kƒVƒwUmVIƒƒƒç—ÿƒŽÅ@¯È@xƒK@wƒLUbÇKō@mÝ£@yóUóóUxkI@WlIUaƒbƒaŽ™LmxÅaWƒUnVƒÝXUþưUÔÈÆ@±ºƒLnVVÒkóÆ'],
'encodeOffsets': [[
105492,
31534
]]
}
},
{
'type': 'Feature',
'id': '5120',
'properties': {
'name': '资阳市',
'cp': [
104.9744,
30.1575
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„è„„UJVn„x„U@lV°JnxWÈnbÞ@šŽlLŎ™Ušk‚¥„LXbÆ@nŽmLU‚@zlbXmlnVynL„çšJVb‚UnómUnamU„an¥lKV_²aValWô„n@nƒ‚bVœK°¯VblW@kkƒlUnlV£°W@w„UXk°KVwƒmVkwVyVI@wkmƒVÅ_Umm@Uÿmbk£™xUaVw±V¼V¤kLWxU@Uk™bƒyƒXšómƒ°V@@zÝÒkKƒn™±U@@_VVkƒÇaVwnLWalm@@kkVVl™¦kIV`±n@w„Kƒƒ™aƒVUUV¤™nkxmUkVWVnLUbVbƒ`kUU„mLU‚mX@`ÅbǚXbWLXŽ›n'],
'encodeOffsets': [[
106695,
31062
]]
}
},
{
'type': 'Feature',
'id': '5104',
'properties': {
'name': '攀枝花市',
'cp': [
101.6895,
26.7133
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„b‚KÞnޙ@x„V@x˜n„Unš°¼šVš±mç²ÝÆ@šwnnšVWŽnôn_@¥‚™UaVƒ„™œÈ܎n¥Æ±VUwVƒmXÿmLkal¯km@k›ƒ@ƒ¯bkšVxmVUkk@Ua@¯˜»Un›@mz™m@īƒÑX¥Ç™xU¦ƒšÅŽÇUkx@šlb„UWVX„mV@xĵ˱@@ޝxUšÆLnÆm„šx@nXL±lUUVwKWak@WxkbšÞƒŽĉbUn@‚ƒ@@xó¦„Ŏ'],
'encodeOffsets': [[
103602,
27816
]]
}
},
{
'type': 'Feature',
'id': '5114',
'properties': {
'name': '眉山市',
'cp': [
103.8098,
30.0146
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„šVx°¦VanJVnš@„b„aVbkJ@XlJVwôôôV@zÞ¤@nƎÈLVa„K@x„L@w°ÇÆ@²„V˜ĀœmWXKWașÆa@_nWVnKVƒlV„_UaVamKXUWwnmmwœÑm£@ynUƒkWƒĉUkWVkkV±çkJmkKƒšƒK¯¦mnnxƒxVxVÇkUmk@ƒçķ™nmak°„LllUb@nmL@‚¯²¯aUJ@amIVaÅJn—m@mm¯L@»ƒŽ¯@ƒwUç„anlVƒWVƒÛkWç„KkwÇJk¹±V™UÅl™™ġV™²ÈƂnXĖV`Uš°a„b„£˜l„kVVn¼mVnbƒè™šÈn°š'],
'encodeOffsets': [[
105683,
30685
]]
}
},
{
'type': 'Feature',
'id': '5116',
'properties': {
'name': '广安市',
'cp': [
106.6333,
30.4376
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„VlIV‚„kšVšĀ„Vkš°šlK™„ÈIUaVJlk²„˜y„Ln°„UW„nbVKl¥²L@blJnzW°œalV°Inô¯‚K„kšKkkƒbV™šmôLkéƒwVk@KnnšWlwn@laXL›ŽnXVW@X°a@„XKl™nw„@man™@w‚@na@„„@ƒw™ĕġġ™wUkUWb@mk@™¦ƒ¥mUÛb±yÅn@bml@kV@„ƒlknVbmVnlmš—bÇk¯bWyk@V_UamJ@I—@WaƒVXamIVWkUkbVaƒUUxƒ@VnkVU¼›bkKUxmK™„@WšƒxnV@n'],
'encodeOffsets': [[
108518,
31208
]]
}
},
{
'type': 'Feature',
'id': '5106',
'properties': {
'name': '德阳市',
'cp': [
104.48,
31.1133
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@nUW¥²é@šK„¥‚UÈÅôa@VÆLUxnKl„°V¥ÈmlÅÈV@£ƒWX¯lLln@UšƒVÅlwUm²U‚VVna@ƒ@KnbV™VwƃœI˜mXwWƒkIVwÝĕVUa™IƒèmKUzkmWnka@y™@l²kJƒ²Vb™VkšmJUšƧ¼@UV™bÇKUam@Ua™_¯VƒUk`¯LVÞǚżm܃„@Uȃx@l„ƒ¼ÇKkbWŽœšVxUbƦnxƦĊV'],
'encodeOffsets': [[
106594,
32457
]]
}
},
{
'type': 'Feature',
'id': '5110',
'properties': {
'name': '内江市',
'cp': [
104.8535,
29.6136
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@²èlUUllXĊVX„„lmV@zn¤›ÒnxmnXxlUnVlwšmU£VV„Ušbl±„„ƒL@x²mU_lJš¥UklU@ln@‚kXbmKUxÈbl„UU@`V@š²„mlLÞÑ@yU@„¯ôn‚™„W„zšaVlV@XwlKU£‚»—aVaUwm@mwUVUwkƒlVDzLlƒ„KV™m_@ykUmƒ@mU™çkKmxkIU‚Ý„@LUJ@n±„‚LXb™¼@mmIXa™@mamnkW™ƒKUƒƒxƒ_U`UklwUw™mUbƒV™²ƒakbƒmkn@`„UmҙšVxUb™I™`UƒaÝÈ'],
'encodeOffsets': [[
106774,
30342
]]
}
},
{
'type': 'Feature',
'id': '5109',
'properties': {
'name': '遂宁市',
'cp': [
105.5347,
30.6683
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ÞĖUxlJX„Vb°@„xUÞmbUxƒbXbm¤VX@lk°ln@x„bÈ@lLVlVUXxlJšç²UlwV@@UÈWl™„L„w@w„V˜wXaWm²¹@»lī„¥„wƒ±šI@ƒšV@bl@kLUllUVVn@mmU„wX™ċbVb@VUkbmamšW@kƒa@™™k@ƒlaUa™@¯b@šmmwó@@lkXUa¯°›LU‚am„m@óƒkXUb±bU`kLm¦ƒbnVmbnVmô'],
'encodeOffsets': [[
107595,
31270
]]
}
},
{
'type': 'Feature',
'id': '5103',
'properties': {
'name': '自贡市',
'cp': [
104.6667,
29.2786
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lIÞDŽbVŽš_šJVaUwš™ƒV@_lm„nla„bš±„UVašnVxkxVlV_„`„wV„„LšlXnmnbš@WbnJ@nš»WaKl¹²ƒ@mVI@KރVlJnw@aW¯¯¯UmVanL°w@aƒk„mmU—xmƒULWxUUÝKōèU™KUƒƒkĉKƒL@ÆnX@x™‚Wȯ@Û»™nÇÜÝLka@b™KƒnUaVmƒ_ƒxkƒLX¦ƒJl¦ÅlVb°I@bnaUŽmlƒUV„UVƒIUŽ„Kš„„a@nml„„ƒŽnLl„našJUbV@'],
'encodeOffsets': [[
106752,
30347
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/tai_wan_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [{
'type': 'Feature',
'id': '7100',
'properties': {
'name': '台湾',
'cp': [
121.0295,
23.6082
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@\\sŽ@pS}aekgKSu™SsMß`¡CqZ·be@Q^o@‹gieMp‹‰]}•}Ľc_Kk…{™ù“A¡r‰[uom@эĥJiq©mʼnq¯Bq]ÙYgSåk_gwU­isTE…“‘ĕiqiUEkue_‰OSsZ‹aWKo¡­q“ycY£w}‹ĩ™ĕS§Z©S™N¥SyLÑ¡±Ks^IY‰PdƒY[Uo†Fp}´\\¬\\j]ˆò‹¤¡–ā a\\bn™U㺹Ìs¼j®[cíȈEŽĝĆ`ļf¶Š®K|VØDdKGpVnU‚FjpH—F`†B’[pMºxÖjbpÎxp€¬‚|ΟÜÒCв®‚ÜAp„ZG~€Šd˜ÞàV¨|¸€`|Œ²tx~\\~|dFf^zG€ĄŚhœdL\\hĸž¼†ŠOªP®lV`p\\]Xpll˜æ¤œCpQ|oF}fMRi†NSon_²qämœM„NM‹\\•'],
'encodeOffsets': [[
124853,
25650
]]
}
}],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/tian_jin_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '120225',
'properties': {
'name': '蓟县',
'cp': [
117.4672,
40.004
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@EUDAEI@WNMNCBFAHFFNACDJDPBD@@GD@DIFFHEFGDBDEQOFG@EI_KG@OcJQM]RMEKBGPG@[LaCIICBWKCEEG@WBQHCDFD@HSLEJI@IHWECFGAAEKCGDBFCBSBIDCKKHEADMJMFABKOKEQAA@IEEG@GIQAEK@OZEESMOL“lu@SLUTYFQCMG@@SQUAYKAACA@IB@BDB@B@DC@@BGAEFAA@BEGKJCC@AGAIHA@@JC@QEIP@@A@EGIDC@O@C@@@@CJCWKABFLBBEBSQGBAAMIEM@AKBcJEN@BEBCFMAEFEF@J@BG@BFABECKFG@AFQ@@F@BEB@@A@@AAAKAE@GFGDECEFEECBKIKDELDFEDYH@EIACDCHKBEB@BAAC@ADBHABKJIAIJICEDGDCD@@A@A@DHCHJHDFEFGBKRKBGIK@GIMHSBCH_BOJECCJCFKKMD@DNJEDEGC@OJCJHRUL@HRJ@H[DCNKDZHCTFDHCFFKR`TANVDFZRDLFARB@HPAPG`ILAR@TERNDFNHDLCLDDCXDYbHF@FEB@LDDVE@JPNfXPINCVDJJD@NJPAJHLXHDNANHhB@DPNLRMTBFRBHHr@`NBFEBOCCBIAQJDHCHLHFA@HSDCRLFTB@HEFLNF@PELBDJALFLTC@EPFLLP@tUHQJDfIHGTB^JTCPDLKAIBATFPADIEGECEMJ@JIAIHGECFEAGDI\\SPOXAFCL@BQTQBBTMZECYGAHA@GJAE@HCAEME@IECFKJADDBABLTHHG@ILEAMNDJCDHEBF@@JNFJELDFKTOT@JETBFFHBHEHKI@@IJEJ@XKEOUMS@AF@CEB'],
'encodeOffsets': [[
120575,
41009
]]
}
},
{
'type': 'Feature',
'id': '120114',
'properties': {
'name': '武清区',
'cp': [
117.0621,
39.4121
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@FWôµ@IFCLIB@EHNBp]AGEAKAEDMGZKFGBGME@ILGP@HEFB@BXMEAHUGC@IHCLOD@X[NWHWPKAEF[@EKIOL@EKGBNMJ@EIEHKBIC@BAKMIACCFQZCF]DB@ERAKADIHGEIBCGIIECFaGLZO@EFCNGAGDGAKL@BMG@IE@ADSDEH[JGC@CGA@BMDeK@EIACFE@@GG@FIAMM@CCGC@EM@ADE@CFMAAGHBDKIEAJG@DOGCDEKAGIS@KFCHKAEHIE]BeKNO[IFIOELC@A]GMBKVYCDDgGAICARc@MW@AQE@DGI@@AQ@@BKBAIQQYEFW@CEADIGGBCEIiMEMF_LGEKMBBDWEBGRC@E_CHYGCH_IAED@FFBQh@FGJaJ}AHRAREF@bE\\C@CT`FHC@\\BBF@BID@HGDDJ@@FAHKBARECKDAZBJIVNHCTA@EREAMLHDAFFBVFFC@RNRETHD@FOJMACH@CAB@P@DF@@FGDWE@FFSIEMKQDYCCHKb^JADOCIDGNDBdBCFJB@EC\\A@BJEA@JAAAD@HHD@LFBCFF@BERDHNhZQHMBGHOACCEBWEGD@PSJKCGEUD@CINLFGHE@AJK@HDABBHTB@F`DBFLBBHEDARCFG@ABJBAPVFE^FBGLGCFG_BMLEXGAAFE@@JNRVJHFALFBEHQJCTbNDHCF@PlFLJSXCHFHfVBTNJ\\BPJXC^FAVNFCHFB@FFH@JF@\\ABCFD\\BDMCAAJKQBGAILOEGHILECQLWFENJHADC@QxNHFJNLDFA@CBA@D˜UÂmR@FBL@BD'],
'encodeOffsets': [[
119959,
40574
]]
}
},
{
'type': 'Feature',
'id': '120115',
'properties': {
'name': '宝坻区',
'cp': [
117.4274,
39.5913
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@TZbB@JHD@DODCLM@AP@LL@BNH@ETFN@`E@DNG@CHLBCJA@AICFKDDBKA@\\N@AFNAGRBFjFFFL@DHLBLFQPcXAZMJ]GAVHAIZJFNE@JpDRRDCLFDGXA@EFF@CFFPDfEBDB@DCHCFCJDJIJBLI@I@CB@@ADBB@FALADGDC@@H@BB@FZGFCCE@@FMLALJDAFFFEFDFCB@@AHCF@L@@BBB@BB@FC@E@@R@BEL@HEFD@G@AH@AIB@@@FEFEBALDDEFAFO^IF@JCBBFPNJJ@D@PRDCEKBAXL@BIFD@T@JE@BHHJORFDI@@B@JGH@@B@BDDLIFFHCD@D@DEE@BAAAB@DAF@B@H@NGLJLMRDNMfGIEPMI@GDAKK@KIDIJ@GE@CFDN@FE@GFEPGV@TCDFKHBBF@RW@DD@@ID@TJFKIKLI@EP@IGBCLAEKLEN@KSHIGYACSD@SEAMBBMGEBMQBCMIGKFB[D@HDLPHDBC@IFITDLG@IIIFGVBNJDLN@VIRI@YIAIHIC@CLKZCBEE@JECEIHEAKGDGECBGEEM@@DA@CCCBBEGA[GEDBBoNAAH]MKiIAWKQoIIPMFQAEEDMH@FMSUYIeF@EK@BIOEKJEBICFKaKPFAFSE@LWCCFMHDDEKESBOGBKIEIODLG@CCDEQCEDWEMDIEIB@EHGEEDAEAa@@HqDEJGF[AECCFa@WCEIKAAEQB@FCAE^YDERDDJBLNABD@AJGLJF@FNIAMLH@FPKLJ@FE\\BFOLGXMXW\\C@KPGD@JHDGVFBWN@AEAGFO@KH@JNFAHEHYLNHFCLBFBBHo^MAFGA@KJED@Jó¶EX'],
'encodeOffsets': [[
119959,
40574
]]
}
},
{
'type': 'Feature',
'id': '120223',
'properties': {
'name': '静海县',
'cp': [
116.9824,
38.8312
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@NGFMDATCNDR@CCbINEHNJA@C\\EEGVE@IhE–[˜w”epc¢·²›^QEKIEKIgiQDkehY£uSDBMkUDOJDHC@GF@CAFBFEN@C‹Q@BeP@@G@HD@@MHQKi@[IGCOCESE@GMA_OcCGDu`aˆ@VZzKDkJBLNXGDqKEWE@cFEFA@ƒISIi@@KMABJGBcMuFEzGVH\\ATSEUBeALCEMG@CEBUHUCGXaBPtUBBFIBFTDFF@DDKBFNGBJPHXDDMDCLJ^mBIHIL@LR\\@LCR[@@z@NFD@LLBNb@RHDBNTPT\\F@BJF@BXCFBHHBDLFB@HODADE@@JHVXCPDHCFTLBBFNCDCCCU@@GAABEHHZHBCAEdEjFDD@GfD@DXFCHF@ERFDLBH@'],
'encodeOffsets': [[
119688,
40010
]]
}
},
{
'type': 'Feature',
'id': '120221',
'properties': {
'name': '宁河县',
'cp': [
117.6801,
39.3853
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@BFLBFJXDb@DEFD\\BHEFIrC@Gb@FBCBFFGH@FJAJFNCXFFCRDCFDDH@CKJPJFALPHTALFCFGCENDDKXF@ETEBO‚bLELJDFALIPFAJL@@FfEZJTVENG@CNFFRBNEJOpJLRBXjJNLG^BBpMAAFC\\HHBAFDADDB@@CN@FFAHFDCHLHFBJGFCFUNKJJTD\\XUXF\\^F@DDDQXXBRLRCBDFEVCDLVDpUl@LEDJHAPRFGL@CETGPBTCDDVI@CFF@GFDCCVGLKEK[Y@MECISG@BKNSCGCKWEAaEBEKNGFSECO@GGM@GYI@DÅCMLHPTF@DJHAVVNKEGDETJ^[TJNNd@NOAMFYJ@@GFANDPEJB^aOadSTQSI@MHBDIEOKCG@EEFCKCqXO@@DMFENCDDHCCGJ]AKFoDaGGHYFDHKJiCMFGC@EQ@AEHGAC@IEAATKOHGIC@IXIFEoƒGE[JCFCDHNmRADFZMF[EEBMO{GU@AOW@@]ZeHBDEHBKEfQkuIWBs‡@EC@d[@[^EDMTKCEEcI@cDAB@FCBCACmOCG{PYHeBgPwPFDDALFFFCHQGSD@BHFAR[TaFYXMASUiGFL@DQNCJI@@D@PLDN`ETEFIGMCGBCE‘~CAIFDPEHGEQPHJADFJGHCJLB'],
'encodeOffsets': [[
120145,
40295
]]
}
},
{
'type': 'Feature',
'id': '120109',
'properties': {
'name': '大港区',
'cp': [
117.3875,
38.757
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@JFFL°_`ONJKDDFIFZN xlb~yFVNRŒrdJGzDPVFBCTNND\\UR@E`F@@Ip@IWGUoawOEE@ÏDgK{İEEMFëC—b…™@—KwOCDHHKBDJCDEEEAGHOABFABMCgDLSQ@CFEB‰MgYIDQINE@AUSwSAdYEHQMEyK[KI@GRMLE@@OqOoBOnpJ@BmEAFHL^FDB[C@BBDVFAHFJENB@sNEjQAMYsUgCSBGDJH@\\LjGR@NC@@G@HO@AfR@DŒM@EFEADBE@@HGDICCPlVANTC¤vgZlfRChjLJ'],
'encodeOffsets': [[
120065,
39771
]]
}
},
{
'type': 'Feature',
'id': '120107',
'properties': {
'name': '塘沽区',
'cp': [
117.6801,
38.9987
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@|ODHnPBDADEDA@CB@ddJFFLDNSFC\\]\\@@cFDˆ@nACOMW@M@ITURBRZNHNWRQšoO•j½f‡cqŸAqeiDÿÍyÓįFL|Ch@ÐFFxPpbHVJXo@@JCTR^BPABQA]^MB@bE@@FQBFVJRH@FXtPNZSBAja@@NƒDTŽLJrQTHFXZFB`'],
'encodeOffsets': [[
120391,
40118
]]
}
},
{
'type': 'Feature',
'id': '120111',
'properties': {
'name': '西青区',
'cp': [
117.1829,
39.0022
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@LHAHRHATh`LHNHDG`HDGZ`D@FQDAHXFACNAFLVRTBFOfHDCVBFQH@HSXHEPFB@LDBF[bDbLFKJBFLADBDjLvCPEI]FGEIGCBEUSjcFiBIVWfaHCjN^HtwBBFGPBJGjFBEGECGDONMFAP]TDHQOWCMGAMHKIJEIGQ]aDlUG]VGEGDC„{PEbBZmE@@GH@BCA@FMQCFMYMJECELCMI_P¯`]R±œ¡¸od“f—x•\\gF@JUFFH[F@DIBGMMFaJDDQ@MCSDCBENMH'],
'encodeOffsets': [[
119688,
40010
]]
}
},
{
'type': 'Feature',
'id': '120113',
'properties': {
'name': '北辰区',
'cp': [
117.1761,
39.2548
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ROHFFGCOJEDB’}DFHANDJHFEFSM_KC@O@CJ@DIRM@CEKKA…L…FKACHoLSJSIBETDJaEIIE]E]K[MYUYQILC@GF[MGNKEK@A@BCWECAIFEFYAGFOMI[OFuDiKACBCEKIAELaKaCE\\CA@KEAFOWGGTG@ERUACDeGEPSAUQKHE`FNjNFJADHHCJFB@DEXZFRRBJLA@AR@@BJ@CHF@BRX@@NQdDBBJhHCCZDLUNA^H@BKDPFEJ\\JMPfL^AJFFGLBDGLET@HJLBCFHDCPH@BIJFCLGABHNBDEF@BCN@@FHDDDN@BNEJH@@HF@DEJB@FfLNC@AHB@DHD\\IFGTCBCF@@JNH@ALKHBHCHBDMFEP@KYbHDEJF'],
'encodeOffsets': [[
120139,
40273
]]
}
},
{
'type': 'Feature',
'id': '120110',
'properties': {
'name': '东丽区',
'cp': [
117.4013,
39.1223
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ZV\\N^L^FJFFJIbSCAFTJTIpKDGLB†E†KLBjHTVNBZWbE\\SBQGE@ATCRHDGEEKECBECxOhOfAZGA_YEEWSGqRKIS„C@Mb@BiTAMYsOEWG@IQEURA@EF@@acUOXQRYCUDCHDTEF[SUEgAYDcVGJM`iAWDWLQRMHUHgDsDBLHJFCFDFGHBFFVEAGHCJN@RJF‡PIhBD\\FENCPWA@LFBAFHBEJUEARCDIAEDQBRNa^'],
'encodeOffsets': [[
120048,
40134
]]
}
},
{
'type': 'Feature',
'id': '120108',
'properties': {
'name': '汉沽区',
'cp': [
117.8888,
39.2191
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@LMEI\\MTABKN@FCDMH@COAcH[AoēA™M¡Wa[Meq™pQRMXMGQYQASV@J@NNXDPmBAtJXlveRLFGACFGAYf@^X@BPV@|HNPFA\\FNEEYBCnQGMDCDE\\IHFp„EFWJ@JJDGHLPBSFB@JBDGHBFR@@FHDNEjDLICGZEHGbHpCLE^BHIDDCGDCFMNE@CP@rWLDEDFFH@'],
'encodeOffsets': [[
120859,
40235
]]
}
},
{
'type': 'Feature',
'id': '120112',
'properties': {
'name': '津南区',
'cp': [
117.3958,
38.9603
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@TLv@CNHFFBHGZFETNPhCVGNGRQXKXCjBN_HIdUZChBVF\\TFECSDGVCZDRQPWdVNA^]RBBAAOQ]DSE@F_Q@[VMCSMADUECOHycI‹qMQEU}zkaŸwENRDENB@ADG@@HF@YnaAOFƒ|CDFHUHH^kVbCR^JHIFLJNGHBDNPXGRSCO^EBMNCPDHHFAFiEIHOAEH'],
'encodeOffsets': [[
120045,
39982
]]
}
},
{
'type': 'Feature',
'id': '120103',
'properties': {
'name': '河西区',
'cp': [
117.2365,
39.0804
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@d@hZNFdcLYXKRCtCMOFSYEGHEAGEDMu@SKAAsx]GMTGt'],
'encodeOffsets': [[
119992,
40041
]]
}
},
{
'type': 'Feature',
'id': '120102',
'properties': {
'name': '河东区',
'cp': [
117.2571,
39.1209
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ZBVFFIGABEEA@KXBDOFM[EACJgˆOIE@QIMGDBHUFEEGAEHECEDGIAKQDWLKZcdQPEP@FOFBJTJ@HNORJf@DBCN'],
'encodeOffsets': [[
120063,
40098
]]
}
},
{
'type': 'Feature',
'id': '120104',
'properties': {
'name': '南开区',
'cp': [
117.1527,
39.1065
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@NMVDCG\\E^B@HlB@YEDS@C…HsNSiMGDebUXAJEjidVTAFHDFJ'],
'encodeOffsets': [[
119940,
40093
]]
}
},
{
'type': 'Feature',
'id': '120105',
'properties': {
'name': '河北区',
'cp': [
117.2145,
39.1615
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@DBXFADB@L@LFHM\\NHED@JKZRb]QMRAFCJBDCBQYADMCAe@QIMP@GSIAIPE@E[EGH@ZEF]^HJAXK@KF'],
'encodeOffsets': [[
119980,
40125
]]
}
},
{
'type': 'Feature',
'id': '120106',
'properties': {
'name': '红桥区',
'cp': [
117.1596,
39.1663
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@J\\PNHEZBFEJELEL@BWGI^]FEkA@G]A[FDHUCMNEHJ^'],
'encodeOffsets': [[
119942,
40112
]]
}
},
{
'type': 'Feature',
'id': '120101',
'properties': {
'name': '和平区',
'cp': [
117.2008,
39.1189
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@D†T@FCHG\\FFOROMEgYc@'],
'encodeOffsets': [[
119992,
40041
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/world_geo', [], function () {
return {
'type': 'FeatureCollection',
'offset': {
'x': 170,
'y': 90
},
'features': [
{
'type': 'Feature',
'id': 'AFG',
'properties': { 'name': 'Afghanistan' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ࡪ͇وŐǬϠڐŶӂʮǚڦ۾njƀ̚ІɣʪҴMوǯʲĹ،˒˰Nj˖ϪԈiżŬĘͺβ̈Ҕȏĝʱʪ¡ý۷ͪ˟̊ǰώĊԼϖׂ×ࢀAƬʋӧĥяƹ७ĭࣗǭӫλȤΣĪллΛ–͑ɳ̡ߛ€ͦ։՗ɅΥԕ²ԋ͡ɿ̳þٝŋğɻسDҵӇ‡܍થΓבôǝȁԇņ࠿űටіހހåզُƚßՔ˟ڢάҢιŮɲؒ΂ਸ'],
'encodeOffsets': [[
62680,
36506
]]
}
},
{
'type': 'Feature',
'id': 'AGO',
'properties': { 'name': 'Angola' },
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@ȸصʌԋȘ˕͐ѯ֊æˤŠҬşŲɀɂӨԶ®ƤіHñ̡৴RfՉǞ͕ūԑÖԫ˪̷­ৃȼüκsԴŴϦ¹ĘʹĩСƨϿů̿î́Zᦵ֤ۋպԽ໳΁᎝Š׋Ж₭—ŵÏԃϞկ~ԉƝЙDžÿՈŜ݊̂ޒªΰ˚ݶȨΆӘռːϐĘج«ӊʣ̜ɡԚȵԎ®Ǩʶͬʭ߼ǣ֚сՐĄǎΌŔʒg̎ĸៜ['],
['@@ɉėɣلͼδʪƘ̀˽̩ǯƍɍλ']
],
'encodeOffsets': [
[[
16719,
-6018
]],
[[
12736,
-5820
]]
]
}
},
{
'type': 'Feature',
'id': 'ALB',
'properties': { 'name': 'Albania' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Ń˷ŢέΒȳiə˗ŧ»˙ϷСƛÐgȂү˰ñАîֶŖʼƗƂÉˌθаÂƿɨôǴɥȪďȨ̂'],
'encodeOffsets': [[
21085,
42860
]]
}
},
{
'type': 'Feature',
'id': 'ARE',
'properties': { 'name': 'United Arab Emirates' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Ƭ¤ŒɱڂƂ۞uԖ{ֺ֪ظՠՎԮdž˹ŖڑѕGçճƪŝϝǑE΅ʓΏuͷǝDZᡋъ͏Ț'],
'encodeOffsets': [[
52818,
24828
]]
}
},
{
'type': 'Feature',
'id': 'ARG',
'properties': { 'name': 'Argentina' },
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@ߗ§ѓ̔ԑx࣑@Aሞ͒ϵрؿનԋ୲ȿϙп'],
['@@Ӵ؇͠ڰॠ“ƊǷ໶ോۊŷਆاࡾ͡Ŧχࠡ౧ࡒɭ़ŷڔƈނ٢ƎݐжLjфӝiڣۻҩ֟΁ॅࠃ૭ଧȽڥɣࡹT࠷ǽȇÝիËѫ੨ܙŗ׃Հν§Ч߯ઁఛ҉။ǩउĎǰԅǣػƺщԋ̏ࡱř̪͕߱ɗŜ࠳֨ʧҠˆʢѧޛʻڭԹūࡋȣ҇ߏEڃљʋؿؙࠞߦǝ˿ݭ঳Ӄձটލͧ΅Ͽ˔ࢍ֔ӡΟ¨ީƀ᎓ŒΑӪhؾ֓Ą̃̏óࢺ٤φˈՒĭьѾܔ̬૘ěӲξDŽę̈́ϵǚˢΜϛ͈ȝॺ͸Ǣƙ਀ȠࡲɤݢԊ̨ʭࠐEޚَոo۰ӒࠎDޜɓƶϭฐԬࡺÿࠀ̜ބռ߂צԺʥ͢Ǭ˔ඔࣶд̀ࢎĹɂ۬ݺશȱ']
],
'encodeOffsets': [
[[
-67072,
-56524
]],
[[
-66524,
-22605
]]
]
}
},
{
'type': 'Feature',
'id': 'ARM',
'properties': { 'name': 'Armenia' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@୞ƀǨə͌ƣǛɁ҄˽ʁˋΦɫϘƏl׋̣}΃ӢHżχCʝɤǩuͧʖرȼĄФƛ̒'],
'encodeOffsets': [[
44629,
42079
]]
}
},
{
'type': 'Feature',
'id': 'ATF',
'properties': { 'name': 'French Southern and Antarctic Lands' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ը˃ߐĿˆDžɽϣಇÃq҂ŮΎÊǢ'],
'encodeOffsets': [[
70590,
-49792
]]
}
},
{
'type': 'Feature',
'id': 'AUS',
'properties': { 'name': 'Australia' },
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@ߺ́ҜŘپNJԎÉÐঽ˽́ēگ̉ɰ׍בǧ®ԫ€ԭܘŗֈӝܸtϬռõ'],
['@@̢ڇբ̈́˦ΡЖ͟đϋǴܛŸнɄĹɬܕąѥ˖֭࣬ѭצЋ֞λŋȯӔՃࣧ͜ͲȂ;ηȴźƢࢹ׬ԩϸ͋ڀڹʀڭtӏËԳА܋µݓơϵɩݡjӕǕ׻χއثЭ̫ٱ˫гʝܧ͕нɅػʼnׁªˇӕ̇व‰ޡ·ϫ͙ԕέ۟ψԥƪżѬҝǃ݁؉ܩɪӉƄӑÔ߿ʐիԮƻْțьЭ;߱ĸˢРȯزЧ׉ݝƷѮҬŶӞ͘ЬãجہܑԿ˽͏ڛٽΊ~ҀԿ،ѹ̀ǂȘԚןz߯Цຓāછ̝ख़˫ߡÈࢻљܯȗljѱ̳Ϳ܉qՅõݑƶ׿ğֽԁ҃ʕœуʁЗˋؕ֛Bࢽ՜ҋDŽlӖкŘƚȒ‡̠ĺאģӼѻࡖƏӒ˜ӎͭնsʚϋͰĽڄӓڔřΪτε˳ެиʑʞ͗aјеڎă˄țʦĠӠǢȸŘрęӮΎ؀Úٕ΢׀ۀˬЦΪٜ̰ϤàɴĻڎ̺ԚĤŶȀɞüҬoࢨʖҚώɊ҆ӲѐœͲvҘט܎ΠܩΦǚ̗Ј˂ТψǻĸٖҠаȮͨцƜ`ɼτĭdɂτŦОŔبϫҲӽՂMՖÿDZҦДڪϜɘſȾκӒԘ̒јıۺǂeі؛ˢ҂Ū֎ȻҀ·ۼɋʈĐԶʵӬʊ͂ñȠNJϬеɡ͉҇ͻ˿ƒĮͱʙп̗ЭÔʁڜҫ٨ˏѠ́؈ӻʂBѰɍŶʷߤ˵ֈ˼ǐҊǠόľҤʰڞŝОÔʔīӔŌنLjǠŽˬȮѾdžҦtʈ̸̾ʂЩÎՃȾķ˜Λ̨ёÚӇ‡̥']
],
'encodeOffsets': [
[[
148888,
-41771
]],
[[
147008,
-14093
]]
]
}
},
{
'type': 'Feature',
'id': 'AUT',
'properties': { 'name': 'Austria' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Û΃ӁCǎǻ˧էLJƗܽsщȏۛÞயɐȉ̊ࠧƣĭDžԗŢѕxϝƶźȴƬʪ²ьɹŤɜݎ•׸ƮЖ}ˀǣþƜšո̠ń̒ϰز˓ӀΆ̐ÚٶʱЂªϰǁãŃČ̅'],
'encodeOffsets': [[
17388,
49279
]]
}
},
{
'type': 'Feature',
'id': 'AZE',
'properties': { 'name': 'Azerbaijan' },
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@ʞɣψDGŻ΄ӡֽŒщϰƃ͆Ǫv'],
['@@ϊËƞɈԈͺѴѵђ׭ϺŸʸɧۗãƣٵƟ̭̍ȝvзȽ¥ԻѲ̂дʝʚ̿×যإk׌ϗƐΥɬʂˌ҃˾ǜɂ͋ƤǧɚȶƎضʍҐ¹ŘIJбҔɔŚʀ…׀ԙ']
],
'encodeOffsets': [
[[
46083,
40694
]],
[[
48511,
42210
]]
]
}
},
{
'type': 'Feature',
'id': 'BDI',
'properties': { 'name': 'Burundi' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ÁɃϢԜßʲӎҀŸͧǸȏT˗ȹǭ͛ѫ̧̥΍Ÿ'],
'encodeOffsets': [[
30045,
-4607
]]
}
},
{
'type': 'Feature',
'id': 'BEL',
'properties': { 'name': 'Belgium' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@؜áުǪՐοҦȝħ֧ɕĝһܿϦћßדІϷͶϷ`ũ̒ڪǔ'],
'encodeOffsets': [[
3395,
52579
]]
}
},
{
'type': 'Feature',
'id': 'BEN',
'properties': { 'name': 'Benin' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ۛįȹ׆žኞǛǦЮ̇̌ʱʞņѶ̀ĨǠξЪĀȀʤˮʘ̠F٘ә˩ȎӽǓͷĘɧСԳʵʳǁՉt՗µണ'],
'encodeOffsets': [[
2757,
6410
]]
}
},
{
'type': 'Feature',
'id': 'BFA',
'properties': { 'name': 'Burkina Faso' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ֹɐϽ‹̍Ƀϗǰƥ˦ϙǾÅӦɮΤo˴ښۢŬּɲȴОœΚǢŘɎٴϖdžˀ޼ΒҦŢɀLJՠJáСŔϣӀչ€НॺȏmֻǿʣЩÿǟν˿ħ݁lϳâ˓ƉωÖร¡qӉŘم'],
'encodeOffsets': [[
-2895,
9874
]]
}
},
{
'type': 'Feature',
'id': 'BGD',
'properties': { 'name': 'Bangladesh' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@i׽̉ŶÆگʉѬµєDžКΕӨޟ’ü΋˃ҳΧǠũƵʃĠ͗øŽۖ̅لƜԒԫɤȆ̪Հ̼؅Ѽ֮̔ږεВ£ô׏ߞřު^Ӟƛϯ܅ϕµʷӍҢѥƎ՞ɶFѶ೯'],
'encodeOffsets': [[
94897,
22571
]]
}
},
{
'type': 'Feature',
'id': 'BGR',
'properties': { 'name': 'Bulgaria' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ʎΉ͚Ö٦ſ௾«иɌবȜ̩ؒӴĕѥΏ̫׹˔ӏܣŒࡥ˃Uлޅÿס̊ڧɱة|Ñ֊сːƒŢĝĴƘˌ͌ˀСδ÷̬ȸȐ'],
'encodeOffsets': [[
23201,
45297
]]
}
},
{
'type': 'Feature',
'id': 'BHS',
'properties': { 'name': 'The Bahamas' },
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@ȵ£ɇӜ̿ʐǾՔʨ‘ۣ̎Jӥ'],
['@@ࣷƅÏ̴Ђäֈ{~ɕ'],
['@@ƟׯƷņ`ѮϓͪCĪڐϗ']
],
'encodeOffsets': [
[[
-79395,
24330
]],
[[
-79687,
27218
]],
[[
-78848,
27229
]]
]
}
},
{
'type': 'Feature',
'id': 'BIH',
'properties': { 'name': 'Bosnia and Herzegovina' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@̦FȿσМ͓ūЃȡ™ƽû˙țūҥݓ͈ͅΘ͋Ȅϭ̾ǻʺЩϾǬΒ̞ȕǼǨϾnܠƓ׈\\Ϟȅ'],
'encodeOffsets': [[
19462,
45937
]]
}
},
{
'type': 'Feature',
'id': 'BLR',
'properties': { 'name': 'Belarus' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@߼Mࣰ̈́ȚӄېːÿϔԜƚ͖ࣘࢮɁŢȻѲĴࠒȧĊЁǷɧՄս΂Ƴ»Ʊ֦Ʃʎɡ͝ǿڳˆljÿȠ˧ȸ՝ܝ¹ʵȁÃхͭĆݷ¡əȞ̿ƥ́ŨڍjफȬࡕàٱmҡɩГeϐʷϴԌǢLͰɷ͌™ϊ'],
'encodeOffsets': [[
24048,
55207
]]
}
},
{
'type': 'Feature',
'id': 'BLZ',
'properties': { 'name': 'Belize' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@OŮĸžƴı̞ԔDŽZHūDŽGaɭƋεôŻĕ̝ÀăīщǓɟƱǓ̅ʣ@àॆPژ'],
'encodeOffsets': [[
-91282,
18236
]]
}
},
{
'type': 'Feature',
'id': 'BMU',
'properties': { 'name': 'Bermuda' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@OEMA]NOGNG\\Q^McMOI_OK@CQSGa@WNLVWHFLJXVFGJ`ZRTDLeeWKIHGIK@@[MQNi`]VDTBHCJAPBJLVFjT^LV\\RJZRn^RH`TfJjZHHOTTFJP_NOX[EYQQKMEJOLANJH@HQHAARF@ZEPS[U_IcRQXE@EEKKOCGGCQCOGISKYGUC'],
'encodeOffsets': [[
-66334,
33083
]]
}
},
{
'type': 'Feature',
'id': 'BOL',
'properties': { 'name': 'Bolivia' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@य़”͟گӳ؈વȲ۫ݹ؅ŗ͡୆ҋऺˆ߾ѳ΢ŏ؆ЫֲՌ࣢αۺȖ˰ƭ̶͠рh܎¤נǸ˶ܩزíѠnȈʪ݀;Ѷ͂સƚęؽļ͓ãࣰ֛ݫऴƑ̻ͦ֨ǕΐʑՈTӦʟšӟǐʕZγʓa͒এྖ“ūӟĜͧҞɽȤԹƫڋɯρĄӏʿǥaʶ޳јޭ^ัʓЕ݋sҋͥ৕ƉǸ'],
'encodeOffsets': [[
-64354,
-22563
]]
}
},
{
'type': 'Feature',
'id': 'BRA',
'properties': { 'name': 'Brazil' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@૮ନॆࠄ֠΂ۼҪjڤуӞеLJǒӜŖӼBҦ̡ƴ̿Ƌ̻œį͔ýޔƿʤ֥ɪ΃ǏࢱLjÈଜʝҴˀǦăӐɰςƬڌȣԺҝɾěͨŬӠ”͑ঐʔbYδǏʖ™ӠӥʠՇSΏʒ֧ǖ̼ͥळƒ࣯ݬä֜Ļ͔Ěؾષƙѵ́ܿͽȇʩџmرîӃƟϡĪÈ౨ۏӷݏv҄ͅ֏¶DzΰұԞΓݴɜƶA΢ԖʎċҔɊ̈ÔϼֲێNJŔŴݴŸϚᘰpθſӔύ̬LؐӀƒǚē†͐ӯĔYՀ࿖k˦̂ɸˉǐӷǂļҨѻٸÆnjʲشȞΊƐĮΤ׸ʆ¯Ǯ܅ðśՊ’֞ϓɒǀþجŅڜȿʐȤ؀žल̮͎̾ŏʂѪšȜȗʼnσ̀ŵȖϷɷ̏ƅ܏ɌыÔϳԬϿЮ¥Ģǒˆ˜ϠƦ˚ɢҬíȲŠҚçøǢƗǘĎʐͺõЈĒӔDZξǥʺɪȊ•ŘɿДÒ͒͊ʴؤӼޒ˺¢ȺҫҼ฽҈Ƒxׅمەʾʩ๤ƁŠࡃٔր੐̟ඊԡШӱƏҫ঎ʶ࿐ѹఴŽఔ۝੸व٪ʏܖ‘̦˅˸੭Ɣԗͯ൹ёշஅୡՙोثܯȿgɻءÒ༽ɹಓęօˇͧƫ૱࡛઱ƛࢁڹηȟԋ࣯Fೕ͓סύवʗ঩ڝ܅࠯ũطƔҫƽࡓȏЧחҥट๕݉ڗ֯Ͻϥߛ։ӑɷӈψЊӟֲڇҬࡹՠ̹{ࡅٰձę'],
'encodeOffsets': [[
-59008,
-30941
]]
}
},
{
'type': 'Feature',
'id': 'BRN',
'properties': { 'name': 'Brunei' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ͬ̾܎Ң›Я·՛Б€ǭ˹ϥѦ'],
'encodeOffsets': [[
116945,
4635
]]
}
},
{
'type': 'Feature',
'id': 'BTN',
'properties': { 'name': 'Bhutan' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@΂ˍÏԩۇ{ۿÈՇſޅ͊kǚ֌زҒɈ׸șѺqπɥ'],
'encodeOffsets': [[
93898,
28439
]]
}
},
{
'type': 'Feature',
'id': 'BWA',
'properties': { 'name': 'Botswana' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ǜƭ˄ӡॎइήĝD̑ʚՑٰŹ՚ϝ஑أݭع˩֓ʧ́ҙãƧГďʽ՝țہ¤БɾΟĸХșȵГЉʧпϑ׻đȇ̐üԠӽߚɧŲAរࠤˆ|Ჾش„ಖ͎̎΍՜ͤʮDӂȎưÙ͔ڣ'],
'encodeOffsets': [[
26265,
-18980
]]
}
},
{
'type': 'Feature',
'id': 'CAF',
'properties': { 'name': 'Central African Republic' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ۜÚƺɎƔgȾȏ੔͐Τ͠Ѭ̌ĉ̐ʂüߺ½߆ϴ؊ࣺю;ՐƜĪΫӜԿF΃ƋΓÄʻ̆ʍٖοҢͻT˗֠ѫΖεɆԋغͩƊˉˣęաpكĘ̹ïųȱ˕}ͧDzधнϥĎŗÝʥԕطǐؙĊ՗̴ۓ˸҉˓͛яùדգ²֩Ƙԅѻѯޱėʐ›Ϧϧ˔̳Ѡï̠ЇѮæʢċΞÞٴȬƴц࡜'],
'encodeOffsets': [[
15647,
7601
]]
}
},
{
'type': 'Feature',
'id': 'CAN',
'properties': { 'name': 'Canada' },
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@؎œުxЯ΅̵Å੥Φȿˬ͆ʸ̎С'],
['@@Хcઝ˂ޯІ̄î૆ɁΗ|Ʒ'],
['@@хŝൡϢʥ̘ݩ̌Ưʈࡻư͕ҜðȚࢨǿԨŵ߄ė˺̃дЋ࠼΍Όҩ'],
['@@։ܿո˴֠ǵ̏̉ݚɱϰȴ࠼ʵʹ؛טƞņѿʼԷΝ݉ϝ‹փǂǾیɻńইܯԅ†צЂ߫Ȳࣙ¹࿅~ŹʠԼ̐λɬ۸Ԓࢄ೾Զӎܲ̂϶™Njɫ҅Չ'],
['@@@@@@@@߰äʥ॓ܶگͯDԑϪ̵ϮчʾƻτºˎЂŋ'],
['@@͡ѳχîəʢ Î͖ʦΆkɈǣ'],
['@@ঝҧץnǿɪزϲ଼SiǍ'],
['@@ƼυјżӨɗं˽४ʽöЍؤÞ׶˥ݙ˃ಳȬҽϚ࠭ҁ஡ѣ˿Ӯଗăܴдņڌ˺ޔ؈å'],
['@@ष¥ȿЪΦҼޖŜپɷXέħřձʛ'],
['@@Է̍ଉʬۃğଫϘ݊ʼטζࢼʃԎƯʦDžԠ͍'],
['@@G࡭૰ڄ৐եʡح߾֥࢚؈ؖܨ°ईஞÝఔūૼй¼зس҃פ҇ŃУ࿩חୡŻࢃʨʣуߵ۽ʓοই֩ளÇڏΡÇձ঍Ŀਉڻ࣭ु͙ڏ±উƕϜ޻ϼّ୲ǔ༞εࡀ͋׺Ѕ੆ɳࢸΟ൶µࣴąƍܫʼࡋ،ळనߗ٨˚ҔࡺѭೢףѶഎЀ॒לҮהç֭֘܌৷لলࢤνݾ˫ಾגȘ෸ɫࡸć۠ɚ޴˵ਚӣʮ͙ຄÛ}۷˪ਜ਼ގſ،ӵ௖Ұߦऔ֌ϸٺݣબੳघ৙͵Յ૤Ӂݰӓɏբˍͬ܃ټŏͶͅÖऻ؍́׽̏൯̗੏ۑ෇ƋᅛǮుPࢇÍ۱׽ੳω௉૗ॵޡ܌Ɛഘૄᄈ۪సČݔЫߍ֟ˊ˜هતп൸ŨࡆीÎ؍ժ̥ਣսԁ࠯ͽय؁ٓ֍܆ฤ۞഍ƒणĹջӆBନύʐ֛ƛ˧ɚٙىʱٹ̕ϡΥŽˏ¥čȹ໽A౥MϛƷࢵ؃Ŀßˍ͝ޗBࠛGϛƅƊǑøʯeďષлࡽſউ҅Ɂ@˷ƂĥŦnĔȂ̎ЂҦʘӺǙܴǵނ࢕ЂľƬūĺɳ@ǛƆ¥ȤǍēɥ€¾ĊȡĊćɚٵːڹ˪ࠑ͘߁̨ݧʃ˝Sਕɔڻʼnࠁʺ࡫Ɔו¾ʻƜƫҤ˳IE͓჏BᮝA᭯@ᡃ@ᠿ@៙@ᢡ@ࠛ@᠁@ᛷ@őF྽ࠜ׵δຽΐҳݖŤԨ੻ΨƧڴ؎iѠҲКwՌෙ՘࡭ॠՁ׾ޑϚ֣ΈѿѢࡇ˕ࠇҹݛւדπࠋɸࠟ|JⷎNᷲ༬ȭ೘Й࢘û݆ΖৰˀఢĹ఼τ൘Ⱦ־ΑظȠȊЄ׈ęෆݫ֬ŖّਔƐ͆ʖৰ·౼Λዸ̭ୄƛࠖÄଊэ஁зຶǷᗘIJܒƦࣆԋࣴьࡩΦժ˼৾žڦĎڴȩࡊҗरä๢ϛಬƄ௬oĭԺݞƦದ˵KߑՖڠڰuϞࡊ࣑԰কͺäघশ؎ૌƇࡘχଞॅݗЭ༠ǝ'],
['@@нϿሎʬୠщॊіސ˟یࠛфΒ׭ࡰ݊Ŭ࠲Ƈश͹ՆࠉʼץථеະЉĝσൡã՚͓˱ູ̯Ƃฃɪঋ»ཅ˷ᒃű๻āҕІଫɮݙģਛږ֔ĚಘƜஈ›ƦྷȞᅗã஗jѷ̴ዎͲಗ[ืɚ۶ـגͮᖬԠ࡬Nj'],
['@@݉ևಹך˸Ş૸’ٔȁ'],
['@@öɵࢿ|ࣟjࣿőʑ¼ऍѾ˜̠ИÈነěชң'],
['@@ڎԽޤڴᒆΈ෺ࢅůջဒʒߒͮሀыୄЏŊν༚Ȑ࢘՗᎐ܸͩ͹ߐ޻໯ϹጘչೲȁீޙೖÇʽכ้ঋਗά೓߲ઙĿŁӕࢪӥଜϯΌɟմࠩ́׿੕ɪᑏڨஎܣ࢔ԕƎ̉ᗱͲᅩӤ৳Ц̌ʂయќ௥Т`ʑᝡƅ܃˾ֆؤ཈dႸņ˫̜̊оચࠊɳϊ͕˾౿Рၳ˺՞ɆࢷԺ݋´ڏ˸҇ʛ຿ŅᵝȈᄫʚഹŴۥ̐࢞Ϧ஝Hˉ࡚٦ݨࡺ΄ᓪɢأի'],
['@@৊ǯຄńɖʑ޷ЕαƱݳ൝͗߳ê׉͎ᐡٮjˎ႖ĽएռР'],
['@@࣓عय़ŒԽ݆`кѮΨ࠰ɮც‡ྈȱళݟ৉Ǎ'],
['@@ᕍЙѷςኹѺήΤ׌ؘܰւࠑԦᭊƀ஬ǧᒰ±ࠄʑࣖΝ੍ɃᏝןਫי@ν'],
['@@ҙ͙௝Øৱɖ҂Ϛீɨܼ̬̍ˇ'],
['@@ٞϵ€љϣس൱đࣗƈjӬ൝ÝÁٮࣜౌ˺ஂµÜŎ'],
['@@̙͢ݠƘࢢ™ƪЩԝЋ᭗Žη౩mŅ˜პϊ④ij୯Ʈପࠐ߈ɾᛄ˳๶ӻฺÛறߨޔ̪ࢄĭ˲Џ'],
['@@ढ˓ကFܨˡȑ́८ȍՔȧଊ™௬ë೸ǼႊðീÏ࣒ͅȊ΍ԽɟభǷ੽ĸᜱŻႫcഫļᖁ˔̃ҦĹжࡇξ჋ĺঅʼ͂ΈႾÁ'],
['@@ŗ٣٩̇޹£༝Ϋ഍ŹଗǼ@@ුؼႮծಆ[ସŬ'],
['@@ϣy༽Âɡɼၜ]מƻĵĩ'],
['@@༩ʋఝ˔ڼˎ௮Đஈſ˩ʥ'],
['@@৽ǏඉBbŤࡴʦҌદǝ'],
['@@కǥۃȚέ͂áΎજ‘ӪÅ৐̇ɫ̣'],
['@@͜Ε൏Ĥ൩˘ሏŒߺʠ৫ȮÕ͐࿶ŕᗢ̫ٞЍ'],
['@@০˕ଽʟ༇ك๥Óდņࣗ΄^̦ڔɢ໡Oए˨ՑϠ׌ώ׊ʲࡴÎοȖዜ¨੶҅මǵ൞ǃڒև'],
['@@ᖢßᅮŅ໤ɫ™ɡᏅη᎙ǟݻȉᆬJጡԙേʃ෯ۇႿƓՙǡᡷěୈĿׇƭ۞бߙ˽ಛʃЋ͡୫ʣŞȏ෬lȳᖟԋᔧɴឿŻధĸཟªĿЖ༊Ȑб؆ԢÐᖤγ଩բഹLjڼ͘๰Ȩʄ̊஋͠ΥѠᘞ—ڒĝ಼̪ቃĬ᰽Á๣˸۩ͼগʘȁ˺దLjঘ‚࿲ƌ̺ਬ©ࣤɽٔҒૐƈບĢᢲ–Ҁĝ᝚ƚᆔÁᆒÁ']
],
'encodeOffsets': [
[[
-65192,
47668
]],
[[
-63289,
50284
]],
[[
-126474,
49675
]],
[[
-57481,
51904
]],
[[
-135895,
55337
]],
[[
-81168,
63651
]],
[[
-83863,
64216
]],
[[
-87205,
67234
]],
[[
-77686,
68761
]],
[[
-97943,
70767
]],
[[
-92720,
71166
]],
[[
-116907,
74877
]],
[[
-107008,
75183
]],
[[
-78172,
74858
]],
[[
-88639,
74914
]],
[[
-102764,
75617
]],
[[
-95433,
74519
]],
[[
-123351,
73097
]],
[[
-95859,
76780
]],
[[
-100864,
78562
]],
[[
-110808,
78031
]],
[[
-96956,
78949
]],
[[
-118987,
79509
]],
[[
-96092,
79381
]],
[[
-112831,
79562
]],
[[
-112295,
80489
]],
[[
-98130,
79931
]],
[[
-102461,
80205
]],
[[
-89108,
81572
]],
[[
-70144,
85101
]]
]
}
},
{
'type': 'Feature',
'id': 'CHE',
'properties': { 'name': 'Switzerland' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ƫŹȳϞƵіwá΅χƙةŀǻ͹ЏơƄһ˵Л¡αǶ˽ςБſ^ϠؚҾɈϤûɲƞ܎MǦǼ࣒ʱ'],
'encodeOffsets': [[
9825,
48666
]]
}
},
{
'type': 'Feature',
'id': 'CHL',
'properties': { 'name': 'Chile' },
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@Bም࣒@Ԓw˧ͻܛʻЭ‚ӻä؏ʨ࢟ŨੑҸ࡫Ҏୃशۘǭ୼֗૜̟ѢϬ˘ֺޠΎװı'],
['@@͢୅؆ŘĺɁ˿ࢍࣵг€ඓǫ˓ʦ͡ץԹջ߁̛ރĀ߿ԫࡹϮฏɔƵCޛӑࠍpۯٍշFޙʮࠏԉ̧ɣݡȟࡱƚ৿ͷǡȞॹϜ͇ˡΛ϶ǙĚ̓νǃĜӱ̫૗ѽܓĮыˇՑ٣υôࢹ̧̐֔ÄgؽΒө᎔őުſݝPЙȷݷ̣Ɖ޹Σoॅ˚१ג@@ਲ਼ӔˁՒʄӰх֒Ņ෤Φ߰ࢴٰౣʔߞݒ˸ඊत̏Ѯგ֝ɠʿ਻ՉŠ˂ல˺༒ϮָʍࠎéूΠ„Ԩപ׈എΤబȗ఼ʤۚĵਞӮਆưྺ˒ნˀሤÕ൘ǩ஄ќɌɦњЬֱŐ؅ѴΡ˅߽Ҍह']
],
'encodeOffsets': [
[[
-70281,
-53899
]],
[[
-69857,
-22010
]]
]
}
},
{
'type': 'Feature',
'id': 'CHN',
'properties': { 'name': 'China' },
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
[
'@@ԑഓΫۏѷ܂ĩخӶࠜڦَϨʡƣԓ',
'@@ܩЗۏʺyܢаϠࣾɾӚoȊ͍σσșӟ'
],
['@@ฬˍ঺ׯͼ߃౨Cܰͨ൸ʜѳݱ͙̭˽֡ࠇ৵ƪܝ̑ɜܙť঳ѕwLяթӺͯһαƀѹܩŒЍ˂ֽ׭ऑҋۃա୭ʑأϽࣝɭ҂ϴǭ͞ږ֠ѹѲܷ̓ॉ׏ԫթ࠙¡ѓϻѸ֩یƏ„ϕڔʕस׶ݚ͝լuƌѱஓɻϻҏࠇућיࣜҥͦࠝԞޓ֮٥_دՅɯȪ҃ӶʻŻۃɇڗҷ÷ؗࣧڹિޭোିޡୟۻृĩԣύ̃˘Ӈй୭сࢵŹ˻ࢱҭ·ə؎Ȧ͘ૻːЇƍࡍɔЏ΀ƄӜޏƶЙܑ̀҃ࠇīڡJ҉ȳѥūŶ॥҃x÷Ȣ}Ύ؝ʓεƸر͂ʔۤՏǎȧޜࢱƓĴাߔۮ”ۚ{٠νȨ˭ӶӭÙࣟŲ˴ΜϿԺ׳Ν۵ȸॷ՗އسڳĿοɦѹr׷Țґɇ֋رëڌԟǭওĈोȖڿτٵǔ˯ЖҽŦࡓոکʴΑȩଢ଼טࠛՒɽऐ׾ő‚іͭјĐۆࣙঠ൧ͼʝ٦ةϼƫʌųӎˆ͜ԛȔ˟ďɇިʈȔśȠߤЈ׈ǐࢸő͆՜ંIJͮ̚೜ҔŠȐãӐּɔݱฦဘͲјȈ؆ຒဠˡҲϞ¢ࡆۦĀٖ֔͢èɚו۸ѽப̿׆ڱ͕ঙ̢ηূƝଆŝԻԲġϤޟӲӿऒnჄȉ૤Ŝࠦůఔԛ৮BόʽঐҌബ̈ాŒঘ̒׾҈ך˰Ƌˤˍ͔ѴըӀùࡺǝ࠸Ѿ౲͚؞֊נʆ௠ŐڐĥĠ̘ݿזګː٥̳ࠣžӇŃɏΆר࠾Цو৚̓ஆՎQτݸࢾҲːWҪңȦۜмਰƲ૜vసʡ݈̱԰ࡏ̀α̊ԩ̶ࠕ']
],
'encodeOffsets': [
[
[
124701,
24980
],
[
112988,
19127
]
],
[[
130722,
50955
]]
]
}
},
{
'type': 'Feature',
'id': 'CIV',
'properties': { 'name': 'Ivory Coast' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ϣUוǒ՟Wহƥ׍ʍ̯ࠫNjvÞۖĄŀ}ͨΣΚˉÈʕɲǾώčО ʔƄB¸ξÝnjĄŜ̸ĶȹڨȗΎæ˸ǘÞŊúɸųٮOƸʖƢgʎĦžΫȞłΌŰϚǽƦ˥Ϙǯ̎ɄϾŒֺɏɠ஡Ο۷ɕेθܣ›ͧ'],
'encodeOffsets': [[
-2924,
5115
]]
}
},
{
'type': 'Feature',
'id': 'CMR',
'properties': { 'name': 'Cameroon' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Ľ°ӻŇԝŒЋÅ൅nŬڒ͟֊ϧƚǟϖɋŦXɶɎתЎ߸ʒRԄӮ͈bҾΉ־˲ĀΔȌͺžь҆ΊǞךDzȊŢѨɜ՚۾ٲ¬˨ĠƲͫͰ‚ˌʂ¶ͮ՟Ê֏‹֏ҜޅҷTʁÏϥČǻЅӸөμƛŠΏˆ׃ſɩх࡛ȫƳÝٳČΝåʡЈѭð̴̟џϨ˓œϥĘʏÓґڛȤڷɜ੗'],
'encodeOffsets': [[
13390,
2322
]]
}
},
{
'type': 'Feature',
'id': 'COD',
'properties': { 'name': 'Democratic Republic of the Congo' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@»ঙͶŕˑ̗͓ɟ͍ѫǯϷ±ګț͍Oهʍɹ‹ԃŗÝýҟɄϡÂ৥ưޝċѧǘӣӤҹҒ੕ͥĒ૿ƙɣĵʇՙȊχƫষĻࡇɨƫט͝ɲƴìٟࣟR·Ҧ̳ΨٟŠȋѰԣ˅ڧŞ˫ϢՕüϽqµʾ́rϥºԳųιtȻû®ৄ˩̸ÕԬŬԒǝ͖eՊ৳Qò̢ѕG­ƣԵɁӧűȿҫŠˣş։å͏Ѱȗ˖ʋԌȷض៛\\̍ķʑh΋œşʼɊʀμƎɎ̪ǰɚđ˼͐ҜSÄʃ̼ƩӶՄӨШɆːƒ۔θࠆϬўքМĪˌt̰Ǝ̆«ӊŀݖǐԾʦ҈¸Ԕúה͜ѐҊ˔۔˷՘ؚ̳ĉظǏʦԖŘÞϦčनоͨDZ˖~ŴȲ̺ðلėբoˤĚԘۙϘķɤƖϲÅҶDzȦΫ݊֏'],
'encodeOffsets': [[
31574,
3594
]]
}
},
{
'type': 'Feature',
'id': 'COG',
'properties': { 'name': 'Republic of the Congo' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@̿˾ʩƗͻγۏࢸٖҪ̓֌˾ɂ֦ĺäό҆Зݐ•ʴЈł֒ĝڀЉӺζ঄ȽǘسçɻѢÔξ੘ڸɛڜȣÔҒѰ޲ԆѼ֪Ɨդ±·ԓʥ҇ǏԽĿݕ¬Ӊƍ̅s̯ĩˋփЛϫѝηࠅ„ۓɅˏӧЧӵՃ̻ƪÃʄқT˻͏əĒ'],
'encodeOffsets': [[
13308,
-4895
]]
}
},
{
'type': 'Feature',
'id': 'COL',
'properties': { 'name': 'Colombia' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ΫȤЭ˨ʅƅ܉Ŝȱΰƽ_࠿Ӓŕʺ̼ڛтȢ̦иÊΞՆ͐Ѵ̳ȦDŽӦȏސǸɚƃ܄ͻ҄ņТ˔ÑǂʠțӶĺŬѢـהΌĚT˦ƺ܂ӖϸՊfäǪڂéڌъ͞ȊОК̖»ɚɛǍ˱գƕɇп͗ʋʓ̷Ĺ׵ɷӭѢÇņϭȄȁâ͹ij̵ˆǫȸéȨ̉ઊĄӦŃעܡͼĚ؂­ӐĪ̔ƟƱҍȇ˯ß׻ǜ֑ʆʟ†ȉэл̨ȃɠ̋ʰ࠹ǁĻǏӸɷˊ˥́࿕lZԿӰē…͏ǙĔҿƑK؏ώ̫ƀӓoηϙᘯп҂ʣpժࡤٟϾԍị̈ƤҧɝصŀӵࢤϳɐˍІ֑Њɡā'],
'encodeOffsets': [[
-77182,
-155
]]
}
},
{
'type': 'Feature',
'id': 'CRI',
'properties': { 'name': 'Costa Rica' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@җȆǟǮĬƤ‰ȄɷȪͥǔ́ņÅʖəƮÄʑǗȩȓɸˑĊŗǞLʮŎˆʁŠȖnjŴňֆɝȖŊˊéƔǥʜÇȪDzɈҙ͖ͷЂΩ͗õLͷǪűűıƱëǟ©Ǖ'],
'encodeOffsets': [[
-84956,
8423
]]
}
},
{
'type': 'Feature',
'id': 'CUB',
'properties': { 'name': 'Cuba' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ܨÑڊW߄˹̭ͮ޺Ĩ̔ȡ܈ԳԺϛˢ\\ԆǟÕʁئ“ٌ΅ıȟ֑Ń֡¥׃âளą֜Ҷ΁ɔէÈ̃ʐȥӎӃ޵ɦʥǬભž̋ǐ̀ɀࠗ¨׿ѧΏ[ťȳеğΫĂѺʸǼ̤ϞȈіǎَĄȰĢ'],
'encodeOffsets': [[
-84242,
23746
]]
}
},
{
'type': 'Feature',
'id': '-99',
'properties': { 'name': 'Northern Cyprus' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ÐJŨȮ؄Yކʢ֧ΧÔƿęˆLJÙűj¥iĎѾNjVɫïƿ¬'],
'encodeOffsets': [[
33518,
35984
]]
}
},
{
'type': 'Feature',
'id': 'CYP',
'properties': { 'name': 'Cyprus' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@€ãࡱͿЩŊȟͶЎŒǀ«ɬðnjUÒ½j覎ŲiLjÚ̇'],
'encodeOffsets': [[
34789,
35900
]]
}
},
{
'type': 'Feature',
'id': 'CZE',
'properties': { 'name': 'Czech Republic' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ϯǂЁ©ٵʲ̏Ùҿ΅ر˔ӃΰѕȬėΠƧʠؒǾ̸Ⱦ׾ǎɂdžɜīϒĖЊ˓ؼñ¿ɳҘǧŲɒּĥĄʿز»ϮЯʡCŽƯȕ—ÅȑLJ¡wý˹ēϋbšȁ'],
'encodeOffsets': [[
17368,
49764
]]
}
},
{
'type': 'Feature',
'id': 'DEU',
'properties': { 'name': 'Germany' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@d͗ࡔțS̗ࡢǂҾɰॊͧІˋȞёɹɣ̨̙Ⱥ҅ß́Έ՛ϑĕɛĬɁDž׽Ǎ̷ȽؑǽƨʟĘΟіȫӄί̑ϯ̟ŃŢշýƛʿǤЕ~׷ƭݍ–ţɛыɺʩ±࣑ʲǥǻ܍Nń״ьֺ௅ƸЇɘ´ςǗȐĨ֨ƗࢢԎ@Ɉ͂Ⱦޔƿ˴ǐDz۰°Ƽȃ֮вȓ̀ӈٌōՠŸ'],
'encodeOffsets': [[
10161,
56303
]]
}
},
{
'type': 'Feature',
'id': 'DJI',
'properties': { 'name': 'Djibouti' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ȤʹΑӏȩήɯ̱҇ȅƬȭÏҷb_ʮßɶ˴Ѐ̐ϊήñʪȴ'],
'encodeOffsets': [[
44116,
13005
]]
}
},
{
'type': 'Feature',
'id': 'DNK',
'properties': { 'name': 'Denmark' },
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@ԋڹ࢟ӄŝΒ௼˨ˎу'],
['@@ȵ̓ʡĞ؁؁ɮХ՟ŷًŎͽҲ}࡬Ɣɪʌʦ݌À̐ɴڮʂƒѝʟ˙ĶɽҘŵ']
],
'encodeOffsets': [
[[
12995,
56945
]],
[[
11175,
57814
]]
]
}
},
{
'type': 'Feature',
'id': 'DOM',
'properties': { 'name': 'Dominican Republic' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ŀƞپIӾɏɜtƴ̕Ҡhʡϐ‰Ю̷̯ͿЍǼϫ•ˡ¢ƱƵ͑½ŷȲˣťͳֻɏƆ§ʎjɬɍʦȲƚÞ͒óҜ'],
'encodeOffsets': [[
-73433,
20188
]]
}
},
{
'type': 'Feature',
'id': 'DZA',
'properties': { 'name': 'Algeria' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ᮩཽᝩ࿷இϑटćU՘ϵƌԹʊȧЀᬻᆴᬻᆴṕfnj@ÊQ঺ബب࠼Ÿێɦ͎тচͪ˜جӢòϞ̶સƚƸ͜ɛDz̃ࢲ¹Ԟ́ՠ߰ҠࣦƢՌΎ߶ʰ෎Ƭർæшůߊͨ࣌P΀ȝֺ¾ǟћƄߟȡۙԭҵôمۊԃRȯԮ͹Ϊຝ˖ݏ°ϵƧۇÔϥŃҟòՇͫΗӺؓŽέ̘ҵϼƸڒϷςՃ'],
'encodeOffsets': [[
12288,
24035
]]
}
},
{
'type': 'Feature',
'id': 'ECU',
'properties': { 'name': 'Ecuador' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@҂غǻξ͍ϵԉςǞʀƙބ̎ŴƺԼ͆զÍ΄ҢǸ׀Ͱࡀӑƾ`Ȳί܊śʆƆЮ˧άȣŞٓʽճࣷ࢟য়ͧԥܵǃ֣Ӆ΋ΙъͻĞ΍áw̮ʈȨıΔ'],
'encodeOffsets': [[
-82229,
-3486
]]
}
},
{
'type': 'Feature',
'id': 'EGY',
'properties': { 'name': 'Egypt' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ɽͷǹىɫѩȝƥ˩˔ϛϒ׵ஸđùΐࢯԪࡋٌವ̴ҙ˒ӃݮछǗƣ‚ճ঒ݭƨǣΏ@Ὁ@@@ᶶ@Ჴʥڲɐ԰Żά̤Жb߲ɝ࠲ʛϴſ٨ˊΌʊݎêװŃɮеȜ˜ڨȣټ³аɄւ෽'],
'encodeOffsets': [[
35761,
30210
]]
}
},
{
'type': 'Feature',
'id': 'ERI',
'properties': { 'name': 'Eritrea' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@˻˖ΉӰϋ˒ɏܷ̄ͶֻXȭǬӯȡԛϢʽط঑ǬęʹβఀĊ֒ˆʴؤƐьӒӦঃɴޗҢУବߏҲӍҖӝˀ˿аʧʩȳέò'],
'encodeOffsets': [[
43368,
12844
]]
}
},
{
'type': 'Feature',
'id': 'ESP',
'properties': { 'name': 'Spain' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@¦״΃θஒ؆ਊƱ૾NࣂƝۦªമƒͰ͛໺ϡ̨ǺीϝআŊ®ӥߓ֓ઁǯõ˱ԩү͕ہ͞ӑӟϑǹճىǗש٥_ߟhՃ͍̓ͅЩê̵˴ʃӚ޷žé˦̶̀Śɬ̃ʢɶրͳԌδè’ЈƎŬZپϲɪɻфөˆƝŁӹCɁЬ΃ū̥ɇ'],
'encodeOffsets': [[
-9251,
42886
]]
}
},
{
'type': 'Feature',
'id': 'EST',
'properties': { 'name': 'Estonia' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ĮӸ̱ŁՓ̘ñӘਫ਼ɼ੔Ũ࣮Ƒࢂ|Ŵƣׯӝʞ޵ΫˉۙDܡ̸ρļ܏Ʃ'],
'encodeOffsets': [[
24897,
59181
]]
}
},
{
'type': 'Feature',
'id': 'ETH',
'properties': { 'name': 'Ethiopia' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ԜϡӰȢȮǫּWܸ͵ɐ̃όˑΊӯ˼˕̏ω˳Ͽàɵ`ʭҸaȮÐȆƫǽ̴̕ҧ̴Й̛͎ᩨঽۺNᛛᡃફ™ݟףաeɯ˅ַB͹˴ލΙʝΓ֕àȃĬȟwˇT੟܌ב@˹ˢ@ҾѧƘӻࣴϥȚƧʹэЦԧÒ˸ӐҀrŲʰ[ݲʞࢠЊɾĎ΄ήٜԔи΀ࠠƆܠ঒ǫʾظ'],
'encodeOffsets': [[
38816,
15319
]]
}
},
{
'type': 'Feature',
'id': 'FIN',
'properties': { 'name': 'Finland' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ūיಀ֓ޡى঎ख़֡ܛݴس΅յఘֻ́ѓޭӟᅡੵໃá๑̯ൃǯӡҞ߿ˠȈࠢСݶАӪނՆ኎࣮֖Ǭē΢ୟЈ˳͜uಒ಻ֲ૩ЪԊɞतѻલ¦ࣘȭߠϊЬ؞ಬ˶઄ͯΡכ'],
'encodeOffsets': [[
29279,
70723
]]
}
},
{
'type': 'Feature',
'id': 'FJI',
'properties': { 'name': 'Fiji' },
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@̂ʍƓѭԳŗҩļąτ͖̀ϤĻȼƐ'],
['@@՛ǯŅ̼оǤˊ°Ӱˀ@ЧՕȷ'],
['@@é­@ШǨžĽЗ']
],
'encodeOffsets': [
[[
182655,
-17756
]],
[[
183669,
-17204
]],
[[
-184235,
-16897
]]
]
}
},
{
'type': 'Feature',
'id': 'FLK',
'properties': { 'name': 'Falkland Islands' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@৘Ԍ܎ȿԌʹڦϙʥ̋ଋʥϙ̌܋ϙпϚ'],
'encodeOffsets': [[
-62668,
-53094
]]
}
},
{
'type': 'Feature',
'id': 'FRA',
'properties': { 'name': 'France' },
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@ˣ٭ϡǠș֢ǜ̺ը͎Ɯܛ'],
['@@הЅќà݀ϥȊñʎjЈɗெƷыֹŃ׳ɱƝϣü‚ɇؙҽВƀ˾ρ“ʁʚ̿̅ʯɐٱҖŃĩηݿӅစɬ௧˗ĩԑঅʼnिϞ̧ǹ໹Ϣͯ͜ѢԎdžူࢁࢤإю౹͒čؖઠǾථɏˇॎߌέዠپʨێܾǞŪ̑ϸ_ϸ͵']
],
'encodeOffsets': [
[[
9790,
43165
]],
[[
3675,
51589
]]
]
}
},
{
'type': 'Feature',
'id': 'GAB',
'properties': { 'name': 'Gabon' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ࡹࡔ։ۚԙࢄ‚˨ǾˎȲؔǜخ˴¶௢SOৠЌÆԞőӼňľ¯ÓνɼѡشèȾǗεঃЊӹĞٿŁ֑ʳЇݏ–҅Иãϋ֥Ĺ˽Ɂ̈́֋ٕҩ'],
'encodeOffsets': [[
11361,
-4074
]]
}
},
{
'type': 'Feature',
'id': 'GBR',
'properties': { 'name': 'United Kingdom' },
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@҉ֽًǦԱ[ǦҊǥ҈۴–ࣔԳ'],
['@@࣋ࣧࡦŘऄIɕۅݯݩࢄÃäĕݠ঱ֺƇԬढ़ʈͧৰDžķ՝ѓʗͲѣݱѯ૳Rෝɱϻǒ։ϿޥĪם͍ҁǘ௼ࢨݪǺOBಽƔʃͰ࢜ʺҡҐdžռఢ÷D@ŮӤ֛Ԯ_\\৵ƨȧɬ̨ϒˡɴҍЇ·߶щє̨ࢆٶھڤá০ì']
],
'encodeOffsets': [
[[
-5797,
55864
]],
[[
-3077,
60043
]]
]
}
},
{
'type': 'Feature',
'id': 'GEO',
'properties': { 'name': 'Georgia' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Ųάȿִӟ̲ҭĬ̯ʴĺIJ܄ƝఆƋଦЕƦƻԚƂ޶ǭʴ·Նșɓřвғŗıҏºصʎȵƍଢ଼ſ߳Юࣅ¡'],
'encodeOffsets': [[
42552,
42533
]]
}
},
{
'type': 'Feature',
'id': 'GHA',
'properties': { 'name': 'Ghana' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@೉ӯҳ˽ݳʑݡʆœͨηܤɖैΠ۸ɟ஢ŗنrӊฤ¢ϊÕ˔ƊϴáÕʿΖџC؍Ąڍɂ̫ȅݳäйɢՓȈ̍'],
'encodeOffsets': [[
1086,
6072
]]
}
},
{
'type': 'Feature',
'id': 'GIN',
'properties': { 'name': 'Guinea' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ʃtǡͷʁJǏǴÈͶΗԨɕħǵmɳ³V̮Ƈɘ‚ʔǻΜɹ̜ڥDțǁɵoƝǷīɹ҅σρӼ͛͢ɋŊȿǖħϊūȂʓƐώЦʮeɖƘȄDƄŎï˨ĢĖd˶МU؀ȱȄlÚĤҜáŨ´¶̭ƆBɖŒƔƒɸɇάãɲǺ˖ŒȬŠǚuȈȁĴɳΆΙǣɏ˙ǴĊŀį«ʡʲʍǗÝå˷Ș΍Ⱥڧ̷ĵăśÞNj·νƃA'],
'encodeOffsets': [[
-8641,
7871
]]
}
},
{
'type': 'Feature',
'id': 'GMB',
'properties': { 'name': 'Gambia' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ņόࣶzȎȦˊ`ͨȷʼIˢƚǞʏεȋιdέǰ̷ȗƭQȫŝއl'],
'encodeOffsets': [[
-17245,
13468
]]
}
},
{
'type': 'Feature',
'id': 'GNB',
'properties': { 'name': 'Guinea Bissau' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@҅ΘΝÈȕʀLŸʯǴÁǶѼƌ˦ɦĨ༈•c˵ġĕð˧ƃōȃCɕƗʭfύХ'],
'encodeOffsets': [[
-15493,
11306
]]
}
},
{
'type': 'Feature',
'id': 'GNQ',
'properties': { 'name': 'Equatorial Guinea' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ƿŴ़̀െmPয়௡T˳µ'],
'encodeOffsets': [[
9721,
1035
]]
}
},
{
'type': 'Feature',
'id': 'GRC',
'properties': { 'name': 'Greece' },
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@Ҡ˱ٺ¶شÑqƣҜĶĿʛ௃íTƒਁǎƺΦ'],
['@@ʹՁȥĥԟ|ѫĀৱɓ׌ҿяƋҳAѻўƿȁȊԅрЁ̓ǿҴϯжʑ^ӅޥɠʜѕՓĕ͈ݏ֏Yۍμ̿ڦƧ֒͝ϮљӐÉʆϸТ¼˚˘Ũjɚռö͌ȀҖgƒƦdž„ت{ڨɲע̉ކĀVмЦɝ']
],
'encodeOffsets': [
[[
24269,
36562
]],
[[
27243,
42560
]]
]
}
},
{
'type': 'Feature',
'id': 'GRL',
'properties': { 'name': 'Greenland' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ᬜԆ᱒›ੴ̴ᲈĄ䀦Ŀ㉊ڗ༅͕ộ™⭏ćшƫᲐĠᡚ́࿈ʴۦ̝इӧᒞ̺✘͚ᠼNjҾΫ⃝ױӃȕ᧑ơወ¡ছؕگկ€ध৚շಽ“൧ˇ༂ѽȢ܋࣍ýઞܡህÑঈ΁˟̑இŽ୥E੆֩\\Ϗပΐћɣଌȿ઼ԣ͈ڱກlj٫͖ਣӘ˼֭উѵ•୆¯ܵᗿڏឧ́ओIࢅ͓ୟࢱᅵכׅ“૧ȷ஽ȝܛԱ[כыտോڧͺٿϗ۝љࠍஅ½఍ۈဿLࠁҢ֕ࠐฝਲэոŗݮ୓ޢ̢ئ֗̒ࠪচొ̺ͨΘǬڀॡ̕қůݯţਏ˜Éְ͢҂ެ\\႔ɟ෿Քݩ˾࠷ş۫ȼम޴ԝ̺ڗ׈ৡࢼ੯͚XΚᖷӮᄻÖᖟ‘×ইˌวՈᕂ˄ၚ¬≹ɖ቉΄Ś͜ẊИᶎИ̪͘ᗗ̠ܺͰ᯲ז௢ĚΓϘጲɜᣚƂᣖRࣺʽᕺҨፘ̽୺áპ˙ፅҐŘή'],
'encodeOffsets': [[
-47886,
84612
]]
}
},
{
'type': 'Feature',
'id': 'GTM',
'properties': { 'name': 'Guatemala' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ћƦԻfϩǖҍΌrʖĮȠšƾКۆ઄Ft˸Ƌ¾ġǺ̵Ț̹ˬϜDBӂ޸BަUOڗßॅʤ@˚ƱòŰʘŃϥ͍ЉɻÏljâǑǧɇȟ½¬ıƿġ˽Ƀ}ŭ'],
'encodeOffsets': [[
-92257,
14065
]]
}
},
{
'type': 'Feature',
'id': 'GUF',
'properties': { 'name': 'French Guiana' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@͉͑ГÑŗʀȉ–ʹɩνǦɈΪòϤƢή͛ӸáֺѪܠ˸ğؤȥࢸۿƔ·ӻޑʳأ'],
'encodeOffsets': [[
-53817,
2565
]]
}
},
{
'type': 'Feature',
'id': 'GUY',
'properties': { 'name': 'Guyana' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ր̯Դյzџ̈́o҈Чͪ̇Ƈݱԛɕ°ȣƹџϊ؏ːAŎӃԢܳȱ‰ҫî˙ɡϟƥ˅—ġǑЭ¦ԫЀÓϴɋьƆܐɸ̐ȕϸ˿ŶŊτțȘѩ™ْ֩ɬɲiϲԬƊȾƾ˽̸ô̬ږӲ'],
'encodeOffsets': [[
-61192,
8568
]]
}
},
{
'type': 'Feature',
'id': 'HND',
'properties': { 'name': 'Honduras' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ơˀʭòÐʹŗĞǣÒσij‹ŔʩƈǷǚʛìǨɈáǒÐNJЊɼϦ͎ĔȂƨʊ\\þ垦ϸùϲv˒ĢİĦˎ©ȪÉɘnǖòϨśƄkʲƿʐį̏Źɜɳ˽jśŕ̇ŋɃAȅŃǙœƛźĕ{ŇȩăRaǥ̉ɳƹıđĽʛǞǹɣǫPȟqlЭūQĿȓʽ“'],
'encodeOffsets': [[
-89412,
13297
]]
}
},
{
'type': 'Feature',
'id': 'HRV',
'properties': { 'name': 'Croatia' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Ȳ͗ˊʇ͓̓ϝȆׇ[ܟƔϽmǻǧ̝ȖǫΑЪϽǼʹϮ̽͌ȃ͆Ηݔ͇ġƛ߃̶ӣ̢ޑʠ۹ؤǞØϥΞe˲եƄʱγʝˮn̆Š…Ƹƚ˸ƍͤgGɼ̈ĒĈͺڞɠˊĻؼέۜlj̼Ų'],
'encodeOffsets': [[
19282,
47011
]]
}
},
{
'type': 'Feature',
'id': 'HTI',
'properties': { 'name': 'Haiti' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Ԣ™ܰƁôқÝ͑ȱƙɎʥiɫ֏ƜЅÍԡÔϽƿ҉ʾö˔ޜśيã̢ȈϧθP͎ՋžȌɶ'],
'encodeOffsets': [[
-74946,
20394
]]
}
},
{
'type': 'Feature',
'id': 'HUN',
'properties': { 'name': 'Hungary' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@˨ըǍǼӂDÜ΄ђɋ̲ğ۸ļäǚͮ~ЦžĜÃЂŀȠȢˠ¼࣒ʭǴĒҲɭÎɣԡǭЉ֫ԕ֭کǁԽš١ə̻űۛNJػήˉļǍ˴ƗV'],
'encodeOffsets': [[
16592,
47977
]]
}
},
{
'type': 'Feature',
'id': 'IDN',
'properties': { 'name': 'Indonesia' },
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@Λe૝ך޴ǒѴʭ̎ʭ»ɩ'],
['@@ܙȁijĶø˸ΰԢࠨͬĐǓfʫշع'],
['@@̢ɣԲèȼΥॿǛ׉őҍP̀ӚҤPɤ̖'],
['@@ūұ౅ʅૣľE̬ښǪՂʥ֔Üݬ̮'],
['@@ྔċȂΌ༘З̪կీƵਐӿय़͋ऍ͸ݻwࢍØ޻ưঅ͎؝ČΓŁ໕ΌƣΰޑØּߤ৶·ڴ͡ΒÛŘ̗'],
['@@ѝֱćنƬ̠Ǭ˴ȒʗCЏ'],
['@@̿˥ׅƸǏΰࡘ¢Ⱦˣ'],
['@@̨ٝۿΌۯìӃÅׇˆȦҦਠ”ऎʕ'],
['@@ɼയ࢈ԉ۰ࢼ८ԔݜBܘ̉خ̛ࣘLJbᩑbᩑݟې࡟ǜȷʇ੡}ΦۂՈɺɕࣲЕ۸࿃܆ۗêృަʛУ͑óȏ̮GκٛЮ̢ࣞ״gëɠ௵DͩԄݥƺΡдଈȰњ˜ഘ·Ƃ̹'],
['@@ڭ࠭كlj߱ǐඓ¥ܽŧţٍݪݛҒϠ༪˸çϯλŪιӯ͙݉ߒ੿Ƶ˿ݲॻQտ҅ʙ̐͡Мی࠙͗ȻɶŊ͖؅ӲØࠌ֕ʭîও”றՓũίʚʌޜŽ߸ΛPʻֺΎվŤښф౎ǮΎ܎ذپʛ੖śॴ–ࠨ؎Ʀȉ'],
['@@©ܽџĈŷԝΌѷɽĵ͹Ւʟ੺ǚڤ˨̨ÔҝӸóĀ΃'],
['@@सާহį˫ֵšݿַ߱u࠷͕౻ŭ̚ॕϙͫԤ׳´лːৃ̟̩Оս¯ۗĬŹૺнɺЕܘŝ݀ĮުԂ֐Ɩָ֗ӅըǠ՜ÑӪъЖôߒɽۆǶњୠ͔̈̆क़ॲ@ܰƙӍݷآߓơϭ'],
['@@छkۻ۰અۊέԚٍۄзؾٕ୴۪݅ʙܠ̳ڀݵՊѭܘمҺࢗऒóђզ‘ಢNjݔࠓٮ֫ҪΓߔࣙࡢ_ۺֹӠ۳٘ϥͳۉӖ̞̅sƜו̊ҵؠõФՏɁ‘ಟ']
],
'encodeOffsets': [
[[
123613,
-10485
]],
[[
127423,
-10383
]],
[[
120730,
-8289
]],
[[
125854,
-8288
]],
[[
111231,
-6940
]],
[[
137959,
-6363
]],
[[
130304,
-3542
]],
[[
133603,
-3168
]],
[[
137363,
-1179
]],
[[
128247,
1454
]],
[[
131777,
1160
]],
[[
120705,
1872
]],
[[
108358,
-5992
]]
]
}
},
{
'type': 'Feature',
'id': 'IND',
'properties': { 'name': 'India' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ࣚটďۅͮїѕ׽ŒɾएࠜՑ୞חՑϟ͛޻ࠀͅߊЭરһସʼnӜёٮāৠȝ۪bĪͪŋՖÞβԠǮìڋlǙކ͉Ոƀ܀Çۈ|ÐԪ΁ˎڴŀވشॸ՘۶ȷ״ΞЀԹ˳Λ࣠űÜ͇̍Ʒèԫ׷Ʋછׅ~ӓҩ۵§ХϏۗځȒࢇȏ˹ĚΣгȥѵ೰ɵEƍ՝ҡѦʸӎϖ¶ϰ܆ӝƜީ]ߝŚóאБ¤ڕζ֭̓؆ѻԿ̻ȅ̩Ԭɣƛԑ̆كžەţֱ̫Zਛǩ´ك҃ӻ௃֡ळ঩كՋ࠷ջCϭлȹݳ̝Ͻ«ʥٙǪધ®ۡΣߙI෗ѣ¡ϣٙʰˣދʃ˱֯͵ʍߑ޸ϳ୴͑ࡒ̍Јѿ߰ȻੂơՀޅ଼Α࿀ʣ੾HৰǍ޾௣ԉףĶ઱৲И̤ʝͤড܊֖֔ᇜCǗܞҽюĩ٨ջϘऒࢢঊÙ࢞ࢢՄ࡞ࠄࡈ_״ܒӠڳд֪݂̇̕Ьβ౤ȱपŰߺ۸'],
'encodeOffsets': [[
79706,
36346
]]
}
},
{
'type': 'Feature',
'id': 'IRL',
'properties': { 'name': 'Ireland' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ƒ׷ًݣ๯ӹ஑Ŷڼ࢚ѭࡢତڄٌϼǦ҇ǥ҉Բ\\ٌǥ'],
'encodeOffsets': [[
-6346,
55161
]]
}
},
{
'type': 'Feature',
'id': 'IRN',
'properties': { 'name': 'Iran' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@݈njװӔ֚{τƾװýघэڤğ।ݓظ‰òۻ΁਷ɱؑκŭΫҡˠڡàՓِƙæեݿݿжѵ͸ԓߦυx݉ДƋêϯ௉ѡ̓উཌྷʪࣷȖेŊΧЕƪ٣ƭࡑНਇ˦ࡑ٦߳ʈ֗ߘا૪ҍƋՕ˦̻͝ҭѴS҂ˍ@Ɛ،ѝٔ਍Ң׉ߜȜپц̂ÙӬտʨխ৊ҟڨǐʼʿ६ּʈƄͅъϯ־ő̤~রئ̀Øʞʙ́гԼѱȾ¦ˈإߖǩ׎у஠ƟಾɞĄȞ'],
'encodeOffsets': [[
55216,
38092
]]
}
},
{
'type': 'Feature',
'id': 'IRQ',
'properties': { 'name': 'Iraq' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@րʧÚӫх́țٽ׊ߛ਎ҡўٓƏ؋ˎ@TҁҮѳӿ¤֟ê؝߭༟äᛍၖఫךৡɪ͹৾ᇶ࢔͆৬āؘҢȺјԾΰž঎Ň̐ɉЖƚծ৉'],
'encodeOffsets': [[
46511,
36842
]]
}
},
{
'type': 'Feature',
'id': 'ISL',
'properties': { 'name': 'Iceland' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@șիॊֵથٙᝓֹܣƵૉŮᚑˈࠠψᆧЪ๪ǎ—ʘᄋȜ֨նౠŰಸ֭౨Ҝ੒ʃൌ҄ආÑ'],
'encodeOffsets': [[
-14856,
68051
]]
}
},
{
'type': 'Feature',
'id': 'ISR',
'properties': { 'name': 'Israel' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ƥ˅̣Ŝǫ֓ɂĥɋř—ɛЄŖp͛нഉցʔˢ˶ɞϼǠيŤɆzVˬCþƦɤ\\`·ŕŵhM'],
'encodeOffsets': [[
36578,
33495
]]
}
},
{
'type': 'Feature',
'id': 'ITA',
'properties': { 'name': 'Italy' },
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@̟ڋŲʹǭѝٝ̈́ёĞ୩ѐŞќজûࡪĠْò'],
['@@Ԍ׭ş૕ϣÂ΁˫͇ɞ‘২ȓӒҨ¥рʼ'],
['@@ரɏĝЯȬΧڝŪہ̗²зĻʇˠё߀чцۛदڱچLȲȃɽǗݪ̥ؠʩܜѫĔƿƽ̛үϼܳƐΝի؈̷ıѫΗ¹҅ܛΕÝHʲǢҊǼǶ͝ӤʱшΑŀʛδգƴεͶثÆٿϜޑմ֯ӜʿࠪйĮہˤϯŕӝϵΓÕĪθҕńɏٲ̆ʰʙ̀”ʂβǵМ¢Ҽ˶ƢƃА€ǼͺتĿψƚâΆԘšĮdžࠨƤȊ̉']
],
'encodeOffsets': [
[[
15893,
39149
]],
[[
9432,
42200
]],
[[
12674,
47890
]]
]
}
},
{
'type': 'Feature',
'id': 'JAM',
'properties': { 'name': 'Jamaica' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@֢÷ҀȫƔɯןeʭƗҹƊӑ̪ĶȔΜÎȒƒ'],
'encodeOffsets': [[
-79431,
18935
]]
}
},
{
'type': 'Feature',
'id': 'JOR',
'properties': { 'name': 'Jordan' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Ʀˆपͫ࿪ࣆͺ৽Džų၅у࠸࠿ˣƛƑ˭ٙřȩ̡εʵधƆƒŨоഊo͜Ůʚ@Ԥ'],
'encodeOffsets': [[
36399,
33172
]]
}
},
{
'type': 'Feature',
'id': 'JPN',
'properties': { 'name': 'Japan' },
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@ņ˽ҿԕΉːљțɝӭշʈRЊҬԆӌīΊΜؠǹ'],
['@@́ڡƤсѩף੹Ѓ๏½ணॡ͔֡“غษȃষЃঝe࡞أ֗෗իΝН͜ȶݶՏʒͿ־ߐʶѲՈࡌѢ؞ָာʤ࣎ǣࢠ๺֔Б௾ࡀӌ͜ՈਈƟा΢ՎࣀƸҞୗ}ڻޥࡍbࢁ'],
['@@נǵרΤȈहఝɯ݁࠱೓ָқँण]ř࠴д٨࣌²ʖ୐ʜټন࢓٤˯']
],
'encodeOffsets': [
[[
137870,
34969
]],
[[
144360,
38034
]],
[[
147365,
45235
]]
]
}
},
{
'type': 'Feature',
'id': 'KAZ',
'properties': { 'name': 'Kazakhstan' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ӕƹ્דο׹̹KɱЊ੫‚ǡێХNÚࡆ৓ؘ෷ßডũߣݶۋ͆ಥ׼ƽðᓗӹᶽљ£יچ֧ɼॕǩχ˧±ȲȶΖDž̊অ˺ϛݮҩɆ…˜ࠊāŽؘ܎ƎܼűƲࠎƭԲ࠿£܍ȴঃσ޵ǭяƌĐўՙ֘دw܉֬ӞِʕǢڢऊࡺӣŀؘჄࣴಾtᇢ׉঺ͻࢼΠ೰j੺ѥʔʠ୼—ɂЊഷ׀߮Цƿɮ߮ɔ؅ֺϬ˼Ḯ̈ШȺᑆ̴ݰΒຢǹ˄ࢉ࢚Ȳઆ˹éҝ߮´ߎ̭ˁ੶٭ሠᒑ҄ѰୄӛீɎҪƯКӟטNjΨΥ઎ŒѾԣٕ֓ۥÿ¡ࡅұϝဟˢ؅ຑїȇဗͱݲลֻɓäӏԭŬу̠ఝĖඃx̧ġ஥ΞӉǧŽӹ൩̂փşȉρ'],
'encodeOffsets': [[
72666,
43281
]]
}
},
{
'type': 'Feature',
'id': 'KEN',
'properties': { 'name': 'Kenya' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ӾۙיͱȹΕ̿Õšףˑ͹Ǐ֑ͷ˥஻ࡀËӤᵁႌƙĢSࢺʊ;а֌̨ؔσ॰įтЉ׎ԬԈ֬ֆѨƗ@ҽ˺ˡג@੠܋ˈSȠxȄī֖ßʞΔގΚͺ˳ָAܽ॑Xᵣ'],
'encodeOffsets': [[
41977,
-878
]]
}
},
{
'type': 'Feature',
'id': 'KGZ',
'properties': { 'name': 'Kyrgyzstan' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ȊςքŠ൪́žӺӊǨ஦Ν̨Ģ඄wఞĕф̟Ԯūşȏ೛ғ̙ͭઁıͅ՛ࢷŒׇǏߣЇŜȟʇȓཟŵਡ˘࣫ÝĂӜࣴƕ̮ʸٖĉ੾؂঻ѸױȽإ͂۶ծʟĊ'],
'encodeOffsets': [[
72666,
43281
]]
}
},
{
'type': 'Feature',
'id': 'KHM',
'properties': { 'name': 'Cambodia' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@΁Ѭыࢄȣ২ՠۨઘdž߀ťۚ͡Ϟׄݖ̱Ȝ֕Ļ৕ඳ٧τԙࢥÓܫͷ۱Ū'],
'encodeOffsets': [[
105982,
10888
]]
}
},
{
'type': 'Feature',
'id': 'KOR',
'properties': { 'name': 'South Korea' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ܨযȺխPॷ̓ҥݽljڥΏݳïĥҚƼـχ࢔ذƚֻܘÂúϒ‡͞Ϝצ¢ΨÈŨȮ'],
'encodeOffsets': [[
131431,
39539
]]
}
},
{
'type': 'Feature',
'id': 'CS-KM',
'properties': { 'name': 'Kosovo' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@›ǣŃPĘ́ȩĐdzɦƾȌȪÒŜ˨ư²Ţşƾ¿ŌƅƒŸǎƻŢLĥȳijij„×ȉӹŻ'],
'encodeOffsets': [[
21261,
43062
]]
}
},
{
'type': 'Feature',
'id': 'KWT',
'properties': { 'name': 'Kuwait' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Ǭχõȓ˔هשuȽАݟĆ؞߮֠é'],
'encodeOffsets': [[
49126,
30696
]]
}
},
{
'type': 'Feature',
'id': 'LAO',
'properties': { 'name': 'Laos' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@˚Ϝœ܆ڹܸ¿ٕࠦھٍÎǛ̉ӯyʣƨࢯԅoݬȸࢮ֧ž³ԎηʸǴ̲ܐնøȡ҄wŵѦŬӮڏϖޅਚO͚ܹ՝ɗʉ̟৔ԉۦ঳Ռ݋َ׏ɄץƵ࠿ݕ̲ϝ׃ۙ͢'],
'encodeOffsets': [[
107745,
14616
]]
}
},
{
'type': 'Feature',
'id': 'LBN',
'properties': { 'name': 'Lebanon' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ɣ[ýƥ˫D̘ۄмעfˆϘ§Ɛͣқ̓ȷҟ'],
'encodeOffsets': [[
36681,
34077
]]
}
},
{
'type': 'Feature',
'id': 'LBR',
'properties': { 'name': 'Liberia' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ɗQࡽАޅٖ܏Ң֣ըȪː¬ʔϜҘϺϺǶnɖĨΘԧÇ͵ǐdzʂIǢ͸ʄsŸʓĎНǽύʖɱˊÇΤΙ~ͧăĿÝە'],
'encodeOffsets': [[
-7897,
4470
]]
}
},
{
'type': 'Feature',
'id': 'LBY',
'properties': { 'name': 'Libya' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ק̷ҿҤ೧βρՄڑϸϻƷ̗ҶήӹؔͬΘñՈńҠÓϦƨۈ¯϶˕ݐШȜðΠėΒ־͔ʶːЦʌ´٦দ́ΜðۮƓ૞ϓЀݛݮǍஆΙࣆйЦɔЖϮț٠˂Ф؄ЀׂŘ଒ǣ˺ϑ̺Iˌƛ࠴ıȲˣ̣ЕżΫɏԯʦڱ@Ჳ@ᶵ@့ॱGYΙ‧ྐ‧ྒࡓҟ'],
'encodeOffsets': [[
15208,
23412
]]
}
},
{
'type': 'Feature',
'id': 'LKA',
'properties': { 'name': 'Sri Lanka' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ų࢓ΙʇܵȓЍڜƫீϠ഼׆ұϺסО࢓'],
'encodeOffsets': [[
83751,
7704
]]
}
},
{
'type': 'Feature',
'id': 'LSO',
'properties': { 'name': 'Lesotho' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@̆ʩʳУƛ˛ҳſƹˍ̛ċؿ٨҄ՐҖ͢ϼǠξʵ'],
'encodeOffsets': [[
29674,
-29650
]]
}
},
{
'type': 'Feature',
'id': 'LTU',
'properties': { 'name': 'Lithuania' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ãɊĚɲχƄࢡƨDZ۸२ʴඬÁࠜĊŞǩ҂Ã߲СĀϓۏˏșӃ࣯̓߻NȫʶљĜ'],
'encodeOffsets': [[
23277,
55632
]]
}
},
{
'type': 'Feature',
'id': 'LUX',
'properties': { 'name': 'Luxembourg' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ǘȏ³ρʍiȉòĞҼɖŽ'],
'encodeOffsets': [[
6189,
51332
]]
}
},
{
'type': 'Feature',
'id': 'LVA',
'properties': { 'name': 'Latvia' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@†نЮՆߊ˼ڜعڪhNJ٤ܐƪςĻܢ̷ۚCКȕîС˒ӷ͕ࣗԛƙ߱ТҁÄŝǪࠛĉණÂ१ʳ'],
'encodeOffsets': [[
21562,
57376
]]
}
},
{
'type': 'Feature',
'id': 'MAR',
'properties': { 'name': 'Morocco' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ԒΥߜÎࢊȃκU͂՟ºԝ̄ࢱɜDZƷ͛ષƙϝ̵ӡñ—ثঙ͍ͩсۍɥ࠻ŷഫاRহŷ@@@p҉Ա˓ȑϡ@̥Ŋ۹ě˛ٻʿÕЁ੕ୟ࣡ˣୋ΅ϗĵ̡ቅãaD ϶͒ɮ˞ѪÃ˶̀פҴՖ˲ƊɞӬp҂̤Բ̪֔Ւ࡬f\\ц͔ްĢڎָтɠۮۮȿਸ਼͊ܢŔѶդ֨ࡈϦخΐ֘࢈˄ԪؤI'],
'encodeOffsets': [[
-5318,
36614
]]
}
},
{
'type': 'Feature',
'id': 'MDA',
'properties': { 'name': 'Moldova' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ȨŮ֒ĊؤʽΊϞɥÑ˵̪ƏŨΗ̊ɇÏűƾčɝ×ӷ|ĉŜǫãÒƭɱˍƥ˽ɁĝƯϦĘΪςӝԂˉΠʹʠʯĈ'],
'encodeOffsets': [[
27259,
49379
]]
}
},
{
'type': 'Feature',
'id': 'MDG',
'properties': { 'name': 'Madagascar' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ɠΥȺ։Ɗঢ়ɒϽĉЗƩʙ˷ӰǁʝLjثõΥɵȗ¿܅ͧওб୅ԯཧ͑ୟϛইہȣܻΡӛɊڙ̜ɳѺÇݘ̑ڠù؂Ʈ؄ϰƢD˪Дِø՚șЈǃՌãޠ̊ҺŔՒмŒҶǤ̶Ʋτ\\ӐӎۖԮʦцŗάΦĵҪ׎fԐ˦ϔ̊ί'],
'encodeOffsets': [[
50733,
-12769
]]
}
},
{
'type': 'Feature',
'id': 'MEX',
'properties': { 'name': 'Mexico' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@͙݅ƥ؁Õ૷ąЧƤқʺЧǚٳ֎سȞӏ͢бࢾɝΐΙ݄ɾٚĎؼưՊƠՖ΂ȨӬè۸Ƣʖ֬ɚࢶȚݔ‡ԚîȬDZ…ЙҋԁȥԝƸƥűγɁٽɅɎǭcǃY̝ԓƳIJķPŭޥV޷AAӁϛC̺˫̶șĢǹƌ½s˷EЙۅŢƽĭȟqʕ्ࣞџ˘ۇɖҷÓګ́чĉץɜؿDŽ޹ϬؿŠ्ϸ۱ВɃɤҹº࡯ˈΓϦࣗӊсՌȧЦ˪ĈđʈȖɔJ̄˱Ϙùͮ˭ъ݋࠴ࡋڀУԼܝ΄ƷȴŸԲѓȞӹФȽהҍæӣѸϿФ™ˀҍو̓٠^͔؇ͬ˫™ӑɴƇͿƔЕĆف̀΋خׁƒȡŸÓŎ˽Ƭ\\ǜթʮɇǴ̕Նё˨ޯʠρɸϿ²ѷКƒͶϡ̨ϑqƭΝ̱ƫJɛԞջӎ؃РїɈ„ؚŵҖЏʺֿϒŏŇɃɖԭȰӷӦÖÚΊ³̸̼ŽϜ٩׶ӱɶ̱Հ̷վϳڦͿݲॖÞĞÿǑ౔СኀףဪPژ@DΌผ@̪̕јˇԀσ˨ѭȾҥѢʩۤʥՊڒۊhפͱфֹ̄ӯӸӏȂחɾЃپʹ׮ȁ͞|'],
'encodeOffsets': [[
-99471,
26491
]]
}
},
{
'type': 'Feature',
'id': 'MKD',
'properties': { 'name': 'Macedonia' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ńOœǤӺżȊ˺¶ϴbтˏÒ։DžƒƑƥҕh͋ǿջõΑȴšήń˸'],
'encodeOffsets': [[
21085,
42860
]]
}
},
{
'type': 'Feature',
'id': 'MLI',
'properties': { 'name': 'Mali' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@˰ƶƘӶˊpזɻӄǖ͖ÇŴȈ^ȈךƣļЛ⋈Л⋆౾dᬼᆳᬼᆳȨϿԺʉ϶ƋV՗ठĈFካҟ֗íԭݛƃ଩ï̳̗ա՟IȿLjҥš޻ΑDžʿٳϕŗɍΙǡНŔɱȳūֻڙۡp˳ɭΣÆӥ΋ůȝŁŽάʍĥơhƷʕ٭PɷŴʼnùʱʎ¬ʢĿİdzĉ˚Ǥɐ΅ΚijɴȇȂǙvȫş˕őɱǹΫäɷɈƓ„ɕőƅAµ̮žʾí̽͘ʀǓӔԺ'],
'encodeOffsets': [[
-12462,
14968
]]
}
},
{
'type': 'Feature',
'id': 'MMR',
'properties': { 'name': 'Myanmar' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ӫηץ›ϥࣥΟƳО݅ՔؗΈօ̭ܵ̃ƹȪу֖ڙĪҷ_ϵ͠ދң޵Сࡷăذʴ٠˯ӼæࣸͽѤ˛৔Ʊਗ਼εۢօу׳ҽöԳȠ̂ਪǫ޾څॺļ̢ӭņ׭ۆÅڰ̊ŵj׾дȦęΤȐ˺Ž࢈ڂȑϐۘ¨ЦҪ۶}Ӕજ׆׸ƱçԬ̎ƸÛ͈ӮÚˮӵξȧ|ٟ“ۙߓۭijঽࢲƔȨޛՐǍʓۣز́ζƷ؞ʔ~΍܏յdẕӓȗ'],
'encodeOffsets': [[
101933,
20672
]]
}
},
{
'type': 'Feature',
'id': 'MNE',
'properties': { 'name': 'Montenegro' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ÁǀηЯÊˋǫÞɽ˞εǖĢƜŬҦ˚ȜƾüɠƟŬśˠě͌ǧçïƽȋɧó'],
'encodeOffsets': [[
20277,
43521
]]
}
},
{
'type': 'Feature',
'id': 'MNG',
'properties': { 'name': 'Mongolia' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ࢮƢ྄ܤ౬Єܴʳ࢚]֘Ͻ࠼‰ɁࠈגͿӶࢊࢊश΍ނįনɍLjؿஜΛߐƺਫ਼ŌࡆōࠖЗԚѕެT੒Ƌޜȼૈƒ௸פԌĝѰ˭ৌêХهק࠽ɐ΅ӈńࠤŽ٦̴ڬˏހוğ̗ڏĦ௟ŏןʅ؝։౱͙࠷ѽࡹǞҿúѳէˎ͓ƌˣי˯׽҇গ̑ఽ‹ഫ̇এҋϋʾAఓԜࠥŰૣśჃȊऑmӱԀϣޠԱĢ৩ԼଅŞুƞ̡θ͖চׅڲன̀۷Ѿəז'],
'encodeOffsets': [[
89858,
50481
]]
}
},
{
'type': 'Feature',
'id': 'MOZ',
'properties': { 'name': 'Mozambique' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@لæ৞ʁɖńגt̚ʦԌaऀ͜ڞӤƊϕ“࠷ľ݅ಿƨЫʣ׷͙׍՗Եޏ͉ृСॉ͓ࣕƵוׯ΋ȗí׳ЌُǔӱZʣƪ¦{ࠗƋϷȤƝűΓΗ̗ۗ˳য়ҕρ̳ðΟɊÉíѵّRïϊůϖí̠ƬपɓװГஂࢬ॔ɜ؆ŶúĨӶƉʞ˜غǐ׌E੠ѥ˒ЏÔǹȼϳǰ۫gÅ̼āװᢈۘӚЕɴüͨɅ¸͵ǯϷØסոԱʲ׌ζǰíઊΙ؈̣˖̅]ɽદɾٔ'],
'encodeOffsets': [[
35390,
-11796
]]
}
},
{
'type': 'Feature',
'id': 'MRT',
'properties': { 'name': 'Mauritania' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@և־ԗؤ֍ɞГʚҵUЧǽйð˽ˏïҐɺаŀߊģࠨĵкČмɑЎѵδǾˬᾔMǃ௎ȴќ߀øᒸ᪂©F౞Ṗ᎟౽cММ⋇ƤĻȇי⁙]ųȇ͕ÈӃǕוɼˉoƗӵ˯Ƶ'],
'encodeOffsets': [[
-12462,
14968
]]
}
},
{
'type': 'Feature',
'id': 'MWI',
'properties': { 'name': 'Malawi' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ɽٓɾથ̆^̤˕Κ؇îઉεǯʱ׋շԲ×עǰϸ·ͶͧɆɳûәЖѵɔʮޮ˄̈LJۢǚڼƞɪɉ܌Ѕϐ࠘ƽǜɵ˶Ϲɾଡ'],
'encodeOffsets': [[
35390,
-11796
]]
}
},
{
'type': 'Feature',
'id': 'MYS',
'properties': { 'name': 'Malaysia' },
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@àћֈĶ˞ΈȘýӸԓΜ֛¶֣ęϡĆ˿Öӻ̒ɵͤݑe˳׫Éߑخ঵ښįђӟ֚ś̡۠ҜĠؔȃΤƤƮۈρ'],
['@@أ˹ܯƚॱ@̅ॗ͓̇љୟۅǵߑɾЕóөщ՛Òէǟַӆƕ֘؜˽ٮǀǜ܆άǂ৖Ǻ׾ڔЬՐϦѥǮ˺В¸՜œа٪אшڀͼHќыžιֆɻ۬ʧÑ֝͡¥ƮЧ']
],
'encodeOffsets': [
[[
103502,
6354
]],
[[
121466,
4586
]]
]
}
},
{
'type': 'Feature',
'id': 'NAM',
'properties': { 'name': 'Namibia' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@رٌؖ͡ȃࠊȷ،˯ಒm৒ŅҞ͛Όѡۜѳ৘ǽՆۃࠐ»٢КdžԊƞհ}ԄϝŶÐ₮˜׌Е᎞ş໴΂یȒհµͨȍPéӁȍʭC՛͍ͣΎಕ̍سƒ{Ჽࠣ‡BយA᷋ݣѕҋÕՇDŽϗÔƗάͩɰГг'],
'encodeOffsets': [[
16738,
-29262
]]
}
},
{
'type': 'Feature',
'id': 'NCL',
'properties': { 'name': 'New Caledonia' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ېԵѨϭ͉ȫҥɪ׹ϚէѼ։פś˶β[Һ˹φ˷ˎɻ'],
'encodeOffsets': [[
169759,
-21585
]]
}
},
{
'type': 'Feature',
'id': 'NER',
'properties': { 'name': 'Niger' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@nּॹȐОҿպœϤâТբ̴̘ପðݜƄîԮҠ֘Eኬஈϒᝪ࿸᮪ཾ೨αӀңר̸ȸಯ̾ɓ`ˋΔ˽ǻί͕ၻ«ધੳߋγૉΔ̵CեբmčЃʁµˋƻm֩ंȟ’ځҷٱʔҍ¸ʏşӯ~ӷΧѓq৯ѢЉȵѓb̿͆ࡅ̼ࣗıɕǻşӗʋ͹ÍݣٗӚ̟E˭ʗ'],
'encodeOffsets': [[
2207,
12227
]]
}
},
{
'type': 'Feature',
'id': 'NGA',
'properties': { 'name': 'Nigeria' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ࢍ̡͉¬͓ȉڥl҇Ղˡ؊שֆكYݍB¶തs՘ǂՊʶʴТԴėɨǔ͸ȍӾ˪ÎݤʌͺŠӘɖǼࣘIJࡆ̻̀ͅєaЊȶৰѡєrӸΨӰ}ʐŠҎ·ٲʓڂҸȠ‘֪ँƼnͬͯğƱ«˧۽ٱɛՙšѧDZȉǝי҅ΉŽыȋ͹ÿΓֽ˱ҽΊ͇aԃӭʑQЍ߷ɍש'],
'encodeOffsets': [[
8705,
4887
]]
}
},
{
'type': 'Feature',
'id': 'NIC',
'properties': { 'name': 'Nicaragua' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@̃ˆϽͺȁ˲Ο˄сϜĤžƒŵÚÒʾ”ŀȔŬRkЮȠrǬOǺɤʜǝĒľƺIJ̊ɴbǦĄQňȪĖ|ƜŹǚ›ȆńɄB̈ŌŜŖ˾iïă§ȉĐ̫ȗ˹ěͷυ®ɏtϙŹĉýΫÌɛǣɋ ɩźƏȩDZʛÈƓǦˉêȕʼnօɞųŇ'],
'encodeOffsets': [[
-87769,
11355
]]
}
},
{
'type': 'Feature',
'id': 'NLD',
'properties': { 'name': 'Netherlands' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ۦyǀ˳Ƚޓɇ́ԍ@ƘࢡҥȞՏπީǩ؛âѠɲ݀ఆଲΘ'],
'encodeOffsets': [[
6220,
54795
]]
}
},
{
'type': 'Feature',
'id': 'NOR',
'properties': { 'name': 'Norway' },
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@᥆ؙઍɣऄՅෛ͵ڵû΢לͰಫ˵Ы؝ߟωࣗȮ઱¥णѼԉɝԷ“ūփནƊɝҵ߭Hևױ࠿झಫ஁̨˹̇ͫ࠯bձ޿¾૟՞э˥ধֻۧυӛ֝Ԫဋঁ૫ȟ୏є̛ࣚˇ኶ޞզᕠ۶ဌࢂ໤፺ྴඦلᘼ੊ᇎπ൪­౮ۢ໖›ພǘ'],
['@@ም΅๝Ȝ׆ɐԕˎეǚͮ̿ொȍ'],
['@@᪖صᑟͥұأ݅ǁЍۡৣᅵԢނ̘ఽʐ࿕܂ٷڄᘎ̜Ң̋஦\\͊˼௾ˆ੖̋'],
['@@࿮̏ఝҍ᝱ı៙ƖƫɴஹdँϬᣴɼ௞ȫࡘʤᑺȽ']
],
'encodeOffsets': [
[[
28842,
72894
]],
[[
25318,
79723
]],
[[
18690,
81615
]],
[[
26059,
82338
]]
]
}
},
{
'type': 'Feature',
'id': 'NPL',
'properties': { 'name': 'Nepal' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ÝαŌՕĩͩ۩aয়Ȟ٭ĂӛђଷŊયҼ߉Ю߿͆͜޼ՒϠΒȪڪʳࡔշҾť˰ЕٶǓۀσौȕঔć'],
'encodeOffsets': [[
90236,
28546
]]
}
},
{
'type': 'Feature',
'id': 'NZL',
'properties': { 'name': 'New Zealand' },
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@Ȓ΋װ;ʐΡBΝ̹ϳչإїͷ̴З٭Yܗ̓ɣջӋࡗڇϓнʇޝlխˢࣱÐƗ̰Ҍذ੐ࠦժǀ׾͌ܜѰԎѦώظ͈ɆŰҶלϴȆΧ'],
['@@،ࢫlָϜɯŲًڰ˛֨ãӒ͎юĭȯݗʯӫٛjɡʭþαūƻͅҏзֹ٭ͯƟɘΕŨӞ۔˟ҨࣛͲz̦؈̌ƚ٨Ÿլͻ֜vƪБΎڋݔΗת̸àҚұٺɑʂݡ']
],
'encodeOffsets': [
[[
177173,
-41901
]],
[[
178803,
-37024
]]
]
}
},
{
'type': 'Feature',
'id': 'OMN',
'properties': { 'name': 'Oman' },
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@ֹ̻ϟªǩȧƉэļ֗ÿĻϯFԽ̻ćХȓǯԹP͡ɃJͻПɷҩĂ֗˳ϱ³˝טٿ൴ᠾ࠾֖၂ϩתv͸ʔΐFΆϞǒƩŞèմіHϖֵҸ̧؞ŋӼƳϜӕɨ˧̞ŃCȉ̩ԃƅɽΟˏ'],
['@@ʼnƳDž˺ʔ˺ľñā΍']
],
'encodeOffsets': [
[[
60274,
21621
]],
[[
57745,
26518
]]
]
}
},
{
'type': 'Feature',
'id': 'PAK',
'properties': { 'name': 'Pakistan' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@تϻʞ٥൨ͻ߹۷ऩůౣȲЫα̖݁̈֩ڴгܑӟ`׳ࠃࡇՃ࡝࢝ࢡউÚऑࢡռϗĪ٧ҾэǘܝᇛD֓֕؛Ɇʣ؀٭٘໻ǁിeஃŝ̈́ঊொѢéϰГƌw݊ߥφͷԔеѶඨѕࡀŲԈŅǞȂגóદĈ܎ҶӈشCĠɼٞŌ̴ý͢ʀ±ԌΦԖ՘Ɇͥ֊ߜɴ̢•͒мΜĩмȣΤӬμࣘǮ८ĮѐƺӨĦ'],
'encodeOffsets': [[
76962,
38025
]]
}
},
{
'type': 'Feature',
'id': 'PAN',
'properties': { 'name': 'Panama' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@˫ʎǵҒȺɢɅÎƿˤлɸοÁǝ̇ͻɁǽ‡ĉǩВҗɯŅŧŭϷ©ơԈŋƛˡ¸ǝ͸·ÈɓİέCǻĩŶªǖìǠƲŲIJǩŲK͸͘ö̠̝iDZͲ›ĀæɴȵЮÔΨɄԜǞ˺ʤҬ·‹ĉҶ…ώơ˜ʧ̈́ɵĹūȜӵǁʟ˓ÒŅС'],
'encodeOffsets': [[
-79750,
7398
]]
}
},
{
'type': 'Feature',
'id': 'PER',
'properties': { 'name': 'Peru' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ɥљћɋࡅӘñΈရࡊທࣾ٫԰ΏۜƐʎ܅ાࠣ༄ߍီ΅Ϥ˃ؤٷպױͼ˖ϒПߢʼךڢՎIJΓʇȧx̭ΎâͼĝΚщӆΌDŽ֤ԦܶৠͨࣸࢠʾմŝٔɢĂ֒ЉˎЅϴɏӶࢣضĿҨɞ̤ƣԎð٠Ͻթࡣʤoрҁݳ œųۍlj॥ֱÓϻɉ̇ČғԕʍBΡɛƵΔݳҲԝDZί֐µ͆҃ݐuېӸÇ౧ϢĩӄƠܪടǷ˵£ןg܍͟пƮ̵ȕ˯β۹Ջ࣡'],
'encodeOffsets': [[
-71260,
-18001
]]
}
},
{
'type': 'Feature',
'id': 'PHL',
'properties': { 'name': 'Philippines' },
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@Đ֏ºҽ˹ޑ̫ࡨϽэˎإʉϿ঩Ӧɿ؊ʰЎՑЈˁΑЃثҵƑʖ͢۾ՌʀҜ̈́̔ϝٔɰƎϒרv·ٰڼЋêхÐ̱'],
['@@̟ˡˁՍ˃ʝԫ׈ǦɤɂɾĢԸҨ¸Ɖ֣جߺāߡ'],
['@@ૣߕЬט؈԰Ԏ׊Ѱ࠲Ʈۅևҧѳֿ'],
['@@Ԏʹ՘BgΗϳΣՕʧ‡ϸÒєŽА'],
['@@ʀभ٫ɞj˭ȶԯЍȋ•עʧªƁԘӶãY͈ԣٜ߮mɴ̻'],
['@@ɟܩέоѓ٘ܚ‰̡̈'],
['@@ԮʉʶɖüɇƍΑ˼׻ɛۥӷ˥ƁڳȊڝѾġϊIJਾүăҙ˜ȫēϯٻЮ̵Ѵɍ̯՗ԊރůлȆ¨ΎˀɊʣȘŇ̡бӚűμߨͺˡĔೄ˜ހԘA']
],
'encodeOffsets': [
[[
129410,
8617
]],
[[
126959,
10526
]],
[[
121349,
9540
]],
[[
124809,
12178
]],
[[
128515,
12455
]],
[[
124445,
13384
]],
[[
124234,
18949
]]
]
}
},
{
'type': 'Feature',
'id': 'PNG',
'properties': { 'name': 'Papua New Guinea' },
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@ɽčε͔ρՔǷ٘ŜĆĜʡʬȏРՑЈ˵ŝɽ'],
['@@ѯçƃɽҟȱћȟѽBۏʔӑɺêʺݬũҠàŶЖŦrĆѽӐÜʂ˼Ҹ̚ġӸԌfǜƏgү˯ԡ'],
['@@ݤտղࢻӖ„‘ω٬ƛʥǁࣀΝġʏ֋ÏȷɔܟĦࡕŴٷ՚ӉҦѧ݀ભπ܇ʇԡˣńإڇ˿һƖࢅ–aᩒaᩒภ׃༊ӓׄїҴхŸӵඔԱȲѽޛěȄ֕'],
['@@ʿɡǁӸȝ͘ϝ˞ӍΪ؇ʚɺȮҒɻ˸ȁΜȫʹΛ͊ˏĶѧ']
],
'encodeOffsets': [
[[
159622,
-6983
]],
[[
155631,
-5609
]],
[[
150725,
-7565
]],
[[
156816,
-4607
]]
]
}
},
{
'type': 'Feature',
'id': 'POL',
'properties': { 'name': 'Poland' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@·՜à̂ȹ̧҆̚ɺɤȝђָʘ಼ϴ੒˴࠼ƙÚȱ߸Yਚħ໶^њěȬʵšωɸ͋KͯԋǡʸϳfϏцܻěɽзįރۥɒϗǿ¶ߙ͔؁šЇĒӹǵч̖Ήŕ³¼ϭаر¼ăˀֻĦűɑҗǨÀɴػòЉ˔'],
'encodeOffsets': [[
15378,
52334
]]
}
},
{
'type': 'Feature',
'id': 'PRI',
'properties': { 'name': 'Puerto Rico' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@јõưǕɋɃمLӫ‡·άŢŬیK'],
'encodeOffsets': [[
-67873,
18960
]]
}
},
{
'type': 'Feature',
'id': 'PRK',
'properties': { 'name': 'North Korea' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Şƥ͉ºη˵ʣ˷Ž׽ѣȅƫƧ̓ʝ֓ƏηɥηįġͰƋӈσŧȭΧÇץ¡͝ϛϑˆÁùСdžĵƿʙé‡ǀɑüɥƆɰφȤİõƶɆҒÅƎөĠЇɤۄբऒҌ־׮Ўˁܪ‹ſѺಚβͰҼժӹ'],
'encodeOffsets': [[
133776,
43413
]]
}
},
{
'type': 'Feature',
'id': 'PRT',
'properties': { 'name': 'Portugal' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@̦Ɉ΄ŬɂЫӺDƞłӪ‡ɼуϱɩƍū‘Їγçʹԋɵտ̄ʡřɫ̵̿ê˥ͷɓѷŠџġŸڂÿԬϓþȩ͈äռͰ̨ÒͼǪԎkΤǙ̠™˲'],
'encodeOffsets': [[
-9251,
42886
]]
}
},
{
'type': 'Feature',
'id': 'PRY',
'properties': { 'name': 'Paraguay' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ͦ৖tҌЖ݌าʔޮ]޴їbʵʞҳÇଛࢲLJ΄ǐ֦ɩǀʣþޓİ͓̼›̀ƌ̢ƳAҥŕӻǑӛƍݏށ١ړƇऻŸࡑɮࠢ౨ťψࡽ͢ਅبۉŸ໵ൌ'],
'encodeOffsets': [[
-64189,
-22783
]]
}
},
{
'type': 'Feature',
'id': 'QAT',
'properties': { 'name': 'Qatar' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ÇؔɨѲɰĜʬˁdӯǽӳɵÑʫǖ'],
'encodeOffsets': [[
52030,
25349
]]
}
},
{
'type': 'Feature',
'id': 'ROU',
'properties': { 'name': 'Romania' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@δǶԴġՠGϸȳ˺źبĄɄȠΠ@ʰćʺʟˊΟӞԁ€ρėΩưϥϒƹЂƊϠƟpɏПǹʯĀɻ৥ӳĖ̪ؑফțзɋ௽¬٥ƀ͙ÕʍΊƵƦȚƘȷŀ˃ȋөʔßΌԟȢĥˌҕͤڪǂԖ֮Њ֬ԢǮ'],
'encodeOffsets': [[
23256,
49032
]]
}
},
{
'type': 'Feature',
'id': 'RUS',
'properties': { 'name': 'Russia' },
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@ࡌ๫కˤԫ்ࠌࡳyוُԒսٱƻ۸Ĥࠊħ࣢Țٌš૴ӯࠜôରަϮͭϴϐŠɔ։̆ߵuࠟΎࡑ'],
['@@໵]ਙĨȒτ୊˚ࢢƧψƃęɱäɉ'],
['@@֦Ƚțؐᗸű࿨޻࠭λ൛ēsࠑͳǩ޽~ٗ̊ૣʖȉθ࡟Ǝॗʼnҗ̎Ǽ̸৓ȥϚЃӉΣ@„Ꮪٛᔺ࠳ïԷ'],
['@@ः©ƭˌੲΖ@ַ'],
['@@ળ»@ָň–܈E௒ʉïŗࡽȩ'],
['@@ౡMႣĤƧ¬ߘͪੀþஞ͏ĸə'],
['@@ॿͩഉø༛ͨȪ˖༨ųᑔɗ'],
['@@ډرᶽzඃȣမղҎ׀૎ǂᕞ™ᴬѽ'],
['@@ӹóᩣŊɟώູɦūҒ࡮Ƕ…Ҟသܒޙĺ፨݆ɩϢሤѺ᪪բ᫠ǀ෴̸࿐Ŋאͩ֟ʻᲗз᢭Џᤙߝఫࠍ೉߱Ǡۥྎۏ'],
['@@ɨгސȲឤYቈЧڬ̿ȽѧङʝᕅүفʟਬşఖɃݴDŽєաτɔഊƂ᧪ƑȴϽ↲ů´ٜᄼƥഄLബѷϮ՝ӹΙੌڋ೔Ϳ߸ࢦഖϙ෢ɦྼʵؤʀൖş؅ޮૐζ䢀ձܐӿᔲٛ₎DŽာƑ۪΍Ĺؙਜʇ૴Ǥ๰vཚǑཪĢะݛਪˎڷ՞ϐώᧆɻფºᝂБ୲ν@”MKઇσઝÖݶҁԄەϲɧĮΏɑɝ༧Ǿ᚝مݛĭ౽ן௛ԧ̱ϣய׊ᔗڇϣ̸ߵΫ૱Ř˓ց৙߽Šͻड़ȋő௣ޭ‹Ϋ۱Δαѕ̅ॡభȳʥ࡟ே޳ׂ̳έ௬ҵለИ୘܀ԆªϾರȊຊ੒คࡺຢڢڮஆ৷ëԍۗᒉइۍਖᓧ˷ᑃටۚԧሙɕಝēÔ؊ಯŶ਩ЭᢵƠ᪏ʟᨩ࿛ủጝ೚ŁаՃࠄȅ՞оईÃௌऍ†܍ځ࠽ë্ϛഉ్௓˯ׇଙ঑ଇॻթӹ૩ӱՉYՇФૻؙſ˩ŝƦіxŦ঴ɛܚܞ̒৶Ʃ֢ࠈ˾ऄ͚̮Ѵݲ൷ʛܯͧ౧Dͻ߄হװหˎ̵ࠖ̉Ԫ̿βԯࡐ̲݇షʢ૛uਯƱۛлҤȥXҩұˑݷࢻRσՍ৙̈́োéѯˮԋĞ௷ףેƑޛȻੑƌޫSԙіࠕИࡅŎ੝ŋߏƹ஛ΜLJـধɎށİवΎࢉࢉ΀ӵࠇב௏ɂ࠻Š֗Ͼ࢙^ܳʴ౫Ѓྃܣࢭơ͡çѽԤઍőΧΦחnjЙӠҩưிɍୃӜ҃ѯሟᒒੵٮ̮˂ᑋߍ߭³êҞઅ˺࢙ȱ˃ࢊມǺݯΑᑅ̳Чȹḭ̇ϫ˻؆ֹ߭ɓǀɭ߭ХസֿɁЉ୻˜ʓʟ੹Ѧ೯iࢻΟহͼᇡ׊ಽsჃࣳĿؗࡹӤڡउʖǡӝُ܊֫ذx՚֗ďѝѐƋϥӽ߿Ƒ࠳ࢁކߕĉ֣ࣼফԇ͹ƝɇωÌֿԚɿ†ՅȚʳΈ޵ǮԙƁƥƼଥЖఅƌ܃ƞĹı܂य़̈́ܩӴؒƈۤ۰ҹͪఌ΄uȀݯƉ‚ώѠɼ߼ÖƄ˪ȅҪ΀ѰWʚఉ˚ӭUԯЀ١ƃ੩̐lǒ̗θڟ¤éʼɀǞ՝ӈࢋąʭ¦Ƀȑ̽”ȷ՞ȟ˨NJĀڴ‡͞Ȁʍɢ֥ƪ¼Ʋ΁ƴՃվǸɨĉЂࠑȨѱijšȼࢭɂˑӸíТЙȖάˊʝ޶װӞųƤक़ҬࢡЎᅢ੶ޮӠ͂єగּΆնݳش֢ܜ঍ग़ޢي౿֔ŬךڶüොͶࢀ̈ԕᘨȧṺो٤ЋÆ֓टѳ൏ɡ⏷ٔ؟Ńൌ؛ÂϵÆ࡫ઌʯڂɓňРԑΰ՘͈᎖Թ۾Ȳ֣؜ዦࠖޢµ޸̋Ӫ׀۫ԄЪԊءԶᚠˑӔҹ੡ĻNҳڌ˽ಜǼȶ՚Аᰪܞي£ࠣԙਬĕ׼˼༾xఢΐफ़ԏॖ֌ࢡӢѪˤ២ʫ୒ʿᴾॣ֚ѰࡡѺ{ǴৣĈˢЌ҅ټ}ː༄ݾրކزǒᕮɛǬұߕڽԺˋ˒חȏଵऒԧέ֕࿫஝ŭ̢ͮऎɎɞжܮЎөӌϼֈࣿêȫҲڢࡈણۆຒ֦șװмnѴүͧ߷࣐Ƶϥ؄ඤͦლ¬༈ӏݛ۪ċࣆศǞ፾™ᆘŌہѮংւॲx࿎иᕠŐ˪ɲᕂþیȋሴҀ໲aɶδߤΨጤΈ෸˗ଥȷበŹ'],
['@@ⵙ͕ໞીےĦقÃᒈӋʟͿ'],
['@@૽ōݱÛśƏঙƑ࣫ȦӐʾል~࿞ƶ౨XǢɧӘȬߊƐఞǿ͗ŷ'],
['@@ᆳĿᚉʎඅ͎٣׾଩ǔᔆָᆎȎ࿌чኬ߻ȹݯ']
],
'encodeOffsets': [
[[
147096,
51966
]],
[[
23277,
55632
]],
[[
-179214,
68183
]],
[[
184320,
72533
]],
[[
-182982,
72595
]],
[[
147051,
74970
]],
[[
154350,
76887
]],
[[
148569,
77377
]],
[[
58917,
72418
]],
[[
109538,
78822
]],
[[
107598,
80187
]],
[[
52364,
82481
]],
[[
102339,
80775
]]
]
}
},
{
'type': 'Feature',
'id': 'RWA',
'properties': { 'name': 'Rwanda' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ͬӃµӵʏŁѿÆʱӍԛàþҠŘތԄʎɺȰďԈʸ'],
'encodeOffsets': [[
31150,
-1161
]]
}
},
{
'type': 'Feature',
'id': 'ESH',
'properties': { 'name': 'Western Sahara' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@oҊŸ@@ÉeNjEౝ᪁ª‚ᒷ޿÷ȳћDŽ்ᾓNǽ˫˜΢bCቆäĶ̢ΆϘˤୌୠ࣢Ђ੖ˀÖ˜ټۺĜ̦ʼnϢ@˔ȒԲ‚'],
'encodeOffsets': [[
-9005,
27772
]]
}
},
{
'type': 'Feature',
'id': 'SAU',
'properties': { 'name': 'Saudi Arabia' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ʼnΪʩʨÝͲѡ̞҃۴ʁۆׇ׀ϑƐ֋ߠīא–ӾӕञϿ͠ґǨˡӖ°ȎɹѦʕȊ͝زԟڴѓ־лIžҦœ̌ļͲनƅζʶȪ̢ٚŚƒˮˤƜ࠷ࡀ၆фdžŴৢɩיᛎၕ༠ãݠąȾЏתv͠ܥаȓƠִ̏Λ¼΍ċ˩ł˯ʎɽŐ˟ŲȵʬǕɶÒdž͍Žș࡙͐ᡌщǞDzϪש֕၁ᠽ࠽ᝑ͑޷ϙ׻ࢥϹƕɁˬ͏§߻ĎƷČॹmɫùΉɔɝЭĒΟρˋ'],
'encodeOffsets': [[
43807,
16741
]]
}
},
{
'type': 'Feature',
'id': 'SDN',
'properties': { 'name': 'Sudan' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@śhdмĵ̀џͨĵ؄ĶبϳÌÍȇԍ©Ȭʕðԍңңл؅џđ۹Ӫͅǥđʓџǃ…ǥ࠵@řǦ؃†̡ƝɳîѝӬƟɲ؃ŗɱϵɏݣ˿ǁʳğå ̅ʎÃʼƌΔE΄ӛՀĩάZȰ̱ʜUӦǭ͖̍µĎ̰ɒΖħΐˢʴǫȞɞ԰ϨئܦÏ¥ZΚॲH@း@Ὂ@ῼ@˔ࠗȁƳŪࡻ্̰͌ȷҠ̳ыӑأƏ˅ʳĉ֑α௿ĚͳƅܟͿࠟԓзέٛč΃Љɽʝ࢟Dij'],
'encodeOffsets': [[
34779,
9692
]]
}
},
{
'type': 'Feature',
'id': 'SDS',
'properties': { 'name': 'South Sudan' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Xٽűʯѿq˷ӏԨÑюХƨͳϦșӼࣳ֫օԫԇԫϭסFگȟՕȊ΋ɭ݉֐ȥάҵDZϱÆɣƕϗĸԗۚƉˊعͪɅԌΕζ֟ѬS˘ҡͼ֯͠ʴĠ̀ǂɐݤɲ϶؄ŘƠɱўӫɴí̢ƞ؄…Śǥ࠶@†ǦѠDŽĒʔ͆ǦۺөѠĒм؆ҤҤïԎȫʖԎªÎȈϴËĵاĶ؃ѠͧĶ˿cлŜg'],
'encodeOffsets': [[
34779,
9692
]]
}
},
{
'type': 'Feature',
'id': 'SEN',
'properties': { 'name': 'Senegal' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@΍ٺн̚φDŽРמȦќ˾ːкïШǾҶVДʙ֎ɝԘأֈֽžԹǔӓ̾ɿî͗ʽŧ³қâÙģȃk׿ȲЛV༇–ɥħ˥‚ѻƋƏ٢ވkȬŞƮR̸ȘήǯκcζȌǝʐˡƙʻJͧȸˉ_ȍȥࣵy'],
'encodeOffsets': [[
-17114,
13922
]]
}
},
{
'type': 'Feature',
'id': 'SLB',
'properties': { 'name': 'Solomon Islands' },
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@ɾ˿חN͉ԬԈȯǜ‰'],
['@@͝mԧĎǫżÀͮֈƁ˜ǭƎə'],
['@@ųƹحܰǫԈ˺@̠ڥʹЗ'],
['@@–ǛڅΦҟ̠̿˪ŰĐϮȫېϭȢˉ'],
['@@Ǘ³οȒ·Ί¨ƖԈΡͰ˛']
],
'encodeOffsets': [
[[
166010,
-10734
]],
[[
164713,
-10109
]],
[[
165561,
-9830
]],
[[
163713,
-8537
]],
[[
161320,
-7524
]]
]
}
},
{
'type': 'Feature',
'id': 'SLE',
'properties': { 'name': 'Sierra Leone' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ɧØ؁ͺѩ҈Ƨ̬Ĺت҆τĬɺƞǸɶpȜǂڦCɺ̛ǼˁʓƈɗṶɴ´ϹϹϛҗ«ʓȩˏ'],
'encodeOffsets': [[
-11713,
6949
]]
}
},
{
'type': 'Feature',
'id': 'SLV',
'properties': { 'name': 'El Salvador' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ġȡӡ^̡Ą΍ǘұÀʃǶ~Ů˾ɄǀĢ«IJȠ¾ʜëǸǙʪƇŒœτĴǤÑŘĝÏͳ'],
'encodeOffsets': [[
-89900,
13706
]]
}
},
{
'type': 'Feature',
'id': '-99',
'properties': { 'name': 'Somaliland' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ϛԩד۫۹Mᩧা͍̜̳К̳ҨǾ̖̲҈˚ƹǒΏϜΗкGߊɌࣴĴ݌ʼиÆ̚ƶӎˆKaE΋Aࡑ@ѫ'],
'encodeOffsets': [[
50113,
9679
]]
}
},
{
'type': 'Feature',
'id': 'SOM',
'properties': { 'name': 'Somalia' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ѼĎЊ˾͈FpɵýӧHѳǯ̣ʁࣥЙयԱ੷ܝ௷ܓवধ଩ࡁڹష࠯޳ٕँৱȗѷȍȣӽۚWᵤܾ॒ɰˆբfݠפબšᛜᡄה۬ϜԪ@ѬBࡒFΌLbːhϰŰ'],
'encodeOffsets': [[
50923,
11857
]]
}
},
{
'type': 'Feature',
'id': 'SRB',
'properties': { 'name': 'Republic of Serbia' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Ԡȡà΋Ӫʓ˄ȌȸĿșƗƶƥȷȏø̫Тγ͋ʿƗˋĞijƑšϳa˹µƒØĴĴĦȴšKǍƼƑ ŋƆƽÀšŠƯ±ś˧ȩÑèð͋Ǩ˟ĜūŜɟƠȢšŬЄЛ͔ɀτ̥Ë͔́ˉʈȱ͘٢ɚԾ™ҖͣĦˋ'],
'encodeOffsets': [[
21376,
46507
]]
}
},
{
'type': 'Feature',
'id': 'SUR',
'properties': { 'name': 'Suriname' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@৔ǙĞưڶÔࣚɥѩܟâֹͤӽƥίóϩɉΛӓDzЇđ͹öčʏƘǗ÷ǡҙèԡܴōӄˏBωؐƺѠ¯ȤԜɖƈݲ'],
'encodeOffsets': [[
-58518,
6117
]]
}
},
{
'type': 'Feature',
'id': 'SVK',
'properties': { 'name': 'Slovakia' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@´»ΊŖш̕ӺǶЈđ؂Ţߚ͓ɷɓǏ͹dzđ࣑ʮ˟»ȟȡЁĿěÄХŽͭ}ãǙ۷Ļ̱ĠёɌċ̆äńŢȂόa˺ĔxþLj¢ÆȒȖ˜žưʢD'],
'encodeOffsets': [[
19306,
50685
]]
}
},
{
'type': 'Feature',
'id': 'SVN',
'properties': { 'name': 'Slovenia' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ۜÝъȐܾtLjƘƘUǎ˳ڝɟć͹̇đHɻͣh˷ƎƷƙב†ȈúȫΨĞа'],
'encodeOffsets': [[
14138,
47626
]]
}
},
{
'type': 'Feature',
'id': 'SWE',
'properties': { 'name': 'Sweden' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ࠁוƀԥ೹ڭྱܡؓஃײףߦүޗॅ࢑ȝ͍තӋ޿৳ĆӅڗঃˉߐ۳॔ٓஐφӜּۨ˦ন՝ю½ૠղ߀࠰ä̧ͬ˺ಬஂࡀञֈײ߮GɞҶཔƉŬքԸ”૪Щ಼ֱv಑˴͛ฃʃ'],
'encodeOffsets': [[
22716,
67302
]]
}
},
{
'type': 'Feature',
'id': 'SWZ',
'properties': { 'name': 'Swaziland' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ǡύӭěԅҖS̄ɰ̀ĂʔʐÒшƵŰϕðω'],
'encodeOffsets': [[
32842,
-27375
]]
}
},
{
'type': 'Feature',
'id': 'SYR',
'properties': { 'name': 'Syria' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@࿩ࣅऩͬgNŖŶ_ΈȸҠҜ̈́Əͤϗ¨ÿٞȶΌɤȀɤȀ°Ҹ˞Ǐऎɺ҂ƿۖFॴ̀Ґaक़žїԽҡȹĂؗͅ৫ᇵ࢓'],
'encodeOffsets': [[
39724,
34180
]]
}
},
{
'type': 'Feature',
'id': 'TCD',
'properties': { 'name': 'Chad' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ĎЄաnDզΓ̶δ૊ੴߌ¬ન͖ၼǼΰΓ˾_ˌ̽ɔȷರࡔҠ…ྑ…ྏ¦ܥÐϧإɝԯǬȝˡʳĨΏɑΕč̯̎¶Ǯ͕Vӥ̲ʛYȯՏƛэͽ؉ࣹ߅ϳ߹¾ʁûĊ̏ѫ̋Σ͟੓͏ȽȐƓhƹɍۛÙƀɪ˅ׄşΐλƜӷӪǼІϦċʂÐҸSқކŒ֐É֐ͭՠ'],
'encodeOffsets': [[
14844,
13169
]]
}
},
{
'type': 'Feature',
'id': 'TGO',
'properties': { 'name': 'Togo' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ڱdzȇ̎ɡՔãкȆݴɁ̬ăڎD؎ΕѠÖˀ݂kŅѵʲʝ̈̋ŽЭǜǥኝȺׅ'],
'encodeOffsets': [[
1911,
6290
]]
}
},
{
'type': 'Feature',
'id': 'THA',
'properties': { 'name': 'Thailand' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ݭϬܗeŬڈ݉Káऋґ௯˙ݏÌ؋ն΀ދưܭҶӓԚĭѤѧ˝·ևĵßќۇςƣƭͧ͒ƝжҁӄПЌƏӳǃҲĠԾʚ߬ТࡸҤ޶͟ތ`϶ĩҸ֕ښȩф̄ƺ̮ܶ·ֆՓؘН݆ΠƴϦࣦצœӬθӔȘθʷ´ԍ֨ȷࢭpݫࢰԆʤƧӰzǜَ̊ÍٖڽÀࠥںܷ›܅˙ϛ޿ŦગDž՟ۧȤ১'],
'encodeOffsets': [[
105047,
12480
]]
}
},
{
'type': 'Feature',
'id': 'TJK',
'properties': { 'name': 'Tajikistan' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@̭ʷࣳƖāӛ࣬Þਢ˗འŶɈާˠĐԜȓ‡͛ŴӍࡿBׁØԻϕύĉ̉ǯͩˠþ۸ʩ¢ĞʲғȐα̇ė͹Żūԇj˕ϩ˯nj؋ˑʱĺӀࡘǹض؟ȨɔφۮŸЌҬˌբ૲ȜǩϵŤɹΎv'],
'encodeOffsets': [[
72719,
41211
]]
}
},
{
'type': 'Feature',
'id': 'TKM',
'properties': { 'name': 'Turkmenistan' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ñۼطŠॣݔڣĠगюׯþσƽ֙|ׯӓ݇NjƻרŪ࢞ٽ˶Ɏֺ֏¸Ȇ۾ߊȵ݈ˎؓԎʉӔڱɋď؛ʿհψ˨ॖǪ֨ɻךڅњ¤ॆ\\Əцܖ̂۾ӦଆѹĜڡ͐ǣࣦžˮƳаׇոЃ࢞Щ૤Ϋwԥʩ€Ѕɤſ̙۽NjǙڥӁʭڏŵǫϟهŏࡩ͈'],
'encodeOffsets': [[
62680,
36506
]]
}
},
{
'type': 'Feature',
'id': 'TLS',
'properties': { 'name': 'East Timor' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@IJȤܢȌז†ˀŀ͆Ľ̯ɫ࢕ο۳ʋeʬďǔ'],
'encodeOffsets': [[
127968,
-9106
]]
}
},
{
'type': 'Feature',
'id': 'TTO',
'properties': { 'name': 'Trinidad and Tobago' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ӚŊǮ‡‘صۭġƯúʒɲiͪ'],
'encodeOffsets': [[
-63160,
11019
]]
}
},
{
'type': 'Feature',
'id': 'TUN',
'properties': { 'name': 'Tunisia' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ΩພԭͺQȰۉԄóنԮҶȢۚƃߠǠќࣶͺךĵ}ы܊̲ÒljпЫMϱ̆ȽōܫփхDŽқѤaɄЍ͊ſ³٥Хʋʵˏֽ͓ĘΑïΟЧț'],
'encodeOffsets': [[
9710,
31035
]]
}
},
{
'type': 'Feature',
'id': 'TUR',
'properties': { 'name': 'Turkey' },
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@஺͗ঐżܤõলѬࣆ¢ߴЭƜ̑ăУزȻͨʕֻʇˀ५ǏʻҠڧЕƙ̏Ɋ঍ňίŽॗŽҏbॳ̿ەǀऍɹ˝ǐ¯ҷɣǿɣǿ̱Ϡ͈͂ԟí۱ȖֿәౣĥڹҊࣟ†ȗΑׇij߻҄ࣻeӽ࠶ؗҰЦٸՓВठߨಒ’Μྀٔŏ৞հ঒ʄർlุף'],
['@@۫ҏ˃Ϻ\\ǦȦĦʺՂХɞࡦ˄ܤőĴ͓ܼ˓Ƶȵি±Ωʷ']
],
'encodeOffsets': [
[[
37800,
42328
]],
[[
27845,
41668
]]
]
}
},
{
'type': 'Feature',
'id': 'TZA',
'properties': { 'name': 'United Republic of Tanzania' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ƚġᵂႋÌӣ஼࠿ϱਙ¸Ӊՠ̩~ɓɳԓ¶ʭÇГ̌Ճΐ̰ࠡǿڝӣࣿ͛ԋb̙ʥבsɕŃঢ়ʂكåɽଢ˵ϺǛɶࠗƾӉʨՕƘͯƘΗɈґ੖ӣҺǗӤČѨƯޞΎ ̨̦͜ѬȺǮS˘ǷȐ·ͨʐł¶Ӷͫӄ̎Ķऄ[ႎà'],
'encodeOffsets': [[
34718,
-972
]]
}
},
{
'type': 'Feature',
'id': 'UGA',
'properties': { 'name': 'Uganda' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@\\̍ĵԇʷȯĐPوȜ͎²ڬǰϸ͎Ѭ͔ɠ˒̘͵Ŗ¼চΌɮՖȉڰȠעEԬϮЊ׍İсτ९̧ؓЯ֋ʉͽTࢹႍß'],
'encodeOffsets': [[
32631,
-1052
]]
}
},
{
'type': 'Feature',
'id': 'UKR',
'properties': { 'name': 'Ukraine' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@̾“ɄȒʮ¥ࢌĆ՞Ӈȿǝêʻڠ£̘ηkǑ̏٢Ƅ԰ϿӮVఊ˙XʙͿѯȆҩƃ˩߻Õџɻύڡã֑˕޽«ܣ̻¸ԹЪȭࡨ¼Ǐ̛ँơଛӟұǠȄЂࣽʘƨLjߪ˪ʑȔಯɆË̼ީĻ̷ҧٱةϟƠЁƉϑƺɂĞƦ˾ɲˎÑƮǬäĊśӸ{ɞØƽĎÐŲ̉ɈŧΘ̩ƐÒ˶ϝɦΉŽأʾ֑ĉȧŭΟ@Ƀȟاă˹ŹϷȴ՟HԳĢγǵÍɤұɮǐͺɸɔȀµɑϘބۦиİĜɾхܼДҢɪٲnࡖßबȫڎi͂ŧ̀Ʀɚȝݸ¢ͮąÄцʶȂܞº'],
'encodeOffsets': [[
32549,
53353
]]
}
},
{
'type': 'Feature',
'id': 'URY',
'properties': { 'name': 'Uruguay' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ղĚࡆٯ̺|ࡺ՟ڈҫӠֱχЉɸӇεՇॉұاǚғěޥΰ֫ԟҬÞլǾȈS࠸ɤࡺȾڦ'],
'encodeOffsets': [[
-59008,
-30941
]]
}
},
{
'type': 'Feature',
'id': 'USA',
'properties': { 'name': 'United States of America' },
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@ũƕȽŤ|ɾƓ̨¦ĤƤƎÍǔ¸þÜe͐ƙƬñƌőɊ̍q¯͟ǵˏſ'],
['@@˭ÑƟǮīèQÀĈî̘āɘŹëĵ'],
['@@ĝ҉|Úĸа•'],
['@@­µÓŻˆŃȒ’ɤŚêÃʐ˥'],
['@@ıĉ˱ƴªÖŸĈȘijȝ'],
['@@Ƭңʼƛז½࡬ƅࠂʹڼŊਖɓ˞Tݨʄ߂̧ࠒ͗ں˩ٶˏĈəȢĉ½ĉɦǎĔ¦ȣǜƅɴ@ŬĹĽƫ࢖ЁǶށǚܳʗӹЁҥȁ̍mēĦť˸Ɓɂ@ঊ҆ࡾƀસмfĐ÷ʰƉǒϜƆࠜHޘAˎ͞ŀàࢶ؄ϜƸN໾BĎȺː¦Φž̖Ϣʲٺٚي˨ə֜ƜώʏAଧռӅƢ˝࣋Пࡷ̃ࢱʝѻӿƛȋSѽˤѽΒsė̬ʦȇãʇ֥ƋЗhةƥλ¥ӥ¥۫ʏఀǂʠǃ୳ʥ՗C|ĺʭɷʚǹ׽ؑ٧×Ɏȁª˟ɀǪҍȼƭ^ͅˏ͛ҿڡûʺֲѕ͎įۦljεǴՑևƀׂ˓˜ߛʊÍĖ̃ŠࡁՕدࢇʝցӱнÁэ̱ţ˭इձӁЍЅӽŻׯƪ׍ˬܗώשLεЊঅ֥—͛ȿԡʣŃЯĺƁς͋ȖѻܢϹٞű͢Ǥ֐ɽҦٻ۲͟źࡑϡƭ¦СϼՃȺोŁݗĤٙÍΏſƲɟaͽǴǓLJō̵Ů́ǃ؍€طѺܻĿ؏ȚԹÏۻȝއح࠳γҝБȕϗUׅ¨ЕDŽ˹͝{׭ȂٽʺɽЄȁטӷӐ̃ӰуֺףͲۉgՉڑۣʦѡʪȽҦ˧Ѯӿτїˈ̩̖ป@C΋ڗ@ဩOቿפ౓ТĀǒ੩ĝॕÝƙіխӚϻĴğʌһ¦̝ɪޭĊɉƌĹҢࠁࡊ۩ୠˆȚχˤٯ۴řۆ҃ҞȀۢ…ܜˍ٢͠ߊĸނĺނƱૼˇܘʓ϶ĸǐ௒˷҂ߋȺɜƇې˷ێᛸ@᠂@ࠜ@ᢢ@៚@ᡀ@ᡄ@᭰@ᮞBაAF͔˴J'],
['@@࠽͋ѕɐŽЀބ̘҆Ÿ֐ÉΤʻܫЍ'],
['@@ԧŽսƾԛɮࠦƞښùĂ͑'],
['@@԰DžԾĒڸɛ࠲őéĝُDZٕǾ͋Ʋݍµȧôº̈́'],
['@@؊ϛώnjහ»¹ȕ౾ƛࡨČᄚ˅ྤā٨ʼn૦Ǝౢʧࣲŝ@@MᷱIⷍࠠ{ࠌɵהρݜցࠈҺࡈ˖Ҁѡ֤·ޒϙՂ׽࡮य़ේ՗xՋұЙҥ͂ݍˌʃܺએںҍߎ߯Ä೷rটʌ჉ࢎߩDŽ฽̜୑í࿻ϬৃΨटǯǦ׏ҫÁঁǫ݉˱झdzťӶϚࠚࣀʶɱɂੱҵֵ֑௅ױؚСߏ׿ࣗΗࡁʱȻωಽѡ˅ϿছΫֽÞ޷ɻ࡝˹ۧ˫෹ʉſƘऀϾࠔʸࣆҠਬĨвΈ୘ԊȈǚب̒ƢْђӸॹʫ˓Ơҕ̧շюɧ̝̽м࠿ͳԩBïԄƲ̮ե̚થLJ܁ЀַȬIӈ٩Ϊ͘ӘۆҸ̚њںÖ־ƇڴМ؎ï٘ʼƻϨҹưج͖ԩWࢻǽʯȃڏȄஏĥ௷ȬΛ͸੟Ӧ୾ΘመШ۔@ŕнᄢŽڽԶਕ͌ױр߫ΨଽˈҺѲ๰‚ਗ਼ϦȨФ࡬ЎࠊĪཪώޜÉಐ҄ౚǭ']
],
'encodeOffsets': [
[[
-159275,
19542
]],
[[
-159825,
21140
]],
[[
-160520,
21686
]],
[[
-161436,
21834
]],
[[
-163169,
22510
]],
[[
-97093,
50575
]],
[[
-156678,
58487
]],
[[
-169553,
61348
]],
[[
-175853,
65314
]],
[[
-158789,
72856
]]
]
}
},
{
'type': 'Feature',
'id': 'UZB',
'properties': { 'name': 'Uzbekistan' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@xԦૣά࢝ЪշЄ॥׈Яࡾ˭ƴࣥ͏ǤěڢଅѺ۽ӥܕ́Ɛхॅ[ᶾᓘӺƾïದ׻یͅߤݵঢŪ෸à৔ؗÙࡅЦMǢۍ੬ɲЉ̺Lπ׺૎הӖƺʠĉ۵խئ́ײȾ়ѷ੽؁ٕĊ΍uţɺǪ϶૱țˋաЋҫۭ ɓυؠȧǺصҿࡗهǰҳN'],
'encodeOffsets': [[
68116,
38260
]]
}
},
{
'type': 'Feature',
'id': 'VEN',
'properties': { 'name': 'Venezuela' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@yȣӱĭ˜ϡYѭυӥ͆ڙδÆȌ؈ʻ̒§َਸ਼΀řІ̎ˆ̞ןל_մҵ˧ݮQ࣌ĔӖϕٞĻҼʾXɄਨ¼৖\\܉ʛ˼Їڦ×ِЯƆڧѬn͢ȣڕӱó̫˾̷ȽƽԫƉjϱɫɱّ֪Őʁ̭͍ऱ̽׿Žʏȣڛɀثņƿýϔɑ‘֝ŜՉ܆ï°ǭ׷ʅĭΣΉƏسȝNjʱٷÅҧѼʯ࠺ɟ̧̌Ȅюм…ȊʅʠǛ֒à׼Ȉ˰ƲҎ̓Ơӏĩ؁®ͻęסܢӥńઉăȧ̊ȷê‡ǬĴ̶áͺȃȂŅϮѡÈɸӮĺ׶ʔ̸͘ʌɈрդƖ'],
'encodeOffsets': [[
-73043,
12059
]]
}
},
{
'type': 'Feature',
'id': 'VNM',
'properties': { 'name': 'Vietnam' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@૭ܗ۫ߍȁ׍٠ࢭ޺ળނԱԞګϪ།ŕ๓۫փ१եۇ۫਷ޱ̧ՠʀ֬دӌܬ͸ࢦÔσԚප٨ļ৖ț֖ƶࡀɃצٍאՋ݌ۥ঴৓Ԋʊ̠՞ɘ͙ܺਙPϕކӭڐҊȴڢIࠈĬܒ҄К̿ސƵƃӛАͿࡎɓ'],
'encodeOffsets': [[
110644,
22070
]]
}
},
{
'type': 'Feature',
'id': 'VUT',
'properties': { 'name': 'Vanuatu' },
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@ˣō˭ςŒɤՆӗ'],
['@@ƌڱɥŀǩ­ťɴi٢Дʵ']
],
'encodeOffsets': [
[[
171874,
-16861
]],
[[
171119,
-15292
]]
]
}
},
{
'type': 'Feature',
'id': 'PSE',
'properties': { 'name': 'West Bank' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@ԣŭʙЃŕ˜ɜɌŚɁĦǬ̤֔ś'],
'encodeOffsets': [[
36399,
33172
]]
}
},
{
'type': 'Feature',
'id': 'YEM',
'properties': { 'name': 'Yemen' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@؉ɥNjύo˹࠷Οഇϻݩףυ±ʥºӭΑ՗lj۷©ɃµǿɛəÕŻɇеlˍœ׉¨ɓӬzҠƍʜǑتʋΊǚ¤đϨĸNJ™ξςˌđΠɞЮΊɓɬúॺnƸċ߼č͐¨ɂ˫ϺƖ׼ࢦ޸Ϛᝒ͒ڀ൳˞ח'],
'encodeOffsets': [[
54384,
17051
]]
}
},
{
'type': 'Feature',
'id': 'ZAF',
'properties': { 'name': 'South Africa' },
'geometry': {
'type': 'Polygon',
'coordinates': [
'@@ǏŧΣяɻћӇ׻ोࢁףԋًϣ࢛͙ѓ«ŇɷԛŰеDž࣫NJԙĹΏ¬ࡿͩܓƃԱͅϡoΣ̚˳fαϒŸśŏɦLӰ˙֞˔ƴs٤ս޼х܈AF׽તДдͪɯƘΫϘÓՈǃҌÖݤіB᷌ɨűӾߙûԟȈ̏׼ĒрϒЊʨȶДЦȚΠķВɽۂ£՞ȜĐʾƨДҚäʨ͂˪֔ݮغஒؤ΂UОƛ˲Ķ҂ċД஁ɔׯƫऩî̟чƶʏÑāʓɯ̿T̃ԆҕӮĜǢώْQȿؑıۥɑϛֵщ',
'@@νʶϻǟҕ҃͡Տـ٧̜ČƺˎҴƀƜ˜ʴФ̅ʪ'
],
'encodeOffsets': [
[
32278,
-29959
],
[
29674,
-29650
]
]
}
},
{
'type': 'Feature',
'id': 'ZMB',
'properties': { 'name': 'Zambia' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ІϏɊ܋ƝɩǙڻLjۡ˃̇ʭޭѶɓᢇۗĂׯٍřӍͯĹ̛̅ßܵۓҭխ˳o˗ĬऱĠƯÚOêͧȎկ¶ۋȑչԾ֣یžᦶშYí̂Ű̀ƧЀĪТėʺ̂q¶ʽϾrՖûˬϡڨŝԤˆȌѯ٠ş̴ΧΈҥ٠Që࣠ɱƳח͞ɧƬļࡈƬসȉψʈ՚ɤĶ଀ƚͦđΘɇͰƗՖƗӊʧ'],
'encodeOffsets': [[
33546,
-9452
]]
}
},
{
'type': 'Feature',
'id': 'ZWE',
'properties': { 'name': 'Zimbabwe' },
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ҁČ˱ĵНƜ΁VՙϞٯźʙՒC̒έĞ्ई˃ӢǛƮ͓ڤलğ˘ī˴pҮծܶ۔̜àĺ̆ӎͰَŚÆ̻۬hϴǯǺȻАÓѦˑF੟Ǐ׋—عƊʝħӵŵùɛ؅ࢫ॓'],
'encodeOffsets': [[
31941,
-22785
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/xiang_gang_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [{
'type': 'Feature',
'id': '8100',
'properties': {
'name': '香港',
'cp': [
114.2784,
22.3057
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@™@}ScTʟ@cWuJÁ–]„l¦RLj¼BĄà˜ ŽH@TOHCTDDDHDNAT@PEHDDNJLX@BABALHFF@DKHADBBLDHHFBLEJB@GDBBFBADDB@@KFAFBBJJA@BB@@FFDDADFF@FADDDBJC@AFBD@@DDD@DAA@D@DB@DHHBFJBBFEHDFAN@DGDC@DLCBDDCFDlAFBFCBEF@BC@GDAB@FD@DZJ‚X´HĐMja@Ý`p_PCZ@lLnRGSDMFK|a\\Y}­ƒ§™Mën'],
'encodeOffsets': [[
117078,
22678
]]
}
}],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/xin_jiang_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '6528',
'properties': {
'name': '巴音郭楞蒙古自治州',
'cp': [
88.1653,
39.6002
],
'childNum': 9
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@˜@ÈÒĊanwŎV„™Ȯ¦ͪŃĢ„ÜōȂçČéƐżLɆóĊ‚Ċaʊٱ¯²Um»ˌmÈ»V™ʠţWÑůǓ郙ôƑƒğÆīŎī@Ƿ™™˺LÞ¯ƨVǪуšĢ™ȘV°wĢŽôk°¯ƒ»΀@Ȃ»ĸŽǔ@΀ƒ͔ôôLɆó̐ÝɜLɲōͪƒƨóŤK@ī@IU܃ÛmȻţǩÝ˹ÛljťǓǫō@Ɲ²¯VçōKͿŁΗÇţ»ƽ™ɅƑLÓŏÅÅɱV@ÝĊU¯ÑĊĭÞLšÞŎJ±̃XȣˌōlƒUÈ¯ŎKÆƅ°™XÑܱnŗġV¯™óaUƒƧUōŁ„Ñ™±„çɲ¥lĉk𰃘ƒnğţL¯ÝÝUƽĬ΁lķ°@„ō„XÿݯV»ŹLʉÞɱŤĉó°ÝJ™¦ÝKÝ£ţܙÈĉ@ƒxǩUċƑ@ky͓¹™`U²ĉVġ»ğa¯¥ť@ĉ™‚ó@ŻÛÛJƒw¯nó¯ġWƽʩķÝɛwĉĕݼȭÞķō@ó£Å΀ƑޝôȯÞ¯Ȱ™ÆōèĉXǼó@ݚƒĸ„ÞVƜĸȚUʶõˀĵĖɱŎÝĖVࢰӒѢ°˘nϚVˌ™ÈmɼĵŦW¤öʊõʔ@°ÈXVŽ™ènŎȁb¯ǫĉ„±Èğ`ġwōÔğ»mVVށ„Ý¥ó@™ĸķô@ššbX„ĶmV²²`Þ_˜˜ɴbͪȰ„ÞWĸÈŌmބšŽÈUÆ»n¼ǬVķĸźô¯°n¦ɄǜÈ'],
'encodeOffsets': [[
86986,
44534
]]
}
},
{
'type': 'Feature',
'id': '6532',
'properties': {
'name': '和田地区',
'cp': [
81.167,
36.9855
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ƨ¥šèź٨ΘƑᩄbUࢯÞĕɲōĶĕöʿVʵķșUƛƒÝ„ķm¹Þ™ô@È»ĊWŎçšÅ°ȯȰÝ°óƒÆͿĉ»̽çnƒmɱĵƧºóU™™ƽ@±wóL¯°̻L±Æ¯Vƴķb¯VÇ¥ğ²Ǖbk¥ÇKlÅɱġ@у™óK@™ÇaÝXğţxĉČǫķê¯K@у„ƑKƒ¼¯Vóaónġw™óÞéU™ġbóĉğÇl¹™aUóğKW„Vůn›ÇŋƑ›ķnʇ»óxĉw™çǰÅw™°ċ„XŽ™„ób±ƒkÈÇJ—ƒm²ţx@ÒݎšŦǺn„ó¼n°ÇbUÒ±¼XĸĠłƽXmwĉºƒzÈÜmnxmx²ĖmҚbnŽƧêUºĊêÆVóĖóUĉ¼ÅĬƑ°ɆƆŻŚlłÞLš¼nĠƒ¼@ޙšÞź@ŎÞ°VšɄɴжϼِ͈Ŏ„'],
'encodeOffsets': [[
81293,
39764
]]
}
},
{
'type': 'Feature',
'id': '6522',
'properties': {
'name': '哈密地区',
'cp': [
93.7793,
42.9236
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@WnŐÆĶL̦ţºź„lxÅĸƽŚ‚Ʉ—Į˜è@ô²ÞUĔƐńV°¯ĸX¦Ɛm̐bƒ»Ɇa΀šĢ™ƐLˤ™ȘÑnƒІljĸÿn¯ĶaŎ¯ĢĕȘ¯°΂œla¯¥™ǕǔwˤӱlťО̻nŻmɃĕċţUw°WUóƨÅţķ°ýV±óÅǓéʉ¯ƽكéōǖȁÝƏůǕw˹ǫȗǓƧǕVý™é@ĬţLƧôͩ„ɱŎɛK̏ÞɅôóK@²@°ōؚ¼lŦ¯ŰóƜÛlV¼ķ¼ƒ°kȰ™Ű„ĠƒǬ™ŚÝŎmˁ`@ÇÜn„'],
'encodeOffsets': [[
93387,
44539
]]
}
},
{
'type': 'Feature',
'id': '6529',
'properties': {
'name': '阿克苏地区',
'cp': [
82.9797,
41.0229
],
'childNum': 10
},
'geometry': {
'type': 'Polygon',
'coordinates': [
'@@VƚxˌŎÞŎƒ°n„ȂÒ°²VĊ¯VğƾˍǬƨÞÞKÈÞĊVźôɆÞĢèԐôWȲŤVÞĸʶbl‚¯ôn_VÆĸlmÞnVź_ĸ¼Ȯmǖ„šéĸW°°„ĸJ„kʠ¼Æw°¤ÈƒlxɆzČºĶI²ÆǔUš°ô@Þ¦‚ƒUnUĠ¼ŎÓĢxĠ_²ÇĊƒǬ°ŽȂamōšçUÇW@¯öʓõʉX£ĶťnɻšÇUˋmϙ¯˗ӑѡᩃaΗƒœɜ°xWƴUxɃÒˣ¤Ʌwğ„ʉōóÝŹ±°ȗ@¯„ƃ²¼',
'@@ō™гwȁ¥Ƨ°ŹÑķV™¼ÞêĊ»‚šm¦ÅW@ĀôÈźaɜxÈbÞÆĶIОŘnIÇŃÛÝĊÑĠƏ'
],
'encodeOffsets': [
[
80022,
41294
],
[
83914,
41474
]
]
}
},
{
'type': 'Feature',
'id': '6543',
'properties': {
'name': '阿勒泰地区',
'cp': [
88.2971,
47.0929
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ɲˣĊIÈ¥‚ÅU±Ċýkō°ƒĉƽó»ĶƽXóʵʵ™ȯƑÅȁɅ¯ĉ@ÇሗK֛@@ˤV֜ʵрƒǬVĸƑŎ@ƆϯÑóŽķ@ʇ»ķ¦έmlÈĸĊX¼WźÛÞÝѸ‚ĢČþ„ĀĊôάVö¼ĊUƨ°°èŎČUÜÆóôVôô޲êȘlˌç°`n²ǬŽĊaš™ƒÛ°±kğmm»š@°ÝɆÛÅÇVaݍVm͔ğôÝÈb‚„@„ƒ™š™ÜUĢÑĊ@źīżWŤÈǖWôŁÆI²ÓƨL@ŽĊX„mmÑÆ»ȰÑkƒĶō@ý°m—¯'],
'encodeOffsets': [[
92656,
48460
]]
}
},
{
'type': 'Feature',
'id': '6531',
'properties': {
'name': '喀什地区',
'cp': [
77.168,
37.8534
],
'childNum': 13
},
'geometry': {
'type': 'Polygon',
'coordinates': [
'@@Č@°ƒĠ„ôÓô@Ŏĉ@Ƴĸ@Ť£ĢlVôWVóřXĉŤêÞ@ƐÒĢÑlèÈV@šĠIk°ÆŘ@ÈÈĀ@ǶťÒğ@š„@ÒĉlŻ_@šƧĖÅĬōÆ@bźÞnƒƒlVœÝĬšWƼʇ„ƒÝÅ@ÇÅÈwWóĉ±ğz‚ĬČƨƂÝIĉݯbÇÑĉƒ¯ʈV°xUŰĊ¤ƪ_ôÓɚI@lȚXȮ™ŎlɴȘ՘š„¦ɲÆʈ_ɴŽźŽôÞʊŎĠƒɆxˤ£ɄÑVwXƳ¯w›ɛŹ٧™çƧ¦ōƒُ͇еϻɃɳU™Ý¯@ōÝŹš™@݄»mğ™»ÝKkŁżřɅƅƒ¯ÆīĊ»ôVôĕÅUĉéV¹ƨém™anѱĕnwmwnÇۄyĉ¹ŹlŏkĵèķmōÞġKñÔċKÅèĉzƒŽ„ômxȗÿƿI@þÅČÝKݰ@¼Èš@Å̚ÆUċłn„ÝÆǕČĵJm£ÝJ¦@ĊƒxV°ƏLċ¼ǩ™@™m@ÅĢómÇÆğ¹Çš™ÆšĖÞKšx„wô¦ÆÑÆL²ÆƾŽU„ޱŚÅŻĖ@ĬŤÈñ„@ǔÇx„Èǃ',
'@@VÇ™ţ°ğUĠ¯mk¯ó¥ķIġÿƏbƒ„ĉa±ÒĸĀlKU„_m»nwšŽ„m@ÈŤ¦ĉbÞ°±Þżł̦°ĢŁVé'
],
'encodeOffsets': [
[
76624,
39196
],
[
81507,
40877
]
]
}
},
{
'type': 'Feature',
'id': '6542',
'properties': {
'name': '塔城地区',
'cp': [
86.6272,
45.8514
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': [
'@@ήnĸ¥ʈ¼ĸ@ôϰÒ@ƅƒōUķƑǫʶпU֛܃LګK@΋ĸ@Æ£ÞġÅĠċšLV݄»™@Å»Ýnm¯š»nŻĊ@nķŃ@¯ómóÛÝǟ¯aÝóȭ¥ƒšōUmxĉbÇї@›bUº¯X¯ÆƧbVÒĉnǕw¯°ƑŽV„—ŽÇ@kx±Uƒšɱn™ŽÅKƒ„¯ƒĠǠU°ɜL@°ƒxnĬ‚ĀŋŎÇLƒŽğšϱÞέƜkôÅĀǕłƒĸĊŤUṴ̋„¦ȂϰÜɨ°x@°żǠÆƈČVĠ»ČL°ÇšbĊÑ̐óÞlĶwބɆVÞwǬxǪţȼÜLŐĶˢ@',
'@@óKĵĀV͈ĉłƾNJÆŤƒzXl°ƒÆL²¼źŽôÈĢǔ™¦l„ô°ɜÞʊĠğŃm»ʵƳƑʝȗīV¥¯ĉ°Ñ@ŃÅI™»ĉmğn™ƒašƒċƨbš™—w›ġ¯@Uōa™ĉÝJğÑÆŎkŎÞĀlꃦ'
],
'encodeOffsets': [
[
87593,
48184
],
[
86884,
45760
]
]
}
},
{
'type': 'Feature',
'id': '6523',
'properties': {
'name': '昌吉回族自治州',
'cp': [
89.6814,
44.4507
],
'childNum': 7
},
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@መL@ȰĊȂɆƒÆĊ£„ťôWÓɆbĢÅŎƒÆ¦ČÑW¥°ķU¯ƏŃVē±Ý@ó—ç˜ĭɃƾřÆķkwʃŤ¹ġ¥ĵKŏÅXmˍщwǓ¤Ƒ@wóōVķ£ɱšġôÛa±Òȁ„óèţIVŽƽ¼k¤ó¹ġJmx—»ÝUƒ²™@ÅÆƒĸǫŎ„ĊmŎǬ՘'],
['@@Þô°bÞǠôÜôn@°ĸń˜Ƕkłƒ¼UޙKğȂÆÝĢŤķ@@ΌڬL܄K@ˣȂ˭lĉńW¥ĵVÆý@ŃÞēUŃȗƅ@ŹƩǕĉ»k»Ç™VğóřX™ŻKƏŽċêȁèÛŎġƒͩń']
],
'encodeOffsets': [
[[
90113,
46080
]],
[[
87638,
44579
]]
]
}
},
{
'type': 'Feature',
'id': '6530',
'properties': {
'name': '克孜勒苏柯尔克孜自治州',
'cp': [
74.6301,
39.5233
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ˎǫĠƽ°UUĉ¯±ȁÑmƒ„¯Ýōˋō™wUű»ÅƑ°ƒȘ@²¯ɳʇ`ɱŃ¥՗™ɳȗōkȭšșW@kəJóÔƩ`ĉ£Vů¯wU°ʇĊ„ÈÒ°aĊÞÞJŁċƧīĠyĊ²XôÇxÈÆÆ@„ÞʈƒÅ»™XÞīU›Ƒkm„ŹÝ@aŎÅÆīƨĕ@™ż`Ċk@љƒĠ@ŦÑ@ǵÇÿ@ÇÅŗl¯ğJ@™ÇUkçġÒƏÑÝ@ţéWĊôŚUŽóXUġkţ¤ķ@@ƴōĊó@óÔğƒ¯„ċ@@Қ¤kôˣŰ͓„ƒKX¯ċwƧôğɐšÒôIVƙš¯UķǬķšnŽ™¼ôb°ÒȰVVÈÞ°ƒĸó¤V¼°„V°²êƒlĢ҂Uƨ¦ôȰƴĊVV¼ǖIċĊ„ÞɜéšnČW˸Ǹša„řÈw±īšçĸ¤ĊšôšwšŽĸU̦˜éǖĬ„Āô¼lÞkÒ°x°ƆÞx„šÆV²ǔ»„b°wގȘ¥°n„šŎV@°„„ʠè‚ŰȂb'],
'encodeOffsets': [[
80269,
42396
]]
}
},
{
'type': 'Feature',
'id': '6521',
'properties': {
'name': '吐鲁番地区',
'cp': [
89.6375,
42.4127
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ôK„ĉǪa²¼lÜô@ʠê°Ĭ™ôȂƒ²ÑÜbĢóɲ™ĸ¤ŎUô@xƒŽǔ£ъxˎmƒÈÛ@‚_nĕÞōšř„ǫƒğšůlȯ„¯ĸ»U»Ükôƛ°ůkť™»Ŏŗ@¯@±͓óͿ„Ǔ@ķȁ¼Ϳ@Ƒ¼¯°ólġ¯xȗUġšƑ™ǩÒƧUݰ˹Kóššx@ǸōĬÅĬƑĠ󃄚ǔêÆ°XÒʟŤUšÇ¼ˋnn¼±V²°ȂUŌݜbʟǔɅô@żǬaҎÈ'],
'encodeOffsets': [[
90248,
44371
]]
}
},
{
'type': 'Feature',
'id': '6540',
'properties': {
'name': '伊犁哈萨克自治州',
'cp': [
82.5513,
43.5498
],
'childNum': 10
},
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@ĉ„ÆŘȁ̐mÞ¯ĀX°±¼@ƾ¯ƴ°ŎÝþŋ¦WÜÞbȂĉźUœÇmwVUȂóô@ȰÝ΀nÆJn™ƾ™ʠ™ŌLČóǪ¯œ¥ǔaǖšŌaôÝĢLšx„ƒÆLšɲm„™²VlwÈ@˜Uƒƒ°¯ǖxĊmUÑƨa°Å°WV¹œa›ÇɃÈm¥°¯ŹóĸķǫUm»Å¼ÇVɱ™ƒŋnķÇÝX¯ƒͩÇɳa——Ý`±_U±ĵnWƒ™a@™ĸóšķ™¯ǓV±ÅĵJċ¹ɅykwDޝ£Åxʟ»ƒlķI¯ƒX¯ķ‚™êǕƒȭnķ»Ź`±„kÞ@Žš„Ýô@Þ°xšŤŎIƨÆUxōš¯²ǔĬǬlUŚ'],
['@@ÞĀlꃦ¯ĸŤKޙšƒċƨbš™—w›ġ¯@ţƽJ']
],
'encodeOffsets': [
[[
82722,
44337
]],
[[
86817,
45456
]]
]
}
},
{
'type': 'Feature',
'id': '6527',
'properties': {
'name': '博尔塔拉蒙古自治州',
'cp': [
81.8481,
44.6979
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ήƛϲÝĠ™„ÈKŌōÿmī„w@¯ɛKV¯ğǟ°Ƒ™wġKóÞŋbǕ™Ǔb›¦ǩ°ċôŋKʟšƽšmšÅImŽͿŽȯÞó@ȁôUVnx›ÈŹVȁĊÝabŻ£¯°l„óxȂŤĸkĊšÞyĊêĊmĢxV„ƨÈŽĠX„ŽΘÆĠÔź‚Ɇţ°LXƾŤŤb'],
'encodeOffsets': [[
84555,
46311
]]
}
},
{
'type': 'Feature',
'id': '6501',
'properties': {
'name': '乌鲁木齐市',
'cp': [
87.9236,
43.5883
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@šŽWŽôŚUĠȚl¼Ċ¼ƪǖ@źȘƆ@ýlܚXVŘޙš¦V¼kĖó҃èkĊȁˮ֜@ǫ՗nōƒĉǬō„ķÆÅš@„±ÞV˜¼nwĢIôºl£ƾ»UŤJôçšó¯īʟéó@kÛ±»ǩbƒĊóLҍÇǫb@ŻɆóʠǓ›aŋÞȁVʉłĉbĉɅô'],
'encodeOffsets': [[
88887,
44146
]]
}
},
{
'type': 'Feature',
'id': '6502',
'properties': {
'name': '克拉玛依市',
'cp': [
85.2869,
45.5054
],
'childNum': 2
},
'geometry': {
'type': 'MultiPolygon',
'coordinates': [
['@@ɜÞʊĊýVaŃm»ʵƳƑʝȗīV¥¯ĉ°Ñ@ŃÅI™»ĉmğn™ƒšţL°ķóKĵĀV͈ĉłƾNJÆŤƒzXl°ƒÆL²¼źŽôÈĢǔ™¦l„ô°'],
['@@ƾIŤ@UUwōa™ĉÝJğÑÆŎkŎ']
],
'encodeOffsets': [
[[
87424,
47245
]],
[[
86817,
45456
]]
]
}
},
{
'type': 'Feature',
'id': '659002',
'properties': {
'name': '阿拉尔市',
'cp': [
81.2769,
40.6549
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@nIÇŃÛÝĊÑĠƏō™гwȁ¥Ƨ°ŹÑķV™¼ÞêĊ»‚šm¦ÅW@ĀôÈźaɜxÈbÞÆĶIОŘ'],
'encodeOffsets': [[
83824,
41929
]]
}
},
{
'type': 'Feature',
'id': '659003',
'properties': {
'name': '图木舒克市',
'cp': [
79.1345,
39.8749
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@VéVÇ™ţ°ğUĠ¯mk¯ó¥ķIġÿƏbƒ„ĉa±ÒĸĀlKU„_m»nwšŽ„m@ÈŤ¦ĉbÞ°±Þżł̦°ĢŁ'],
'encodeOffsets': [[
81496,
40962
]]
}
},
{
'type': 'Feature',
'id': '659004',
'properties': {
'name': '五家渠市',
'cp': [
87.5391,
44.3024
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„çôÑlĕU»™¥Ýš™WkÛ@þVńÝĔ@ńÅþĶUX¦Æƒ'],
'encodeOffsets': [[
89674,
45636
]]
}
},
{
'type': 'Feature',
'id': '659001',
'properties': {
'name': '石河子市',
'cp': [
86.0229,
44.2914
],
'childNum': 1
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lŁ—ǵm‚ĉ@mż™¼n°ÞmƼš@'],
'encodeOffsets': [[
88178,
45529
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/xi_zang_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '5424',
'properties': {
'name': '那曲地区',
'cp': [
88.1982,
33.3215
],
'childNum': 10
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ƨʔĸbܺÞwnxźbÞ°ô@„ĶŽĸIȼĊJŎÈôUšÝƒ¤ǔLސŎ@ĢŽȘblƒôL„ÇźçȤôLš¥ÞIÞ¯Ķxʊťƨ™ƿÑĉXVķŦ¯ȂKÇǕšÑ¯IUš£¯Óƿ£VĕōÞÿÆwƒƑ„£ǖxÞĕ±ÇÝaUÑȃ‚UōÈ݃wWŁĵ™±Ý„óĢÿ°IÞ±mÅ̝mÿ„¥°UnÑŤĢĕĶwǬŻͪwŎ¼źÇĢ„Ġĕˎٰóƨ¼Èa‚m@¥°wǔ„ǖ°ŽƨÇŤœšġƨ„ŎŃôbÈÛŎĊ°@Ġw²ÑÞJƃÆb²ƒ°êĊUނlȲƒV„ÈKĊÒĸĉ›»ÅôťUÅǃk¯@ǂÑkÅl™Ģ™VÑóƒ@°@„ÛĸƒƒÇĊ™n¯Uĕšƽ¯m›¯b™È@Ò°Ĭƒ›¼„‚kxķýÇJk£ÝaUÑÅóĶǟkÓʉnĉƒÝ¼Ƒ„ó»Þmn£m™Č¯@ƒȮÿV¯ĸƒ™k@Ýówƒ»ğ„ġ±ǓLō„ƒšV¼Əèķĉ™è±b@Òţ„UÑóakƒ™Ó@¯L@™ÇlUóȁš¯aġÈÅĕÝLķ¯Ė¯@WĬ—x‚ÒÈnW°ţôU²ǓÓġ²V°¯ôƒǔÝL—ċšk™š»Ý»Ýš¯ÞƒVƒ„ÝÇōͩÈĉċ»ĉm¯£W¥ţKkóġƏW@¯±kōŽÈ›b@җšÇaƒÆ¯a™„ƒŽÛƒÇ¦Ýa¯šÝ™ĉ@ǻۄmƒǓxķƛ¯lVĀÅÞġb™™ÇJUÅV™ĖƑW™zō»ōšƒW™n@è¯ÞóVkwƩnkźÇބҙޯƒƒýğÇUxÆÈnè±bĉÝ»ÈуwšwÞ@m»ÈV@ýÇ°ķ™xƒa„ݯXċ¥ƒÈóW@ôkxlnxVÈóĊkŤġ¼@°¯ŰƑL̻۱ŎÝV—Þ›VƒÇÞŎÇakƞ‚š@èğŎĸżšƾ°ÒšLÞôĠKȰĖźVÈÒĠ„¤™šŽU„ÈþťL@ôǬÞlÜÈnÇÒUŚ™@šĊƨW°™°Xƒ‚@ČÇþ„ƴĉÒķ¦@ŽĢôWĀôłUÞĢǬ™ź°¼š@ƒôV°„bUÆnzm¤ƽĸƒÈ'],
'encodeOffsets': [[
88133,
36721
]]
}
},
{
'type': 'Feature',
'id': '5425',
'properties': {
'name': '阿里地区',
'cp': [
82.3645,
32.7667
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„Çƾķn£myVŃaU¯„ó™@¯»šŹġǫVÝóŁXÿġó@ĸ¥ĊуƳÈý@ċ„Wš¯X¯ĉƧ‚™š@VřÈÑÇmkÛǫÝ@óŦKÇýVƒ™šƒ£ğÇÑŹUȯĕğLÝó™K¯Ñ™ƽķŻĠō@灙lƝÈbƍÈ݂„œU˜ÝÞU²ō̼ůƒK°ů@¯UK±—ĊƧbōÇmçÈġƒóšÅób™™źóš¥kól™ç™KôĵUƒÅ„VŃķ¥nÅŏm¯¹Å‚™»@ÑǍóxÝkʇȤU¤ķb@ƒ¯ĊÇx¯ĸĉKm°šĀk¦l„„KnĬȀƾÛ¦WÆÅmNJĉ°ōUţ¤UšŎ°šŎKÞłÆ„Ǔ¦ƒÞ™‚™„ř¯bmUÝl¯Um™ğl¯£șwŎǫaÝnĉ̓k@¯™K™šō»ĉn™aÞ»ťnkml™ĸ¥UŚŻkÑťƒĉV™ôó°LôīĠU„ÿĉǕÅz±Kƒ¤„²ō¤¯Ė¯UÝ¥Vĵ™óÈťÝwķșÑk¤ó„™ƒWýĵĕ™„ƒƒŽǓ„ķ°k±VU±ţ¦UǟÝřJVљ¥XUċUŎlÛƆǕÆȗƆ¯wŏÞÅ@™šĉl݁óŽƒÒ™nUôńlxólÝôێ±™™LÛôÝL@‚ġ¯X¯ÇUżóa󤛼XÒġŎóLk¦‚ôżĸĠ™¼™KġƆô¦„ÆƑÔĉ͝ImÒ°¦n°¯Þl˜ÝČn„ƒÒšKĠޚĕkƒlýƾťœšôI‚ĖŤÒnƜm¼¯lnżóÞ@Ůó¦™ôƽĖċŚn°Ý°ôÈUƜƒblÞóŽ@Žǖô°UÈƆ°X„þôŽô‚šŽ²Ėm¦°š™XŽĊblܚzkºƒĖmX„šŎWVšóÞn°lĠxȚa°»żLźƒ„b@ưXĠÝȚxĊĕŤaȚ‚°È@„„@èŤ¦Ü¼œW˜ÞkŽÈ@V°lŤkŎ±²¦ƐUšlj°aÈÑŎb̃ŎbÆ¥ÞIȘlššôVÈU‚™šb„kɲĶn„mnXb̼òƾĖŎ@̐ȂÑôÓĠĖʊšĊÔ'],
'encodeOffsets': [[
88133,
36721
]]
}
},
{
'type': 'Feature',
'id': '5423',
'properties': {
'name': '日喀则地区',
'cp': [
86.2427,
29.5093
],
'childNum': 18
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ĶĖXþš„ôƒšÒĸÇÞxÇŦšôUĶÞ¦°V°ĕŎ£ƒ±„£²LÆyĊǖƒĀğVóĬ¯KóôUš‚ĊŦ„™żVÆķ¦kšlnŦmݼšbĊmŎ¼š™šL@°„lĊĵÞmǬbƍȚx°¤Ġknš°VÞkVn°aƒŚš‚š„Ýǔ¥ÅƒÝŁōL¯™ōV™Ť£ŎVĊ¯nljƏXÅÜ¥ǿƽƒLkƒ™ÿn¯ĊL°ķÈw°ĉ@ƑĸaV£ʈȣÞlôwȎ𼯁°ºŐnmÆĸ¦UńƃV„ó͚LšèôkŰlĬ™¦Źôššôa™Æ„ôÇĢnèŎÈƨa˜ĉ²‚VLĢ»lţôĉUǂwkmlw@óôX„ÇȦ°WƒÞ„b‚šÈ¯@þÇUn¼Ý@™x„xÇńÞ¼Ċ޲amçÅÇVwĠȄþ°„šÝƒÑÈÝlŹƪmlxôU°Ý@çšm„™Ŏ¼šyƒXšĕÆUVÈIššĢaÆÝUÿ°kĸƜǔwn„܃ȼĊ@ޚ°™Þbȥ܄ô„lšƒ°b„ÅÈb˜™œa‚ǯUU¯Vġš»ƒ™¯aV¯Ç°Å™mnÑŤçǬVǬ™±ĉ¯¥Vĕ¯Ýk£˜ō—w@±ġÛ°ÇVїƒ˜a@ČL™Ƴ™„ƒÇa¯¤ÝIĵ¼U¥ƿōķÅţŻókÝóĕ‚¥¯™U»Æ£X¯ġŃÛkݰV°ó¼¯èWôÞĖ„ȎƒŽƧĀówm¥¯JŹÝJݙōVVِƑ@ƒ˜ğŭǂ¯_ƒ˜ĵ—›VnxŃón›ƒĵxÇĖĉVÝÈğV™Ò󃯐±Żĉ£ķÆÅL™Ljĉý˜ţۃ¯VƒnV¤ÝÈ@°ÅÞݤ™ŰğŁm¦ÝxóKƒ¥ɱÈUĠôêVôÛ¼ÇWÝçĵaō¦óĖƧlÇĢƑŽnŎDށ¼‚ºÛ@m¦ƽ„ĉmm¯ÝKÛç¯bŏłĬ™bƒ¼ÅLmŽ„xť°ÅU™šÝXkŽÝmĉ¦W„¯K„ÒknÝaV„Ýè¯KɅńÝKnÞ¯¼'],
'encodeOffsets': [[
84117,
30927
]]
}
},
{
'type': 'Feature',
'id': '5426',
'properties': {
'name': '林芝地区',
'cp': [
95.4602,
29.1138
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@‚VÈłVôÈk@š°K@ŽšÔk¤l„ôbVÒŤƒ@ѲašçĸĊƐçU»„™ŎƒǔK̲Ġƒ„¼ôx@ޚlƨĬ„Ul¯ÈLV‚šÞJ„°Ünʊ„wÜbXê‚VÞ¯°ššanaU°wƼɴÑWѰmÈýÈam¥Þ£Ť@„¥ôblÞĢ„ź¥ôxÈÅmݚ™ƒĕŃV»ĉōŤōnóƒ»ÈīķIUƒĠѰġĸLÞ¯VÒÆ‚bš¼WôÈ@V¼ôóŤKÈÑU»šwVǫżnWÒÈx™¼‚lŦ£ĊōŤx²¯@ƒÆƒšçÆ@„¤°£„é°k°lšůÈó@¯ŤÇÈĉƒkkÿó¥ÝXķљÜ@ÒóŚÝ¯°ĉówÇ±¦ÅJUÒĉĀķw¯°m˝„±akxÝÅnƒ™»lуK@¯lU™¯UVѯóĊ¯mōğVǓƅƒÞƒWÝÈÛ@ƿô¯ÜġzÅþ¯ólmôʇġĊÅUͿřŏȁˋŁóÇˡōƧƒÇb™w°Ķôk¦šÒƒnUþġҙÔkǔķèó@ƒ²@ŘōńĵyƒzġaݤÅIƒ¤Ƀť¦ğѯ¤ķbóš¯ó±ŽU²°¤ČÜVnÈÆ‚„ŚŎ°ôĢ„þÆzèVĀǎĀǘƒXŹÑ¯¤ówċķk¦šłUÒġzÇ@ƒ™ÆÝx@²Þ@Ƥ„Uô¦Uš°x„U'],
'encodeOffsets': [[
94737,
30809
]]
}
},
{
'type': 'Feature',
'id': '5421',
'properties': {
'name': '昌都地区',
'cp': [
97.0203,
30.7068
],
'childNum': 11
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@™ŽVĖm°ĉš„ÈU°ķ„ƒÜ¯@@ô„UÒġškš‚ÆkÈlށÒ@Èl°È„VÆóŦƂœ¼‚a„ÅĢ™Ʉwnōw@¥Ŏ¦°ŹÞmVš°wnÿƒw„wÝw@¯šmÞŗ°wĠ˜ĸkÞğlĔ²¦°@„ĕĸwVóšal@nĢÇĊn°@¦šŽźUXçǔůĸVš™ÆK„ÈÝĠš²ÅĔô@lšŽÈ_m˜„l„šaU¼ôwV°¯¦‚ĬÈa„l@Čǎ„¼™„nŽ˜I„xô»ɜ@ƨ¥ɆŁ„ŃǪȁkƛƨȍʊȡóĭ›@—ÈÇVƒůރĸƅmēƨť™ÅÈʉVǵ°ġVŭÅɧ°ÿnɛš£mƒķ²ŃóÑUĉ°mÇ»¯@mxUèţ°ȁÝç„ġU¯ÆÇţÈ@°Çô™Ű¯k¯lƒê¯¤ƒ£Å@™èV°Å„@„±°ţwĉŎť¤kš»ÇwXÑŻmUǬ™xV¼ÇÒţLóôU»Ç@X󙻂a@ÿŁUÑݰķK¯ĢğÒV„ĸJÇĬ„¼môţŎĊŎU¼Æ„„Ė™šnÞÇÆówʦġƒkÝóaƒ¦ţ@ݤn¦ÇbÇþ¯nXÒɳÒÅ»¯xVmb™™Ý°UWéÛaƒÛmƒ¯ÝI™‚UÇKk°ƒVƧīķ„U°ȭĀ@„ċ°nšm¤Ýnô¼ƒƒÞ»Ċ„ʊmlÔĵǠÆôVÒÞbl¤ÈIĸþlwƒœ»ĶŽ„a¯ī@њǰanœƾ°'],
'encodeOffsets': [[
97302,
31917
]]
}
},
{
'type': 'Feature',
'id': '5422',
'properties': {
'name': '山南地区',
'cp': [
92.2083,
28.3392
],
'childNum': 12
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@°ÞU˰¦²ĊôÇÜLǖĀɜŽȘŰÞLĸźêÞ@UÜUŤ°ɞ¯Ü„°WŦĀmŎ„¦ĢyVљŁl¥Čĸôx°£źÒ„—‚ÿȍUÿ‚çÅyƒýóġō¯ƒřŁmÇÛUċޝ£V±²°ôô™ĸa°£ĠÒŦ¥ɄŽ„£ÆJÞ£Ģb„yĶzŎŃ@ŗ„±ô@ĸçlǓšÓĢÑVý„m™Ñl¥ĵó‚¯̻̥™ƛǫÝһÇƧĉyţ¼ҍēVĶĉŎ°ĸmšÞVÝĸ™ÒÛaċ„ó™ŹĖƒèÈÈl¼k¤ÝX@`ސŏ¼Æō¼ÇçĉKUÝÝ£ğ¤@¦ġl¯Òġĉ¯óš™móxÝÞğVšƴċK@—b@ܘ„UÒ¯ÈĢÜ@²˜x—Ŏl¤'],
'encodeOffsets': [[
92363,
29672
]]
}
},
{
'type': 'Feature',
'id': '5401',
'properties': {
'name': '拉萨市',
'cp': [
91.1865,
30.1465
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Ŏ²l@°‚XĢƐlôŤLX¦°¤ĊnȼÇĊŎͪÞÈ܃„x„U°Ýޙ޼™¼lšČ™˜ŽÞK„Ǔ°óU¯Ģ±ǔÔV±ŤóX¯ÇmÑ˜wXī°@°ĕĸÞKÆĖĢǰbȂ™ÇفUƒV¯wV™ó¥ƒVÅ£Ý@@±ÞwšÅ‚„È@ƒ¥nōťÿ¯Xۃɝ°ţ¯ÛVVÝ@ŹéķÝKȗůɛǕÿÛKóÈǫšǫUţèmҚn¯Æ°ÈU‚°b„š™¼UĢV°°V'],
'encodeOffsets': [[
92059,
30696
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/yun_nan_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '5308',
'properties': {
'name': '普洱市',
'cp': [
100.7446,
23.4229
],
'childNum': 10
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@U‚ô²‚a@޲²Ķ¥œšĶ²bl¤kVxl‚@œ°‚ڲ@˜„„y„@ô¦¯„@xƒxVxU„VššbVšÜm¼Ŏ„„ĢmºXXWÆ@œšmŽmXU°ÅÒm¼Þx°w„‚XêĠ°»nV°U„l@k„@V±ôī@£‚ƒČŃÆ£„KÞý@¥‚k@y„a@—nWV„UVƒšwƒmƒ£Jƒknm@wmkn‚X„˜šX„¥mUUlUnbš¯°ŽnkƒVInlIUw°n™mk@@mlanXlanmšk@wVWUw™_@éĠašnmUaÜ£ƒmXƒ¥¯@@„óUmݯ¯ÞÝlKnxô£š»„»Ġ„J°aV„UÝÿV¥ÛbƒI@wmŽón¯yÛL@ƒWkŎ™`IWa¯K@¯mUnmaXm™bmak„¯ŽƒĢ™ÒÝm¯mV¯KÇb¯KۜWW™X@a™V™knċLUWV™kXóW@k™a@ƒób¯Uƒwmb¥UUlaU¥U£ma횃KXkƒmÝ@kwmѯk±ċbUUVakaġ¦ƒƒkL@`ƒœ™a¯xƒm™Åƒ™LUWƒ@ċnŎUV°LkL@b°°@¤š²ƒ‚šnôôk„l°kè›ÒÈzV¤È„WôôƒnV@„ƒ¦@¼Ux'],
'encodeOffsets': [[
101903,
23637
]]
}
},
{
'type': 'Feature',
'id': '5325',
'properties': {
'name': '红河哈尼族彝族自治州',
'cp': [
103.0408,
23.6041
],
'childNum': 13
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@°°nÞôV@ƒ°@„¦WŽ„nÛ¤Vbmn™ğb@êš`VxUX@xš„ÆÞUnn˜WÞĸ̃šÈ@ŽÇè@zÛÜWšÅêlš²„˜KnV¯ĖĊx@bk@@„°JÆ£Èbl„nnm°nlUkVUUwVm„Kn„‚nVŽÞxVLX¥laX@@xl@VzȎVmšk@b°šÈĸmށ`W„XšƒbUb‚bX¼°x@ašVVkn@lþnXUlVxŤÅ„y‚IUƒka‚IŎĊ@lXx@b„z@‚ô„ƒ¥„_V@l‚n@„ôy@al_l`nmƒÈ»@kƒmXwWK™U¯»™a™Å@wƒmUÝKUa™UUƒ™wWƒ@w²»@kƃ—mm£VKkÑV@@»nwƒ¥™ƒ@kƙnllIVlnLVakalknJšWmnaUaVÑVVލn¥m@ƒ„¯Uÿl™@™™™ƒaXaV¯UyVLVkš@nJlšXLlŽkxlbla²Òl@nVJVkšx„KlkUaÝÑU@Åm¯@±™Uó°ğńķĠmU™Ñ@ǯ¯Å¼@nml@°¯¯`@w™£@¯Çƒk@ƒ»nmċ¯U»™I™Ž¯LÇĶÛn@bó°™U›šwmޝ„™Umǯa„™ƒ™ƒI@ykIƒVUޝbƒŽƒ¼™¼ó¤mwkLÝÞ'],
'encodeOffsets': [[
104243,
23429
]]
}
},
{
'type': 'Feature',
'id': '5326',
'properties': {
'name': '文山壮族苗族自治州',
'cp': [
104.8865,
23.5712
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@š„š@²¯maUmôUÆxš@Xš˜bÞInlVUVw„JVaU„K°¥„xmÞXnlKlnna°@ĊČ„ÆwUmnkl@°ƒƒ£nyn@VV@Vak™ƒ@@kÞ݄bmx°Vnw°klÞInĖÞVlKl™@Xa°„„KlV„U@šJnx‚U@ÈĢbUKlm@ak_‚wšanWUk°ƒ„k@Wk@lwU_ƒ@UalóU¥ƒÇnƒ™kJWƒ@mVXx±bƒK@nV±a@™Åa™£ÝK²ƒWknamKknǏƒaV™™V¯ĀƒU™„™Ò¥ƒI@mm¯¯xōW@@`k@ó»ƒUU¯lm£ÅWlĵ„w@mmwÅmWU@y±U—xmwU„¯Uƒ¥Ý¥¯£m@kŽÇVUV°VbklƒL™wUlUIm‚k@±ÑkbkalwkWKk™mI™@UlUKVzU°Wb„bU蚚@škšƒ°@„n‚m¦ÝŽUUUÒVbmbXn™‚mIkllbUbmKUkkJmkŚ@lš„„¦mx@¼U@lÒULn¤˜nU¤Å„@l±¼@xX„šxV„šVVbÞLVŽ„n@xšÆšb°¼šV'],
'encodeOffsets': [[
106504,
25037
]]
}
},
{
'type': 'Feature',
'id': '5303',
'properties': {
'name': '曲靖市',
'cp': [
103.9417,
25.7025
],
'childNum': 9
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ȦlKÞĕUV¯Um¯„ÇVUnVVUƒĉn™ĊÇƾLn°°È„JÆw„@lbÞa„¦V„XJ°¯W¯„aÞJVkUša„ƒ@lKnÅmWUk¯a¯»@m±@уkkbWWX_WÓU»_l™kÑm@U»m@l@IWċn¯l@VanV„UV™UVwVx„„VmUē‚@„ƒn@VÝÆL„w„VVwnVlmkUVÑǰka@k™ÿÝaÞUl£™›—ċĕX±±ĉƒa@UnVnalónk@wl™UVmkÝJ—aW™™@ÅwóVVnnb±°™ƒ™xXLWx„n@lǼn„m‚k_k`@bózƒ‚m@kU@ƒ`„¦óƒ@nWš@ÜÅXWw@ƒyƒb¦@ÒlnUb@x™k‚@²Ç@Uƒ¯bmy@kV@bƒb„¦U`lLVx@b—Ll¼Þ¤@„°VVބU@WސUb›J@nnš@lnnm„šxUŽƒUUbƒK@šÇwklkUƒVWakn@ŽlbU@@„ULVxkKUn‚°¯Ò@¼™„kmƒ¦m@kl™Ȱ@lU„„@Vl°wšnnþĊUÆbUx™b„ŽV„šĖU°„a‚nnašV„al@@b'],
'encodeOffsets': [[
106099,
27653
]]
}
},
{
'type': 'Feature',
'id': '5323',
'properties': {
'name': '楚雄彝族自治州',
'cp': [
101.6016,
25.3619
],
'childNum': 10
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@mҁXU`Wnšš™@Xl±¦š„Uxnbl°knmKUx„„ƒxVôUx°¼ôÒȄ°JlnÞKĠœW°¦ƒ„Vx²JVwš_°¥@UV@@wnymknK¯I@‚™²b°ƒš£V¥šwU‚V„¤nLškÆJÈwôô°„l»Č¯ƒġVƒUU@@ƒ°ƒƒÝXl@U»°Å„@U„¯@w±¯VmUUlm@m™„ÑnIVyUwmak£Vwm±—@Çw@nƒ@UxkwlÇnL‚mkřŽk™ka@kóJV¯Ç»U£lw¯™Xalbl¥¯UXƒ@a˜™UaÈL@ÇVIVƒkaU¯mm™akLWkUJ¯Umxnšƒ@ƒkUx¯xƒ„mWÅīÝkkbƒŤƒbkxWmXwWk¯wƒKkƒƒLŤċń„@¤óĬU²ƒ@@lƒk¯VmU¯¼@xV@k°l°kbUš°nm‚VnUš„š„UVèރÆbUÒÞnU¦›V—¼lô„@Vl'],
'encodeOffsets': [[
103433,
26196
]]
}
},
{
'type': 'Feature',
'id': '5329',
'properties': {
'name': '大理白族自治州',
'cp': [
99.9536,
25.6805
],
'childNum': 12
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lbœKVIUa˜@²m@b™xôÒÜxXLmbnšl@š„„šš¼k„‚xôlV¦nJ„Uš™Ænšm„@šx„ÆwšbXšÆôô„LUVwôK@wlmšaVwœ@WknmƒIUmlnJla@_™@kÝmKUašÑm¯Xw°aUaVl»²JV„bÆJkôͲVVk„mšbVwUó„wƒƒVwnLlmk¯maVw™ƒ²¥Wkš@™™XmV_‚WnÑUkƒ@k󘻜UV¥ÝmVÑÅa݄ƒVƒ™@¯V™Umn¯mV™lak¯l¯U@@wğŽW鯁ƒ@¯xÝw¯š¯Jċa¯U¥mLU¤„bÞȤƒbÇLWUwmIUVW¼kbš`U„Vb¯L±ĊÛkƒÿÝKkwƒKţê™UĉþƒÈƒV¯ÞVbUްKVšk²Ý‚mI—ƒmV@kƒm™UkšVxm„¯KXÈķJU¦V°ULWxšL@môƒšb@bkx±LnVUŽVLnkÜWnwlLŃmW@kkJU_ƒV„š„Þ'],
'encodeOffsets': [[
101408,
26770
]]
}
},
{
'type': 'Feature',
'id': '5309',
'properties': {
'name': '临沧市',
'cp': [
99.613,
24.0546
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@‚„l`²X°ŽV„šx@x°Þ°KXašğUњW‚bnIl`X²°b„xl°„„šV@xVxk¦mb„l@xšXV‚ÆzX¤™Æ˜k°„kx@lźêlaX»VUnJVx‚XÈK„ȣƒaV£nKV¦°‚Čb°I°™n»ÆÑV¯nWn›™@ÿXÅWWn¹ƒġōƒ‚ÛU™™aU™VƒUw„w@w°ƒó¥ƒ@ƒz—ƒ±@ř›¯@kUwlk£±aĵޝ™›Uĵ¦±±@bó±VÝ@ó¤ƒw¯I@mńóm±XޝIólƒK@š°Ullb™zkKlln@@ԙºƒUmVk²ôҙx™ŎUVóLƒb„ŽmÈnŽmbnl‚a„x@z„Ž„¦kš'],
'encodeOffsets': [[
101251,
24734
]]
}
},
{
'type': 'Feature',
'id': '5334',
'properties': {
'name': '迪庆藏族自治州',
'cp': [
99.4592,
27.9327
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@W™Xwƒ™@akk@y›—k°īX¥›Uóķ¯w@n»UaVaUۃ¯ƒmV¼k‚™Þċô@n¯xÛÒm„V‚¯Ô@xƒ‚@šk™wm™Åa@ƒUa‚݁¯VŃyV„a@ÿšn»ÝVmank™mmÞÅôƒ@n£±›ğzÇmU¦™Vm„nÜmbn@°nV@xmzÅ@mºV¦k°ln¤š¼õô„n@xkƃIUxUšƒ¦VšmVkmkXW¤XzVx@ƚx™¼ƒÞ¯b@lVš™ĸގV„m¼XŽm¦V„ŽÞ@Ǝš¹Vón¥ÆKn„‚KX¯x@èĊȱłXšaÆxnlV@UÛlȻkğV¥„m²ljmÅÞĕƒƛm°„ÆmX¤mznƃŽV¦ÞVVb°bnÞWbnްl@V„È@„‚VĵĊ±@ó„InxÆw„¥@£Þ›W¯ĸ£UƒUK‚ƒk±akkkbmWmÈķ„aÆÇU—ȃÆW@wmknmU¯'],
'encodeOffsets': [[
102702,
28401
]]
}
},
{
'type': 'Feature',
'id': '5306',
'properties': {
'name': '昭通市',
'cp': [
104.0955,
27.6031
],
'childNum': 11
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@mƒnK@wmƒ™¥mšóXǓŏmX@Ž—VƒmL@xţ™nk@mlUšŻÒğŋ@ƒL@mmLkm™š@b™ŽW¼ka¯lÇŹ¯aÇ»™ÝÝ_@m„@@a™@UklwUm@ak@ƒb™UmbmƒbV¯™ĕUƒƒšaVwÅaĉVmý™m¯xUkƒ@k¥VƒUXƒ¤VÈm`@„—ńÇÜ@Ākn‚ĔkƞÆĠ„™Þš‚U„VôƆÞI@ŽUxƦn„l@ĊĊnxUÒ°¦Vb¯WUnWށIml@xn„Ubô¤‚¼ÈxlI„»šKVš„@ÈԂJkšU˱ÆVb@nœ„VÜVUVƒšL„wĠl„kn„Ġ@nx°¥Æ„²mUwƒ@m™mÅUl¯UњÑUm„Lll„Il±š@VkwƒW@w°@U»™kUóI°ƒ„»ĢтL„™š`nUĠ²lm„bôV@n„JUxƦX¦l@š‚ŎUƒV„@lV„KVřV£UaÞU™ƒnW@¯VU@ó™'],
'encodeOffsets': [[
107787,
28244
]]
}
},
{
'type': 'Feature',
'id': '5301',
'properties': {
'name': '昆明市',
'cp': [
102.9199,
25.4663
],
'childNum': 11
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@n@Vk‚VUn²°@xƒ°Vƒ@¯ÆV¼k@WŽ„Þ¯„@„@‚VVU„„Ģċ°k¼V„Ċxœ¤Ōœx°mVkƒÑȏšL‚°„x°Xœ°VmĊLVxU˰bX¦VW@kšȯlkn@„¥lnšƒ@»°Ñ¯VmlLUwVK@ƒV@ka@lmXb„UlVlkÈx@™„LVa„VV™wnƒmm@km™@mœIVaݏ@XƒVUݯU@ƒÝ£k»˜K@aUwkKV_ƒ¥„a@alU@nz°aV„È@@±lÛšk@wVakm@т¥„a„z‚@XxÆW@ÛX™@m@ƒy@aWw@kōĉJlbV„JƒzţÆUwVkmWkým@Ul™U@b¯wVºƒU™VUêšĠƒXUaUbVĊUŽWXUmkK™™WnUUU™V™ƒƒVV™Ý@kk±‚™¯ƒƒLkƒš±WkXlVklƒ@ƒwXbmLƒ›VUIVmk@Ubma@kkaVKUƒ™kmlXLWn™J¯ÒĊ°@zkºlLUŤn@@n›ô@lƁnmKkÈlxVw„@@mÈx˜@n²Uxl¤nbVxUzmJƒÒnš'],
'encodeOffsets': [[
104828,
25999
]]
}
},
{
'type': 'Feature',
'id': '5307',
'properties': {
'name': '丽江市',
'cp': [
100.448,
26.955
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@l@™„@w°ÓUnƒÜѰw@mČóšÝlU»n°„„VÜUbVbm¼@ްxôĸœVW¦¯Ĭlœ˜@zll@b„šWxXš‚a„X@ÆĠÆaXwl@XaƦn¼˜Jn@mnKW¯È»V¯°ak™VanXVwl@VyUĕVU„bÈīlaUk°ƒk¯lƒ²V˜Ukƛô@ƒ„I@mVwĊa„™ƒVaka„™ÆbUŽVLšaXIWKUw™ƒ„aWÑÅKUaVk°ƒ@Uw„ƒ¯¥›ÝLkm¯Iǃóѯ»™aƒnUl±UĵÿlóÅIƒaU‚±Ik¼UŽVb¯bWxn°™ÒVbnLlޚ@@`kbmIkŽVn„JmnXl›@Ux™bkn@xóLUxVŽƒKóóŐW™™aÅxƒŽ™wƒ@™nÅm™šƒV™„ƒôX„ƒLlVU¤ƒb¦m¼™ŽƒbU‚„zUƂ°ÞVb@„Æbnššx'],
'encodeOffsets': [[
101937,
28227
]]
}
},
{
'type': 'Feature',
'id': '5328',
'properties': {
'name': '西双版纳傣族自治州',
'cp': [
100.8984,
21.8628
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@l²°ŽnÒlxÞ@„nWl„™nbV¤V¦kbVV‚¦na„x°Vôa@„šb@lôXlWUšVXČKlmššU@bšWXXܛ°LÈa°LnU°‚ÞnšÑ„ġ°lƒnbšaƒ¯¯KWƒœó@kmK@UšĉV@k°„VV¹„a@y‚_ċl_nÓlL@anI@ƒóWl£VU—ƒl™kĕl™šKVw„U@™kVƒam¯ÅL@bƒ‚Ýk@Vn„UbÇbÝwÅ@ċ¥¯lk‚¼ÅŽ™Ò°b@¦nlUn@ŽÇV„bWôU@ÝÅōm™¯ƒaU™™mk™WWw—ƒ™n¯U™è™a™Lƒ¯mƒL™škwƒl@°mnÈÒ¯šów@V™xƒĀU¤°Įƒ°Xl'],
'encodeOffsets': [[
102376,
22579
]]
}
},
{
'type': 'Feature',
'id': '5305',
'properties': {
'name': '保山市',
'cp': [
99.0637,
24.9884
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@X°„Il‚ƒŽÈ¼m¼ÞaÞÅl„ÈxV¼šlVôÈÆlLޣȺlkUƒ‚ƒUw„¯UĕVwĊ@n¦mlnVĸIWǰLnƒUwl™šV„n@lnU˜„nJށl±U™¯LVUa°Ý„U„ÇĊýšVŤé„LlxÞL„ĀÜl²ĉ°KUaVƒ™_Źé@klw¯ƒlÅ—šW£ÅyU™W@wƒknal¥Uw@w™Uƒƒƒw¯aW±k_mJa™XVҙĠWb¯L¯Ý@w™wUƒ¯±Wk_ġƒwƒwōKmb@¤„bk°l˃ô„UJƒšVnÅlťUš¯°VbnbWxX„m„ÞššWUĀ™L™yWzÛKmbUxVKkn݃kŽVšĀċ¤Ux„@ޝŽm@ƒ¦'],
'encodeOffsets': [[
100440,
25943
]]
}
},
{
'type': 'Feature',
'id': '5304',
'properties': {
'name': '玉溪市',
'cp': [
101.9312,
23.8898
],
'childNum': 9
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@l„„L°xXlWxXnlw„a„ţlaÞlÆĬnX„ƒ°wVw„l„@m™nw°VVIXllKšbnnV°lbU„UJ@ÈÇKVb—š@bW„°Vk¦kaWb°škxV¤È¼U°ôI@llblš²š@‚@œó@mm@VţkKl¹@yĉ¯°ÑšIXmWKnkšlV„ULlb@lnbVal@UnVJœU‚„nKWa„x„@lkkUlW²X„™‚l„„šl²@lšÞUŽ„U‚„UšVšVVXmššlLVnXWVUĉVaVb„W™ğVéšU„VU¹W»aVa„aW™Xƒ‚_U¥nÇ흙@a™lUnǍUyk@@wW@kbW¦UKÝwUmmƒƒLUnVxUVVlk¯mmnƒmkÇaŤ¯I@ƒl@@aĉw°ĕmU—ƒk™ÆéX™ÜÛ@yÈç@™Çġ„Ýķ—XmmÝVՙƒ™lmnkbmWkb@nl@nŽmš¯VxkJmUJ„ml¯™°makVVnVƒ¦™Wƒ—Wmnl@xmn„l‚I„¤„n™xU„ƒVUŽmX@˜ƒb@zl@¦Ýþ'],
'encodeOffsets': [[
103703,
24874
]]
}
},
{
'type': 'Feature',
'id': '5333',
'properties': {
'name': '怒江傈僳族自治州',
'cp': [
99.1516,
26.5594
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@WyX£lWlnnUU™„¥@ţV™Vw„JlÅ@wƒmö󙻂£kml¯U¥n¹Æ@ny@wmU@¯mnamÛnƒšUV¥ÈnĠy²œ„@ÆónݚnmlnbÞU‚¥„aV£kU„KWƒ„óšƒmIU¥ókwVólƒ™»¯™ƒL™ƒk@m™naWKÛwóњw@a±n—@VbUJ›LkaƒÝXĉƒ™„UV`lI@lnXÆƑkKmxÛXmlUKVmU²Klw@a™„@n™KXwVKU¯V¥mUnkm¥ĉ@UxV˃°Vx„V„klmޙkKWĀkVWšnl°Lnm@°ŽUxlV@nk¦™JVȰŽVÒ@nX°@ÆlUômlnôƒ²nxmłnVV„¯x@Èm°XblVUšl°@xkXU¤WXX‚W„ƒ„mkÅJmށw±bƒxUīkKmÅVUĖÝèV„kx@š›lX„lnk¤ƒLkŽ‚Ėk¦‚xUšš‚¯Ė@LnK@b°xVI„¥Ua°Ñ@»nm@¹‚KŎÞÈWln²n'],
'encodeOffsets': [[
101071,
28891
]]
}
},
{
'type': 'Feature',
'id': '5331',
'properties': {
'name': '德宏傣族景颇族自治州',
'cp': [
98.1299,
24.5874
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„¥n@°@ƒVwČ£™ÿUlÞ„lmULVwnaÜLXyšzšKVÿ™™nƒWƒXwmaUa°¯V™ŦŽÆkUm„™VIƒ„ókĕl¯ƒa@£nama™@¯m¯œó@óyţbġkÅm±ÛammVkƒLwU`Wk@VƒkUmŃlUUKmbkkUVUwƒ¦óް¼šbn°ô¦lºƒz@xšŽ¯„™@UްnƒšU¤ţU„°VƆ@ÈmlnzÞl°¦Æa„xUxƒLkxWƒn@‚š²ŰšW„™‚@°ÈXl°Llx'],
'encodeOffsets': [[
100440,
25943
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/util/mapData/geoJson/zhe_jiang_geo', [], function () {
return {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'id': '3311',
'properties': {
'name': '丽水市',
'cp': [
119.5642,
28.1854
],
'childNum': 9
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@V‚bVl@Xn‚UXƒKVŽ@¦nxlUXV‚n„KVmnL‚UV@bn¤lLXK˜²„`nnlJXIVJ‚I„Vnn°KnnVll@VLXWV@UkVaVK„zV@„ƒšVVaUK@U»VUl@@WnUUƒ@wVLn@Vwl@XW°LVbn@VU‚@X„l`@XnKVbkl@XVJlUnlV„„xlL@lnXl„@VšUnV°°„@a„UVLXblWVXn@VVUV@Lš¤VLV„U‚VbnalLUUVX_laVa„WVzXKV@@a@KUmImmXama@kU@yVIUK‚aVa@kXK@aWU@VIUmW@kkVm„Uš@VwUa@K@k@Uƒ`@kUKVk@UV@VaUm²Vy@klUUWUkVmUa@_ƒKVaXa›XmƒU@mUlWkaUXƒ@mmkL@w™JƒnVVÅbWKXa™@@I@aƒJUUÇ@V„UL™W@akLmb@K@a™XXw@mƒVmUVkUy@£@aU@@VkUWm@kUKƒXUWU_mW@wkkmJUUkLWWUXƒW@IkJ@k@mW_kӃ_Ul™Lƒm@I@aUa¯m@kƒa¯LUJƒ@mVVxUb™a@LUKkXƒbm@Uak@@a@Um`ƒIUbUJ@nUVW@@LnVV@lšUbVlUX@`š@blXklW„Ušm„Xlm¦U@@V¯bml@š@nUb@llnn@VbX@lV@ŽUVULmU@JVn„bVbkb™VWxU@@nUVk@'],
'encodeOffsets': [[
121546,
28992
]]
}
},
{
'type': 'Feature',
'id': '3301',
'properties': {
'name': '杭州市',
'cp': [
119.5313,
29.8773
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@X@l„°KXXlW„b@²„`šššb‚I„šX`l@„@bWl@n@VnLUV@V„@°¦@šl@XVlU@š@xVbUb@Vkb@‚@XVJVz™J@Lޚ@VmLUxUJ@LU„Vx‚b„xXUl@VaÈw„b‚aÞa@Vl@XUVx@V@V„LlbnV„al@lb„Vnn‚LnKnL@VlbVJXalIšb@KUU@mVInJ˜„U„Vl@xUšVLnUš@UÞaV@lkV@UanK„L@UlKVUnbÆmn@@nUlVnVJl@@UXU„L@WVIVJVxVLXV@IÜKnbn@V¥V@@I@ƒƒ„y°b@UUwnk°ÆƨVlUšçXm›£aƒÇ™IkVƒ@WV@@aWIUWUIkb@WW@UnƒK@UU@kaWVkƒVIVVnU@UWVUV@VmVkKkWIkVWaULU`UImJUImm—U@ƒƒwmwUV™IUWVkUamaU@mV—kƒb@KVU@aVU@anKULVJ‚U@kÛU™JUV›kkƒVakU@ƒaVwkW@UWkXmWaULUaUK@XƒJUUmƒVU@UVƒUkJ@ImwmKU@k„@lU„W@@akKm„kamIkWl_UwVm@UkaVUUaƒ@UamakbWlkL@aUalU@mkL@U@U™lmK@XkKm@Ýakb@xƒnXbƒ`ƒnUUU@›™U@™wU@@ƒmKkkƒV¯U@lULUbVbUb@V‚a@L™ºÝb@bLmK™x@VUL@bk@mxULWl'],
'encodeOffsets': [[
121185,
30184
]]
}
},
{
'type': 'Feature',
'id': '3303',
'properties': {
'name': '温州市',
'cp': [
120.498,
27.8119
],
'childNum': 9
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@ll@xnXV`VX„WVL@lXnlV@UV@@b@¤VzUlnV„U@nWxšW@b@LnalK@bšXVKUƒÈ@VV„I@b@Jš@WbXLÆaUU„mšI@xlKnn„@VWlbkXV‚@n„VWnœ‚WbUb„L@`VbUnVlVXkV@lUz±‚VnUbU@@VUlVL@l„_@V@l@LVbV@XLV`VÈlxn@lU@aœaVV‚k„@XJ@nl@@LU`°LVb„L°a@a„UVy@anI@a„a‚nV@²wÜJX@VšVV°k„na@WVk„aWwU@m@™ƒkƒaUĕ™ÝšÝŤnÈa„aóI›»@±X™WkUķ@kV±kw™ƒUkWw„™UƒÝ»ÛkɳlImaUaWóXÿǬk‚UnWVmmk™KţnŏÞğl™„UlUx@XWb„V@JkXƒ°mb@VULVxUVk@@LWWk@WIkšƒUkJmUkVmI@yƒ@Ua™kLm‚U@mUUUkaVk™@mK@UlUU@UmKmbUUUJ@n@KVLUL@VkJWXX`mnULWlkL@JVLVb@°kxkU@LVŽ™V@„VLV`UL@VUX'],
'encodeOffsets': [[
122502,
28334
]]
}
},
{
'type': 'Feature',
'id': '3302',
'properties': {
'name': '宁波市',
'cp': [
121.5967,
29.6466
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@Ċ¦ĸ°‚nXÞVšKškƨƑźÿ°»n„@wô¥ÜbœÆXÞWóçĉݱIUƒÈ¥@U°wÆ»²mm_@aXƒVKÞVlk@akk›̅@£X»VwƏXWa¯aȗb™KƽۃĊ™xƒŽk@ƒƒƒ@¯nƒKUL@xkL›ÑkWULUUmJUXVŽU@mŽUX¯@V`mbXbV@@nn¤WXšx@škJ@nVVUVl²UbÝVUVk@Wx@V@„ƒVXzmlaƒL@VlLU`„XUVVVUnl@VbnJlnUVVnƒlUKkbmnn„VxlJnxmbU@UL@KUV™X@xmb@lk@mnVVUš™è'],
'encodeOffsets': [[
123784,
30977
]]
}
},
{
'type': 'Feature',
'id': '3309',
'properties': {
'name': '舟山市',
'cp': [
122.2559,
30.2234
],
'childNum': 3
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@l΢ƒʠþÆVĢLĊƒǬXĊ܄XôV„ÑÆw„ƒlšƏÈóVĭVǓ@ƒĉwɛkmK@ĉXīWaĉUĵÝmƒ¯ĉƒwĉ±±nż¯x@VǦV„²JĊÞôèÝXÅW¯›VÛaó¦@xƒŽmޝ¼ŹĀ'],
'encodeOffsets': [[
124437,
30983
]]
}
},
{
'type': 'Feature',
'id': '3310',
'properties': {
'name': '台州市',
'cp': [
121.1353,
28.6688
],
'childNum': 7
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@lV„IVWVz@bXJl@Xal@°„nLll@nVxnV„K@UJVbƒ¦°„k`UIWJXnƚ@bUJ„Xl@lb„Wn@UzVV@bVVšmVnnJVXna‚bšKUKnUVVUnVLlKVLXa„Jm£@mU@WanaU_°@VWnV@UVWnIVVVKlXœÒlK@wVK„L°m„@„„l@ô„Kšw„ĉƾůUƒl£@»UƒVk„m@ƅUƒƒaÛIŏmUk@m„w@a™£ƒWk@ţšƒIm±@ankôUlaU™Uw¯ƒōaƒbÇbţm™ÞšÞVĖ„b„l@š@n‚VXxƒbUl@XmbƒŽ¯lUUU™W@ÛI±xU@mƒb@bmJ@bUzƒV@b¯bƒKUa¯KV_@Kk@@mWIƒ@lUU›b@bkVm@kwUÇU_WKU@Ux™@ƒVUnllX@Vn‚J@UXV@bWL@lUbbVLUJ@z‚V@lnbWbnnnJVŽ@L'],
'encodeOffsets': [[
123312,
29526
]]
}
},
{
'type': 'Feature',
'id': '3307',
'properties': {
'name': '金华市',
'cp': [
120.0037,
29.1028
],
'childNum': 8
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@nbVb„@VbUVlb@VUnVxk`lXnJlbnƒlL@bX@Vƒ@klƒV@nLnx@JlI„V‚U@VUVn„VV„I@WVLVbVKXbWnXl@VlXUx„b@ŽlVUbl„œlVUšIÜVnalKX@@bV@@aUUlUƒwUw„@naWW„UVaUUšaVb„LlxXJVk°ƒUƒlkU¥@k„a@LVlXLVlšVWznVn@lxšJl_@WX_@mVa„a@alU@kVVna„KVLlK„b@UUaVašbnUWmXU@k@yVI@ařWmXIVJl_¯ƒ„¥UaVI@ƒLmUUw@mkkmK¯ƒk@Wbk@WI@aUyUXƒJkU@bU@WLUyƒXUbkbW`UVVkKmbUaVUƒUK™£@KVUUUm@UWkXWaUKƒV@b¯ƒ¯mU™V@UkƒmW@kkKƒwUƒmkkVUI@WlkUamL@Wk_Wƒ@UVm@Ua¯KWXk@Uxm@UK@xV„mV@Xk@UVV¼@‚VLUb™Uƒ„U@ƒyULUbVlU@@XlVUVVbƒU@lXXVW@XUVl@@VUVƒÈn@VVU„@lVa@„U„mL@`X@`WL@VUX@lUL@xlx'],
'encodeOffsets': [[
122119,
29948
]]
}
},
{
'type': 'Feature',
'id': '3308',
'properties': {
'name': '衢州市',
'cp': [
118.6853,
28.8666
],
'childNum': 5
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@XkVKnwl@@aVK@UšwnL‚K@aÞaš¹@Kb@UVaUaVaVK@k°V„UllnL@„V@šxV@œšV@VV„m„_Wa„m@wlaÞbn@lL@WnLšk@V@VlK@nkVVb@blKXklakw@wVK@kVW@UXK@_‚W@_nKVƒ@ƒUb@kVƒUUm@„ÇVU@Uk@VU@WUXWW@k„VUaVUkU@WWXUKk@Ukmm¯LmmƒUJUIWJkImmƒ_—±WLkKm£@aVUmKUnƒLmWUkVmw@¥U„LVWm@WUka@UmmLmm@@bUX™@@WUIm@UVUK@UVUUU™VVJmb@b„Xn‚mVƒ¼nnn¦mJUVƒL„V@VW@UzUlVnUbl`UnVl@XU@kl@bmÈUx™Vk@@J@„ƒ¼W@ÅaVVnzmVƒ„@WJk@kWJ@ƒlXbWbXxmVnšlLXb@°lKVXnWšbWV„„X„mbV@Xl‚bšI@Kn@@x@šVLlm'],
'encodeOffsets': [[
121185,
30184
]]
}
},
{
'type': 'Feature',
'id': '3306',
'properties': {
'name': '绍兴市',
'cp': [
120.564,
29.7565
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@„x@„˜VnnVJnIVJV_VKXblUXJlŽlLUŽUnU@UVVX@ŽmVUUUJl„XUlbV@@V„LVmX@@XlaVJVXXJ@b‚@XU„@lUšJ„È‚bœ¤Ō„JšçV™UUnml@@kna@wšWVU@LVKV@namwkIUwmƒnmlaVL„kUmVUkmmIUak@VmUUVUƒWV_kK@U„K‚bnkWy„U@ƒ@UXwl@VUÞUVak±VUUU@mlI@™™wXWƒIWbUKkLUKVmUUmVVL™LambUWmIUm™nUU@aUUVym@ƒXkak@ƒW@z@lWVXnmV™aUbVb@VƒakLUKƒLmbUU@lkV@bƒbUb@nW`@Xk`™Ikwm@mUXy™UUkWKUk@Kƒb@lV¦klV„¯„UlWIkwƒKUa™bVVUbƒVXXmbƒ@Vx„xkVVV@bU@@aW@kLmb@lVUIVKmL@bUV@bUV@L„a˜lnUV@nbVbUlVXšJVUnx'],
'encodeOffsets': [[
122997,
30561
]]
}
},
{
'type': 'Feature',
'id': '3304',
'properties': {
'name': '嘉兴市',
'cp': [
120.9155,
30.6354
],
'childNum': 6
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@@blIX@@VÜVUnn@l‚k„lKnI°Þl`²LVKVbnbVaVLUVn@W¦@VkVVb„@VI„`@blLnL‚aX@„VVb@U‚@XlVa„@@kVaUKV»U_lWXUƒƒ@alb„k@VllnLVKn@@UVIUw@y°IVVXU@VV@lw„m@wVkƾaœJ‚LkΡƧƒ™l™LÝUmW¯ķÿĉ¥ƒŽWn™èkVƧU¯ÅmlVx@V¯aƒz„Ž@„@JU@U¦m@@šnVmn@V„LV‚'],
'encodeOffsets': [[
123233,
31382
]]
}
},
{
'type': 'Feature',
'id': '3305',
'properties': {
'name': '湖州市',
'cp': [
119.8608,
30.7782
],
'childNum': 4
},
'geometry': {
'type': 'Polygon',
'coordinates': ['@@kLlƒkm@VmÛU@UW@kJ@aUƒK@UnmmU@™maÛL@JWUUKUwUIUJ@XƒKWV@Vk@UIUmVk@mm@ÅnmaUVkL@VƒKmLVbU@klU@ÝbV™@mVUKV™@wUkVƒ—ƒmIUJ@nVV@L™akJWbUIka@UmKmLKmmƒUUVk@@nmLX`WXUV@Ž@nUl™kmlU@Ub„„ƒxVVšIlV„Žšnn„@@n˜„š@„°n@@xmb@„VbnV@šš„@b@`@L@L@x@blVklVbnnV@‚aXb°VlU@W„b°U„LXWVUV™„™VwÈwÜ»ĸaĠnUVw²X@V@lVU@wlaUUVm@knUV›'],
'encodeOffsets': [[
123379,
31500
]]
}
}
],
'UTF8Encoding': true
};
});define('echarts/chart/gauge', [
'require',
'./base',
'../util/shape/GaugePointer',
'zrender/shape/Text',
'zrender/shape/Line',
'zrender/shape/Rectangle',
'zrender/shape/Circle',
'zrender/shape/Sector',
'../config',
'../util/ecData',
'../util/accMath',
'zrender/tool/util',
'../chart'
], function (require) {
var ChartBase = require('./base');
var GaugePointerShape = require('../util/shape/GaugePointer');
var TextShape = require('zrender/shape/Text');
var LineShape = require('zrender/shape/Line');
var RectangleShape = require('zrender/shape/Rectangle');
var CircleShape = require('zrender/shape/Circle');
var SectorShape = require('zrender/shape/Sector');
var ecConfig = require('../config');
ecConfig.gauge = {
zlevel: 0,
z: 2,
center: [
'50%',
'50%'
],
clickable: true,
legendHoverLink: true,
radius: '75%',
startAngle: 225,
endAngle: -45,
min: 0,
max: 100,
splitNumber: 10,
axisLine: {
show: true,
lineStyle: {
color: [
[
0.2,
'#228b22'
],
[
0.8,
'#48b'
],
[
1,
'#ff4500'
]
],
width: 30
}
},
axisTick: {
show: true,
splitNumber: 5,
length: 8,
lineStyle: {
color: '#eee',
width: 1,
type: 'solid'
}
},
axisLabel: {
show: true,
textStyle: { color: 'auto' }
},
splitLine: {
show: true,
length: 30,
lineStyle: {
color: '#eee',
width: 2,
type: 'solid'
}
},
pointer: {
show: true,
length: '80%',
width: 8,
color: 'auto'
},
title: {
show: true,
offsetCenter: [
0,
'-40%'
],
textStyle: {
color: '#333',
fontSize: 15
}
},
detail: {
show: true,
backgroundColor: 'rgba(0,0,0,0)',
borderWidth: 0,
borderColor: '#ccc',
width: 100,
height: 40,
offsetCenter: [
0,
'40%'
],
textStyle: {
color: 'auto',
fontSize: 30
}
}
};
var ecData = require('../util/ecData');
var accMath = require('../util/accMath');
var zrUtil = require('zrender/tool/util');
function Gauge(ecTheme, messageCenter, zr, option, myChart) {
ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
this.refresh(option);
}
Gauge.prototype = {
type: ecConfig.CHART_TYPE_GAUGE,
_buildShape: function () {
var series = this.series;
this._paramsMap = {};
this.selectedMap = {};
for (var i = 0, l = series.length; i < l; i++) {
if (series[i].type === ecConfig.CHART_TYPE_GAUGE) {
this.selectedMap[series[i].name] = true;
series[i] = this.reformOption(series[i]);
this.legendHoverLink = series[i].legendHoverLink || this.legendHoverLink;
this._buildSingleGauge(i);
this.buildMark(i);
}
}
this.addShapeList();
},
_buildSingleGauge: function (seriesIndex) {
var serie = this.series[seriesIndex];
this._paramsMap[seriesIndex] = {
center: this.parseCenter(this.zr, serie.center),
radius: this.parseRadius(this.zr, serie.radius),
startAngle: serie.startAngle.toFixed(2) - 0,
endAngle: serie.endAngle.toFixed(2) - 0
};
this._paramsMap[seriesIndex].totalAngle = this._paramsMap[seriesIndex].startAngle - this._paramsMap[seriesIndex].endAngle;
this._colorMap(seriesIndex);
this._buildAxisLine(seriesIndex);
this._buildSplitLine(seriesIndex);
this._buildAxisTick(seriesIndex);
this._buildAxisLabel(seriesIndex);
this._buildPointer(seriesIndex);
this._buildTitle(seriesIndex);
this._buildDetail(seriesIndex);
},
_buildAxisLine: function (seriesIndex) {
var serie = this.series[seriesIndex];
if (!serie.axisLine.show) {
return;
}
var min = serie.min;
var total = serie.max - min;
var params = this._paramsMap[seriesIndex];
var center = params.center;
var startAngle = params.startAngle;
var totalAngle = params.totalAngle;
var colorArray = params.colorArray;
var lineStyle = serie.axisLine.lineStyle;
var lineWidth = this.parsePercent(lineStyle.width, params.radius[1]);
var r = params.radius[1];
var r0 = r - lineWidth;
var sectorShape;
var lastAngle = startAngle;
var newAngle;
for (var i = 0, l = colorArray.length; i < l; i++) {
newAngle = startAngle - totalAngle * (colorArray[i][0] - min) / total;
sectorShape = this._getSector(center, r0, r, newAngle, lastAngle, colorArray[i][1], lineStyle, serie.zlevel, serie.z);
lastAngle = newAngle;
sectorShape._animationAdd = 'r';
ecData.set(sectorShape, 'seriesIndex', seriesIndex);
ecData.set(sectorShape, 'dataIndex', i);
this.shapeList.push(sectorShape);
}
},
_buildSplitLine: function (seriesIndex) {
var serie = this.series[seriesIndex];
if (!serie.splitLine.show) {
return;
}
var params = this._paramsMap[seriesIndex];
var splitNumber = serie.splitNumber;
var min = serie.min;
var total = serie.max - min;
var splitLine = serie.splitLine;
var length = this.parsePercent(splitLine.length, params.radius[1]);
var lineStyle = splitLine.lineStyle;
var color = lineStyle.color;
var center = params.center;
var startAngle = params.startAngle * Math.PI / 180;
var totalAngle = params.totalAngle * Math.PI / 180;
var r = params.radius[1];
var r0 = r - length;
var angle;
var sinAngle;
var cosAngle;
for (var i = 0; i <= splitNumber; i++) {
angle = startAngle - totalAngle / splitNumber * i;
sinAngle = Math.sin(angle);
cosAngle = Math.cos(angle);
this.shapeList.push(new LineShape({
zlevel: serie.zlevel,
z: serie.z + 1,
hoverable: false,
style: {
xStart: center[0] + cosAngle * r,
yStart: center[1] - sinAngle * r,
xEnd: center[0] + cosAngle * r0,
yEnd: center[1] - sinAngle * r0,
strokeColor: color === 'auto' ? this._getColor(seriesIndex, min + total / splitNumber * i) : color,
lineType: lineStyle.type,
lineWidth: lineStyle.width,
shadowColor: lineStyle.shadowColor,
shadowBlur: lineStyle.shadowBlur,
shadowOffsetX: lineStyle.shadowOffsetX,
shadowOffsetY: lineStyle.shadowOffsetY
}
}));
}
},
_buildAxisTick: function (seriesIndex) {
var serie = this.series[seriesIndex];
if (!serie.axisTick.show) {
return;
}
var params = this._paramsMap[seriesIndex];
var splitNumber = serie.splitNumber;
var min = serie.min;
var total = serie.max - min;
var axisTick = serie.axisTick;
var tickSplit = axisTick.splitNumber;
var length = this.parsePercent(axisTick.length, params.radius[1]);
var lineStyle = axisTick.lineStyle;
var color = lineStyle.color;
var center = params.center;
var startAngle = params.startAngle * Math.PI / 180;
var totalAngle = params.totalAngle * Math.PI / 180;
var r = params.radius[1];
var r0 = r - length;
var angle;
var sinAngle;
var cosAngle;
for (var i = 0, l = splitNumber * tickSplit; i <= l; i++) {
if (i % tickSplit === 0) {
continue;
}
angle = startAngle - totalAngle / l * i;
sinAngle = Math.sin(angle);
cosAngle = Math.cos(angle);
this.shapeList.push(new LineShape({
zlevel: serie.zlevel,
z: serie.z + 1,
hoverable: false,
style: {
xStart: center[0] + cosAngle * r,
yStart: center[1] - sinAngle * r,
xEnd: center[0] + cosAngle * r0,
yEnd: center[1] - sinAngle * r0,
strokeColor: color === 'auto' ? this._getColor(seriesIndex, min + total / l * i) : color,
lineType: lineStyle.type,
lineWidth: lineStyle.width,
shadowColor: lineStyle.shadowColor,
shadowBlur: lineStyle.shadowBlur,
shadowOffsetX: lineStyle.shadowOffsetX,
shadowOffsetY: lineStyle.shadowOffsetY
}
}));
}
},
_buildAxisLabel: function (seriesIndex) {
var serie = this.series[seriesIndex];
if (!serie.axisLabel.show) {
return;
}
var splitNumber = serie.splitNumber;
var min = serie.min;
var total = serie.max - min;
var textStyle = serie.axisLabel.textStyle;
var textFont = this.getFont(textStyle);
var color = textStyle.color;
var params = this._paramsMap[seriesIndex];
var center = params.center;
var startAngle = params.startAngle;
var totalAngle = params.totalAngle;
var r0 = params.radius[1] - this.parsePercent(serie.splitLine.length, params.radius[1]) - 5;
var angle;
var sinAngle;
var cosAngle;
var value;
for (var i = 0; i <= splitNumber; i++) {
value = accMath.accAdd(min, accMath.accMul(accMath.accDiv(total, splitNumber), i));
angle = startAngle - totalAngle / splitNumber * i;
sinAngle = Math.sin(angle * Math.PI / 180);
cosAngle = Math.cos(angle * Math.PI / 180);
angle = (angle + 360) % 360;
this.shapeList.push(new TextShape({
zlevel: serie.zlevel,
z: serie.z + 1,
hoverable: false,
style: {
x: center[0] + cosAngle * r0,
y: center[1] - sinAngle * r0,
color: color === 'auto' ? this._getColor(seriesIndex, value) : color,
text: this._getLabelText(serie.axisLabel.formatter, value),
textAlign: angle >= 110 && angle <= 250 ? 'left' : angle <= 70 || angle >= 290 ? 'right' : 'center',
textBaseline: angle >= 10 && angle <= 170 ? 'top' : angle >= 190 && angle <= 350 ? 'bottom' : 'middle',
textFont: textFont,
shadowColor: textStyle.shadowColor,
shadowBlur: textStyle.shadowBlur,
shadowOffsetX: textStyle.shadowOffsetX,
shadowOffsetY: textStyle.shadowOffsetY
}
}));
}
},
_buildPointer: function (seriesIndex) {
var serie = this.series[seriesIndex];
if (!serie.pointer.show) {
return;
}
var total = serie.max - serie.min;
var pointer = serie.pointer;
var params = this._paramsMap[seriesIndex];
var length = this.parsePercent(pointer.length, params.radius[1]);
var width = this.parsePercent(pointer.width, params.radius[1]);
var center = params.center;
var value = this._getValue(seriesIndex);
value = value < serie.max ? value : serie.max;
var angle = (params.startAngle - params.totalAngle / total * (value - serie.min)) * Math.PI / 180;
var color = pointer.color === 'auto' ? this._getColor(seriesIndex, value) : pointer.color;
var pointShape = new GaugePointerShape({
zlevel: serie.zlevel,
z: serie.z + 1,
clickable: this.query(serie, 'clickable'),
style: {
x: center[0],
y: center[1],
r: length,
startAngle: params.startAngle * Math.PI / 180,
angle: angle,
color: color,
width: width,
shadowColor: pointer.shadowColor,
shadowBlur: pointer.shadowBlur,
shadowOffsetX: pointer.shadowOffsetX,
shadowOffsetY: pointer.shadowOffsetY
},
highlightStyle: {
brushType: 'fill',
width: width > 2 ? 2 : width / 2,
color: '#fff'
}
});
ecData.pack(pointShape, this.series[seriesIndex], seriesIndex, this.series[seriesIndex].data[0], 0, this.series[seriesIndex].data[0].name, value);
this.shapeList.push(pointShape);
this.shapeList.push(new CircleShape({
zlevel: serie.zlevel,
z: serie.z + 2,
hoverable: false,
style: {
x: center[0],
y: center[1],
r: pointer.width / 2.5,
color: '#fff'
}
}));
},
_buildTitle: function (seriesIndex) {
var serie = this.series[seriesIndex];
if (!serie.title.show) {
return;
}
var data = serie.data[0];
var name = data.name != null ? data.name : '';
if (name !== '') {
var title = serie.title;
var offsetCenter = title.offsetCenter;
var textStyle = title.textStyle;
var textColor = textStyle.color;
var params = this._paramsMap[seriesIndex];
var x = params.center[0] + this.parsePercent(offsetCenter[0], params.radius[1]);
var y = params.center[1] + this.parsePercent(offsetCenter[1], params.radius[1]);
this.shapeList.push(new TextShape({
zlevel: serie.zlevel,
z: serie.z + (Math.abs(x - params.center[0]) + Math.abs(y - params.center[1]) < textStyle.fontSize * 2 ? 2 : 1),
hoverable: false,
style: {
x: x,
y: y,
color: textColor === 'auto' ? this._getColor(seriesIndex) : textColor,
text: name,
textAlign: 'center',
textFont: this.getFont(textStyle),
shadowColor: textStyle.shadowColor,
shadowBlur: textStyle.shadowBlur,
shadowOffsetX: textStyle.shadowOffsetX,
shadowOffsetY: textStyle.shadowOffsetY
}
}));
}
},
_buildDetail: function (seriesIndex) {
var serie = this.series[seriesIndex];
if (!serie.detail.show) {
return;
}
var detail = serie.detail;
var offsetCenter = detail.offsetCenter;
var color = detail.backgroundColor;
var textStyle = detail.textStyle;
var textColor = textStyle.color;
var params = this._paramsMap[seriesIndex];
var value = this._getValue(seriesIndex);
var x = params.center[0] - detail.width / 2 + this.parsePercent(offsetCenter[0], params.radius[1]);
var y = params.center[1] + this.parsePercent(offsetCenter[1], params.radius[1]);
this.shapeList.push(new RectangleShape({
zlevel: serie.zlevel,
z: serie.z + (Math.abs(x + detail.width / 2 - params.center[0]) + Math.abs(y + detail.height / 2 - params.center[1]) < textStyle.fontSize ? 2 : 1),
hoverable: false,
style: {
x: x,
y: y,
width: detail.width,
height: detail.height,
brushType: 'both',
color: color === 'auto' ? this._getColor(seriesIndex, value) : color,
lineWidth: detail.borderWidth,
strokeColor: detail.borderColor,
shadowColor: detail.shadowColor,
shadowBlur: detail.shadowBlur,
shadowOffsetX: detail.shadowOffsetX,
shadowOffsetY: detail.shadowOffsetY,
text: this._getLabelText(detail.formatter, value),
textFont: this.getFont(textStyle),
textPosition: 'inside',
textColor: textColor === 'auto' ? this._getColor(seriesIndex, value) : textColor
}
}));
},
_getValue: function (seriesIndex) {
return this.getDataFromOption(this.series[seriesIndex].data[0]);
},
_colorMap: function (seriesIndex) {
var serie = this.series[seriesIndex];
var min = serie.min;
var total = serie.max - min;
var color = serie.axisLine.lineStyle.color;
if (!(color instanceof Array)) {
color = [[
1,
color
]];
}
var colorArray = [];
for (var i = 0, l = color.length; i < l; i++) {
colorArray.push([
color[i][0] * total + min,
color[i][1]
]);
}
this._paramsMap[seriesIndex].colorArray = colorArray;
},
_getColor: function (seriesIndex, value) {
if (value == null) {
value = this._getValue(seriesIndex);
}
var colorArray = this._paramsMap[seriesIndex].colorArray;
for (var i = 0, l = colorArray.length; i < l; i++) {
if (colorArray[i][0] >= value) {
return colorArray[i][1];
}
}
return colorArray[colorArray.length - 1][1];
},
_getSector: function (center, r0, r, startAngle, endAngle, color, lineStyle, zlevel, z) {
return new SectorShape({
zlevel: zlevel,
z: z,
hoverable: false,
style: {
x: center[0],
y: center[1],
r0: r0,
r: r,
startAngle: startAngle,
endAngle: endAngle,
brushType: 'fill',
color: color,
shadowColor: lineStyle.shadowColor,
shadowBlur: lineStyle.shadowBlur,
shadowOffsetX: lineStyle.shadowOffsetX,
shadowOffsetY: lineStyle.shadowOffsetY
}
});
},
_getLabelText: function (formatter, value) {
if (formatter) {
if (typeof formatter === 'function') {
return formatter.call(this.myChart, value);
} else if (typeof formatter === 'string') {
return formatter.replace('{value}', value);
}
}
return value;
},
refresh: function (newOption) {
if (newOption) {
this.option = newOption;
this.series = newOption.series;
}
this.backupShapeList();
this._buildShape();
}
};
zrUtil.inherits(Gauge, ChartBase);
require('../chart').define('gauge', Gauge);
return Gauge;
});define('echarts/util/shape/GaugePointer', [
'require',
'zrender/shape/Base',
'zrender/tool/util',
'./normalIsCover'
], function (require) {
var Base = require('zrender/shape/Base');
var zrUtil = require('zrender/tool/util');
function GaugePointer(options) {
Base.call(this, options);
}
GaugePointer.prototype = {
type: 'gauge-pointer',
buildPath: function (ctx, style) {
var r = style.r;
var width = style.width;
var angle = style.angle;
var x = style.x - Math.cos(angle) * width * (width >= r / 3 ? 1 : 2);
var y = style.y + Math.sin(angle) * width * (width >= r / 3 ? 1 : 2);
angle = style.angle - Math.PI / 2;
ctx.moveTo(x, y);
ctx.lineTo(style.x + Math.cos(angle) * width, style.y - Math.sin(angle) * width);
ctx.lineTo(style.x + Math.cos(style.angle) * r, style.y - Math.sin(style.angle) * r);
ctx.lineTo(style.x - Math.cos(angle) * width, style.y + Math.sin(angle) * width);
ctx.lineTo(x, y);
return;
},
getRect: function (style) {
if (style.__rect) {
return style.__rect;
}
var width = style.width * 2;
var xStart = style.x;
var yStart = style.y;
var xEnd = xStart + Math.cos(style.angle) * style.r;
var yEnd = yStart - Math.sin(style.angle) * style.r;
style.__rect = {
x: Math.min(xStart, xEnd) - width,
y: Math.min(yStart, yEnd) - width,
width: Math.abs(xStart - xEnd) + width,
height: Math.abs(yStart - yEnd) + width
};
return style.__rect;
},
isCover: require('./normalIsCover')
};
zrUtil.inherits(GaugePointer, Base);
return GaugePointer;
});define('echarts/chart/funnel', [
'require',
'./base',
'zrender/shape/Text',
'zrender/shape/Line',
'zrender/shape/Polygon',
'../config',
'../util/ecData',
'../util/number',
'zrender/tool/util',
'zrender/tool/color',
'zrender/tool/area',
'../chart'
], function (require) {
var ChartBase = require('./base');
var TextShape = require('zrender/shape/Text');
var LineShape = require('zrender/shape/Line');
var PolygonShape = require('zrender/shape/Polygon');
var ecConfig = require('../config');
ecConfig.funnel = {
zlevel: 0,
z: 2,
clickable: true,
legendHoverLink: true,
x: 80,
y: 60,
x2: 80,
y2: 60,
min: 0,
max: 100,
minSize: '0%',
maxSize: '100%',
sort: 'descending',
gap: 0,
funnelAlign: 'center',
itemStyle: {
normal: {
borderColor: '#fff',
borderWidth: 1,
label: {
show: true,
position: 'outer'
},
labelLine: {
show: true,
length: 10,
lineStyle: {
width: 1,
type: 'solid'
}
}
},
emphasis: {
borderColor: 'rgba(0,0,0,0)',
borderWidth: 1,
label: { show: true },
labelLine: { show: true }
}
}
};
var ecData = require('../util/ecData');
var number = require('../util/number');
var zrUtil = require('zrender/tool/util');
var zrColor = require('zrender/tool/color');
var zrArea = require('zrender/tool/area');
function Funnel(ecTheme, messageCenter, zr, option, myChart) {
ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
this.refresh(option);
}
Funnel.prototype = {
type: ecConfig.CHART_TYPE_FUNNEL,
_buildShape: function () {
var series = this.series;
var legend = this.component.legend;
this._paramsMap = {};
this._selected = {};
this.selectedMap = {};
var serieName;
for (var i = 0, l = series.length; i < l; i++) {
if (series[i].type === ecConfig.CHART_TYPE_FUNNEL) {
series[i] = this.reformOption(series[i]);
this.legendHoverLink = series[i].legendHoverLink || this.legendHoverLink;
serieName = series[i].name || '';
this.selectedMap[serieName] = legend ? legend.isSelected(serieName) : true;
if (!this.selectedMap[serieName]) {
continue;
}
this._buildSingleFunnel(i);
this.buildMark(i);
}
}
this.addShapeList();
},
_buildSingleFunnel: function (seriesIndex) {
var legend = this.component.legend;
var serie = this.series[seriesIndex];
var data = this._mapData(seriesIndex);
var location = this._getLocation(seriesIndex);
this._paramsMap[seriesIndex] = {
location: location,
data: data
};
var itemName;
var total = 0;
var selectedData = [];
for (var i = 0, l = data.length; i < l; i++) {
itemName = data[i].name;
this.selectedMap[itemName] = legend ? legend.isSelected(itemName) : true;
if (this.selectedMap[itemName] && !isNaN(data[i].value)) {
selectedData.push(data[i]);
total++;
}
}
if (total === 0) {
return;
}
var funnelCase = this._buildFunnelCase(seriesIndex);
var align = serie.funnelAlign;
var gap = serie.gap;
var height = total > 1 ? (location.height - (total - 1) * gap) / total : location.height;
var width;
var lastY = location.y;
var lastWidth = serie.sort === 'descending' ? this._getItemWidth(seriesIndex, selectedData[0].value) : number.parsePercent(serie.minSize, location.width);
var next = serie.sort === 'descending' ? 1 : 0;
var centerX = location.centerX;
var pointList = [];
var x;
var polygon;
var lastPolygon;
for (var i = 0, l = selectedData.length; i < l; i++) {
itemName = selectedData[i].name;
if (this.selectedMap[itemName] && !isNaN(selectedData[i].value)) {
width = i <= l - 2 ? this._getItemWidth(seriesIndex, selectedData[i + next].value) : serie.sort === 'descending' ? number.parsePercent(serie.minSize, location.width) : number.parsePercent(serie.maxSize, location.width);
switch (align) {
case 'left':
x = location.x;
break;
case 'right':
x = location.x + location.width - lastWidth;
break;
default:
x = centerX - lastWidth / 2;
}
polygon = this._buildItem(seriesIndex, selectedData[i]._index, legend ? legend.getColor(itemName) : this.zr.getColor(selectedData[i]._index), x, lastY, lastWidth, width, height, align);
lastY += height + gap;
lastPolygon = polygon.style.pointList;
pointList.unshift([
lastPolygon[0][0] - 10,
lastPolygon[0][1]
]);
pointList.push([
lastPolygon[1][0] + 10,
lastPolygon[1][1]
]);
if (i === 0) {
if (lastWidth === 0) {
lastPolygon = pointList.pop();
align == 'center' && (pointList[0][0] += 10);
align == 'right' && (pointList[0][0] = lastPolygon[0]);
pointList[0][1] -= align == 'center' ? 10 : 15;
if (l == 1) {
lastPolygon = polygon.style.pointList;
}
} else {
pointList[pointList.length - 1][1] -= 5;
pointList[0][1] -= 5;
}
}
lastWidth = width;
}
}
if (funnelCase) {
pointList.unshift([
lastPolygon[3][0] - 10,
lastPolygon[3][1]
]);
pointList.push([
lastPolygon[2][0] + 10,
lastPolygon[2][1]
]);
if (lastWidth === 0) {
lastPolygon = pointList.pop();
align == 'center' && (pointList[0][0] += 10);
align == 'right' && (pointList[0][0] = lastPolygon[0]);
pointList[0][1] += align == 'center' ? 10 : 15;
} else {
pointList[pointList.length - 1][1] += 5;
pointList[0][1] += 5;
}
funnelCase.style.pointList = pointList;
}
},
_buildFunnelCase: function (seriesIndex) {
var serie = this.series[seriesIndex];
if (this.deepQuery([
serie,
this.option
], 'calculable')) {
var location = this._paramsMap[seriesIndex].location;
var gap = 10;
var funnelCase = {
hoverable: false,
style: {
pointListd: [
[
location.x - gap,
location.y - gap
],
[
location.x + location.width + gap,
location.y - gap
],
[
location.x + location.width + gap,
location.y + location.height + gap
],
[
location.x - gap,
location.y + location.height + gap
]
],
brushType: 'stroke',
lineWidth: 1,
strokeColor: serie.calculableHolderColor || this.ecTheme.calculableHolderColor || ecConfig.calculableHolderColor
}
};
ecData.pack(funnelCase, serie, seriesIndex, undefined, -1);
this.setCalculable(funnelCase);
funnelCase = new PolygonShape(funnelCase);
this.shapeList.push(funnelCase);
return funnelCase;
}
},
_getLocation: function (seriesIndex) {
var gridOption = this.series[seriesIndex];
var zrWidth = this.zr.getWidth();
var zrHeight = this.zr.getHeight();
var x = this.parsePercent(gridOption.x, zrWidth);
var y = this.parsePercent(gridOption.y, zrHeight);
var width = gridOption.width == null ? zrWidth - x - this.parsePercent(gridOption.x2, zrWidth) : this.parsePercent(gridOption.width, zrWidth);
return {
x: x,
y: y,
width: width,
height: gridOption.height == null ? zrHeight - y - this.parsePercent(gridOption.y2, zrHeight) : this.parsePercent(gridOption.height, zrHeight),
centerX: x + width / 2
};
},
_mapData: function (seriesIndex) {
var serie = this.series[seriesIndex];
var funnelData = zrUtil.clone(serie.data);
for (var i = 0, l = funnelData.length; i < l; i++) {
funnelData[i]._index = i;
}
function numDescending(a, b) {
if (a.value === '-') {
return 1;
} else if (b.value === '-') {
return -1;
}
return b.value - a.value;
}
function numAscending(a, b) {
return -numDescending(a, b);
}
if (serie.sort != 'none') {
funnelData.sort(serie.sort === 'descending' ? numDescending : numAscending);
}
return funnelData;
},
_buildItem: function (seriesIndex, dataIndex, defaultColor, x, y, topWidth, bottomWidth, height, align) {
var series = this.series;
var serie = series[seriesIndex];
var data = serie.data[dataIndex];
var polygon = this.getPolygon(seriesIndex, dataIndex, defaultColor, x, y, topWidth, bottomWidth, height, align);
ecData.pack(polygon, series[seriesIndex], seriesIndex, series[seriesIndex].data[dataIndex], dataIndex, series[seriesIndex].data[dataIndex].name);
this.shapeList.push(polygon);
var label = this.getLabel(seriesIndex, dataIndex, defaultColor, x, y, topWidth, bottomWidth, height, align);
ecData.pack(label, series[seriesIndex], seriesIndex, series[seriesIndex].data[dataIndex], dataIndex, series[seriesIndex].data[dataIndex].name);
this.shapeList.push(label);
if (!this._needLabel(serie, data, false)) {
label.invisible = true;
}
var labelLine = this.getLabelLine(seriesIndex, dataIndex, defaultColor, x, y, topWidth, bottomWidth, height, align);
this.shapeList.push(labelLine);
if (!this._needLabelLine(serie, data, false)) {
labelLine.invisible = true;
}
var polygonHoverConnect = [];
var labelHoverConnect = [];
if (this._needLabelLine(serie, data, true)) {
polygonHoverConnect.push(labelLine.id);
labelHoverConnect.push(labelLine.id);
}
if (this._needLabel(serie, data, true)) {
polygonHoverConnect.push(label.id);
labelHoverConnect.push(polygon.id);
}
polygon.hoverConnect = polygonHoverConnect;
label.hoverConnect = labelHoverConnect;
return polygon;
},
_getItemWidth: function (seriesIndex, value) {
var serie = this.series[seriesIndex];
var location = this._paramsMap[seriesIndex].location;
var min = serie.min;
var max = serie.max;
var minSize = number.parsePercent(serie.minSize, location.width);
var maxSize = number.parsePercent(serie.maxSize, location.width);
return (value - min) * (maxSize - minSize) / (max - min) + minSize;
},
getPolygon: function (seriesIndex, dataIndex, defaultColor, xLT, y, topWidth, bottomWidth, height, align) {
var serie = this.series[seriesIndex];
var data = serie.data[dataIndex];
var queryTarget = [
data,
serie
];
var normal = this.deepMerge(queryTarget, 'itemStyle.normal') || {};
var emphasis = this.deepMerge(queryTarget, 'itemStyle.emphasis') || {};
var normalColor = this.getItemStyleColor(normal.color, seriesIndex, dataIndex, data) || defaultColor;
var emphasisColor = this.getItemStyleColor(emphasis.color, seriesIndex, dataIndex, data) || (typeof normalColor === 'string' ? zrColor.lift(normalColor, -0.2) : normalColor);
var xLB;
switch (align) {
case 'left':
xLB = xLT;
break;
case 'right':
xLB = xLT + (topWidth - bottomWidth);
break;
default:
xLB = xLT + (topWidth - bottomWidth) / 2;
break;
}
var polygon = {
zlevel: serie.zlevel,
z: serie.z,
clickable: this.deepQuery(queryTarget, 'clickable'),
style: {
pointList: [
[
xLT,
y
],
[
xLT + topWidth,
y
],
[
xLB + bottomWidth,
y + height
],
[
xLB,
y + height
]
],
brushType: 'both',
color: normalColor,
lineWidth: normal.borderWidth,
strokeColor: normal.borderColor
},
highlightStyle: {
color: emphasisColor,
lineWidth: emphasis.borderWidth,
strokeColor: emphasis.borderColor
}
};
if (this.deepQuery([
data,
serie,
this.option
], 'calculable')) {
this.setCalculable(polygon);
polygon.draggable = true;
}
return new PolygonShape(polygon);
},
getLabel: function (seriesIndex, dataIndex, defaultColor, x, y, topWidth, bottomWidth, height, align) {
var serie = this.series[seriesIndex];
var data = serie.data[dataIndex];
var location = this._paramsMap[seriesIndex].location;
var itemStyle = zrUtil.merge(zrUtil.clone(data.itemStyle) || {}, serie.itemStyle);
var status = 'normal';
var labelControl = itemStyle[status].label;
var textStyle = labelControl.textStyle || {};
var lineLength = itemStyle[status].labelLine.length;
var text = this.getLabelText(seriesIndex, dataIndex, status);
var textFont = this.getFont(textStyle);
var textAlign;
var textColor = defaultColor;
labelControl.position = labelControl.position || itemStyle.normal.label.position;
if (labelControl.position === 'inner' || labelControl.position === 'inside' || labelControl.position === 'center') {
textAlign = align;
textColor = Math.max(topWidth, bottomWidth) / 2 > zrArea.getTextWidth(text, textFont) ? '#fff' : zrColor.reverse(defaultColor);
} else if (labelControl.position === 'left') {
textAlign = 'right';
} else {
textAlign = 'left';
}
var textShape = {
zlevel: serie.zlevel,
z: serie.z + 1,
style: {
x: this._getLabelPoint(labelControl.position, x, location, topWidth, bottomWidth, lineLength, align),
y: y + height / 2,
color: textStyle.color || textColor,
text: text,
textAlign: textStyle.align || textAlign,
textBaseline: textStyle.baseline || 'middle',
textFont: textFont
}
};
status = 'emphasis';
labelControl = itemStyle[status].label || labelControl;
textStyle = labelControl.textStyle || textStyle;
lineLength = itemStyle[status].labelLine.length || lineLength;
labelControl.position = labelControl.position || itemStyle.normal.label.position;
text = this.getLabelText(seriesIndex, dataIndex, status);
textFont = this.getFont(textStyle);
textColor = defaultColor;
if (labelControl.position === 'inner' || labelControl.position === 'inside' || labelControl.position === 'center') {
textAlign = align;
textColor = Math.max(topWidth, bottomWidth) / 2 > zrArea.getTextWidth(text, textFont) ? '#fff' : zrColor.reverse(defaultColor);
} else if (labelControl.position === 'left') {
textAlign = 'right';
} else {
textAlign = 'left';
}
textShape.highlightStyle = {
x: this._getLabelPoint(labelControl.position, x, location, topWidth, bottomWidth, lineLength, align),
color: textStyle.color || textColor,
text: text,
textAlign: textStyle.align || textAlign,
textFont: textFont,
brushType: 'fill'
};
return new TextShape(textShape);
},
getLabelText: function (seriesIndex, dataIndex, status) {
var series = this.series;
var serie = series[seriesIndex];
var data = serie.data[dataIndex];
var formatter = this.deepQuery([
data,
serie
], 'itemStyle.' + status + '.label.formatter');
if (formatter) {
if (typeof formatter === 'function') {
return formatter.call(this.myChart, {
seriesIndex: seriesIndex,
seriesName: serie.name || '',
series: serie,
dataIndex: dataIndex,
data: data,
name: data.name,
value: data.value
});
} else if (typeof formatter === 'string') {
formatter = formatter.replace('{a}', '{a0}').replace('{b}', '{b0}').replace('{c}', '{c0}').replace('{a0}', serie.name).replace('{b0}', data.name).replace('{c0}', data.value);
return formatter;
}
} else {
return data.name;
}
},
getLabelLine: function (seriesIndex, dataIndex, defaultColor, x, y, topWidth, bottomWidth, height, align) {
var serie = this.series[seriesIndex];
var data = serie.data[dataIndex];
var location = this._paramsMap[seriesIndex].location;
var itemStyle = zrUtil.merge(zrUtil.clone(data.itemStyle) || {}, serie.itemStyle);
var status = 'normal';
var labelLineControl = itemStyle[status].labelLine;
var lineLength = itemStyle[status].labelLine.length;
var lineStyle = labelLineControl.lineStyle || {};
var labelControl = itemStyle[status].label;
labelControl.position = labelControl.position || itemStyle.normal.label.position;
var lineShape = {
zlevel: serie.zlevel,
z: serie.z + 1,
hoverable: false,
style: {
xStart: this._getLabelLineStartPoint(x, location, topWidth, bottomWidth, align),
yStart: y + height / 2,
xEnd: this._getLabelPoint(labelControl.position, x, location, topWidth, bottomWidth, lineLength, align),
yEnd: y + height / 2,
strokeColor: lineStyle.color || defaultColor,
lineType: lineStyle.type,
lineWidth: lineStyle.width
}
};
status = 'emphasis';
labelLineControl = itemStyle[status].labelLine || labelLineControl;
lineLength = itemStyle[status].labelLine.length || lineLength;
lineStyle = labelLineControl.lineStyle || lineStyle;
labelControl = itemStyle[status].label || labelControl;
labelControl.position = labelControl.position;
lineShape.highlightStyle = {
xEnd: this._getLabelPoint(labelControl.position, x, location, topWidth, bottomWidth, lineLength, align),
strokeColor: lineStyle.color || defaultColor,
lineType: lineStyle.type,
lineWidth: lineStyle.width
};
return new LineShape(lineShape);
},
_getLabelPoint: function (position, x, location, topWidth, bottomWidth, lineLength, align) {
position = position === 'inner' || position === 'inside' ? 'center' : position;
switch (position) {
case 'center':
return align == 'center' ? x + topWidth / 2 : align == 'left' ? x + 10 : x + topWidth - 10;
case 'left':
if (lineLength === 'auto') {
return location.x - 10;
} else {
return align == 'center' ? location.centerX - Math.max(topWidth, bottomWidth) / 2 - lineLength : align == 'right' ? x - (topWidth < bottomWidth ? bottomWidth - topWidth : 0) - lineLength : location.x - lineLength;
}
break;
default:
if (lineLength === 'auto') {
return location.x + location.width + 10;
} else {
return align == 'center' ? location.centerX + Math.max(topWidth, bottomWidth) / 2 + lineLength : align == 'right' ? location.x + location.width + lineLength : x + Math.max(topWidth, bottomWidth) + lineLength;
}
}
},
_getLabelLineStartPoint: function (x, location, topWidth, bottomWidth, align) {
return align == 'center' ? location.centerX : topWidth < bottomWidth ? x + Math.min(topWidth, bottomWidth) / 2 : x + Math.max(topWidth, bottomWidth) / 2;
},
_needLabel: function (serie, data, isEmphasis) {
return this.deepQuery([
data,
serie
], 'itemStyle.' + (isEmphasis ? 'emphasis' : 'normal') + '.label.show');
},
_needLabelLine: function (serie, data, isEmphasis) {
return this.deepQuery([
data,
serie
], 'itemStyle.' + (isEmphasis ? 'emphasis' : 'normal') + '.labelLine.show');
},
refresh: function (newOption) {
if (newOption) {
this.option = newOption;
this.series = newOption.series;
}
this.backupShapeList();
this._buildShape();
}
};
zrUtil.inherits(Funnel, ChartBase);
require('../chart').define('funnel', Funnel);
return Funnel;
});define('echarts/chart/eventRiver', [
'require',
'./base',
'../layout/eventRiver',
'zrender/shape/Polygon',
'../component/axis',
'../component/grid',
'../component/dataZoom',
'../config',
'../util/ecData',
'../util/date',
'zrender/tool/util',
'zrender/tool/color',
'../chart'
], function (require) {
var ChartBase = require('./base');
var eventRiverLayout = require('../layout/eventRiver');
var PolygonShape = require('zrender/shape/Polygon');
require('../component/axis');
require('../component/grid');
require('../component/dataZoom');
var ecConfig = require('../config');
ecConfig.eventRiver = {
zlevel: 0,
z: 2,
clickable: true,
legendHoverLink: true,
itemStyle: {
normal: {
borderColor: 'rgba(0,0,0,0)',
borderWidth: 1,
label: {
show: true,
position: 'inside',
formatter: '{b}'
}
},
emphasis: {
borderColor: 'rgba(0,0,0,0)',
borderWidth: 1,
label: { show: true }
}
}
};
var ecData = require('../util/ecData');
var ecDate = require('../util/date');
var zrUtil = require('zrender/tool/util');
var zrColor = require('zrender/tool/color');
function EventRiver(ecTheme, messageCenter, zr, option, myChart) {
ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
var self = this;
self._ondragend = function () {
self.isDragend = true;
};
this.refresh(option);
}
EventRiver.prototype = {
type: ecConfig.CHART_TYPE_EVENTRIVER,
_buildShape: function () {
var series = this.series;
this.selectedMap = {};
this._dataPreprocessing();
var legend = this.component.legend;
var eventRiverSeries = [];
for (var i = 0; i < series.length; i++) {
if (series[i].type === this.type) {
series[i] = this.reformOption(series[i]);
this.legendHoverLink = series[i].legendHoverLink || this.legendHoverLink;
var serieName = series[i].name || '';
this.selectedMap[serieName] = legend ? legend.isSelected(serieName) : true;
if (!this.selectedMap[serieName]) {
continue;
}
this.buildMark(i);
eventRiverSeries.push(this.series[i]);
}
}
eventRiverLayout(eventRiverSeries, this._intervalX, this.component.grid.getArea());
this._drawEventRiver();
this.addShapeList();
},
_dataPreprocessing: function () {
var series = this.series;
var xAxis;
var evolutionList;
for (var i = 0, iLen = series.length; i < iLen; i++) {
if (series[i].type === this.type) {
xAxis = this.component.xAxis.getAxis(series[i].xAxisIndex || 0);
for (var j = 0, jLen = series[i].data.length; j < jLen; j++) {
evolutionList = series[i].data[j].evolution;
for (var k = 0, kLen = evolutionList.length; k < kLen; k++) {
evolutionList[k].timeScale = xAxis.getCoord(ecDate.getNewDate(evolutionList[k].time) - 0);
evolutionList[k].valueScale = Math.pow(evolutionList[k].value, 0.8);
}
}
}
}
this._intervalX = Math.round(this.component.grid.getWidth() / 40);
},
_drawEventRiver: function () {
var series = this.series;
for (var i = 0; i < series.length; i++) {
var serieName = series[i].name || '';
if (series[i].type === this.type && this.selectedMap[serieName]) {
for (var j = 0; j < series[i].data.length; j++) {
this._drawEventBubble(series[i].data[j], i, j);
}
}
}
},
_drawEventBubble: function (oneEvent, seriesIndex, dataIndex) {
var series = this.series;
var serie = series[seriesIndex];
var serieName = serie.name || '';
var data = serie.data[dataIndex];
var queryTarget = [
data,
serie
];
var legend = this.component.legend;
var defaultColor = legend ? legend.getColor(serieName) : this.zr.getColor(seriesIndex);
var normal = this.deepMerge(queryTarget, 'itemStyle.normal') || {};
var emphasis = this.deepMerge(queryTarget, 'itemStyle.emphasis') || {};
var normalColor = this.getItemStyleColor(normal.color, seriesIndex, dataIndex, data) || defaultColor;
var emphasisColor = this.getItemStyleColor(emphasis.color, seriesIndex, dataIndex, data) || (typeof normalColor === 'string' ? zrColor.lift(normalColor, -0.2) : normalColor);
var pts = this._calculateControlPoints(oneEvent);
var eventBubbleShape = {
zlevel: serie.zlevel,
z: serie.z,
clickable: this.deepQuery(queryTarget, 'clickable'),
style: {
pointList: pts,
smooth: 'spline',
brushType: 'both',
lineJoin: 'round',
color: normalColor,
lineWidth: normal.borderWidth,
strokeColor: normal.borderColor
},
highlightStyle: {
color: emphasisColor,
lineWidth: emphasis.borderWidth,
strokeColor: emphasis.borderColor
},
draggable: 'vertical',
ondragend: this._ondragend
};
eventBubbleShape = new PolygonShape(eventBubbleShape);
this.addLabel(eventBubbleShape, serie, data, oneEvent.name);
ecData.pack(eventBubbleShape, series[seriesIndex], seriesIndex, series[seriesIndex].data[dataIndex], dataIndex, series[seriesIndex].data[dataIndex].name);
this.shapeList.push(eventBubbleShape);
},
_calculateControlPoints: function (oneEvent) {
var intervalX = this._intervalX;
var posY = oneEvent.y;
var evolution = oneEvent.evolution;
var n = evolution.length;
if (n < 1) {
return;
}
var time = [];
var value = [];
for (var i = 0; i < n; i++) {
time.push(evolution[i].timeScale);
value.push(evolution[i].valueScale);
}
var pts = [];
pts.push([
time[0],
posY
]);
var i = 0;
for (i = 0; i < n - 1; i++) {
pts.push([
(time[i] + time[i + 1]) / 2,
value[i] / -2 + posY
]);
}
pts.push([
(time[i] + (time[i] + intervalX)) / 2,
value[i] / -2 + posY
]);
pts.push([
time[i] + intervalX,
posY
]);
pts.push([
(time[i] + (time[i] + intervalX)) / 2,
value[i] / 2 + posY
]);
for (i = n - 1; i > 0; i--) {
pts.push([
(time[i] + time[i - 1]) / 2,
value[i - 1] / 2 + posY
]);
}
return pts;
},
ondragend: function (param, status) {
if (!this.isDragend || !param.target) {
return;
}
status.dragOut = true;
status.dragIn = true;
status.needRefresh = false;
this.isDragend = false;
},
refresh: function (newOption) {
if (newOption) {
this.option = newOption;
this.series = newOption.series;
}
this.backupShapeList();
this._buildShape();
}
};
zrUtil.inherits(EventRiver, ChartBase);
require('../chart').define('eventRiver', EventRiver);
return EventRiver;
});define('echarts/layout/eventRiver', ['require'], function (require) {
function eventRiverLayout(series, intervalX, area) {
var space = 4;
var scale = intervalX;
function importanceSort(a, b) {
var x = a.importance;
var y = b.importance;
return x > y ? -1 : x < y ? 1 : 0;
}
function indexOf(array, value) {
if (array.indexOf) {
return array.indexOf(value);
}
for (var i = 0, len = array.length; i < len; i++) {
if (array[i] === value) {
return i;
}
}
return -1;
}
for (var i = 0; i < series.length; i++) {
for (var j = 0; j < series[i].data.length; j++) {
if (series[i].data[j].weight == null) {
series[i].data[j].weight = 1;
}
var importance = 0;
for (var k = 0; k < series[i].data[j].evolution.length; k++) {
importance += series[i].data[j].evolution[k].valueScale;
}
series[i].data[j].importance = importance * series[i].data[j].weight;
}
series[i].data.sort(importanceSort);
}
for (var i = 0; i < series.length; i++) {
if (series[i].weight == null) {
series[i].weight = 1;
}
var importance = 0;
for (var j = 0; j < series[i].data.length; j++) {
importance += series[i].data[j].weight;
}
series[i].importance = importance * series[i].weight;
}
series.sort(importanceSort);
var minTime = Number.MAX_VALUE;
var maxTime = 0;
for (var i = 0; i < series.length; i++) {
for (var j = 0; j < series[i].data.length; j++) {
for (var k = 0; k < series[i].data[j].evolution.length; k++) {
var time = series[i].data[j].evolution[k].timeScale;
minTime = Math.min(minTime, time);
maxTime = Math.max(maxTime, time);
}
}
}
minTime = ~~minTime;
maxTime = ~~maxTime;
var flagForOffset = function () {
var length = maxTime - minTime + 1 + ~~intervalX;
if (length <= 0) {
return [0];
}
var result = [];
while (length--) {
result.push(0);
}
return result;
}();
var flagForPos = flagForOffset.slice(0);
var bubbleData = [];
var totalMaxy = 0;
var totalOffset = 0;
for (var i = 0; i < series.length; i++) {
for (var j = 0; j < series[i].data.length; j++) {
var e = series[i].data[j];
e.time = [];
e.value = [];
var tmp;
var maxy = 0;
for (var k = 0; k < series[i].data[j].evolution.length; k++) {
tmp = series[i].data[j].evolution[k];
e.time.push(tmp.timeScale);
e.value.push(tmp.valueScale);
maxy = Math.max(maxy, tmp.valueScale);
}
bubbleBound(e, intervalX, minTime);
e.y = findLocation(flagForPos, e, function (e, index) {
return e.ypx[index];
});
e._offset = findLocation(flagForOffset, e, function () {
return space;
});
totalMaxy = Math.max(totalMaxy, e.y + maxy);
totalOffset = Math.max(totalOffset, e._offset);
bubbleData.push(e);
}
}
scaleY(bubbleData, area, totalMaxy, totalOffset);
}
function scaleY(bubbleData, area, maxY, offset) {
var height = area.height;
var offsetScale = offset / height > 0.5 ? 0.5 : 1;
var yBase = area.y;
var yScale = (area.height - offset) / maxY;
for (var i = 0, length = bubbleData.length; i < length; i++) {
var e = bubbleData[i];
e.y = yBase + yScale * e.y + e._offset * offsetScale;
delete e.time;
delete e.value;
delete e.xpx;
delete e.ypx;
delete e._offset;
var evolutionList = e.evolution;
for (var k = 0, klen = evolutionList.length; k < klen; k++) {
evolutionList[k].valueScale *= yScale;
}
}
}
function line(x0, y0, x1, y1) {
if (x0 === x1) {
throw new Error('x0 is equal with x1!!!');
}
if (y0 === y1) {
return function () {
return y0;
};
}
var k = (y0 - y1) / (x0 - x1);
var b = (y1 * x0 - y0 * x1) / (x0 - x1);
return function (x) {
return k * x + b;
};
}
function bubbleBound(e, intervalX, minX) {
var space = ~~intervalX;
var length = e.time.length;
e.xpx = [];
e.ypx = [];
var i = 0;
var x0 = 0;
var x1 = 0;
var y0 = 0;
var y1 = 0;
var newline;
for (; i < length; i++) {
x0 = ~~e.time[i];
y0 = e.value[i] / 2;
if (i === length - 1) {
x1 = x0 + space;
y1 = 0;
} else {
x1 = ~~e.time[i + 1];
y1 = e.value[i + 1] / 2;
}
newline = line(x0, y0, x1, y1);
for (var x = x0; x < x1; x++) {
e.xpx.push(x - minX);
e.ypx.push(newline(x));
}
}
e.xpx.push(x1 - minX);
e.ypx.push(y1);
}
function findLocation(flags, e, yvalue) {
var pos = 0;
var length = e.xpx.length;
var i = 0;
var y;
for (; i < length; i++) {
y = yvalue(e, i);
pos = Math.max(pos, y + flags[e.xpx[i]]);
}
for (i = 0; i < length; i++) {
y = yvalue(e, i);
flags[e.xpx[i]] = pos + y;
}
return pos;
}
return eventRiverLayout;
});define('echarts/chart/venn', [
'require',
'./base',
'zrender/shape/Text',
'zrender/shape/Circle',
'zrender/shape/Path',
'../config',
'../util/ecData',
'zrender/tool/util',
'../chart'
], function (require) {
var ChartBase = require('./base');
var TextShape = require('zrender/shape/Text');
var CircleShape = require('zrender/shape/Circle');
var PathShape = require('zrender/shape/Path');
var ecConfig = require('../config');
ecConfig.venn = {
zlevel: 0,
z: 1,
calculable: false
};
var ecData = require('../util/ecData');
var zrUtil = require('zrender/tool/util');
function Venn(ecTheme, messageCenter, zr, option, myChart) {
ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
this.refresh(option);
}
Venn.prototype = {
type: ecConfig.CHART_TYPE_VENN,
_buildShape: function () {
this.selectedMap = {};
this._symbol = this.option.symbolList;
this._queryTarget;
this._dropBoxList = [];
this._vennDataCounter = 0;
var series = this.series;
var legend = this.component.legend;
for (var i = 0; i < series.length; i++) {
if (series[i].type === ecConfig.CHART_TYPE_VENN) {
series[i] = this.reformOption(series[i]);
var serieName = series[i].name || '';
this.selectedMap[serieName] = legend ? legend.isSelected(serieName) : true;
if (!this.selectedMap[serieName]) {
continue;
}
this._buildVenn(i);
}
}
this.addShapeList();
},
_buildVenn: function (seriesIndex) {
var r0;
var r1;
var serie = this.series[seriesIndex];
var data = serie.data;
if (data[0].value > data[1].value) {
r0 = this.zr.getHeight() / 3;
r1 = r0 * Math.sqrt(data[1].value) / Math.sqrt(data[0].value);
} else {
r1 = this.zr.getHeight() / 3;
r0 = r1 * Math.sqrt(data[0].value) / Math.sqrt(data[1].value);
}
var x0 = this.zr.getWidth() / 2 - r0;
var coincideLengthAnchor = (r0 + r1) / 2 * Math.sqrt(data[2].value) / Math.sqrt((data[0].value + data[1].value) / 2);
var coincideLength = r0 + r1;
if (data[2].value !== 0) {
coincideLength = this._getCoincideLength(data[0].value, data[1].value, data[2].value, r0, r1, coincideLengthAnchor, Math.abs(r0 - r1), r0 + r1);
}
var x1 = x0 + coincideLength;
var y = this.zr.getHeight() / 2;
this._buildItem(seriesIndex, 0, data[0], x0, y, r0);
this._buildItem(seriesIndex, 1, data[1], x1, y, r1);
if (data[2].value !== 0 && data[2].value !== data[0].value && data[2].value !== data[1].value) {
var xLeft = (r0 * r0 - r1 * r1) / (2 * coincideLength) + coincideLength / 2;
var xRight = coincideLength / 2 - (r0 * r0 - r1 * r1) / (2 * coincideLength);
var h = Math.sqrt(r0 * r0 - xLeft * xLeft);
var rightLargeArcFlag = 0;
var leftLargeArcFlag = 0;
if (data[0].value > data[1].value && x1 < x0 + xLeft) {
leftLargeArcFlag = 1;
}
if (data[0].value < data[1].value && x1 < x0 + xRight) {
rightLargeArcFlag = 1;
}
this._buildCoincideItem(seriesIndex, 2, data[2], x0 + xLeft, y - h, y + h, r0, r1, rightLargeArcFlag, leftLargeArcFlag);
}
},
_getCoincideLength: function (value0, value1, value2, r0, r1, coincideLengthAnchor, coincideLengthAnchorMin, coincideLengthAnchorMax) {
var x = (r0 * r0 - r1 * r1) / (2 * coincideLengthAnchor) + coincideLengthAnchor / 2;
var y = coincideLengthAnchor / 2 - (r0 * r0 - r1 * r1) / (2 * coincideLengthAnchor);
var alfa = Math.acos(x / r0);
var beta = Math.acos(y / r1);
var area0 = r0 * r0 * Math.PI;
var area2 = alfa * r0 * r0 - x * r0 * Math.sin(alfa) + beta * r1 * r1 - y * r1 * Math.sin(beta);
var scaleAnchor = area2 / area0;
var scale = value2 / value0;
var approximateValue = Math.abs(scaleAnchor / scale);
if (approximateValue > 0.999 && approximateValue < 1.001) {
return coincideLengthAnchor;
} else if (approximateValue <= 0.999) {
coincideLengthAnchorMax = coincideLengthAnchor;
coincideLengthAnchor = (coincideLengthAnchor + coincideLengthAnchorMin) / 2;
return this._getCoincideLength(value0, value1, value2, r0, r1, coincideLengthAnchor, coincideLengthAnchorMin, coincideLengthAnchorMax);
} else {
coincideLengthAnchorMin = coincideLengthAnchor;
coincideLengthAnchor = (coincideLengthAnchor + coincideLengthAnchorMax) / 2;
return this._getCoincideLength(value0, value1, value2, r0, r1, coincideLengthAnchor, coincideLengthAnchorMin, coincideLengthAnchorMax);
}
},
_buildItem: function (seriesIndex, dataIndex, dataItem, x, y, r) {
var series = this.series;
var serie = series[seriesIndex];
var circle = this.getCircle(seriesIndex, dataIndex, dataItem, x, y, r);
ecData.pack(circle, serie, seriesIndex, dataItem, dataIndex, dataItem.name);
this.shapeList.push(circle);
if (serie.itemStyle.normal.label.show) {
var label = this.getLabel(seriesIndex, dataIndex, dataItem, x, y, r);
ecData.pack(label, serie, seriesIndex, serie.data[dataIndex], dataIndex, serie.data[dataIndex].name);
this.shapeList.push(label);
}
},
_buildCoincideItem: function (seriesIndex, dataIndex, dataItem, x, y0, y1, r0, r1, rightLargeArcFlag, leftLargeArcFlag) {
var series = this.series;
var serie = series[seriesIndex];
var queryTarget = [
dataItem,
serie
];
var normal = this.deepMerge(queryTarget, 'itemStyle.normal') || {};
var emphasis = this.deepMerge(queryTarget, 'itemStyle.emphasis') || {};
var normalColor = normal.color || this.zr.getColor(dataIndex);
var emphasisColor = emphasis.color || this.zr.getColor(dataIndex);
var path = 'M' + x + ',' + y0 + 'A' + r0 + ',' + r0 + ',0,' + rightLargeArcFlag + ',1,' + x + ',' + y1 + 'A' + r1 + ',' + r1 + ',0,' + leftLargeArcFlag + ',1,' + x + ',' + y0;
var style = {
color: normalColor,
path: path
};
var shape = {
zlevel: serie.zlevel,
z: serie.z,
style: style,
highlightStyle: {
color: emphasisColor,
lineWidth: emphasis.borderWidth,
strokeColor: emphasis.borderColor
}
};
shape = new PathShape(shape);
if (shape.buildPathArray) {
shape.style.pathArray = shape.buildPathArray(style.path);
}
ecData.pack(shape, series[seriesIndex], 0, dataItem, dataIndex, dataItem.name);
this.shapeList.push(shape);
},
getCircle: function (seriesIndex, dataIndex, dataItem, x, y, r) {
var serie = this.series[seriesIndex];
var queryTarget = [
dataItem,
serie
];
var normal = this.deepMerge(queryTarget, 'itemStyle.normal') || {};
var emphasis = this.deepMerge(queryTarget, 'itemStyle.emphasis') || {};
var normalColor = normal.color || this.zr.getColor(dataIndex);
var emphasisColor = emphasis.color || this.zr.getColor(dataIndex);
var circle = {
zlevel: serie.zlevel,
z: serie.z,
clickable: true,
style: {
x: x,
y: y,
r: r,
brushType: 'fill',
opacity: 1,
color: normalColor
},
highlightStyle: {
color: emphasisColor,
lineWidth: emphasis.borderWidth,
strokeColor: emphasis.borderColor
}
};
if (this.deepQuery([
dataItem,
serie,
this.option
], 'calculable')) {
this.setCalculable(circle);
circle.draggable = true;
}
return new CircleShape(circle);
},
getLabel: function (seriesIndex, dataIndex, dataItem, x, y, r) {
var serie = this.series[seriesIndex];
var itemStyle = serie.itemStyle;
var queryTarget = [
dataItem,
serie
];
var normal = this.deepMerge(queryTarget, 'itemStyle.normal') || {};
var status = 'normal';
var labelControl = itemStyle[status].label;
var textStyle = labelControl.textStyle || {};
var text = this.getLabelText(dataIndex, dataItem, status);
var textFont = this.getFont(textStyle);
var textColor = normal.color || this.zr.getColor(dataIndex);
var textSize = textStyle.fontSize || 12;
var textShape = {
zlevel: serie.zlevel,
z: serie.z,
style: {
x: x,
y: y - r - textSize,
color: textStyle.color || textColor,
text: text,
textFont: textFont,
textAlign: 'center'
}
};
return new TextShape(textShape);
},
getLabelText: function (dataIndex, dataItem, status) {
var series = this.series;
var serie = series[0];
var formatter = this.deepQuery([
dataItem,
serie
], 'itemStyle.' + status + '.label.formatter');
if (formatter) {
if (typeof formatter == 'function') {
return formatter(serie.name, dataItem.name, dataItem.value);
} else if (typeof formatter == 'string') {
formatter = formatter.replace('{a}', '{a0}').replace('{b}', '{b0}').replace('{c}', '{c0}');
formatter = formatter.replace('{a0}', serie.name).replace('{b0}', dataItem.name).replace('{c0}', dataItem.value);
return formatter;
}
} else {
return dataItem.name;
}
},
refresh: function (newOption) {
if (newOption) {
this.option = newOption;
this.series = newOption.series;
}
this._buildShape();
}
};
zrUtil.inherits(Venn, ChartBase);
require('../chart').define('venn', Venn);
return Venn;
});define('echarts/chart/treemap', [
'require',
'./base',
'zrender/tool/area',
'zrender/shape/Rectangle',
'zrender/shape/Text',
'zrender/shape/Line',
'../layout/TreeMap',
'../data/Tree',
'../config',
'../util/ecData',
'zrender/config',
'zrender/tool/event',
'zrender/tool/util',
'zrender/tool/color',
'../chart'
], function (require) {
var ChartBase = require('./base');
var toolArea = require('zrender/tool/area');
var RectangleShape = require('zrender/shape/Rectangle');
var TextShape = require('zrender/shape/Text');
var LineShape = require('zrender/shape/Line');
var TreeMapLayout = require('../layout/TreeMap');
var Tree = require('../data/Tree');
var ecConfig = require('../config');
ecConfig.treemap = {
zlevel: 0,
z: 1,
calculable: false,
clickable: true,
center: [
'50%',
'50%'
],
size: [
'80%',
'80%'
],
root: '',
itemStyle: {
normal: {
label: {
show: true,
x: 5,
y: 12,
textStyle: {
align: 'left',
color: '#000',
fontFamily: 'Arial',
fontSize: 13,
fontStyle: 'normal',
fontWeight: 'normal'
}
},
breadcrumb: {
show: true,
textStyle: {}
},
borderWidth: 1,
borderColor: '#ccc',
childBorderWidth: 1,
childBorderColor: '#ccc'
},
emphasis: {}
}
};
var ecData = require('../util/ecData');
var zrConfig = require('zrender/config');
var zrEvent = require('zrender/tool/event');
var zrUtil = require('zrender/tool/util');
var zrColor = require('zrender/tool/color');
function Treemap(ecTheme, messageCenter, zr, option, myChart) {
ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
this.refresh(option);
var self = this;
self._onclick = function (params) {
return self.__onclick(params);
};
self.zr.on(zrConfig.EVENT.CLICK, self._onclick);
}
Treemap.prototype = {
type: ecConfig.CHART_TYPE_TREEMAP,
refresh: function (newOption) {
this.clear();
if (newOption) {
this.option = newOption;
this.series = this.option.series;
}
this._treesMap = {};
var series = this.series;
var legend = this.component.legend;
for (var i = 0; i < series.length; i++) {
if (series[i].type === ecConfig.CHART_TYPE_TREEMAP) {
series[i] = this.reformOption(series[i]);
var seriesName = series[i].name || '';
this.selectedMap[seriesName] = legend ? legend.isSelected(seriesName) : true;
if (!this.selectedMap[seriesName]) {
continue;
}
this._buildSeries(series[i], i);
}
}
},
_buildSeries: function (series, seriesIndex) {
var tree = Tree.fromOptionData(series.name, series.data);
this._treesMap[seriesIndex] = tree;
var treeRoot = series.root && tree.getNodeById(series.root) || tree.root;
this._buildTreemap(treeRoot, seriesIndex);
},
_buildTreemap: function (treeRoot, seriesIndex) {
var shapeList = this.shapeList;
for (var i = 0; i < shapeList.length;) {
var shape = shapeList[i];
if (ecData.get(shape, 'seriesIndex') === seriesIndex) {
this.zr.delShape(shapeList[i]);
shapeList.splice(i, 1);
} else {
i++;
}
}
var currentShapeLen = shapeList.length;
var series = this.series[seriesIndex];
var itemStyle = series.itemStyle;
var treemapWidth = this.parsePercent(series.size[0], this.zr.getWidth()) || 400;
var treemapHeight = this.parsePercent(series.size[1], this.zr.getHeight()) || 500;
var center = this.parseCenter(this.zr, series.center);
var treemapX = center[0] - treemapWidth * 0.5;
var treemapY = center[1] - treemapHeight * 0.5;
var treemapArea = treemapWidth * treemapHeight;
var sum = 0;
var areaArr = [];
var children = treeRoot.children;
for (var i = 0; i < children.length; i++) {
sum += children[i].data.value;
}
for (var j = 0; j < children.length; j++) {
areaArr.push(children[j].data.value * treemapArea / sum);
}
var treeMapLayout = new TreeMapLayout({
x: treemapX,
y: treemapY,
width: treemapWidth,
height: treemapHeight
});
var locationArr = treeMapLayout.run(areaArr);
for (var k = 0; k < locationArr.length; k++) {
var dataItem = children[k].data;
var rect = locationArr[k];
var queryTarget = [
dataItem.itemStyle,
itemStyle
];
var itemStyleMerged = this.deepMerge(queryTarget);
if (!itemStyleMerged.normal.color) {
itemStyleMerged.normal.color = this.zr.getColor(k);
}
if (!itemStyleMerged.emphasis.color) {
itemStyleMerged.emphasis.color = itemStyleMerged.normal.color;
}
this._buildItem(dataItem, itemStyleMerged, rect, seriesIndex, k);
if (dataItem.children) {
this._buildChildrenTreemap(dataItem.children, itemStyleMerged, rect, seriesIndex);
}
}
if (this.query(series, 'itemStyle.normal.breadcrumb.show')) {
this._buildBreadcrumb(treeRoot, seriesIndex, treemapX, treemapY + treemapHeight);
}
for (var i = currentShapeLen; i < shapeList.length; i++) {
this.zr.addShape(shapeList[i]);
}
},
_buildItem: function (dataItem, itemStyle, rect, seriesIndex, dataIndex) {
var series = this.series;
var rectangle = this.getRectangle(dataItem, itemStyle, rect);
ecData.pack(rectangle, series[seriesIndex], seriesIndex, dataItem, dataIndex, dataItem.name);
this.shapeList.push(rectangle);
},
getRectangle: function (dataItem, itemStyle, rect) {
var emphasis = itemStyle.emphasis;
var normal = itemStyle.normal;
var textShape = this.getLabel(itemStyle, rect, dataItem.name, dataItem.value);
var hoverable = this.option.hoverable;
var rectangleShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
hoverable: hoverable,
clickable: true,
style: zrUtil.merge({
x: rect.x,
y: rect.y,
width: rect.width,
height: rect.height,
brushType: 'both',
color: normal.color,
lineWidth: normal.borderWidth,
strokeColor: normal.borderColor
}, textShape.style, true),
highlightStyle: zrUtil.merge({
color: emphasis.color,
lineWidth: emphasis.borderWidth,
strokeColor: emphasis.borderColor
}, textShape.highlightStyle, true)
};
return new RectangleShape(rectangleShape);
},
getLabel: function (itemStyle, rect, name, value) {
var normalTextStyle = itemStyle.normal.label.textStyle;
var queryTarget = [
itemStyle.emphasis.label.textStyle,
normalTextStyle
];
var emphasisTextStyle = this.deepMerge(queryTarget);
var formatter = itemStyle.normal.label.formatter;
var text = this.getLabelText(name, value, formatter);
var textFont = this.getFont(normalTextStyle);
var textWidth = toolArea.getTextWidth(text, textFont);
var textHeight = toolArea.getTextHeight(text, textFont);
var emphasisFormatter = this.deepQuery([
itemStyle.emphasis,
itemStyle.normal
], 'label.formatter');
var emphasisText = this.getLabelText(name, value, emphasisFormatter);
var emphasisTextFont = this.getFont(emphasisTextStyle);
var emphasisTextWidth = toolArea.getTextWidth(text, emphasisTextFont);
var emphasisTextHeight = toolArea.getTextHeight(text, emphasisTextFont);
if (!itemStyle.normal.label.show) {
text = '';
} else if (itemStyle.normal.label.x + textWidth > rect.width || itemStyle.normal.label.y + textHeight > rect.height) {
text = '';
}
if (!itemStyle.emphasis.label.show) {
emphasisText = '';
} else if (emphasisTextStyle.x + emphasisTextWidth > rect.width || emphasisTextStyle.y + emphasisTextHeight > rect.height) {
emphasisText = '';
}
var textShape = {
style: {
textX: rect.x + itemStyle.normal.label.x,
textY: rect.y + itemStyle.normal.label.y,
text: text,
textPosition: 'specific',
textColor: normalTextStyle.color,
textFont: textFont
},
highlightStyle: {
textX: rect.x + itemStyle.emphasis.label.x,
textY: rect.y + itemStyle.emphasis.label.y,
text: emphasisText,
textColor: emphasisTextStyle.color,
textPosition: 'specific'
}
};
return textShape;
},
getLabelText: function (name, value, formatter) {
if (formatter) {
if (typeof formatter === 'function') {
return formatter.call(this.myChart, name, value);
} else if (typeof formatter === 'string') {
formatter = formatter.replace('{b}', '{b0}').replace('{c}', '{c0}');
formatter = formatter.replace('{b0}', name).replace('{c0}', value);
return formatter;
}
} else {
return name;
}
},
_buildChildrenTreemap: function (data, itemStyle, rect, seriesIndex) {
var treemapArea = rect.width * rect.height;
var sum = 0;
var areaArr = [];
for (var i = 0; i < data.length; i++) {
sum += data[i].value;
}
for (var j = 0; j < data.length; j++) {
areaArr.push(data[j].value * treemapArea / sum);
}
var treeMapLayout = new TreeMapLayout({
x: rect.x,
y: rect.y,
width: rect.width,
height: rect.height
});
var locationArr = treeMapLayout.run(areaArr);
var lineWidth = itemStyle.normal.childBorderWidth;
var lineColor = itemStyle.normal.childBorderColor;
for (var k = 0; k < locationArr.length; k++) {
var item = locationArr[k];
var lines = [];
if (rect.y.toFixed(2) !== item.y.toFixed(2)) {
lines.push(this._getLine(item.x, item.y, item.x + item.width, item.y, lineWidth, lineColor));
}
if (rect.x.toFixed(2) !== item.x.toFixed(2)) {
lines.push(this._getLine(item.x, item.y, item.x, item.y + item.height, lineWidth, lineColor));
}
if ((rect.y + rect.height).toFixed(2) !== (item.y + item.height).toFixed(2)) {
lines.push(this._getLine(item.x, item.y + item.height, item.x + item.width, item.y + item.height, lineWidth, lineColor));
}
if ((rect.x + rect.width).toFixed(2) !== (item.x + item.width).toFixed(2)) {
lines.push(this._getLine(item.x + item.width, item.y, item.x + item.width, item.y + item.height, lineWidth, lineColor));
}
for (var l = 0; l < lines.length; l++) {
ecData.set(lines[l], 'seriesIndex', seriesIndex);
this.shapeList.push(lines[l]);
}
}
},
_getLine: function (xStart, yStart, xEnd, yEnd, lineWidth, lineColor) {
var lineShape = {
zlevel: this.getZlevelBase(),
z: this.getZBase(),
hoverable: false,
style: {
xStart: xStart,
yStart: yStart,
xEnd: xEnd,
yEnd: yEnd,
lineWidth: lineWidth,
strokeColor: lineColor
}
};
return new LineShape(lineShape);
},
_buildBreadcrumb: function (treeRoot, seriesIndex, x, y) {
var stack = [];
var current = treeRoot;
while (current) {
stack.unshift(current.data.name);
current = current.parent;
}
var series = this.series[seriesIndex];
var textStyle = this.query(series, 'itemStyle.normal.breadcrumb.textStyle') || {};
var textEmphasisStyle = this.query(series, 'itemStyle.emphasis.breadcrumb.textStyle') || {};
var commonStyle = {
y: y + 10,
textBaseline: 'top',
textAlign: 'left',
color: textStyle.color,
textFont: this.getFont(textStyle)
};
var commonHighlightStyle = {
brushType: 'fill',
color: textEmphasisStyle.color || zrColor.lift(textStyle.color, -0.3),
textFont: this.getFont(textEmphasisStyle)
};
for (var i = 0; i < stack.length; i++) {
var textShape = new TextShape({
zlevel: this.getZlevelBase(),
z: this.getZBase(),
style: zrUtil.merge({
x: x,
text: stack[i] + (stack.length - 1 - i ? ' > ' : '')
}, commonStyle),
clickable: true,
highlightStyle: commonHighlightStyle
});
ecData.set(textShape, 'seriesIndex', seriesIndex);
ecData.set(textShape, 'name', stack[i]);
x += textShape.getRect(textShape.style).width;
this.shapeList.push(textShape);
}
},
__onclick: function (params) {
var target = params.target;
if (target) {
var seriesIndex = ecData.get(target, 'seriesIndex');
var name = ecData.get(target, 'name');
var tree = this._treesMap[seriesIndex];
var root = tree.getNodeById(name);
if (root && root.children.length) {
this._buildTreemap(root, seriesIndex);
}
}
}
};
zrUtil.inherits(Treemap, ChartBase);
require('../chart').define('treemap', Treemap);
return Treemap;
});define('echarts/layout/TreeMap', ['require'], function (require) {
function TreeMapLayout(opts) {
var row = {
x: opts.x,
y: opts.y,
width: opts.width,
height: opts.height
};
this.x = opts.x;
this.y = opts.y;
this.width = opts.width;
this.height = opts.height;
}
TreeMapLayout.prototype.run = function (areas) {
var out = [];
this._squarify(areas, {
x: this.x,
y: this.y,
width: this.width,
height: this.height
}, out);
return out;
};
TreeMapLayout.prototype._squarify = function (areas, row, out) {
var layoutDirection = 'VERTICAL';
var width = row.width;
var height = row.height;
if (row.width < row.height) {
layoutDirection = 'HORIZONTAL';
width = row.height;
height = row.width;
}
var shapeArr = this._getShapeListInAbstractRow(areas, width, height);
for (var i = 0; i < shapeArr.length; i++) {
shapeArr[i].x = 0;
shapeArr[i].y = 0;
for (var j = 0; j < i; j++) {
shapeArr[i].y += shapeArr[j].height;
}
}
var nextRow = {};
if (layoutDirection == 'VERTICAL') {
for (var k = 0; k < shapeArr.length; k++) {
out.push({
x: shapeArr[k].x + row.x,
y: shapeArr[k].y + row.y,
width: shapeArr[k].width,
height: shapeArr[k].height
});
}
nextRow = {
x: shapeArr[0].width + row.x,
y: row.y,
width: row.width - shapeArr[0].width,
height: row.height
};
} else {
for (var l = 0; l < shapeArr.length; l++) {
out.push({
x: shapeArr[l].y + row.x,
y: shapeArr[l].x + row.y,
width: shapeArr[l].height,
height: shapeArr[l].width
});
}
nextRow = {
x: row.x,
y: row.y + shapeArr[0].width,
width: row.width,
height: row.height - shapeArr[0].width
};
}
var nextAreaArr = areas.slice(shapeArr.length);
if (nextAreaArr.length === 0) {
return;
} else {
this._squarify(nextAreaArr, nextRow, out);
}
};
TreeMapLayout.prototype._getShapeListInAbstractRow = function (areas, width, height) {
if (areas.length === 1) {
return [{
width: width,
height: height
}];
}
for (var count = 1; count < areas.length; count++) {
var shapeArr0 = this._placeFixedNumberRectangles(areas.slice(0, count), width, height);
var shapeArr1 = this._placeFixedNumberRectangles(areas.slice(0, count + 1), width, height);
if (this._isFirstBetter(shapeArr0, shapeArr1)) {
return shapeArr0;
}
}
};
TreeMapLayout.prototype._placeFixedNumberRectangles = function (areaSubArr, width, height) {
var count = areaSubArr.length;
var shapeArr = [];
var sum = 0;
for (var i = 0; i < areaSubArr.length; i++) {
sum += areaSubArr[i];
}
var cellWidth = sum / height;
for (var j = 0; j < count; j++) {
var cellHeight = height * areaSubArr[j] / sum;
shapeArr.push({
width: cellWidth,
height: cellHeight
});
}
return shapeArr;
};
TreeMapLayout.prototype._isFirstBetter = function (shapeArr0, shapeArr1) {
var ratio0 = shapeArr0[0].height / shapeArr0[0].width;
ratio0 = ratio0 > 1 ? 1 / ratio0 : ratio0;
var ratio1 = shapeArr1[0].height / shapeArr1[0].width;
ratio1 = ratio1 > 1 ? 1 / ratio1 : ratio1;
if (Math.abs(ratio0 - 1) <= Math.abs(ratio1 - 1)) {
return true;
}
return false;
};
return TreeMapLayout;
});define('echarts/data/Tree', [
'require',
'zrender/tool/util'
], function (require) {
var zrUtil = require('zrender/tool/util');
function TreeNode(id, data) {
this.id = id;
this.depth = 0;
this.height = 0;
this.children = [];
this.parent = null;
this.data = data || null;
}
TreeNode.prototype.add = function (child) {
var children = this.children;
if (child.parent === this) {
return;
}
children.push(child);
child.parent = this;
};
TreeNode.prototype.remove = function (child) {
var children = this.children;
var idx = zrUtil.indexOf(children, child);
if (idx >= 0) {
children.splice(idx, 1);
child.parent = null;
}
};
TreeNode.prototype.traverse = function (cb, context) {
cb.call(context, this);
for (var i = 0; i < this.children.length; i++) {
this.children[i].traverse(cb, context);
}
};
TreeNode.prototype.updateDepthAndHeight = function (depth) {
var height = 0;
this.depth = depth;
for (var i = 0; i < this.children.length; i++) {
var child = this.children[i];
child.updateDepthAndHeight(depth + 1);
if (child.height > height) {
height = child.height;
}
}
this.height = height + 1;
};
TreeNode.prototype.getNodeById = function (id) {
if (this.id === id) {
return this;
}
for (var i = 0; i < this.children.length; i++) {
var res = this.children[i].getNodeById(id);
if (res) {
return res;
}
}
};
function Tree(id) {
this.root = new TreeNode(id);
}
Tree.prototype.traverse = function (cb, context) {
this.root.traverse(cb, context);
};
Tree.prototype.getSubTree = function (id) {
var root = this.getNodeById(id);
if (root) {
var tree = new Tree(root.id);
tree.root = root;
return tree;
}
};
Tree.prototype.getNodeById = function (id) {
return this.root.getNodeById(id);
};
Tree.fromOptionData = function (id, data) {
var tree = new Tree(id);
var rootNode = tree.root;
rootNode.data = {
name: id,
children: data
};
function buildHierarchy(dataNode, parentNode) {
var node = new TreeNode(dataNode.name, dataNode);
parentNode.add(node);
var children = dataNode.children;
if (children) {
for (var i = 0; i < children.length; i++) {
buildHierarchy(children[i], node);
}
}
}
for (var i = 0; i < data.length; i++) {
buildHierarchy(data[i], rootNode);
}
tree.root.updateDepthAndHeight(0);
return tree;
};
Tree.fromGraph = function (graph) {
function buildHierarchy(root) {
var graphNode = graph.getNodeById(root.id);
for (var i = 0; i < graphNode.outEdges.length; i++) {
var edge = graphNode.outEdges[i];
var childTreeNode = treeNodesMap[edge.node2.id];
root.children.push(childTreeNode);
buildHierarchy(childTreeNode);
}
}
var treeMap = {};
var treeNodesMap = {};
for (var i = 0; i < graph.nodes.length; i++) {
var node = graph.nodes[i];
var treeNode;
if (node.inDegree() === 0) {
treeMap[node.id] = new Tree(node.id);
treeNode = treeMap[node.id].root;
} else {
treeNode = new TreeNode(node.id);
}
treeNode.data = node.data;
treeNodesMap[node.id] = treeNode;
}
var treeList = [];
for (var id in treeMap) {
buildHierarchy(treeMap[id].root);
treeMap[id].root.updateDepthAndHeight(0);
treeList.push(treeMap[id]);
}
return treeList;
};
return Tree;
});define('echarts/chart/tree', [
'require',
'./base',
'../util/shape/Icon',
'zrender/shape/Image',
'zrender/shape/Line',
'zrender/shape/BezierCurve',
'../layout/Tree',
'../data/Tree',
'../config',
'../util/ecData',
'zrender/config',
'zrender/tool/event',
'zrender/tool/util',
'../chart'
], function (require) {
var ChartBase = require('./base');
var GOLDEN_SECTION = 0.618;
var IconShape = require('../util/shape/Icon');
var ImageShape = require('zrender/shape/Image');
var LineShape = require('zrender/shape/Line');
var BezierCurveShape = require('zrender/shape/BezierCurve');
var TreeLayout = require('../layout/Tree');
var TreeData = require('../data/Tree');
var ecConfig = require('../config');
ecConfig.tree = {
zlevel: 1,
z: 2,
calculable: false,
clickable: true,
rootLocation: {},
orient: 'vertical',
symbol: 'circle',
symbolSize: 20,
nodePadding: 30,
layerPadding: 100,
itemStyle: {
normal: {
label: { show: true },
lineStyle: {
width: 1,
color: '#777',
type: 'curve'
}
},
emphasis: {}
}
};
var ecData = require('../util/ecData');
var zrConfig = require('zrender/config');
var zrEvent = require('zrender/tool/event');
var zrUtil = require('zrender/tool/util');
function Tree(ecTheme, messageCenter, zr, option, myChart) {
ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
this.refresh(option);
}
Tree.prototype = {
type: ecConfig.CHART_TYPE_TREE,
_buildShape: function (series, seriesIndex) {
var data = series.data[0];
this.tree = TreeData.fromOptionData(data.name, data.children);
this.tree.root.data = data;
this._setTreeShape(series);
this.tree.traverse(function (treeNode) {
this._buildItem(treeNode, series, seriesIndex);
if (treeNode.children.length > 0) {
this._buildLink(treeNode, series);
}
}, this);
var panable = series.roam === true || series.roam === 'move';
var zoomable = series.roam === true || series.roam === 'scale';
this.zr.modLayer(this.getZlevelBase(), {
panable: panable,
zoomable: zoomable
});
if (this.query('markPoint.effect.show') || this.query('markLine.effect.show')) {
this.zr.modLayer(ecConfig.EFFECT_ZLEVEL, {
panable: panable,
zoomable: zoomable
});
}
this.addShapeList();
},
_buildItem: function (treeNode, serie, seriesIndex) {
var queryTarget = [
treeNode.data,
serie
];
var symbol = this.deepQuery(queryTarget, 'symbol');
var normal = this.deepMerge(queryTarget, 'itemStyle.normal') || {};
var emphasis = this.deepMerge(queryTarget, 'itemStyle.emphasis') || {};
var normalColor = normal.color || this.zr.getColor();
var emphasisColor = emphasis.color || this.zr.getColor();
var angle = -treeNode.layout.angle || 0;
if (treeNode.id === this.tree.root.id) {
angle = 0;
}
var textPosition = 'right';
if (Math.abs(angle) >= Math.PI / 2 && Math.abs(angle) < Math.PI * 3 / 2) {
angle += Math.PI;
textPosition = 'left';
}
var rotation = [
angle,
treeNode.layout.position[0],
treeNode.layout.position[1]
];
var shape = new IconShape({
zlevel: this.getZlevelBase(),
z: this.getZBase() + 1,
rotation: rotation,
clickable: this.deepQuery(queryTarget, 'clickable'),
style: {
x: treeNode.layout.position[0] - treeNode.layout.width * 0.5,
y: treeNode.layout.position[1] - treeNode.layout.height * 0.5,
width: treeNode.layout.width,
height: treeNode.layout.height,
iconType: symbol,
color: normalColor,
brushType: 'both',
lineWidth: normal.borderWidth,
strokeColor: normal.borderColor
},
highlightStyle: {
color: emphasisColor,
lineWidth: emphasis.borderWidth,
strokeColor: emphasis.borderColor
}
});
if (shape.style.iconType.match('image')) {
shape.style.image = shape.style.iconType.replace(new RegExp('^image:\\/\\/'), '');
shape = new ImageShape({
rotation: rotation,
style: shape.style,
highlightStyle: shape.highlightStyle,
clickable: shape.clickable,
zlevel: this.getZlevelBase(),
z: this.getZBase()
});
}
if (this.deepQuery(queryTarget, 'itemStyle.normal.label.show')) {
shape.style.text = treeNode.data.label == null ? treeNode.id : treeNode.data.label;
shape.style.textPosition = this.deepQuery(queryTarget, 'itemStyle.normal.label.position');
if (serie.orient === 'radial' && shape.style.textPosition !== 'inside') {
shape.style.textPosition = textPosition;
}
shape.style.textColor = this.deepQuery(queryTarget, 'itemStyle.normal.label.textStyle.color');
shape.style.textFont = this.getFont(this.deepQuery(queryTarget, 'itemStyle.normal.label.textStyle') || {});
}
if (this.deepQuery(queryTarget, 'itemStyle.emphasis.label.show')) {
shape.highlightStyle.textPosition = this.deepQuery(queryTarget, 'itemStyle.emphasis.label.position');
shape.highlightStyle.textColor = this.deepQuery(queryTarget, 'itemStyle.emphasis.label.textStyle.color');
shape.highlightStyle.textFont = this.getFont(this.deepQuery(queryTarget, 'itemStyle.emphasis.label.textStyle') || {});
}
ecData.pack(shape, serie, seriesIndex, treeNode.data, 0, treeNode.id);
this.shapeList.push(shape);
},
_buildLink: function (parentNode, serie) {
var lineStyle = serie.itemStyle.normal.lineStyle;
if (lineStyle.type === 'broken') {
this._buildBrokenLine(parentNode, lineStyle, serie);
return;
}
for (var i = 0; i < parentNode.children.length; i++) {
var xStart = parentNode.layout.position[0];
var yStart = parentNode.layout.position[1];
var xEnd = parentNode.children[i].layout.position[0];
var yEnd = parentNode.children[i].layout.position[1];
switch (lineStyle.type) {
case 'curve':
this._buildBezierCurve(parentNode, parentNode.children[i], lineStyle, serie);
break;
case 'broken':
break;
default:
var shape = this._getLine(xStart, yStart, xEnd, yEnd, lineStyle);
this.shapeList.push(shape);
}
}
},
_buildBrokenLine: function (parentNode, lineStyle, serie) {
var solidLineStyle = zrUtil.clone(lineStyle);
solidLineStyle.type = 'solid';
var shapes = [];
var xStart = parentNode.layout.position[0];
var yStart = parentNode.layout.position[1];
var orient = serie.orient;
var yEnd = parentNode.children[0].layout.position[1];
var xMiddle = xStart;
var yMiddle = yStart + (yEnd - yStart) * (1 - GOLDEN_SECTION);
var xMiddleStart = parentNode.children[0].layout.position[0];
var yMiddleStart = yMiddle;
var xMiddleEnd = parentNode.children[parentNode.children.length - 1].layout.position[0];
var yMiddleEnd = yMiddle;
if (orient === 'horizontal') {
var xEnd = parentNode.children[0].layout.position[0];
xMiddle = xStart + (xEnd - xStart) * (1 - GOLDEN_SECTION);
yMiddle = yStart;
xMiddleStart = xMiddle;
yMiddleStart = parentNode.children[0].layout.position[1];
xMiddleEnd = xMiddle;
yMiddleEnd = parentNode.children[parentNode.children.length - 1].layout.position[1];
}
shapes.push(this._getLine(xStart, yStart, xMiddle, yMiddle, solidLineStyle));
shapes.push(this._getLine(xMiddleStart, yMiddleStart, xMiddleEnd, yMiddleEnd, solidLineStyle));
for (var i = 0; i < parentNode.children.length; i++) {
xEnd = parentNode.children[i].layout.position[0];
yEnd = parentNode.children[i].layout.position[1];
if (orient === 'horizontal') {
yMiddleStart = yEnd;
} else {
xMiddleStart = xEnd;
}
shapes.push(this._getLine(xMiddleStart, yMiddleStart, xEnd, yEnd, solidLineStyle));
}
this.shapeList = this.shapeList.concat(shapes);
},
_getLine: function (xStart, yStart, xEnd, yEnd, lineStyle) {
if (xStart === xEnd) {
xStart = xEnd = this.subPixelOptimize(xStart, lineStyle.width);
}
if (yStart === yEnd) {
yStart = yEnd = this.subPixelOptimize(yStart, lineStyle.width);
}
return new LineShape({
zlevel: this.getZlevelBase(),
hoverable: false,
style: zrUtil.merge({
xStart: xStart,
yStart: yStart,
xEnd: xEnd,
yEnd: yEnd,
lineType: lineStyle.type,
strokeColor: lineStyle.color,
lineWidth: lineStyle.width
}, lineStyle, true)
});
},
_buildBezierCurve: function (parentNode, treeNode, lineStyle, serie) {
var offsetRatio = GOLDEN_SECTION;
var orient = serie.orient;
var xStart = parentNode.layout.position[0];
var yStart = parentNode.layout.position[1];
var xEnd = treeNode.layout.position[0];
var yEnd = treeNode.layout.position[1];
var cpX1 = xStart;
var cpY1 = (yEnd - yStart) * offsetRatio + yStart;
var cpX2 = xEnd;
var cpY2 = (yEnd - yStart) * (1 - offsetRatio) + yStart;
if (orient === 'horizontal') {
cpX1 = (xEnd - xStart) * offsetRatio + xStart;
cpY1 = yStart;
cpX2 = (xEnd - xStart) * (1 - offsetRatio) + xStart;
cpY2 = yEnd;
} else if (orient === 'radial') {
if (parentNode.id === this.tree.root.id) {
cpX1 = (xEnd - xStart) * offsetRatio + xStart;
cpY1 = (yEnd - yStart) * offsetRatio + yStart;
cpX2 = (xEnd - xStart) * (1 - offsetRatio) + xStart;
cpY2 = (yEnd - yStart) * (1 - offsetRatio) + yStart;
} else {
var xStartOrigin = parentNode.layout.originPosition[0];
var yStartOrigin = parentNode.layout.originPosition[1];
var xEndOrigin = treeNode.layout.originPosition[0];
var yEndOrigin = treeNode.layout.originPosition[1];
var rootX = this.tree.root.layout.position[0];
var rootY = this.tree.root.layout.position[1];
cpX1 = xStartOrigin;
cpY1 = (yEndOrigin - yStartOrigin) * offsetRatio + yStartOrigin;
cpX2 = xEndOrigin;
cpY2 = (yEndOrigin - yStartOrigin) * (1 - offsetRatio) + yStartOrigin;
var rad = (cpX1 - this.minX) / this.width * Math.PI * 2;
cpX1 = cpY1 * Math.cos(rad) + rootX;
cpY1 = cpY1 * Math.sin(rad) + rootY;
rad = (cpX2 - this.minX) / this.width * Math.PI * 2;
cpX2 = cpY2 * Math.cos(rad) + rootX;
cpY2 = cpY2 * Math.sin(rad) + rootY;
}
}
var shape = new BezierCurveShape({
zlevel: this.getZlevelBase(),
hoverable: false,
style: zrUtil.merge({
xStart: xStart,
yStart: yStart,
cpX1: cpX1,
cpY1: cpY1,
cpX2: cpX2,
cpY2: cpY2,
xEnd: xEnd,
yEnd: yEnd,
strokeColor: lineStyle.color,
lineWidth: lineStyle.width
}, lineStyle, true)
});
this.shapeList.push(shape);
},
_setTreeShape: function (serie) {
var treeLayout = new TreeLayout({
nodePadding: serie.nodePadding,
layerPadding: serie.layerPadding
});
this.tree.traverse(function (treeNode) {
var queryTarget = [
treeNode.data,
serie
];
var symbolSize = this.deepQuery(queryTarget, 'symbolSize');
if (typeof symbolSize === 'number') {
symbolSize = [
symbolSize,
symbolSize
];
}
treeNode.layout = {
width: symbolSize[0],
height: symbolSize[1]
};
}, this);
treeLayout.run(this.tree);
var orient = serie.orient;
var rootX = serie.rootLocation.x;
var rootY = serie.rootLocation.y;
var zrWidth = this.zr.getWidth();
var zrHeight = this.zr.getHeight();
if (rootX === 'center') {
rootX = zrWidth * 0.5;
} else {
rootX = this.parsePercent(rootX, zrWidth);
}
if (rootY === 'center') {
rootY = zrHeight * 0.5;
} else {
rootY = this.parsePercent(rootY, zrHeight);
}
rootY = this.parsePercent(rootY, zrHeight);
if (orient === 'horizontal') {
rootX = isNaN(rootX) ? 10 : rootX;
rootY = isNaN(rootY) ? zrHeight * 0.5 : rootY;
}
if (orient === 'radial') {
rootX = isNaN(rootX) ? zrWidth * 0.5 : rootX;
rootY = isNaN(rootY) ? zrHeight * 0.5 : rootY;
} else {
rootX = isNaN(rootX) ? zrWidth * 0.5 : rootX;
rootY = isNaN(rootY) ? 10 : rootY;
}
var originRootX = this.tree.root.layout.position[0];
if (orient === 'radial') {
var minX = Infinity;
var maxX = 0;
var maxWidth = 0;
this.tree.traverse(function (treeNode) {
maxX = Math.max(maxX, treeNode.layout.position[0]);
minX = Math.min(minX, treeNode.layout.position[0]);
maxWidth = Math.max(maxWidth, treeNode.layout.width);
});
this.width = maxX - minX + 2 * maxWidth;
this.minX = minX;
}
this.tree.traverse(function (treeNode) {
var x;
var y;
if (orient === 'vertical' && serie.direction === 'inverse') {
x = treeNode.layout.position[0] - originRootX + rootX;
y = rootY - treeNode.layout.position[1];
} else if (orient === 'vertical') {
x = treeNode.layout.position[0] - originRootX + rootX;
y = treeNode.layout.position[1] + rootY;
} else if (orient === 'horizontal' && serie.direction === 'inverse') {
y = treeNode.layout.position[0] - originRootX + rootY;
x = rootX - treeNode.layout.position[1];
} else if (orient === 'horizontal') {
y = treeNode.layout.position[0] - originRootX + rootY;
x = treeNode.layout.position[1] + rootX;
} else {
x = treeNode.layout.position[0];
y = treeNode.layout.position[1];
treeNode.layout.originPosition = [
x,
y
];
var r = y;
var angle = (x - minX) / this.width * Math.PI * 2;
x = r * Math.cos(angle) + rootX;
y = r * Math.sin(angle) + rootY;
treeNode.layout.angle = angle;
}
treeNode.layout.position[0] = x;
treeNode.layout.position[1] = y;
}, this);
},
refresh: function (newOption) {
this.clear();
if (newOption) {
this.option = newOption;
this.series = this.option.series;
}
var series = this.series;
var legend = this.component.legend;
for (var i = 0; i < series.length; i++) {
if (series[i].type === ecConfig.CHART_TYPE_TREE) {
series[i] = this.reformOption(series[i]);
var seriesName = series[i].name || '';
this.selectedMap[seriesName] = legend ? legend.isSelected(seriesName) : true;
if (!this.selectedMap[seriesName]) {
continue;
}
this._buildSeries(series[i], i);
}
}
},
_buildSeries: function (series, seriesIndex) {
this._buildShape(series, seriesIndex);
}
};
zrUtil.inherits(Tree, ChartBase);
require('../chart').define('tree', Tree);
return Tree;
});define('echarts/layout/Tree', [
'require',
'zrender/tool/vector'
], function (require) {
var vec2 = require('zrender/tool/vector');
function TreeLayout(opts) {
opts = opts || {};
this.nodePadding = opts.nodePadding || 30;
this.layerPadding = opts.layerPadding || 100;
this._layerOffsets = [];
this._layers = [];
}
TreeLayout.prototype.run = function (tree) {
this._layerOffsets.length = 0;
for (var i = 0; i < tree.root.height + 1; i++) {
this._layerOffsets[i] = 0;
this._layers[i] = [];
}
this._updateNodeXPosition(tree.root);
var root = tree.root;
this._updateNodeYPosition(root, 0, root.layout.height);
};
TreeLayout.prototype._updateNodeXPosition = function (node) {
var minX = Infinity;
var maxX = -Infinity;
node.layout.position = node.layout.position || vec2.create();
for (var i = 0; i < node.children.length; i++) {
var child = node.children[i];
this._updateNodeXPosition(child);
var x = child.layout.position[0];
if (x < minX) {
minX = x;
}
if (x > maxX) {
maxX = x;
}
}
if (node.children.length > 0) {
node.layout.position[0] = (minX + maxX) / 2;
} else {
node.layout.position[0] = 0;
}
var off = this._layerOffsets[node.depth] || 0;
if (off > node.layout.position[0]) {
var shift = off - node.layout.position[0];
this._shiftSubtree(node, shift);
for (var i = node.depth + 1; i < node.height + node.depth; i++) {
this._layerOffsets[i] += shift;
}
}
this._layerOffsets[node.depth] = node.layout.position[0] + node.layout.width + this.nodePadding;
this._layers[node.depth].push(node);
};
TreeLayout.prototype._shiftSubtree = function (root, offset) {
root.layout.position[0] += offset;
for (var i = 0; i < root.children.length; i++) {
this._shiftSubtree(root.children[i], offset);
}
};
TreeLayout.prototype._updateNodeYPosition = function (node, y, prevLayerHeight) {
node.layout.position[1] = y;
var layerHeight = 0;
for (var i = 0; i < node.children.length; i++) {
layerHeight = Math.max(node.children[i].layout.height, layerHeight);
}
var layerPadding = this.layerPadding;
if (typeof layerPadding === 'function') {
layerPadding = layerPadding(node.depth);
}
for (var i = 0; i < node.children.length; i++) {
this._updateNodeYPosition(node.children[i], y + layerPadding + prevLayerHeight, layerHeight);
}
};
return TreeLayout;
});define('echarts/chart/wordCloud', [
'require',
'./base',
'zrender/shape/Text',
'../layout/WordCloud',
'../component/grid',
'../component/dataRange',
'../config',
'../util/ecData',
'zrender/tool/util',
'zrender/tool/color',
'../chart'
], function (require) {
var ChartBase = require('./base');
var TextShape = require('zrender/shape/Text');
var CloudLayout = require('../layout/WordCloud');
require('../component/grid');
require('../component/dataRange');
var ecConfig = require('../config');
var ecData = require('../util/ecData');
var zrUtil = require('zrender/tool/util');
var zrColor = require('zrender/tool/color');
ecConfig.wordCloud = {
zlevel: 0,
z: 2,
clickable: true,
center: [
'50%',
'50%'
],
size: [
'40%',
'40%'
],
textRotation: [
0,
90
],
textPadding: 0,
autoSize: {
enable: true,
minSize: 12
},
itemStyle: {
normal: {
textStyle: {
fontSize: function (data) {
return data.value;
}
}
}
}
};
function Cloud(ecTheme, messageCenter, zr, option, myChart) {
ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
this.refresh(option);
}
Cloud.prototype = {
type: ecConfig.CHART_TYPE_WORDCLOUD,
refresh: function (newOption) {
if (newOption) {
this.option = newOption;
this.series = newOption.series;
}
this._init();
},
_init: function () {
var series = this.series;
this.backupShapeList();
var legend = this.component.legend;
for (var i = 0; i < series.length; i++) {
if (series[i].type === ecConfig.CHART_TYPE_WORDCLOUD) {
series[i] = this.reformOption(series[i]);
var serieName = series[i].name || '';
this.selectedMap[serieName] = legend ? legend.isSelected(serieName) : true;
if (!this.selectedMap[serieName]) {
continue;
}
this.buildMark(i);
this._initSerie(series[i]);
}
}
},
_initSerie: function (serie) {
var textStyle = serie.itemStyle.normal.textStyle;
var size = [
this.parsePercent(serie.size[0], this.zr.getWidth()) || 200,
this.parsePercent(serie.size[1], this.zr.getHeight()) || 200
];
var center = this.parseCenter(this.zr, serie.center);
var layoutConfig = {
size: size,
wordletype: { autoSizeCal: serie.autoSize },
center: center,
rotate: serie.textRotation,
padding: serie.textPadding,
font: textStyle.fontFamily,
fontSize: textStyle.fontSize,
fontWeight: textStyle.fontWeight,
fontStyle: textStyle.fontStyle,
text: function (d) {
return d.name;
},
data: serie.data
};
var clouds = new CloudLayout(layoutConfig);
var self = this;
clouds.end(function (d) {
self._buildShapes(d);
});
clouds.start();
},
_buildShapes: function (data) {
var len = data.length;
for (var i = 0; i < len; i++) {
this._buildTextShape(data[i], 0, i);
}
this.addShapeList();
},
_buildTextShape: function (oneText, seriesIndex, dataIndex) {
var series = this.series;
var serie = series[seriesIndex];
var serieName = serie.name || '';
var data = serie.data[dataIndex];
var queryTarget = [
data,
serie
];
var legend = this.component.legend;
var defaultColor = legend ? legend.getColor(serieName) : this.zr.getColor(seriesIndex);
var normal = this.deepMerge(queryTarget, 'itemStyle.normal') || {};
var emphasis = this.deepMerge(queryTarget, 'itemStyle.emphasis') || {};
var normalColor = this.getItemStyleColor(normal.color, seriesIndex, dataIndex, data) || defaultColor;
var emphasisColor = this.getItemStyleColor(emphasis.color, seriesIndex, dataIndex, data) || (typeof normalColor === 'string' ? zrColor.lift(normalColor, -0.2) : normalColor);
var textShape = new TextShape({
zlevel: serie.zlevel,
z: serie.z,
hoverable: true,
clickable: this.deepQuery(queryTarget, 'clickable'),
style: {
x: 0,
y: 0,
text: oneText.text,
color: normalColor,
textFont: [
oneText.style,
oneText.weight,
oneText.size + 'px',
oneText.font
].join(' '),
textBaseline: 'alphabetic',
textAlign: 'center'
},
highlightStyle: {
brushType: emphasis.borderWidth ? 'both' : 'fill',
color: emphasisColor,
lineWidth: emphasis.borderWidth || 0,
strokeColor: emphasis.borderColor
},
position: [
oneText.x,
oneText.y
],
rotation: [
-oneText.rotate / 180 * Math.PI,
0,
0
]
});
ecData.pack(textShape, serie, seriesIndex, data, dataIndex, data.name);
this.shapeList.push(textShape);
}
};
zrUtil.inherits(Cloud, ChartBase);
require('../chart').define('wordCloud', Cloud);
return Cloud;
});define('echarts/layout/WordCloud', [
'require',
'../layout/WordCloudRectZero',
'zrender/tool/util'
], function (require) {
var ZeroArray = require('../layout/WordCloudRectZero');
var zrUtil = require('zrender/tool/util');
function CloudLayout(option) {
this._init(option);
}
CloudLayout.prototype = {
start: function () {
var board = null;
var maxWit = 0;
var maxHit = 0;
var maxArea = 0;
var i = -1;
var tags = [];
var maxBounds = null;
var data = this.wordsdata;
var dfop = this.defaultOption;
var wordletype = dfop.wordletype;
var size = dfop.size;
var that = this;
var zeroArrayObj = new ZeroArray({
type: wordletype.type,
width: size[0],
height: size[1]
});
zeroArrayObj.calculate(function (options) {
board = options.initarr;
maxWit = options.maxWit;
maxHit = options.maxHit;
maxArea = options.area;
maxBounds = options.imgboard;
startStep();
}, this);
return this;
function startStep() {
that.totalArea = maxArea;
if (wordletype.autoSizeCal.enable) {
that._autoCalTextSize(data, maxArea, maxWit, maxHit, wordletype.autoSizeCal.minSize);
}
if (dfop.timer) {
clearInterval(dfop.timer);
}
dfop.timer = setInterval(step, 0);
step();
}
function step() {
var start = +new Date();
var n = data.length;
var d;
while (+new Date() - start < dfop.timeInterval && ++i < n && dfop.timer) {
d = data[i];
d.x = size[0] >> 1;
d.y = size[1] >> 1;
that._cloudSprite(d, data, i);
if (d.hasText && that._place(board, d, maxBounds)) {
tags.push(d);
d.x -= size[0] >> 1;
d.y -= size[1] >> 1;
}
}
if (i >= n) {
that.stop();
that._fixTagPosition(tags);
dfop.endcallback(tags);
}
}
},
_fixTagPosition: function (tags) {
var center = this.defaultOption.center;
for (var i = 0, len = tags.length; i < len; i++) {
tags[i].x += center[0];
tags[i].y += center[1];
}
},
stop: function () {
if (this.defaultOption.timer) {
clearInterval(this.defaultOption.timer);
this.defaultOption.timer = null;
}
return this;
},
end: function (v) {
if (v) {
this.defaultOption.endcallback = v;
}
return this;
},
_init: function (option) {
this.defaultOption = {};
this._initProperty(option);
this._initMethod(option);
this._initCanvas();
this._initData(option.data);
},
_initData: function (datas) {
var that = this;
var thatop = that.defaultOption;
this.wordsdata = datas.map(function (d, i) {
d.text = thatop.text.call(that, d, i);
d.font = thatop.font.call(that, d, i);
d.style = thatop.fontStyle.call(that, d, i);
d.weight = thatop.fontWeight.call(that, d, i);
d.rotate = thatop.rotate.call(that, d, i);
d.size = ~~thatop.fontSize.call(that, d, i);
d.padding = thatop.padding.call(that, d, i);
return d;
}).sort(function (a, b) {
return b.value - a.value;
});
},
_initMethod: function (option) {
var dfop = this.defaultOption;
dfop.text = option.text ? functor(option.text) : cloudText;
dfop.font = option.font ? functor(option.font) : cloudFont;
dfop.fontSize = option.fontSize ? functor(option.fontSize) : cloudFontSize;
dfop.fontStyle = option.fontStyle ? functor(option.fontStyle) : cloudFontNormal;
dfop.fontWeight = option.fontWeight ? functor(option.fontWeight) : cloudFontNormal;
dfop.rotate = option.rotate ? newCloudRotate(option.rotate) : cloudRotate;
dfop.padding = option.padding ? functor(option.padding) : cloudPadding;
dfop.center = option.center;
dfop.spiral = archimedeanSpiral;
dfop.endcallback = function () {
};
dfop.rectangularSpiral = rectangularSpiral;
dfop.archimedeanSpiral = archimedeanSpiral;
function cloudText(d) {
return d.name;
}
function cloudFont() {
return 'sans-serif';
}
function cloudFontNormal() {
return 'normal';
}
function cloudFontSize(d) {
return d.value;
}
function cloudRotate() {
return 0;
}
function newCloudRotate(rotate) {
return function () {
return rotate[Math.round(Math.random() * (rotate.length - 1))];
};
}
function cloudPadding() {
return 0;
}
function archimedeanSpiral(size) {
var e = size[0] / size[1];
return function (t) {
return [
e * (t *= 0.1) * Math.cos(t),
t * Math.sin(t)
];
};
}
function rectangularSpiral(size) {
var dy = 4;
var dx = dy * size[0] / size[1];
var x = 0;
var y = 0;
return function (t) {
var sign = t < 0 ? -1 : 1;
switch (Math.sqrt(1 + 4 * sign * t) - sign & 3) {
case 0:
x += dx;
break;
case 1:
y += dy;
break;
case 2:
x -= dx;
break;
default:
y -= dy;
break;
}
return [
x,
y
];
};
}
function functor(v) {
return typeof v === 'function' ? v : function () {
return v;
};
}
},
_initProperty: function (option) {
var dfop = this.defaultOption;
dfop.size = option.size || [
256,
256
];
dfop.wordletype = option.wordletype;
dfop.words = option.words || [];
dfop.timeInterval = Infinity;
dfop.timer = null;
dfop.spirals = {
archimedean: dfop.archimedeanSpiral,
rectangular: dfop.rectangularSpiral
};
zrUtil.merge(dfop, {
size: [
256,
256
],
wordletype: {
type: 'RECT',
areaPresent: 0.058,
autoSizeCal: {
enable: true,
minSize: 12
}
}
});
},
_initCanvas: function () {
var cloudRadians = Math.PI / 180;
var cw = 1 << 11 >> 5;
var ch = 1 << 11;
var canvas;
var ratio = 1;
if (typeof document !== 'undefined') {
canvas = document.createElement('canvas');
canvas.width = 1;
canvas.height = 1;
ratio = Math.sqrt(canvas.getContext('2d').getImageData(0, 0, 1, 1).data.length >> 2);
canvas.width = (cw << 5) / ratio;
canvas.height = ch / ratio;
} else {
canvas = new Canvas(cw << 5, ch);
}
var c = canvas.getContext('2d');
c.fillStyle = c.strokeStyle = 'red';
c.textAlign = 'center';
this.defaultOption.c = c;
this.defaultOption.cw = cw;
this.defaultOption.ch = ch;
this.defaultOption.ratio = ratio;
this.defaultOption.cloudRadians = cloudRadians;
},
_cloudSprite: function (d, data, di) {
if (d.sprite) {
return;
}
var cw = this.defaultOption.cw;
var ch = this.defaultOption.ch;
var c = this.defaultOption.c;
var ratio = this.defaultOption.ratio;
var cloudRadians = this.defaultOption.cloudRadians;
c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);
var x = 0;
var y = 0;
var maxh = 0;
var n = data.length;
--di;
while (++di < n) {
d = data[di];
c.save();
c.font = d.style + ' ' + d.weight + ' ' + ~~((d.size + 1) / ratio) + 'px ' + d.font;
var w = c.measureText(d.text + 'm').width * ratio;
var h = d.size << 1;
if (d.rotate) {
var sr = Math.sin(d.rotate * cloudRadians);
var cr = Math.cos(d.rotate * cloudRadians);
var wcr = w * cr;
var wsr = w * sr;
var hcr = h * cr;
var hsr = h * sr;
w = Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 31 >> 5 << 5;
h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));
} else {
w = w + 31 >> 5 << 5;
}
if (h > maxh) {
maxh = h;
}
if (x + w >= cw << 5) {
x = 0;
y += maxh;
maxh = 0;
}
if (y + h >= ch) {
break;
}
c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);
if (d.rotate) {
c.rotate(d.rotate * cloudRadians);
}
c.fillText(d.text, 0, 0);
if (d.padding) {
c.lineWidth = 2 * d.padding;
c.strokeText(d.text, 0, 0);
}
c.restore();
d.width = w;
d.height = h;
d.xoff = x;
d.yoff = y;
d.x1 = w >> 1;
d.y1 = h >> 1;
d.x0 = -d.x1;
d.y0 = -d.y1;
d.hasText = true;
x += w;
}
var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data;
var sprite = [];
while (--di >= 0) {
d = data[di];
if (!d.hasText) {
continue;
}
var w = d.width;
var w32 = w >> 5;
var h = d.y1 - d.y0;
for (var i = 0; i < h * w32; i++) {
sprite[i] = 0;
}
x = d.xoff;
if (x == null) {
return;
}
y = d.yoff;
var seen = 0;
var seenRow = -1;
for (var j = 0; j < h; j++) {
for (var i = 0; i < w; i++) {
var k = w32 * j + (i >> 5);
var m = pixels[(y + j) * (cw << 5) + (x + i) << 2] ? 1 << 31 - i % 32 : 0;
sprite[k] |= m;
seen |= m;
}
if (seen) {
seenRow = j;
} else {
d.y0++;
h--;
j--;
y++;
}
}
d.y1 = d.y0 + seenRow;
d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);
}
},
_place: function (board, tag, maxBounds) {
var size = this.defaultOption.size;
var perimeter = [
{
x: 0,
y: 0
},
{
x: size[0],
y: size[1]
}
];
var startX = tag.x;
var startY = tag.y;
var maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]);
var s = this.defaultOption.spiral(size);
var dt = Math.random() < 0.5 ? 1 : -1;
var t = -dt;
var dxdy;
var dx;
var dy;
while (dxdy = s(t += dt)) {
dx = ~~dxdy[0];
dy = ~~dxdy[1];
if (Math.min(dx, dy) > maxDelta) {
break;
}
tag.x = startX + dx;
tag.y = startY + dy;
if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 || tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) {
continue;
}
if (!cloudCollide(tag, board, size[0])) {
if (collideRects(tag, maxBounds)) {
var sprite = tag.sprite;
var w = tag.width >> 5;
var sw = size[0] >> 5;
var lx = tag.x - (w << 4);
var sx = lx & 127;
var msx = 32 - sx;
var h = tag.y1 - tag.y0;
var x = (tag.y + tag.y0) * sw + (lx >> 5);
var last;
for (var j = 0; j < h; j++) {
last = 0;
for (var i = 0; i <= w; i++) {
board[x + i] |= last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);
}
x += sw;
}
delete tag.sprite;
return true;
}
}
}
return false;
function cloudCollide(tag, board, sw) {
sw >>= 5;
var sprite = tag.sprite;
var w = tag.width >> 5;
var lx = tag.x - (w << 4);
var sx = lx & 127;
var msx = 32 - sx;
var h = tag.y1 - tag.y0;
var x = (tag.y + tag.y0) * sw + (lx >> 5);
var last;
for (var j = 0; j < h; j++) {
last = 0;
for (var i = 0; i <= w; i++) {
if ((last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0)) & board[x + i]) {
return true;
}
}
x += sw;
}
return false;
}
function collideRects(a, maxBounds) {
return maxBounds.row[a.y] && maxBounds.cloumn[a.x] && a.x >= maxBounds.row[a.y].start && a.x <= maxBounds.row[a.y].end && a.y >= maxBounds.cloumn[a.x].start && a.y <= maxBounds.cloumn[a.x].end;
}
},
_autoCalTextSize: function (data, shapeArea, maxwidth, maxheight, minSize) {
var sizesum = sum(data, function (k) {
return k.size;
});
var i = data.length;
var maxareapre = 0.25;
var minTextSize = minSize;
var cw = this.defaultOption.cw;
var ch = this.defaultOption.ch;
var c = this.defaultOption.c;
var ratio = this.defaultOption.ratio;
var cloudRadians = this.defaultOption.cloudRadians;
var d;
var dpre;
while (i--) {
d = data[i];
dpre = d.size / sizesum;
if (maxareapre) {
d.areapre = dpre < maxareapre ? dpre : maxareapre;
} else {
d.areapre = dpre;
}
d.area = shapeArea * d.areapre;
d.totalarea = shapeArea;
measureTextWitHitByarea(d);
}
function measureTextWitHitByarea(d) {
c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);
c.save();
c.font = d.style + ' ' + d.weight + ' ' + ~~((d.size + 1) / ratio) + 'px ' + d.font;
var w = c.measureText(d.text + 'm').width * ratio, h = d.size << 1;
w = w + 31 >> 5 << 5;
c.restore();
d.aw = w;
d.ah = h;
var k, rw, rh;
if (d.rotate) {
var sr = Math.sin(d.rotate * cloudRadians);
var cr = Math.cos(d.rotate * cloudRadians);
var wcr = w * cr;
var wsr = w * sr;
var hcr = h * cr;
var hsr = h * sr;
rw = Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 31 >> 5 << 5;
rh = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));
}
if (d.size <= minTextSize || d.rotate && w * h <= d.area && rw <= maxwidth && rh <= maxheight || w * h <= d.area && w <= maxwidth && h <= maxheight) {
d.area = w * h;
return;
}
if (d.rotate && rw > maxwidth && rh > maxheight) {
k = Math.min(maxwidth / rw, maxheight / rh);
} else if (w > maxwidth || h > maxheight) {
k = Math.min(maxwidth / w, maxheight / h);
} else {
k = Math.sqrt(d.area / (d.aw * d.ah));
}
d.size = ~~(k * d.size);
if (d.size < minSize) {
d.size = minSize;
return;
}
return measureTextWitHitByarea(d);
}
function sum(dts, callback) {
var j = dts.length;
var ressum = 0;
while (j--) {
ressum += callback(dts[j]);
}
return ressum;
}
}
};
return CloudLayout;
});define('echarts/layout/WordCloudRectZero', ['require'], function (require) {
function ZeroArray(option) {
this.defaultOption = { type: 'RECT' };
this._init(option);
}
ZeroArray.prototype = {
RECT: '_calculateRect',
_init: function (option) {
this._initOption(option);
this._initCanvas();
},
_initOption: function (option) {
for (k in option) {
this.defaultOption[k] = option[k];
}
},
_initCanvas: function () {
var canvas = document.createElement('canvas');
canvas.width = 1;
canvas.height = 1;
var ratio = Math.sqrt(canvas.getContext('2d').getImageData(0, 0, 1, 1).data.length >> 2);
canvas.width = this.defaultOption.width;
canvas.height = this.defaultOption.height;
if (canvas.getContext) {
var ctx = canvas.getContext('2d');
}
this.canvas = canvas;
this.ctx = ctx;
this.ratio = ratio;
},
calculate: function (callback, callbackObj) {
var calType = this.defaultOption.type, calmethod = this[calType];
this[calmethod].call(this, callback, callbackObj);
},
_calculateReturn: function (result, callback, callbackObj) {
callback.call(callbackObj, result);
},
_calculateRect: function (callback, callbackObj) {
var result = {}, width = this.defaultOption.width >> 5 << 5, height = this.defaultOption.height;
result.initarr = this._rectZeroArray(width * height);
result.area = width * height;
result.maxHit = height;
result.maxWit = width;
result.imgboard = this._rectBoard(width, height);
this._calculateReturn(result, callback, callbackObj);
},
_rectBoard: function (width, height) {
var row = [];
for (var i = 0; i < height; i++) {
row.push({
y: i,
start: 0,
end: width
});
}
var cloumn = [];
for (var i = 0; i < width; i++) {
cloumn.push({
x: i,
start: 0,
end: height
});
}
return {
row: row,
cloumn: cloumn
};
},
_rectZeroArray: function (num) {
var a = [], n = num, i = -1;
while (++i < n)
a[i] = 0;
return a;
}
};
return ZeroArray;
});define('echarts/chart/heatmap', [
'require',
'./base',
'../layer/heatmap',
'../config',
'../util/ecData',
'zrender/tool/util',
'zrender/tool/color',
'zrender/shape/Image',
'../chart'
], function (require) {
var ChartBase = require('./base');
var HeatmapLayer = require('../layer/heatmap');
var ecConfig = require('../config');
var ecData = require('../util/ecData');
var zrUtil = require('zrender/tool/util');
var zrColor = require('zrender/tool/color');
var zrImage = require('zrender/shape/Image');
ecConfig.heatmap = {
zlevel: 0,
z: 2,
clickable: true
};
function Heatmap(ecTheme, messageCenter, zr, option, myChart) {
ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
this.refresh(option);
}
Heatmap.prototype = {
type: ecConfig.CHART_TYPE_HEATMAP,
refresh: function (newOption) {
this.clear();
if (newOption) {
this.option = newOption;
this.series = newOption.series;
}
this._init();
},
_init: function () {
var series = this.series;
this.backupShapeList();
var len = series.length;
for (var i = 0; i < len; ++i) {
if (series[i].type === ecConfig.CHART_TYPE_HEATMAP) {
series[i] = this.reformOption(series[i]);
var layer = new HeatmapLayer(series[i]);
var canvas = layer.getCanvas(series[i].data, this.zr.getWidth(), this.zr.getHeight());
var image = new zrImage({
position: [
0,
0
],
scale: [
1,
1
],
hoverable: this.option.hoverable,
style: {
x: 0,
y: 0,
image: canvas,
width: canvas.width,
height: canvas.height
}
});
this.shapeList.push(image);
}
}
this.addShapeList();
}
};
zrUtil.inherits(Heatmap, ChartBase);
require('../chart').define('heatmap', Heatmap);
return Heatmap;
});
var zrender = require('zrender');
zrender.tool = {
color : require('zrender/tool/color'),
math : require('zrender/tool/math'),
util : require('zrender/tool/util'),
vector : require('zrender/tool/vector'),
area : require('zrender/tool/area'),
event : require('zrender/tool/event')
}
zrender.animation = {
Animation : require('zrender/animation/Animation'),
Cip : require('zrender/animation/Clip'),
easing : require('zrender/animation/easing')
}
var echarts = require('echarts');
echarts.config = require('echarts/config');
echarts.util = {
mapData : {
params : require('echarts/util/mapData/params')
}
}
require("echarts/chart/line");
require("echarts/chart/bar");
require("echarts/chart/scatter");
require("echarts/chart/k");
require("echarts/chart/pie");
require("echarts/chart/radar");
require("echarts/chart/chord");
require("echarts/chart/force");
require("echarts/chart/map");
require("echarts/chart/gauge");
require("echarts/chart/funnel");
require("echarts/chart/eventRiver");
require("echarts/chart/venn");
require("echarts/chart/treemap");
require("echarts/chart/tree");
require("echarts/chart/wordCloud");
require("echarts/chart/heatmap");
_global['echarts'] = echarts;
_global['zrender'] = zrender;
})(window);