Documentación / Configuración / React / MapLibre

Configurar MapLibre

Pasos para usar MapLibre desde MapConductor en la Web. No requiere clave y es la forma más rápida de comenzar. maplibre-gl está incluido en el paquete.

PACKAGE
react-for-maplibre
API KEY
No necesario
CSS
Necesario
REACT NATIVE
El mismo proveedor, otras plataformasAndroidiOS

Antes de empezar

Node.js 18 o superior
React 18 o 19
STEP 01

Instalar

maplibre-gl está incluido en el paquete, por lo que no es necesario instalarlo por separado.

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

Excluir del prebundle de Vite

Si usa Vite, agregue el proveedor a optimizeDeps.exclude. Como maplibre-gl v6 carga los trabajadores mediante URL, si se agrupa previamente, los archivos del trabajador no se generarán en .vite/deps y la carga fallará.

vite.config.tsTypeScript · Vite
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';

export default defineConfig({
    optimizeDeps: {
        exclude: ["@mapconductor/react-for-maplibre", "@mapconductor/js-sdk-core"],
    },
    plugins: [react()],
});
STEP 03

Cargar hoja de estilos

Cárguelo una vez en el punto de entrada de la aplicación. Si se olvida, la posición del mapa y el aspecto de los controles se corromperán.

main.tsxTypeScript
import '@mapconductor/react-for-maplibre/style.css';
STEP 04

Elegir estilo

MapLibre no tiene clave, pero debe decidir el origen de los teselas usted mismo. Las DemoTiles predeterminadas son para verificación de funcionamiento.

PRECAUCIÓN
Los estilos de la serie OsmBright, MapTiler y OpenMapTiles se distribuyen desde un host de teselas de demostración público para Japón (tile.openstreetmap.jp). Es conveniente durante el desarrollo, pero para el tráfico de producción y el cumplimiento de licencias, especifique su propio JSON de estilo en mapDesignType.

VERIFICAR

Lo que deberías ver

Aparece un mapa centrado en Tokio y si se coloca un marcador, está completo.

HelloMap.tsxTypeScript · React
import { useState } from 'react';
import { createGeoPoint, createMapCameraPosition, createMarkerState } from '@mapconductor/js-sdk-core';
import { Marker } from '@mapconductor/js-sdk-react';
import { MapLibreDesign, MapLibreMapView2D, useMapLibreViewState } from '@mapconductor/react-for-maplibre';
import '@mapconductor/react-for-maplibre/style.css';

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

export function HelloMap() {
  const mapState = useMapLibreViewState({
    id: 'maplibre-map',
    mapDesignType: MapLibreDesign.DemoTiles,
    cameraPosition: createMapCameraPosition({ position: TOKYO, zoom: 12 }),
  });
  const [markerState] = useState(() => createMarkerState({ id: 'tokyo', position: TOKYO }));

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

Objeto de estado

Parámetros que recibe useMapLibreViewState. MapLibreMapView es 3D, MapLibreMapView2D es 2D, ambos comparten el mismo estado.

signatureTypeScript
useMapLibreViewState({
  id?: string;
  mapDesignType?: MapLibreMapDesignType; // default MapLibreDesign.OsmBright
  cameraPosition?: MapCameraPosition;    // default MapCameraPosition.Default
})

// View props, on top of the shared MapViewBaseProps
{
  maxZoom?: number;
  minZoom?: number;
  projection?: 'mercator' | 'globe';   // a component prop, not part of state
  containerStyle?: React.CSSProperties;
  markerTilingOptions?: MarkerTilingOptions;
  onError?: (error: Error) => void;
}

Diseños de mapa

MapLibreDesign es una constante que envuelve la URL del JSON de estilo.

MapLibreDesign
Notes
DemoTiles
demotiles.maplibre.org. Funciona sin configuración
OsmBright / OsmBrightEn / OsmBrightJa
OSM Bright. Diferentes idiomas de etiquetas
MapTilerTonerEn / MapTilerTonerJa
Estilo Toner de alto contraste
MapTilerBasicEn / MapTilerBasicJa
Estilo Basic con menor cantidad de información
OpenMapTiles
Estilo OpenMapTiles general

Solución de problemas

Al cambiar de estilo, el mapa desaparece brevemente

  • Cambiar mapDesignType implica recrear el mapa, no usar setStyle. Cambiar de estilo no es barato. Evite interfaces que cambien con frecuencia.

La posición del mapa y los controles están dañados

  • Verifique si se está cargando style.css.

El mapa se inicializa doblemente solo durante el desarrollo

  • React StrictMode ejecuta el efecto dos veces. Como cada proveedor detecta esto y descarta uno, no es necesario quitar StrictMode.

Siguiente

Si se pasa projection="globe", se mostrará el globo terráqueo. Esto es una prop de la vista y no está incluido en el objeto de estado.