You can use map styling to hide features on the map. Select an option in this
example to hide or show business points of interest (POIs) and public transit
icons on the map.

> [!NOTE]
> **Note:** A map's styles property can only be set on a raster map.

Read the [documentation](https://developers.google.com/maps/documentation/javascript/styling).
<iframe src="https://maps-docs-team.web.app/samples/hiding-features/dist/" allow="fullscreen; "></iframe>

### TypeScript

```typescript
async function init() {
    // Request needed libraries.
    await google.maps.importLibrary('maps');

    // Get the gmp-map element.
    const mapElement = document.querySelector('gmp-map')!;

    // Get the inner map.
    const innerMap = mapElement.innerMap;

    innerMap.setOptions({
        mapTypeControl: false,
        // A map's styles property can only be set on a raster map.
        renderingType: 'RASTER',
    });

    // Apply new JSON when the user chooses to hide/show features.
    document.getElementById('hide-poi')!.addEventListener('click', () => {
        innerMap.setOptions({ styles: styles.hide });
    });
    document.getElementById('show-poi')!.addEventListener('click', () => {
        innerMap.setOptions({ styles: styles.default });
    });
}

const styles: Record<string, google.maps.MapTypeStyle[]> = {
    default: [],
    hide: [
        {
            featureType: 'poi.business',
            stylers: [{ visibility: 'off' }],
        },
        {
            featureType: 'transit',
            elementType: 'labels.icon',
            stylers: [{ visibility: 'off' }],
        },
    ],
};

void init();
```

### JavaScript

```javascript
async function init() {
    // Request needed libraries.
    await google.maps.importLibrary('maps');

    // Get the gmp-map element.
    const mapElement = document.querySelector('gmp-map');

    // Get the inner map.
    const innerMap = mapElement.innerMap;

    innerMap.setOptions({
        mapTypeControl: false,
        // A map's styles property can only be set on a raster map.
        renderingType: 'RASTER',
    });

    // Apply new JSON when the user chooses to hide/show features.
    document.getElementById('hide-poi').addEventListener('click', () => {
        innerMap.setOptions({ styles: styles.hide });
    });
    document.getElementById('show-poi').addEventListener('click', () => {
        innerMap.setOptions({ styles: styles.default });
    });
}

const styles = {
    default: [],
    hide: [
        {
            featureType: 'poi.business',
            stylers: [{ visibility: 'off' }],
        },
        {
            featureType: 'transit',
            elementType: 'labels.icon',
            stylers: [{ visibility: 'off' }],
        },
    ],
};

void init();
```

### CSS

```css
/* 
 * Optional: Makes the sample page fill the window. 
 */
html,
body {
    height: 100%;
    margin: 0;
    padding: 0;
}

.map-control {
    background-color: #fff;
    border-radius: 5px;
    box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;
    margin: 10px;
    padding: 5px;
    font-family: Roboto, sans-serif;
    font-size: small;
    display: block;
}

.selector-control {
    font-size: 14px;
    line-height: 30px;
    vertical-align: baseline;
}
```

### HTML

```html
<html>
    <head>
        <title>Hiding Map Features With Styling</title>

        <link rel="stylesheet" type="text/css" href="./style.css" />
        <script type="module" src="./index.js"></script>
        <script>
            // prettier-ignore
            (g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
                key: "GOOGLE_MAPS_API_KEY"
            });
        </script>
    </head>
    <body>
        <gmp-map center="-33.86,151.209" zoom="13">
            <div
                id="style-selector-control"
                class="map-control"
                slot="control-block-start-inline-start">
                <input
                    type="radio"
                    name="show-hide"
                    id="hide-poi"
                    class="selector-control" />
                <label for="hide-poi">Hide</label>
                <input
                    type="radio"
                    name="show-hide"
                    id="show-poi"
                    class="selector-control"
                    checked="checked" />
                <label for="show-poi">Show</label>
            </div>
        </gmp-map>
    </body>
</html>
```

### Try Sample

[JSFiddle.net](https://jsfiddle.net/gh/get/library/pure/googlemaps-samples/js-api-samples/tree/main/dist/samples/hiding-features/jsfiddle)

### Clone Sample


Git and Node.js are required to run this sample locally. Follow these [instructions](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)
to install Node.js and NPM. You will also need a [Google Maps API key](https://developers.google.com/maps/documentation/javascript/get-api-key.md.txt).


The following commands clone the repository, install dependencies, and copy the environment file.

```javascript
  git clone https://github.com/googlemaps-samples/js-api-samples.git
  cd js-api-samples
  npm i
  cp .env.template .env
```


Once you copy the environment file, make sure to open the `.env` file and replace `<Insert your own development API key here>` with your actual API key before starting the sample.

```javascript
  cd samples/hiding-features
  npm start
```