86 lines
3.5 KiB
Plaintext
86 lines
3.5 KiB
Plaintext
define(function (require) {
|
|
|
|
var zrUtil = require('zrender/core/util');
|
|
var geoProps = [
|
|
'x', 'y', 'x2', 'y2', 'width', 'height', 'map', 'roam', 'center', 'zoom', 'scaleLimit', 'label', 'itemStyle'
|
|
];
|
|
|
|
var geoCoordsMap = {};
|
|
|
|
function createGeoFromMap(mapSeriesOpt) {
|
|
var geoOpt = {};
|
|
zrUtil.each(geoProps, function (propName) {
|
|
if (mapSeriesOpt[propName] != null) {
|
|
geoOpt[propName] = mapSeriesOpt[propName];
|
|
}
|
|
});
|
|
return geoOpt;
|
|
}
|
|
return function (option) {
|
|
// Save geoCoord
|
|
var mapSeries = [];
|
|
zrUtil.each(option.series, function (seriesOpt) {
|
|
if (seriesOpt.type === 'map') {
|
|
mapSeries.push(seriesOpt);
|
|
}
|
|
zrUtil.extend(geoCoordsMap, seriesOpt.geoCoord);
|
|
});
|
|
|
|
var newCreatedGeoOptMap = {};
|
|
zrUtil.each(mapSeries, function (seriesOpt) {
|
|
seriesOpt.map = seriesOpt.map || seriesOpt.mapType;
|
|
// Put x, y, width, height, x2, y2 in the top level
|
|
zrUtil.defaults(seriesOpt, seriesOpt.mapLocation);
|
|
if (seriesOpt.markPoint) {
|
|
var markPoint = seriesOpt.markPoint;
|
|
// Convert name or geoCoord in markPoint to lng and lat
|
|
// For example
|
|
// { name: 'xxx', value: 10} Or
|
|
// { geoCoord: [lng, lat], value: 10} to
|
|
// { name: 'xxx', value: [lng, lat, 10]}
|
|
markPoint.data = zrUtil.map(markPoint.data, function (dataOpt) {
|
|
if (!zrUtil.isArray(dataOpt.value)) {
|
|
var geoCoord;
|
|
if (dataOpt.geoCoord) {
|
|
geoCoord = dataOpt.geoCoord;
|
|
}
|
|
else if (dataOpt.name) {
|
|
geoCoord = geoCoordsMap[dataOpt.name];
|
|
}
|
|
var newValue = geoCoord ? [geoCoord[0], geoCoord[1]] : [NaN, NaN];
|
|
if (dataOpt.value != null) {
|
|
newValue.push(dataOpt.value);
|
|
}
|
|
dataOpt.value = newValue;
|
|
}
|
|
return dataOpt;
|
|
});
|
|
// Convert map series which only has markPoint without data to scatter series
|
|
// FIXME
|
|
if (!(seriesOpt.data && seriesOpt.data.length)) {
|
|
if (!option.geo) {
|
|
option.geo = [];
|
|
}
|
|
else if (!zrUtil.isArray(option.geo)) {
|
|
option.geo = [option.geo];
|
|
}
|
|
|
|
// Use same geo if multiple map series has same map type
|
|
var geoOpt = newCreatedGeoOptMap[seriesOpt.map];
|
|
if (!geoOpt) {
|
|
geoOpt = newCreatedGeoOptMap[seriesOpt.map] = createGeoFromMap(seriesOpt);
|
|
option.geo.push(geoOpt);
|
|
}
|
|
|
|
var scatterSeries = seriesOpt.markPoint;
|
|
scatterSeries.type = option.effect && option.effect.show ? 'effectScatter' : 'scatter';
|
|
scatterSeries.coordinateSystem = 'geo';
|
|
scatterSeries.geoIndex = zrUtil.indexOf(option.geo, geoOpt);
|
|
scatterSeries.name = seriesOpt.name;
|
|
|
|
option.series.splice(zrUtil.indexOf(option.series, seriesOpt), 1, scatterSeries);
|
|
}
|
|
}
|
|
});
|
|
};
|
|
}); |