| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266 | 
/** Licensed to the Apache Software Foundation (ASF) under one* or more contributor license agreements.  See the NOTICE file* distributed with this work for additional information* regarding copyright ownership.  The ASF licenses this file* to you under the Apache License, Version 2.0 (the* "License"); you may not use this file except in compliance* with the License.  You may obtain a copy of the License at**   http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing,* software distributed under the License is distributed on an* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY* KIND, either express or implied.  See the License for the* specific language governing permissions and limitations* under the License.*/var zrUtil = require("zrender/lib/core/util");var createListSimply = require("../helper/createListSimply");var SeriesModel = require("../../model/Series");var _format = require("../../util/format");var encodeHTML = _format.encodeHTML;var addCommas = _format.addCommas;var dataSelectableMixin = require("../../component/helper/selectableMixin");var _dataProvider = require("../../data/helper/dataProvider");var retrieveRawAttr = _dataProvider.retrieveRawAttr;var geoSourceManager = require("../../coord/geo/geoSourceManager");var _sourceHelper = require("../../data/helper/sourceHelper");var makeSeriesEncodeForNameBased = _sourceHelper.makeSeriesEncodeForNameBased;/** Licensed to the Apache Software Foundation (ASF) under one* or more contributor license agreements.  See the NOTICE file* distributed with this work for additional information* regarding copyright ownership.  The ASF licenses this file* to you under the Apache License, Version 2.0 (the* "License"); you may not use this file except in compliance* with the License.  You may obtain a copy of the License at**   http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing,* software distributed under the License is distributed on an* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY* KIND, either express or implied.  See the License for the* specific language governing permissions and limitations* under the License.*/var MapSeries = SeriesModel.extend({  type: 'series.map',  dependencies: ['geo'],  layoutMode: 'box',  /**   * Only first map series of same mapType will drawMap   * @type {boolean}   */  needsDrawMap: false,  /**   * Group of all map series with same mapType   * @type {boolean}   */  seriesGroup: [],  getInitialData: function (option) {    var data = createListSimply(this, {      coordDimensions: ['value'],      encodeDefaulter: zrUtil.curry(makeSeriesEncodeForNameBased, this)    });    var valueDim = data.mapDimension('value');    var dataNameMap = zrUtil.createHashMap();    var selectTargetList = [];    var toAppendNames = [];    for (var i = 0, len = data.count(); i < len; i++) {      var name = data.getName(i);      dataNameMap.set(name, true);      selectTargetList.push({        name: name,        value: data.get(valueDim, i),        selected: retrieveRawAttr(data, i, 'selected')      });    }    var geoSource = geoSourceManager.load(this.getMapType(), this.option.nameMap, this.option.nameProperty);    zrUtil.each(geoSource.regions, function (region) {      var name = region.name;      if (!dataNameMap.get(name)) {        selectTargetList.push({          name: name        });        toAppendNames.push(name);      }    });    this.updateSelectedMap(selectTargetList); // Complete data with missing regions. The consequent processes (like visual    // map and render) can not be performed without a "full data". For example,    // find `dataIndex` by name.    data.appendValues([], toAppendNames);    return data;  },  /**   * If no host geo model, return null, which means using a   * inner exclusive geo model.   */  getHostGeoModel: function () {    var geoIndex = this.option.geoIndex;    return geoIndex != null ? this.dependentModels.geo[geoIndex] : null;  },  getMapType: function () {    return (this.getHostGeoModel() || this).option.map;  },  // _fillOption: function (option, mapName) {  // Shallow clone  // option = zrUtil.extend({}, option);  // option.data = geoCreator.getFilledRegions(option.data, mapName, option.nameMap);  // return option;  // },  getRawValue: function (dataIndex) {    // Use value stored in data instead because it is calculated from multiple series    // FIXME Provide all value of multiple series ?    var data = this.getData();    return data.get(data.mapDimension('value'), dataIndex);  },  /**   * Get model of region   * @param  {string} name   * @return {module:echarts/model/Model}   */  getRegionModel: function (regionName) {    var data = this.getData();    return data.getItemModel(data.indexOfName(regionName));  },  /**   * Map tooltip formatter   *   * @param {number} dataIndex   */  formatTooltip: function (dataIndex, multipleSeries, dataType, renderMode) {    // FIXME orignalData and data is a bit confusing    var data = this.getData();    var formattedValue = addCommas(this.getRawValue(dataIndex));    var name = data.getName(dataIndex);    var seriesGroup = this.seriesGroup;    var seriesNames = [];    for (var i = 0; i < seriesGroup.length; i++) {      var otherIndex = seriesGroup[i].originalData.indexOfName(name);      var valueDim = data.mapDimension('value');      if (!isNaN(seriesGroup[i].originalData.get(valueDim, otherIndex))) {        seriesNames.push(encodeHTML(seriesGroup[i].name));      }    }    var newLine = renderMode === 'html' ? '<br/>' : '\n';    return seriesNames.join(', ') + newLine + encodeHTML(name + ' : ' + formattedValue);  },  /**   * @implement   */  getTooltipPosition: function (dataIndex) {    if (dataIndex != null) {      var name = this.getData().getName(dataIndex);      var geo = this.coordinateSystem;      var region = geo.getRegion(name);      return region && geo.dataToPoint(region.center);    }  },  setZoom: function (zoom) {    this.option.zoom = zoom;  },  setCenter: function (center) {    this.option.center = center;  },  defaultOption: {    // 一级层叠    zlevel: 0,    // 二级层叠    z: 2,    coordinateSystem: 'geo',    // map should be explicitly specified since ec3.    map: '',    // If `geoIndex` is not specified, a exclusive geo will be    // created. Otherwise use the specified geo component, and    // `map` and `mapType` are ignored.    // geoIndex: 0,    // 'center' | 'left' | 'right' | 'x%' | {number}    left: 'center',    // 'center' | 'top' | 'bottom' | 'x%' | {number}    top: 'center',    // right    // bottom    // width:    // height    // Aspect is width / height. Inited to be geoJson bbox aspect    // This parameter is used for scale this aspect    aspectScale: 0.75,    ///// Layout with center and size    // If you wan't to put map in a fixed size box with right aspect ratio    // This two properties may more conveninet    // layoutCenter: [50%, 50%]    // layoutSize: 100    // 数值合并方式,默认加和,可选为:    // 'sum' | 'average' | 'max' | 'min'    // mapValueCalculation: 'sum',    // 地图数值计算结果小数精度    // mapValuePrecision: 0,    // 显示图例颜色标识(系列标识的小圆点),图例开启时有效    showLegendSymbol: true,    // 选择模式,默认关闭,可选single,multiple    // selectedMode: false,    dataRangeHoverLink: true,    // 是否开启缩放及漫游模式    // roam: false,    // Define left-top, right-bottom coords to control view    // For example, [ [180, 90], [-180, -90] ],    // higher priority than center and zoom    boundingCoords: null,    // Default on center of map    center: null,    zoom: 1,    scaleLimit: null,    label: {      show: false,      color: '#000'    },    // scaleLimit: null,    itemStyle: {      borderWidth: 0.5,      borderColor: '#444',      areaColor: '#eee'    },    emphasis: {      label: {        show: true,        color: 'rgb(100,0,0)'      },      itemStyle: {        areaColor: 'rgba(255,215,0,0.8)'      }    },    nameProperty: 'name'  }});zrUtil.mixin(MapSeries, dataSelectableMixin);var _default = MapSeries;module.exports = _default;
 |