Doku / Einrichtung / React / MapLibre

MapLibre einrichten

Schritte zur Verwendung von MapLibre über MapConductor im Web. Kein Schlüssel erforderlich, kürzester Start. maplibre-gl ist im Paket enthalten.

PACKAGE
react-for-maplibre
API KEY
Nicht erforderlich
CSS
Erforderlich
REACT NATIVE
Vorhanden
Derselbe Anbieter, andere PlattformenAndroidiOS

Bevor Sie beginnen

Node.js 18 oder höher
React 18 oder 19
STEP 01

Installieren

maplibre-gl ist im Paket enthalten, daher muss es nicht separat installiert werden.

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

Aus Vite-Vorbundling ausschließen

Bei Verwendung von Vite fügen Sie den Anbieter zu optimizeDeps.exclude hinzu. Da maplibre-gl v6 Worker über URLs lädt, werden bei vorab-Bundling die Worker-Dateien nicht unter .vite/deps ausgegeben und das Laden schlägt fehl.

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

Stylesheet laden

Laden Sie es einmal am Einstiegspunkt der App. Wenn dies vergessen wird, werden die Position der Karte und das Aussehen der Steuerelemente beschädigt.

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

Stil bestimmen

MapLibre hat keinen Schlüssel, aber Sie müssen die Herkunft der Kacheln selbst bestimmen. Die Standard-DemoTiles dienen zur Funktionsprüfung.

ACHTUNG
Stile der OsmBright-Reihe, MapTiler-Reihe und OpenMapTiles werden von einem öffentlichen Demo-Tile-Host für Japan (tile.openstreetmap.jp) ausgeliefert. Dies ist während der Entwicklung praktisch, aber für Produktionsverkehr und die Einhaltung von Lizenzen geben Sie bitte Ihr eigenes Stil-JSON in mapDesignType an.

PRÜFEN

Was Sie sehen sollten

Eine Karte mit Zentrum auf Tokyo erscheint und wenn ein Marker gesetzt ist, ist es fertig.

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>
  );
}

Statusobjekt

Parameter, die useMapLibreViewState empfängt. MapLibreMapView ist 3D, MapLibreMapView2D ist 2D, beide teilen denselben Zustand.

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;
}

Kartendesigns

MapLibreDesign ist eine Konstante, die die URL des Stil-JSON umschließt.

MapLibreDesign
Notes
DemoTiles
demotiles.maplibre.org. Funktioniert ohne Konfiguration
OsmBright / OsmBrightEn / OsmBrightJa
OSM Bright. Unterschiedliche Beschriftungssprachen
MapTilerTonerEn / MapTilerTonerJa
Toner-Stil mit hohem Kontrast
MapTilerBasicEn / MapTilerBasicJa
Basic-Stil mit reduzierter Informationsdichte
OpenMapTiles
Allgemeiner OpenMapTiles-Stil

Fehlerbehebung

Beim Ändern des Stils verschwindet die Karte kurzzeitig

  • Die Änderung von mapDesignType führt zu einer Neuerstellung der Karte und nicht zu setStyle. Das Wechseln des Stils ist nicht billig. Vermeiden Sie UIs, die häufig wechseln.

Position der Karte und Steuerelemente sind beschädigt

  • Überprüfen, ob style.css geladen wird.

Die Karte wird nur während der Entwicklung doppelt initialisiert

  • React StrictMode führt den Effekt zweimal aus. Da jeder Anbieter dies erkennt und einen verwirft, müssen Sie StrictMode nicht entfernen.

Weiter

Wenn projection="globe" übergeben wird, wird die Globusansicht angezeigt. Dies ist ein prop der Ansicht und ist nicht im Zustandsobjekt enthalten.