# Polygon With Hole

This example creates a polygon with an inner hole, by defining an inner path wound in the opposite direction to the outer path. Note that you can also use the Data layer, which offers a simpler way of creating holes because it handles the order of the inner and outer paths for you.

### TypeScript

```// This example creates a triangular polygon with a hole in it.

function initMap(): void {
document.getElementById("map") as HTMLElement,
{
zoom: 5,
center: { lat: 24.886, lng: -70.268 },
}
);

// Define the LatLng coordinates for the polygon's  outer path.
const outerCoords = [
{ lat: 25.774, lng: -80.19 },
{ lat: 18.466, lng: -66.118 },
{ lat: 32.321, lng: -64.757 },
];

// Define the LatLng coordinates for the polygon's inner path.
// Note that the points forming the inner path are wound in the
// opposite direction to those in the outer path, to form the hole.
const innerCoords = [
{ lat: 28.745, lng: -70.579 },
{ lat: 29.57, lng: -67.514 },
{ lat: 27.339, lng: -66.668 },
];

// Construct the polygon, including both paths.
paths: [outerCoords, innerCoords],
strokeColor: "#FFC107",
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: "#FFC107",
fillOpacity: 0.35,
});

bermudaTriangle.setMap(map);
}

declare global {
interface Window {
initMap: () => void;
}
}
window.initMap = initMap;index.ts```

### JavaScript

```// This example creates a triangular polygon with a hole in it.
function initMap() {
const map = new google.maps.Map(document.getElementById("map"), {
zoom: 5,
center: { lat: 24.886, lng: -70.268 },
});
// Define the LatLng coordinates for the polygon's  outer path.
const outerCoords = [
{ lat: 25.774, lng: -80.19 },
{ lat: 18.466, lng: -66.118 },
{ lat: 32.321, lng: -64.757 },
];
// Define the LatLng coordinates for the polygon's inner path.
// Note that the points forming the inner path are wound in the
// opposite direction to those in the outer path, to form the hole.
const innerCoords = [
{ lat: 28.745, lng: -70.579 },
{ lat: 29.57, lng: -67.514 },
{ lat: 27.339, lng: -66.668 },
];
// Construct the polygon, including both paths.
paths: [outerCoords, innerCoords],
strokeColor: "#FFC107",
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: "#FFC107",
fillOpacity: 0.35,
});

bermudaTriangle.setMap(map);
}

window.initMap = initMap;index.js```

### CSS

```/*
* Always set the map height explicitly to define the size of the div element
* that contains the map.
*/
#map {
height: 100%;
}

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

### HTML

```<html>
<title>Polygon With Hole</title>
<script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>

<script type="module" src="./index.js"></script>
<body>
<div id="map"></div>

<!--
The `defer` attribute causes the script to execute after the full HTML
document has been parsed. For non-blocking uses, avoiding race conditions,
-->
<script
defer
></script>
</body>
</html>index.html```

### Clone Sample

Git and Node.js are required to run this sample locally. Follow these instructions to install Node.js and NPM. The following commands clone, install dependencies and start the sample application.

```  `git clone -b sample-polygon-hole https://github.com/googlemaps/js-samples.git`
`cd js-samples`
`npm i`
`npm start`
```

Other samples can be tried by switching to any branch beginning with `sample-SAMPLE_NAME`.

```  `git checkout sample-SAMPLE_NAME`
`npm i`
`npm start`
```
[]
[]