@@ -36,7 +36,7 @@ import {
3636 telemetryProperty
3737} from './common' ;
3838import { Layer , LayerFactory } from './layers/layer-factory' ;
39- import { FilterParser } from './filter/filter -parser' ;
39+ import { ExpressionParser } from './expression/expression -parser' ;
4040
4141/**
4242 * "Delegate" for catching mapview events
@@ -1939,7 +1939,7 @@ export class Mapbox extends MapboxCommon implements MapboxApi {
19391939
19401940 const { x, y } = theMap . convertCoordinateToPointToView ( { latitude : options . point . lat , longitude : options . point . lng } , theMap ) ;
19411941 const queryLayerIds = options . layers ? NSSet . setWithArray < string > ( Utils . ios . collections . jsArrayToNSArray ( options . layers ) ) : null ;
1942- const queryFilter = options . filter ? FilterParser . parseJson ( options . filter ) : null ;
1942+ const queryFilter = options . filter ? ExpressionParser . parseJson ( options . filter ) : null ;
19431943 const features = theMap . visibleFeaturesAtPointInStyleLayersWithIdentifiersPredicate ( { x, y } , queryLayerIds , queryFilter ) ;
19441944
19451945 const result = [ ] ;
@@ -1973,7 +1973,7 @@ export class Mapbox extends MapboxCommon implements MapboxApi {
19731973 }
19741974
19751975 let features ;
1976- const queryFilter = options . filter ? FilterParser . parseJson ( options . filter ) : null ;
1976+ const queryFilter = options . filter ? ExpressionParser . parseJson ( options . filter ) : null ;
19771977 if ( source instanceof MGLShapeSource ) {
19781978 features = source . featuresMatchingPredicate ( queryFilter ) ;
19791979 } else if ( source instanceof MGLVectorTileSource ) {
@@ -2778,6 +2778,19 @@ export class Mapbox extends MapboxCommon implements MapboxApi {
27782778 sourceOptions [ MGLShapeSourceOptionClustered ] = true ;
27792779 sourceOptions [ MGLShapeSourceOptionClusterRadius ] = options . cluster . radius || 40 ;
27802780 sourceOptions [ MGLShapeSourceOptionMaximumZoomLevelForClustering ] = options . cluster . maxZoom || 13 ;
2781+
2782+ if ( options . cluster . properties ) {
2783+ const clusterProperties = { } ;
2784+ for ( const property of Object . keys ( options . cluster . properties ) ) {
2785+ let [ operator , operand ] = options . cluster . properties [ property ] ;
2786+ if ( ! Array . isArray ( operator ) ) {
2787+ operator = [ operator ] ;
2788+ }
2789+ const expressions = Utils . ios . collections . jsArrayToNSArray ( [ ExpressionParser . parseJson ( operator ) , ExpressionParser . parseJson ( operand ) ] ) ;
2790+ clusterProperties [ property ] = expressions ;
2791+ }
2792+ sourceOptions [ MGLShapeSourceOptionClusterProperties ] = clusterProperties ;
2793+ }
27812794 }
27822795
27832796 source = MGLShapeSource . alloc ( ) . initWithIdentifierShapeOptions ( id , geoJsonShape , sourceOptions ) ;
@@ -2969,7 +2982,7 @@ export class Mapbox extends MapboxCommon implements MapboxApi {
29692982 }
29702983
29712984 try {
2972- const lineFeatures = lineSource . featuresMatchingPredicate ( FilterParser . parseJson ( [ '==' , '$type' , 'LineString' ] ) ) ;
2985+ const lineFeatures = lineSource . featuresMatchingPredicate ( ExpressionParser . parseJson ( [ '==' , '$type' , 'LineString' ] ) ) ;
29732986
29742987 if ( lineFeatures . count === 0 ) {
29752988 throw new Error ( 'no line string feature found' ) ;
0 commit comments