(seriesType: string)
| 73 | }; |
| 74 | |
| 75 | export default function dataSample(seriesType: string): StageHandler { |
| 76 | return { |
| 77 | |
| 78 | seriesType: seriesType, |
| 79 | |
| 80 | // FIXME:TS never used, so comment it |
| 81 | // modifyOutputEnd: true, |
| 82 | |
| 83 | reset: function (seriesModel: SeriesModel<SeriesOption & SeriesSamplingOptionMixin>, ecModel, api) { |
| 84 | const data = seriesModel.getData(); |
| 85 | const sampling = seriesModel.get('sampling'); |
| 86 | const coordSys = seriesModel.coordinateSystem; |
| 87 | const count = data.count(); |
| 88 | // Only cartesian2d support down sampling. Disable it when there is few data. |
| 89 | if (count > 10 && coordSys.type === 'cartesian2d' && sampling) { |
| 90 | const baseAxis = coordSys.getBaseAxis(); |
| 91 | const valueAxis = coordSys.getOtherAxis(baseAxis); |
| 92 | const extent = baseAxis.getExtent(); |
| 93 | const dpr = api.getDevicePixelRatio(); |
| 94 | // Coordinste system has been resized |
| 95 | const size = Math.abs(extent[1] - extent[0]) * (dpr || 1); |
| 96 | const rate = Math.round(count / size); |
| 97 | |
| 98 | if (isFinite(rate) && rate > 1) { |
| 99 | if (sampling === 'lttb') { |
| 100 | seriesModel.setData(data.lttbDownSample(data.mapDimension(valueAxis.dim), 1 / rate)); |
| 101 | } |
| 102 | else if (sampling === 'minmax') { |
| 103 | seriesModel.setData(data.minmaxDownSample(data.mapDimension(valueAxis.dim), 1 / rate)); |
| 104 | } |
| 105 | let sampler; |
| 106 | if (isString(sampling)) { |
| 107 | sampler = samplers[sampling]; |
| 108 | } |
| 109 | else if (isFunction(sampling)) { |
| 110 | sampler = sampling; |
| 111 | } |
| 112 | if (sampler) { |
| 113 | // Only support sample the first dim mapped from value axis. |
| 114 | seriesModel.setData(data.downSample( |
| 115 | data.mapDimension(valueAxis.dim), 1 / rate, sampler, indexSampler |
| 116 | )); |
| 117 | } |
| 118 | } |
| 119 | } |
| 120 | } |
| 121 | }; |
| 122 | } |
no test coverage detected
searching dependent graphs…