GeoModel.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. var zrUtil = require("zrender/lib/core/util");
  2. var modelUtil = require("../../util/model");
  3. var ComponentModel = require("../../model/Component");
  4. var Model = require("../../model/Model");
  5. var selectableMixin = require("../../component/helper/selectableMixin");
  6. var geoCreator = require("./geoCreator");
  7. var GeoModel = ComponentModel.extend({
  8. type: 'geo',
  9. /**
  10. * @type {module:echarts/coord/geo/Geo}
  11. */
  12. coordinateSystem: null,
  13. layoutMode: 'box',
  14. init: function (option) {
  15. ComponentModel.prototype.init.apply(this, arguments); // Default label emphasis `show`
  16. modelUtil.defaultEmphasis(option.label, ['show']);
  17. },
  18. optionUpdated: function () {
  19. var option = this.option;
  20. var self = this;
  21. option.regions = geoCreator.getFilledRegions(option.regions, option.map, option.nameMap);
  22. this._optionModelMap = zrUtil.reduce(option.regions || [], function (optionModelMap, regionOpt) {
  23. if (regionOpt.name) {
  24. optionModelMap.set(regionOpt.name, new Model(regionOpt, self));
  25. }
  26. return optionModelMap;
  27. }, zrUtil.createHashMap());
  28. this.updateSelectedMap(option.regions);
  29. },
  30. defaultOption: {
  31. zlevel: 0,
  32. z: 0,
  33. show: true,
  34. left: 'center',
  35. top: 'center',
  36. // width:,
  37. // height:,
  38. // right
  39. // bottom
  40. // Aspect is width / height. Inited to be geoJson bbox aspect
  41. // This parameter is used for scale this aspect
  42. aspectScale: 0.75,
  43. ///// Layout with center and size
  44. // If you wan't to put map in a fixed size box with right aspect ratio
  45. // This two properties may more conveninet
  46. // layoutCenter: [50%, 50%]
  47. // layoutSize: 100
  48. silent: false,
  49. // Map type
  50. map: '',
  51. // Define left-top, right-bottom coords to control view
  52. // For example, [ [180, 90], [-180, -90] ]
  53. boundingCoords: null,
  54. // Default on center of map
  55. center: null,
  56. zoom: 1,
  57. scaleLimit: null,
  58. // selectedMode: false
  59. label: {
  60. normal: {
  61. show: false,
  62. color: '#000'
  63. },
  64. emphasis: {
  65. show: true,
  66. color: 'rgb(100,0,0)'
  67. }
  68. },
  69. itemStyle: {
  70. normal: {
  71. // color: 各异,
  72. borderWidth: 0.5,
  73. borderColor: '#444',
  74. color: '#eee'
  75. },
  76. emphasis: {
  77. // 也是选中样式
  78. color: 'rgba(255,215,0,0.8)'
  79. }
  80. },
  81. regions: []
  82. },
  83. /**
  84. * Get model of region
  85. * @param {string} name
  86. * @return {module:echarts/model/Model}
  87. */
  88. getRegionModel: function (name) {
  89. return this._optionModelMap.get(name) || new Model(null, this, this.ecModel);
  90. },
  91. /**
  92. * Format label
  93. * @param {string} name Region name
  94. * @param {string} [status='normal'] 'normal' or 'emphasis'
  95. * @return {string}
  96. */
  97. getFormattedLabel: function (name, status) {
  98. var regionModel = this.getRegionModel(name);
  99. var formatter = regionModel.get('label.' + status + '.formatter');
  100. var params = {
  101. name: name
  102. };
  103. if (typeof formatter === 'function') {
  104. params.status = status;
  105. return formatter(params);
  106. } else if (typeof formatter === 'string') {
  107. return formatter.replace('{a}', name != null ? name : '');
  108. }
  109. },
  110. setZoom: function (zoom) {
  111. this.option.zoom = zoom;
  112. },
  113. setCenter: function (center) {
  114. this.option.center = center;
  115. }
  116. });
  117. zrUtil.mixin(GeoModel, selectableMixin);
  118. var _default = GeoModel;
  119. module.exports = _default;