Doku / Einrichtung / React / HERE

HERE einrichten

Anleitung, um HERE im Web über MapConductor zu verwenden. HERE Maps API for JavaScript wird über CDN statt npm geladen; Sie erstellen H.service.Platform auf Anwendungsseite und übergeben es an die Ansicht.

PACKAGE
react-for-here
API KEY
Erforderlich
CSS
Aus CDN
REACT NATIVE
Vorhanden
Derselbe Anbieter, andere PlattformenAndroidiOS

Bevor Sie beginnen

Node.js 18 oder höher
API-Schlüssel der HERE Platform
STEP 01

Installieren

Das Paket selbst enthält nicht die HERE JS API. Es wird das H-Global verwendet, das auf Seitenebene geladen wird.

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

HERE JS API laden

Wie im Quickstart von HERE wird es über script-Tag aus CDN geladen. @mapconductor/react-for-here setzt das von ihnen veröffentlichte H-Global voraus.

index.htmlHTML
<script src="https://js.api.here.com/v3/3.1/mapsjs-core.js"></script>
<script src="https://js.api.here.com/v3/3.1/mapsjs-core-legacy.js"></script>
<script src="https://js.api.here.com/v3/3.1/mapsjs-service.js"></script>
<script src="https://js.api.here.com/v3/3.1/mapsjs-ui.js"></script>
<script src="https://js.api.here.com/v3/3.1/mapsjs-mapevents.js"></script>
<link rel="stylesheet" href="https://js.api.here.com/v3/3.1/mapsjs-ui.css" />
STEP 03

Platform erstellen und an Ansicht übergeben

Bei HERE übergeben Sie den Schlüssel nicht an einen State-Hook, sondern an H.service.Platform. Erstellen Sie Platform mit den Anwendungsanmeldeinformationen und übergeben Sie es an platform props der Ansicht. Wenn Sie es mit useMemo erstellen, wird es bei jedem Rerender nicht neu erstellt.

HereMap.tsxTypeScript · React
const platform = useMemo(
  () => new H.service.Platform({ apikey: import.meta.env.VITE_HERE_API_KEY }),
  [],
);

<HereMapView2D state={state} platform={platform}>{children}</HereMapView2D>
ACHTUNG
Übergeben Sie den Schlüssel über Umgebungsvariablen zur Buildzeit (bei Vite import.meta.env.VITE_*) und nehmen Sie ihn nicht in die Quellcodeverwaltung auf. Da er an das Frontend gelangt, setzen Sie unbedingt Referer-Einschränkungen und Domain-Einschränkungen, damit bei einer Veröffentlichung kein Schaden entsteht.

PRÜFEN

Was Sie sehen sollten

Fertig, wenn die HERE-Karte erscheint. Der HERE-Provider im Web unterstützt nur 2D-Ansichten.

HereMap.tsxTypeScript · React
import { useMemo, useState } from 'react';
import { createGeoPoint, createMapCameraPosition, createMarkerState } from '@mapconductor/js-sdk-core';
import { Marker } from '@mapconductor/js-sdk-react';
import { HereMapDesign, HereMapView2D, useHereViewState } from '@mapconductor/react-for-here';

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

export function HereMap() {
  const state = useHereViewState({
    mapDesignType: HereMapDesign.NormalDay,
    cameraPosition: createMapCameraPosition({ position: TOKYO, zoom: 12 }),
  });
  // HERE Maps API for JavaScript is loaded from the CDN (see index.html);
  // the platform must be created with the host page's own credentials.
  const platform = useMemo(
    () => new H.service.Platform({ apikey: import.meta.env.VITE_HERE_API_KEY }),
    [],
  );
  const [markerState] = useState(() => createMarkerState({ id: 'tokyo', position: TOKYO }));

  return (
    <HereMapView2D state={state} platform={platform}>
      <Marker state={markerState} />
    </HereMapView2D>
  );
}

Kartendesigns

HereMapDesign unterstützt HERE Map-Schemes.

HereMapDesign
Notes
NormalDay / NormalNight
Standard-Stil Tag / Nacht
Satellite
Satellitenbild
HybridDay / HybridNight
Satellitenbild + Straßen und Beschriftungen
LiteDay / LiteNight
Leichtgewicht-Stil
LogisticsDay
Für Logistik

Fehlerbehebung

H wird undefined

  • Prüfen Sie, ob das script-Tag in index.html geladen ist und ob die Reihenfolge stimmt (core → core-legacy → service → ui → mapevents).
  • Bei SSR führen Sie die Erstellung von Platform nur auf der Clientseite aus.

Karte wird nicht angezeigt

  • Prüfen Sie, ob der an H.service.Platform übergebene apikey korrekt ist.

Beim Wechseln des Providers tritt ein Hook-Reihenfolgenfehler auf

  • React kann die Reihenfolge von Hook-Aufrufen nicht ändern. Erstellen Sie pro Provider eine kleine Komponente und rufen darin den Hook dieses Providers auf. Das Verzeichnis providers/ der Beispielanwendung hat diese Struktur.

Weiter

Wenn es viele Marker gibt, übergeben Sie markerTilingOptions; dadurch werden statische Markergruppen gemeinsam als Raster-Overlay dargestellt.