You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							168 lines
						
					
					
						
							4.9 KiB
						
					
					
				
			
		
		
	
	
							168 lines
						
					
					
						
							4.9 KiB
						
					
					
				
 | 
						|
/* | 
						|
* 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 modelUtil = require("../../util/model"); | 
						|
 | 
						|
var ComponentModel = require("../../model/Component"); | 
						|
 | 
						|
var Model = require("../../model/Model"); | 
						|
 | 
						|
var selectableMixin = require("../../component/helper/selectableMixin"); | 
						|
 | 
						|
var geoCreator = require("./geoCreator"); | 
						|
 | 
						|
/* | 
						|
* 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 GeoModel = ComponentModel.extend({ | 
						|
  type: 'geo', | 
						|
 | 
						|
  /** | 
						|
   * @type {module:echarts/coord/geo/Geo} | 
						|
   */ | 
						|
  coordinateSystem: null, | 
						|
  layoutMode: 'box', | 
						|
  init: function (option) { | 
						|
    ComponentModel.prototype.init.apply(this, arguments); // Default label emphasis `show` | 
						|
 | 
						|
    modelUtil.defaultEmphasis(option, 'label', ['show']); | 
						|
  }, | 
						|
  optionUpdated: function () { | 
						|
    var option = this.option; | 
						|
    var self = this; | 
						|
    option.regions = geoCreator.getFilledRegions(option.regions, option.map, option.nameMap); | 
						|
    this._optionModelMap = zrUtil.reduce(option.regions || [], function (optionModelMap, regionOpt) { | 
						|
      if (regionOpt.name) { | 
						|
        optionModelMap.set(regionOpt.name, new Model(regionOpt, self)); | 
						|
      } | 
						|
 | 
						|
      return optionModelMap; | 
						|
    }, zrUtil.createHashMap()); | 
						|
    this.updateSelectedMap(option.regions); | 
						|
  }, | 
						|
  defaultOption: { | 
						|
    zlevel: 0, | 
						|
    z: 0, | 
						|
    show: true, | 
						|
    left: 'center', | 
						|
    top: 'center', | 
						|
    // width:, | 
						|
    // height:, | 
						|
    // right | 
						|
    // bottom | 
						|
    // Aspect is width / height. Inited to be geoJson bbox aspect | 
						|
    // This parameter is used for scale this aspect | 
						|
    // If svg used, aspectScale is 1 by default. | 
						|
    // aspectScale: 0.75, | 
						|
    aspectScale: null, | 
						|
    ///// 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 | 
						|
    silent: false, | 
						|
    // Map type | 
						|
    map: '', | 
						|
    // Define left-top, right-bottom coords to control view | 
						|
    // For example, [ [180, 90], [-180, -90] ] | 
						|
    boundingCoords: null, | 
						|
    // Default on center of map | 
						|
    center: null, | 
						|
    zoom: 1, | 
						|
    scaleLimit: null, | 
						|
    // selectedMode: false | 
						|
    label: { | 
						|
      show: false, | 
						|
      color: '#000' | 
						|
    }, | 
						|
    itemStyle: { | 
						|
      // color: 各异, | 
						|
      borderWidth: 0.5, | 
						|
      borderColor: '#444', | 
						|
      color: '#eee' | 
						|
    }, | 
						|
    emphasis: { | 
						|
      label: { | 
						|
        show: true, | 
						|
        color: 'rgb(100,0,0)' | 
						|
      }, | 
						|
      itemStyle: { | 
						|
        color: 'rgba(255,215,0,0.8)' | 
						|
      } | 
						|
    }, | 
						|
    regions: [] | 
						|
  }, | 
						|
 | 
						|
  /** | 
						|
   * Get model of region | 
						|
   * @param  {string} name | 
						|
   * @return {module:echarts/model/Model} | 
						|
   */ | 
						|
  getRegionModel: function (name) { | 
						|
    return this._optionModelMap.get(name) || new Model(null, this, this.ecModel); | 
						|
  }, | 
						|
 | 
						|
  /** | 
						|
   * Format label | 
						|
   * @param {string} name Region name | 
						|
   * @param {string} [status='normal'] 'normal' or 'emphasis' | 
						|
   * @return {string} | 
						|
   */ | 
						|
  getFormattedLabel: function (name, status) { | 
						|
    var regionModel = this.getRegionModel(name); | 
						|
    var formatter = regionModel.get('label.' + status + '.formatter'); | 
						|
    var params = { | 
						|
      name: name | 
						|
    }; | 
						|
 | 
						|
    if (typeof formatter === 'function') { | 
						|
      params.status = status; | 
						|
      return formatter(params); | 
						|
    } else if (typeof formatter === 'string') { | 
						|
      return formatter.replace('{a}', name != null ? name : ''); | 
						|
    } | 
						|
  }, | 
						|
  setZoom: function (zoom) { | 
						|
    this.option.zoom = zoom; | 
						|
  }, | 
						|
  setCenter: function (center) { | 
						|
    this.option.center = center; | 
						|
  } | 
						|
}); | 
						|
zrUtil.mixin(GeoModel, selectableMixin); | 
						|
var _default = GeoModel; | 
						|
module.exports = _default; |