Documentación / Configuración / React / Mapbox

Configurar Mapbox

Instrucciones para usar Mapbox en la web a través de MapConductor. Se necesita un token de acceso solo al usar estilos alojados por Mapbox (los que comienzan con mapbox://).

PACKAGE
react-for-mapbox
API KEY
Dependiendo del estilo
CSS
Necesario
REACT NATIVE
Ninguno
El mismo proveedor, otras plataformasAndroidiOS

Antes de empezar

Node.js 18 o superior
Token de acceso público si se usan estilos alojados por Mapbox
STEP 01

Instalar

mapbox-gl está incluido en el paquete, no es necesario instalarlo por separado. No hay versión de React Native.

terminalnpm
npm install @mapconductor/js-sdk-core @mapconductor/js-sdk-react \
            @mapconductor/react-for-mapbox
STEP 02

Cargar hoja de estilos

Cargar una sola vez en el punto de entrada de la aplicación. Si se olvida, la posición del mapa y la apariencia de los controles se romperán.

main.tsxTypeScript
import '@mapconductor/react-for-mapbox/style.css';
STEP 03

Pasar el token de acceso (si es necesario)

El token se pasa al hook de estado. Internamente se configura globalmente como mapboxgl.accessToken. Se puede omitir si solo se usan diseños basados en OSM.

HelloMap.tsxTypeScript · React
const mapState = useMapboxViewState({
  id: 'mapbox-map',
  accessToken: import.meta.env.VITE_MAPBOX_ACCESS_TOKEN,
  mapDesignType: MapboxDesign.Streets,
  cameraPosition: createMapCameraPosition({ position: TOKYO, zoom: 12 }),
});
La clave se pasa al hook de estado, no a los props del componente de vista. Esto se debe a que, si se coloca en los props, se mezclará en los registros y las instantáneas de las pruebas.
PRECAUCIÓN
La clave debe pasarse desde variables de entorno en tiempo de compilación (si usa Vite, import.meta.env.VITE_*) y no incluirse en el control de código fuente. Dado que se pasa al frontend, asegúrese de aplicar restricciones de referer y de dominio para evitar daños si se hace pública.

VERIFICAR

Lo que deberías ver

Si usa OsmBright, puede verificar el funcionamiento sin token.

HelloMap.tsxTypeScript · React
import { useState } from 'react';
import { createGeoPoint, createMapCameraPosition, createMarkerState } from '@mapconductor/js-sdk-core';
import { Marker } from '@mapconductor/js-sdk-react';
import { MapboxDesign, MapBoxMapView2D, useMapboxViewState } from '@mapconductor/react-for-mapbox';
import '@mapconductor/react-for-mapbox/style.css';

const TOKYO = createGeoPoint({ latitude: 35.6812, longitude: 139.7671 });

export function HelloMap() {
  // No token needed for the OsmBright design
  const mapState = useMapboxViewState({
    id: 'mapbox-map',
    mapDesignType: MapboxDesign.OsmBright,
    cameraPosition: createMapCameraPosition({ position: TOKYO, zoom: 12 }),
  });
  const [markerState] = useState(() => createMarkerState({ id: 'tokyo', position: TOKYO }));

  return (
    <MapBoxMapView2D state={mapState} style={{ height: 480 }}>
      <Marker state={markerState} />
    </MapBoxMapView2D>
  );
}

Objeto de estado

Parámetros que recibe useMapboxViewState. Tenga en cuenta que el nombre de exportación de la vista es MapBoxMapView / MapBoxMapView2D (la B está en mayúscula).

signatureTypeScript
useMapboxViewState({
  id?: string;
  accessToken?: string;
  mapDesignType?: MapboxMapDesignType; // default MapboxDesign.Streets
  cameraPosition?: MapCameraPosition;  // default MapCameraPosition.Default
})

Diseños de mapa

MapboxDesign se divide en dos grupos: los que requieren token y los que no.

MapboxDesign
Notes
Streets / Outdoors / Light / Dark
Alojado por Mapbox. Token necesario.
SatelliteStreets
Imágenes de satélite alojadas por Mapbox. Token necesario.
OsmBright / OsmBrightEn / OsmBrightJa
Estilo OSM común con MapLibre. No se requiere token.
MapTilerToner* / MapTilerBasic* / OpenMapTiles
También común con MapLibre. No se requiere token.

Solución de problemas

Solo los estilos de Mapbox no se muestran

  • Los estilos que comienzan con mapbox:// requieren token. Verifique si ha pasado accessToken.
  • Verifique que el token sea público y que no haya caducado.

El nivel de zoom está desalineado con otros proveedores

  • MapConductor alinea el zoom con el estándar de Google. Mapbox convierte esto aplicando un desplazamiento medido (googleZoom ≒ mapboxZoom + 1.0).

El mapa se inicializa doble solo durante el desarrollo

  • React StrictMode ejecuta los efectos dos veces. Cada proveedor está diseñado para detectar esto y descartar uno, por lo que no es necesario desactivar StrictMode.

Siguiente

Dado que tiene la misma estructura que MapLibre, el cambio de mapDesignType recrea el mapa.