heatmap-layer
Description
This components helps you to set a heat zone over the map.
For more information read the Google Maps documentation for heatmaplayer
It is exported with the name GmapHeatmapLayer.
Variables
This component save the original heat map layer object provided by Google Maps in a property
called $heatmapLayerObject, as the example below.
  this.$heatmapLayerObject = new google.maps.visualization.HeatmapLayer(...);
Source code
Click to se the source code of 
heatmap-layer.vue component<script>
import MapElementMixin from '../mixins/map-element';
import { heatMapLayerMappedProps } from '../utils/mapped-props-by-map-element';
import { bindProps, getPropsValues, bindEvents } from '../utils/helpers';
export default {
  mixins: [MapElementMixin],
  props: {
    options: {
      type: Object,
      default: () => {},
    },
    data: {
      type: Array,
    },
  },
  provide() {
    const events = [];
    // Infowindow needs this to be immediately available
    const promise = await this.$mapPromise
      .then((map) => {
        this.$map = map;
        // Initialize the maps with the given options
        const initialOptions = {
          ...this.options,
          map: this.$map,
          ...getPropsValues(this, heatMapLayerMappedProps),
        };
        const { options: extraOptions, ...finalOptions } = initialOptions;
        this.$heatmapLayerObject = new google.maps.visualization.HeatmapLayer(
          finalOptions
        );
        bindProps(this, this.$heatmapLayerObject, heatMapLayerMappedProps);
        bindEvents(this, this.$heatmapLayerObject, events);
        return this.$heatmapLayerObject;
      })
      .catch((error) => {
        throw error;
      });
    this.$heatmapLayerPromise = promise;
    return { $heatmapLayerPromise: promise };
  },
  destroyed() {
    // Note: not all Google Maps components support maps
    if (this.$heatmapLayerObject && this.$heatmapLayerObject.setMap) {
      this.$heatmapLayerObject.setMap(null);
    }
  },
};
</script>
If you need to know what are mappedProps please read the general concepts of this
application here.
Mapped Props of 
GmapHeatmapLayer component
export const heatMapLayerMappedProps = {
  options: {
    type: Object,
    twoWay: false,
    default: () => {},
  },
  data: {
    type: Array,
    twoWay: true,
  },
};
How to use it
<template>
  <gmap-map
    ref="mapRef"
    :zoom="7"
    :center="center"
    map-type-id="roadmap"
    style="width: 100%; height: 500px;"
  >
    <gmap-heatmap-layer
      :data="[new google.maps.LatLng(37.782, -122.447)]"
      :options="{maxIntensity: 120, dissipating: false}"
    />
  </gmap-map>
</template>
You also can use a computed property like below
<template>
  <gmap-map
    ref="mapRef"
    :zoom="7"
    :center="center"
    map-type-id="roadmap"
    style="width: 100%; height: 500px;"
  >
    <gmap-marker
      v-for="(m, index) in markers"
      :key="index"
      :position="m.location"
      :clickable="true"
      :draggable="true"
      @click="center=m.location"
    />
    <gmap-heatmap-layer
      :data="markers"
      :options="{maxIntensity: 120, dissipating: false}"
    />
  </gmap-map>
</template>
<script>
  import { gmapApi } from 'gmap-vue';
  export default {
    computed: {
      google: gmapApi,
      markers() {
        if (this.google) {
          return [
            { location: new google.maps.LatLng({ lat: 3, lng: 101 }), weight: 100 },
            { location: new google.maps.LatLng({ lat: 5, lng: 99 }), weight: 50  },
            { location: new google.maps.LatLng({ lat: 6, lng: 97 }), weight: 80 }
          ];
        }
        return [];
      },
    },
  };
</script>
warning
This component is one of the few components where you must use the Google LatLng object to create the markers, you
can't use a generic object like { lat: 0, lng: 0 } to generate them.
If you need to know the API of this component please read it here.
HTML examples
HTML example
<body>
  <div id="root">
    <gmap-map
      ref="mapRef"
      :zoom="7"
      :center="center"
      map-type-id="roadmap"
      style="width: 100%; height: 500px;"
    >
      <gmap-marker
        v-for="(m, index) in markers"
        :key="index"
        :position="m.location"
        :clickable="true"
        :draggable="true"
        @click="center=m.location"
      />
      <gmap-heatmap-layer
        :data="markers"
        :options="{maxIntensity: 120, dissipating: false}"
      />
    </gmap-map>
  </div>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.11/vue.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/gmap-vue@1.2.2/dist/gmap-vue.min.js"></script>
  <script>
    Vue.use(GmapVue, {
      load: {
        key: 'AIzaSyDf43lPdwlF98RCBsJOFNKOkoEjkwxb5Sc',
        libraries: 'visualization'
      }
    });
    document.addEventListener('DOMContentLoaded', function() {
      new Vue({
        el: '#root',
        data: {
          center: { lat: 4.5, lng: 99 },
          markers: [],
        },
        async mounted() {
          await this.$gmapApiPromiseLazy();
          this.markers = [
            {
              location: new google.maps.LatLng({ lat: 3, lng: 101 }),
              weight: 100
            },
            {
              location: new google.maps.LatLng({ lat: 5, lng: 99 }),
              weight: 50
            },
            {
              location: new google.maps.LatLng({ lat: 6, lng: 97 }),
              weight: 80
            }
          ];
        }
      });
    });
  </script>
</body>
Test the component
Click to see the HTML example in action