Skip to content

Both copy text to your clipboard — Build with AI copies a setup prompt to paste into Claude Code, Cursor, Codex or Copilot; Copy page as Markdown copies this page to paste into a chat. How it works

Fly to a Location

Smoothly animate the map camera to fly to any location using flyTo.

How It Works

Use map.flyTo() to animate the camera to any location. The map smoothly zooms out, pans across, then zooms back in.

Basic Usage

javascript
map.flyTo({
  center: [-74.006, 40.7128], // [longitude, latitude]
  zoom: 12,
  speed: 1.5,   // Animation speed (default: 1.2)
  curve: 1.42   // Animation curve (default: 1.42)
});

Options

OptionTypeDescription
center[lng, lat]Target coordinates
zoomnumberTarget zoom level
speednumberAnimation speed (higher = faster)
curvenumberZoom out curve during flight
bearingnumberTarget bearing in degrees
pitchnumberTarget pitch in degrees
essentialbooleanIf true, animation persists even with prefers-reduced-motion

Complete Example

html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <link href="https://cdn.mapmetrics-atlas.net/versions/latest/mapmetrics-gl.css" rel="stylesheet" />
    <script src="https://cdn.mapmetrics-atlas.net/versions/latest/mapmetrics-gl.js"></script>
    <style>
      #map { height: 500px; width: 100%; }
      .controls { margin-top: 10px; display: flex; gap: 8px; }
      button { padding: 8px 16px; background: #3b82f6; color: white; border: none; border-radius: 6px; cursor: pointer; }
    </style>
  </head>
  <body>
    <div id="map"></div>
    <div class="controls">
      <button onclick="flyTo([-74.006, 40.7128], 12)">New York</button>
      <button onclick="flyTo([-0.1276, 51.5074], 12)">London</button>
      <button onclick="flyTo([139.6917, 35.6895], 12)">Tokyo</button>
      <button onclick="flyTo([2.349902, 48.852966], 12)">Paris</button>
    </div>
    <script>
      const map = new mapmetricsgl.Map({
        container: 'map',
        style: '<StyleFile_URL_with_Token>',
        center: [2.349902, 48.852966],
        zoom: 3
      });

      map.addControl(new mapmetricsgl.NavigationControl(), 'top-right');

      function flyTo(center, zoom) {
        map.flyTo({
          center: center,
          zoom: zoom,
          speed: 1.5,
          curve: 1.42,
          essential: true
        });
      }
    </script>
  </body>
</html>
jsx
import React, { useEffect, useRef } from 'react';
import mapmetricsgl from '@mapmetrics/mapmetrics-gl';
import '@mapmetrics/mapmetrics-gl/dist/mapmetrics-gl.css';

const locations = [
  { name: 'New York', center: [-74.006, 40.7128], zoom: 12 },
  { name: 'London',   center: [-0.1276, 51.5074], zoom: 12 },
  { name: 'Tokyo',    center: [139.6917, 35.6895], zoom: 12 },
  { name: 'Paris',    center: [2.349902, 48.852966], zoom: 12 },
];

const FlyToLocation = () => {
  const mapContainer = useRef(null);
  const map = useRef(null);

  useEffect(() => {
    if (map.current) return;

    map.current = new mapmetricsgl.Map({
      container: mapContainer.current,
      style: '<StyleFile_URL_with_Token>',
      center: [2.349902, 48.852966],
      zoom: 3
    });

    map.current.addControl(new mapmetricsgl.NavigationControl(), 'top-right');

    return () => { map.current?.remove(); map.current = null; };
  }, []);

  const flyTo = ({ center, zoom }) => {
    map.current?.flyTo({ center, zoom, speed: 1.5, curve: 1.42, essential: true });
  };

  return (
    <div>
      <div ref={mapContainer} style={{ height: '500px', width: '100%' }} />
      <div style={{ display: 'flex', gap: '8px', marginTop: '10px' }}>
        {locations.map((loc) => (
          <button
            key={loc.name}
            onClick={() => flyTo(loc)}
            style={{ padding: '8px 16px', background: '#3b82f6', color: 'white', border: 'none', borderRadius: '6px', cursor: 'pointer' }}
          >
            {loc.name}
          </button>
        ))}
      </div>
    </div>
  );
};

export default FlyToLocation;

For more information, visit the MapMetrics GitHub repository.