in src/layers/icon-layer/icon-layer.js [253:335]
renderLayer(opts) {
const {data, gpuFilter, objectHovered, mapState, interactionConfig} = opts;
const radiusScale = this.getRadiusScaleByZoom(mapState);
const layerProps = {
radiusScale,
...(this.config.visConfig.fixedRadius ? {} : {radiusMaxPixels: 500})
};
const updateTriggers = {
getFilterValue: gpuFilter.filterValueUpdateTriggers,
getRadius: {
sizeField: this.config.colorField,
radiusRange: this.config.visConfig.radiusRange,
sizeScale: this.config.sizeScale
},
getFillColor: {
color: this.config.color,
colorField: this.config.colorField,
colorRange: this.config.visConfig.colorRange,
colorScale: this.config.colorScale
}
};
const defaultLayerProps = this.getDefaultDeckLayerProps(opts);
const brushingProps = this.getBrushingExtensionProps(interactionConfig);
const getPixelOffset = getTextOffsetByRadius(radiusScale, data.getRadius, mapState);
const extensions = [...defaultLayerProps.extensions, brushingExtension];
// shared Props between layer and label layer
const sharedProps = {
getFilterValue: data.getFilterValue,
extensions,
filterRange: defaultLayerProps.filterRange,
...brushingProps
};
const labelLayers = [
...this.renderTextLabelLayer(
{
getPosition: data.getPosition,
sharedProps,
getPixelOffset,
updateTriggers
},
opts
)
];
return !this.iconGeometry
? []
: [
new SvgIconLayer({
...defaultLayerProps,
...brushingProps,
...layerProps,
...data,
getIconGeometry: id => this.iconGeometry[id],
// update triggers
updateTriggers,
extensions
}),
...(this.isLayerHovered(objectHovered)
? [
new SvgIconLayer({
...this.getDefaultHoverLayerProps(),
...layerProps,
data: [objectHovered.object],
getPosition: data.getPosition,
getRadius: data.getRadius,
getFillColor: this.config.highlightColor,
getIconGeometry: id => this.iconGeometry[id]
})
]
: []),
// text label layer
...labelLayers
];
}