maplibre-gl
Version:
BSD licensed community fork of mapbox-gl, a WebGL interactive maps library
69 lines (56 loc) • 2.68 kB
text/typescript
import StyleLayer from '../style_layer';
import FillBucket from '../../data/bucket/fill_bucket';
import {polygonIntersectsMultiPolygon} from '../../util/intersection_tests';
import {translateDistance, translate} from '../query_utils';
import properties, {FillLayoutPropsPossiblyEvaluated, FillPaintPropsPossiblyEvaluated} from './fill_style_layer_properties.g';
import {Transitionable, Transitioning, Layout, PossiblyEvaluated} from '../properties';
import type {FeatureState} from '../../style-spec/expression';
import type {BucketParameters} from '../../data/bucket';
import type Point from '@mapbox/point-geometry';
import type {FillLayoutProps, FillPaintProps} from './fill_style_layer_properties.g';
import type EvaluationParameters from '../evaluation_parameters';
import type Transform from '../../geo/transform';
import type {LayerSpecification} from '../../style-spec/types.g';
import type {VectorTileFeature} from '@mapbox/vector-tile';
class FillStyleLayer extends StyleLayer {
_unevaluatedLayout: Layout<FillLayoutProps>;
layout: PossiblyEvaluated<FillLayoutProps, FillLayoutPropsPossiblyEvaluated>;
_transitionablePaint: Transitionable<FillPaintProps>;
_transitioningPaint: Transitioning<FillPaintProps>;
paint: PossiblyEvaluated<FillPaintProps, FillPaintPropsPossiblyEvaluated>;
constructor(layer: LayerSpecification) {
super(layer, properties);
}
recalculate(parameters: EvaluationParameters, availableImages: Array<string>) {
super.recalculate(parameters, availableImages);
const outlineColor = this.paint._values['fill-outline-color'];
if (outlineColor.value.kind === 'constant' && outlineColor.value.value === undefined) {
this.paint._values['fill-outline-color'] = this.paint._values['fill-color'];
}
}
createBucket(parameters: BucketParameters<any>) {
return new FillBucket(parameters);
}
queryRadius(): number {
return translateDistance(this.paint.get('fill-translate'));
}
queryIntersectsFeature(
queryGeometry: Array<Point>,
feature: VectorTileFeature,
featureState: FeatureState,
geometry: Array<Array<Point>>,
zoom: number,
transform: Transform,
pixelsToTileUnits: number
): boolean {
const translatedPolygon = translate(queryGeometry,
this.paint.get('fill-translate'),
this.paint.get('fill-translate-anchor'),
transform.angle, pixelsToTileUnits);
return polygonIntersectsMultiPolygon(translatedPolygon, geometry);
}
isTileClipped() {
return true;
}
}
export default FillStyleLayer;