Skip to content

RouteReplay Component

The main React component for displaying and controlling route replay.

tsx
import { RouteReplay, RouteReplayHandle } from 'route-replay-googlemaps-react';
import type { RouteInput, PlayerOptions, PlayerEventMap } from 'route-replay-googlemaps-core';
import { useRef, useState, useEffect } from 'react';

function MyComponent() {
  const [mapInstance, setMapInstance] = useState<google.maps.Map | null>(null);
  const replayHandleRef = useRef<RouteReplayHandle>(null);
  const routeData: RouteInput = [/* ... */];



  return (
    <>
      <div id="map"></div>
      {mapInstance && (
        <RouteReplay
          ref={replayHandleRef}
          map={mapInstance}
          route={routeData}

          autoFit={true}
          initialSpeed={2}
          cameraMode="ahead"
          markerOptions={{ /* ... */ }}
          polylineOptions={{ /* ... */ }}

          onFrame={(payload) => console.log('Frame:', payload.progress)}
          onStart={() => console.log('Started')}
          onPause={() => console.log('Paused')}
          onFinish={() => console.log('Finished')}
          onError={(payload) => console.error('Error:', payload.error)}
        />
      )}
      <button onClick={() => replayHandleRef.current?.play()}>Play</button>
    </>
  );
}

Props

The component accepts the following props:

map

  • Type: google.maps.Map
  • Required: true

The GoogleMaps instance to display the replay on.

route

  • Type: RouteInput
  • Required: true

The route data to display. Format is RoutePoint[] or { [trackId: string]: RoutePoint[] }. See RouteInput for details.

ref

  • Type: React.Ref<RouteReplayHandle>
  • Required: false

A Ref to control the player externally. Provides access to RouteReplayHandle methods (play, pause, etc.). See RouteReplayHandle for details.

Optional Props

You can pass the same options as the core library's createPlayer function (PlayerOptions) as props. See OverlayOptions for details.

Key options:

  • autoFit?: boolean: Whether to automatically adjust the map bounds to fit the entire route (default: true).
  • initialSpeed?: number: Initial playback speed (default: 1).
  • cameraMode?: CameraMode: Initial camera mode (default: "center").
  • markerOptions?: google.maps.MarkerOptions | ((trackId: string) => google.maps.MarkerOptions): Marker options, or a function returning options per track ID.
  • polylineOptions?: google.maps.PolylineOptions | ((trackId: string) => google.maps.PolylineOptions): Polyline options, or a function returning options per track ID.
  • loop?: boolean: Whether to loop playback (default: false).
  • defaultMarkerIcon?: string | google.maps.Icon | google.maps.Symbol: Default marker icon.

Event Handler Props

You can pass callback functions as props corresponding to player events. See Events for event payload details.

  • onFrame?: (payload: PlayerEventMap['frame']) => void: On frame update.
  • onStart?: (payload: PlayerEventMap['start']) => void: On playback start.
  • onPause?: (payload: PlayerEventMap['pause']) => void: On pause.
  • onSeek?: (payload: PlayerEventMap['seek']) => void: On seek.
  • onFinish?: (payload: PlayerEventMap['finish']) => void: On playback finish.
  • onError?: (payload: PlayerEventMap['error']) => void: On error.
  • onDurationChange?: (payload: PlayerEventMap['durationchange']) => void: On total duration change.
  • onStateChange?: (payload: PlayerEventMap['statechange']) => void: On player state change.
  • onCameraModeChange?: (payload: PlayerEventMap['cameramodechange']) => void: On camera mode change.
  • onSpeedChange?: (payload: PlayerEventMap['speedchange']) => void: On playback speed change.