---
title: "FeatureIndex | JavaScript maps SDK"
description: "Documentation for MapTiler SDK"
---

> For AI agents: a documentation index is available at [/llms.txt](https://docs.maptiler.com/llms.txt). Markdown versions of all pages are available by appending .md to any URL.

# Class FeatureIndex

An in memory index class to allow fast interaction with features

##### Index

### Constructors[](#constructors)

[constructor](#constructor)

### Properties[](#properties)

[bucketLayerIDs](#bucketlayerids) [encoding](#encoding) [featureIndexArray](#featureindexarray) [grid](#grid) [grid3D](#grid3d) [promoteId?](#promoteid) [rawTileData](#rawtiledata) [sourceLayerCoder](#sourcelayercoder) [tileID](#tileid) [vtLayers](#vtlayers) [x](#x) [y](#y) [z](#z)

### Methods[](#methods)

[getId](#getid) [hasLayer](#haslayer) [insert](#insert) [loadMatchingFeature](#loadmatchingfeature) [loadVTLayers](#loadvtlayers) [lookupSymbolFeatures](#lookupsymbolfeatures) [query](#query)

## Constructors[](#constructors-1)

### constructor[](#constructor)

-   new FeatureIndex(  
        tileID: [OverscaledTileID](https://docs.maptiler.com/sdk-js/api-reference/classes/OverscaledTileID/),  
        promoteId?: [PromoteIdSpecification](https://docs.maptiler.com/sdk-js/api-reference/types/PromoteIdSpecification/) | null,  
    ): FeatureIndex[](#constructorfeatureindex)
    
    #### Parameters
    
    -   tileID: [OverscaledTileID](https://docs.maptiler.com/sdk-js/api-reference/classes/OverscaledTileID/)
    -   `Optional`promoteId: [PromoteIdSpecification](https://docs.maptiler.com/sdk-js/api-reference/types/PromoteIdSpecification/) | null
    
    #### Returns FeatureIndex
    

## Properties[](#properties-1)

### bucketLayerIDs[](#bucketlayerids)

bucketLayerIDs: string\[\]\[\]

### encoding[](#encoding)

encoding: string

### featureIndexArray[](#featureindexarray)

featureIndexArray: [FeatureIndexArray](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.FeatureIndexArray/)

### grid[](#grid)

grid: [TransferableGridIndex](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.TransferableGridIndex/)

### grid3D[](#grid3d)

grid3D: [TransferableGridIndex](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.TransferableGridIndex/)

### `Optional`promoteId[](#promoteid)

promoteId?: [PromoteIdSpecification](https://docs.maptiler.com/sdk-js/api-reference/types/PromoteIdSpecification/)

### rawTileData[](#rawtiledata)

rawTileData: ArrayBuffer

### sourceLayerCoder[](#sourcelayercoder)

sourceLayerCoder: [DictionaryCoder](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.DictionaryCoder/)

### tileID[](#tileid)

tileID: [OverscaledTileID](https://docs.maptiler.com/sdk-js/api-reference/classes/OverscaledTileID/)

### vtLayers[](#vtlayers)

vtLayers: { \[\_: string\]: [VectorTileLayerLike](https://docs.maptiler.com/sdk-js/api-reference/interfaces/Externals.VectorTileLayerLike/) }

### x[](#x)

x: number

### y[](#y)

y: number

### z[](#z)

z: number

## Methods[](#methods-1)

### getId[](#getid)

-   getId(feature: [VectorTileFeatureLike](https://docs.maptiler.com/sdk-js/api-reference/interfaces/Externals.VectorTileFeatureLike/), sourceLayerId: string): string | number[](#getid-1)
    
    #### Parameters
    
    -   feature: [VectorTileFeatureLike](https://docs.maptiler.com/sdk-js/api-reference/interfaces/Externals.VectorTileFeatureLike/)
    -   sourceLayerId: string
    
    #### Returns string | number
    

### hasLayer[](#haslayer)

-   hasLayer(id: string): boolean[](#haslayer-1)
    
    #### Parameters
    
    -   id: string
    
    #### Returns boolean
    

### insert[](#insert)

-   insert(  
        feature: [VectorTileFeatureLike](https://docs.maptiler.com/sdk-js/api-reference/interfaces/Externals.VectorTileFeatureLike/),  
        geometry: [Point](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.Point/)\[\]\[\],  
        featureIndex: number,  
        sourceLayerIndex: number,  
        bucketIndex: number,  
        is3D?: boolean,  
    ): void[](#insert-1)
    
    #### Parameters
    
    -   feature: [VectorTileFeatureLike](https://docs.maptiler.com/sdk-js/api-reference/interfaces/Externals.VectorTileFeatureLike/)
    -   geometry: [Point](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.Point/)\[\]\[\]
    -   featureIndex: number
    -   sourceLayerIndex: number
    -   bucketIndex: number
    -   `Optional`is3D: boolean
    
    #### Returns void
    

### loadMatchingFeature[](#loadmatchingfeature)

-   loadMatchingFeature(  
        result: [QueryResults](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.QueryResults/),  
        bucketIndex: number,  
        sourceLayerIndex: number,  
        featureIndex: number,  
        filter: [FeatureFilter](https://docs.maptiler.com/sdk-js/api-reference/types/FeatureFilter/),  
        filterLayerIDs: Set<string\> | undefined,  
        availableImages: string\[\],  
        styleLayers: { \[\_: string\]: [StyleLayer](https://docs.maptiler.com/sdk-js/api-reference/classes/StyleLayer/) },  
        serializedLayers: { \[\_: string\]: any },  
        sourceFeatureState?: [SourceFeatureState](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.SourceFeatureState/),  
        intersectionTest?: (  
            feature: [VectorTileFeatureLike](https://docs.maptiler.com/sdk-js/api-reference/interfaces/Externals.VectorTileFeatureLike/),  
            styleLayer: [StyleLayer](https://docs.maptiler.com/sdk-js/api-reference/classes/StyleLayer/),  
            featureState: any,  
            id: string | number | void,  
        ) \=> number | boolean,  
    ): void[](#loadmatchingfeature-1)
    
    #### Parameters
    
    -   result: [QueryResults](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.QueryResults/)
    -   bucketIndex: number
    -   sourceLayerIndex: number
    -   featureIndex: number
    -   filter: [FeatureFilter](https://docs.maptiler.com/sdk-js/api-reference/types/FeatureFilter/)
    -   filterLayerIDs: Set<string\> | undefined
    -   availableImages: string\[\]
    -   styleLayers: { \[\_: string\]: [StyleLayer](https://docs.maptiler.com/sdk-js/api-reference/classes/StyleLayer/) }
    -   serializedLayers: { \[\_: string\]: any }
    -   `Optional`sourceFeatureState: [SourceFeatureState](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.SourceFeatureState/)
    -   `Optional`intersectionTest: (  
            feature: [VectorTileFeatureLike](https://docs.maptiler.com/sdk-js/api-reference/interfaces/Externals.VectorTileFeatureLike/),  
            styleLayer: [StyleLayer](https://docs.maptiler.com/sdk-js/api-reference/classes/StyleLayer/),  
            featureState: any,  
            id: string | number | void,  
        ) \=> number | boolean
    
    #### Returns void
    

### loadVTLayers[](#loadvtlayers)

-   loadVTLayers(): { \[\_: string\]: [VectorTileLayerLike](https://docs.maptiler.com/sdk-js/api-reference/interfaces/Externals.VectorTileLayerLike/) }[](#loadvtlayers-1)
    
    #### Returns { \[\_: string\]: [VectorTileLayerLike](https://docs.maptiler.com/sdk-js/api-reference/interfaces/Externals.VectorTileLayerLike/) }
    

### lookupSymbolFeatures[](#lookupsymbolfeatures)

-   lookupSymbolFeatures(  
        symbolFeatureIndexes: number\[\],  
        serializedLayers: { \[\_: string\]: [StyleLayer](https://docs.maptiler.com/sdk-js/api-reference/classes/StyleLayer/) },  
        bucketIndex: number,  
        sourceLayerIndex: number,  
        filterParams: {  
            filterSpec: [FilterSpecification](https://docs.maptiler.com/sdk-js/api-reference/types/FilterSpecification/);  
            globalState: [Record](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.Record/)<string, any\>;  
        },  
        filterLayerIDs: Set<string\> | null,  
        availableImages: string\[\],  
        styleLayers: { \[\_: string\]: [StyleLayer](https://docs.maptiler.com/sdk-js/api-reference/classes/StyleLayer/) },  
    ): [QueryResults](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.QueryResults/)[](#lookupsymbolfeatures-1)
    
    #### Parameters
    
    -   symbolFeatureIndexes: number\[\]
    -   serializedLayers: { \[\_: string\]: [StyleLayer](https://docs.maptiler.com/sdk-js/api-reference/classes/StyleLayer/) }
    -   bucketIndex: number
    -   sourceLayerIndex: number
    -   filterParams: { filterSpec: [FilterSpecification](https://docs.maptiler.com/sdk-js/api-reference/types/FilterSpecification/); globalState: [Record](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.Record/)<string, any\> }
    -   filterLayerIDs: Set<string\> | null
    -   availableImages: string\[\]
    -   styleLayers: { \[\_: string\]: [StyleLayer](https://docs.maptiler.com/sdk-js/api-reference/classes/StyleLayer/) }
    
    #### Returns [QueryResults](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.QueryResults/)
    

### query[](#query)

-   query(  
        args: [QueryParameters](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.QueryParameters/),  
        styleLayers: { \[\_: string\]: [StyleLayer](https://docs.maptiler.com/sdk-js/api-reference/classes/StyleLayer/) },  
        serializedLayers: { \[\_: string\]: any },  
        sourceFeatureState: [SourceFeatureState](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.SourceFeatureState/),  
    ): [QueryResults](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.QueryResults/)[](#query-1)
    
    #### Parameters
    
    -   args: [QueryParameters](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.QueryParameters/)
    -   styleLayers: { \[\_: string\]: [StyleLayer](https://docs.maptiler.com/sdk-js/api-reference/classes/StyleLayer/) }
    -   serializedLayers: { \[\_: string\]: any }
    -   sourceFeatureState: [SourceFeatureState](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.SourceFeatureState/)
    
    #### Returns [QueryResults](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.QueryResults/)
