# Using custom renderer function and clustering algorithm

In order to use custom renderer functions or clustering algorithms, you will need to do the following step before:

# Install @googlemaps/markerclusterer package into your own project

Use npm install @googlemaps/markerclusterer to install the library into your project.

Note: this is required because it was the best option for us to make Clustering viable. The original version of this library wasn't supporting the new MarkerClustering package version, so we had to make adjustments. You can read more about it in this PR (opens new window).

# Example

Following this example will help you create your own render function and clustering algorithm.

<template>
  <GMapMap
    ref="google"
    :center="center"
    :zoom="7"
    map-type-id="terrain"
    style="width: 500px; height: 300px"
  >
    <GMapCluster :algorithm="algorithm" :renderer="{ render: renderer }">
      <GMapMarker
        v-for="(m, index) in markers"
        :key="index"
        :clickable="true"
        :draggable="true"
        :position="m.position"
        @click="center = m.position"
      />
    </GMapCluster>
  </GMapMap>
</template>
<script>
  import { GridAlgorithm } from '@googlemaps/markerclusterer'

  export default {
    name: 'App',
    data() {
      return {
        algorithm: new GridAlgorithm({}),
        center: { lat: 51.093048, lng: 6.84212 },
        google: null,
        markers: [
          {
            position: {
              lat: 51.093048,
              lng: 6.84212,
            },
          }, // A long list of clusters
        ],
      }
    },
    methods: {
      renderer: ({ count, position }) =>
        new this.google.maps.Marker({
          label: {
            text: String(count),
            color: 'white',
            fontSize: '10px',
          },
          position,
          // adjust zIndex to be above other markers
          zIndex: Number(this.google.maps.Marker.MAX_ZINDEX) + count,
        }),
    },
  }
</script>