mapSymbolLayout.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. var zrUtil = require("zrender/lib/core/util");
  2. function _default(ecModel) {
  3. var processedMapType = {};
  4. ecModel.eachSeriesByType('map', function (mapSeries) {
  5. var mapType = mapSeries.getMapType();
  6. if (mapSeries.getHostGeoModel() || processedMapType[mapType]) {
  7. return;
  8. }
  9. var mapSymbolOffsets = {};
  10. zrUtil.each(mapSeries.seriesGroup, function (subMapSeries) {
  11. var geo = subMapSeries.coordinateSystem;
  12. var data = subMapSeries.originalData;
  13. if (subMapSeries.get('showLegendSymbol') && ecModel.getComponent('legend')) {
  14. data.each('value', function (value, idx) {
  15. var name = data.getName(idx);
  16. var region = geo.getRegion(name); // If input series.data is [11, 22, '-'/null/undefined, 44],
  17. // it will be filled with NaN: [11, 22, NaN, 44] and NaN will
  18. // not be drawn. So here must validate if value is NaN.
  19. if (!region || isNaN(value)) {
  20. return;
  21. }
  22. var offset = mapSymbolOffsets[name] || 0;
  23. var point = geo.dataToPoint(region.center);
  24. mapSymbolOffsets[name] = offset + 1;
  25. data.setItemLayout(idx, {
  26. point: point,
  27. offset: offset
  28. });
  29. });
  30. }
  31. }); // Show label of those region not has legendSymbol(which is offset 0)
  32. var data = mapSeries.getData();
  33. data.each(function (idx) {
  34. var name = data.getName(idx);
  35. var layout = data.getItemLayout(idx) || {};
  36. layout.showLabel = !mapSymbolOffsets[name];
  37. data.setItemLayout(idx, layout);
  38. });
  39. processedMapType[mapType] = true;
  40. });
  41. }
  42. module.exports = _default;