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.