Skip to content

Latest commit

 

History

History
169 lines (129 loc) · 6.03 KB

File metadata and controls

169 lines (129 loc) · 6.03 KB

English | 日本語 | Español (Latinoamérica)

@mapconductor/react-for-openlayers

Proveedor de OpenLayers para el SDK de React de MapConductor. Renderiza un mapa de OpenLayers a través de la API de cámara, marcadores y superposiciones independiente del proveedor de MapConductor, de modo que el mismo código de aplicación también puede ejecutarse en Google Maps, MapLibre, Mapbox, Leaflet, ArcGIS, Cesium o HERE.

Instalación

npm install @mapconductor/react-for-openlayers

@mapconductor/js-sdk-core y @mapconductor/js-sdk-react (usados para marcadores y otros componentes compartidos) se instalan automáticamente como dependencias. Tu código importa directamente de ambos, así que con el node_modules estricto (aislado) de pnpm — o siempre que prefieras declarar todo lo que importas — instálalos explícitamente:

npm install @mapconductor/react-for-openlayers @mapconductor/js-sdk-core @mapconductor/js-sdk-react

ol viene incluido como dependencia; la fuente predeterminada de OpenStreetMap no requiere clave de API.

Tutorial Hello Map

La aplicación de mapa más sencilla posible, creada con MapConductor + OpenLayers: haz clic en el marcador y aparecerá un globo "Hello, MapConductor". Puedes crear este mapa en los 5 pasos siguientes. Usa la fuente OpenStreetMap por defecto de OpenLayers, que no requiere clave de API, así que puedes copiar y pegar y funciona.

Paso 1: Crea un proyecto React

Crea un proyecto React + TypeScript con Vite.

npm create vite@latest hello-map -- --template react-ts
cd hello-map
npm install
npm run dev

Paso 2: Instala MapConductor (OpenLayers)

Instala el paquete necesario para mostrar un mapa. Aquí usamos OpenLayers, pero también puedes usar otros módulos de mapas.

npm install @mapconductor/react-for-openlayers
  • @mapconductor/react-for-openlayers — componentes / hooks para OpenLayers
  • @mapconductor/js-sdk-react / @mapconductor/js-sdk-core se instalan automáticamente como dependencias.

Paso 3: Muestra el mapa

Crea el estado del mapa con useOpenLayersMapViewState y renderízalo con <OpenLayersMapView>. No olvides el import del CSS de estilos. Da una altura al elemento externo para que ocupe toda la pantalla.

import {
  OpenLayersDesign,
  OpenLayersMapView,
  useOpenLayersMapViewState,
} from '@mapconductor/react-for-openlayers';
import '@mapconductor/react-for-openlayers/style.css';
import { createGeoPoint, createMapCameraPosition } from '@mapconductor/js-sdk-core';

const TOKYO = createGeoPoint({ latitude: 35.6812, longitude: 139.7671 });
const INITIAL_CAMERA = createMapCameraPosition({ position: TOKYO, zoom: 14 });

export default function App() {
  const mapViewState = useOpenLayersMapViewState({
    mapDesignType: OpenLayersDesign.OpenStreetMap,
    cameraPosition: INITIAL_CAMERA,
  });

  return (
    <div style={{ width: '100vw', height: '100vh' }}>
      <OpenLayersMapView state={mapViewState} />
    </div>
  );
}

Paso 4: Coloca un marcador

Crea el estado del marcador con createMarkerState y regístralo con <Marker>. Escribe las superposiciones como elementos hijos del componente del mapa.

import { useMemo } from 'react';
import { createMarkerState } from '@mapconductor/js-sdk-core';
import { Marker } from '@mapconductor/js-sdk-react';

// ...dentro de App...
const marker = useMemo(
  () => createMarkerState({ id: 'hello', position: TOKYO }),
  [],
);

// ...dentro de return...
<OpenLayersMapView state={mapViewState}>
  <Marker state={marker} />
</OpenLayersMapView>

Paso 5: Muestra un InfoBubble al hacer clic

Guarda el estado de selección con useState, ponlo en true en el onClick del marcador y renderiza <InfoBubble> solo mientras está seleccionado. Este es el resultado final.

import { useMemo, useState } from 'react';
import {
  OpenLayersDesign,
  OpenLayersMapView,
  useOpenLayersMapViewState,
} from '@mapconductor/react-for-openlayers';
import '@mapconductor/react-for-openlayers/style.css';
import {
  createGeoPoint,
  createMapCameraPosition,
  createMarkerState,
} from '@mapconductor/js-sdk-core';
import { InfoBubble, Marker } from '@mapconductor/js-sdk-react';

const TOKYO = createGeoPoint({ latitude: 35.6812, longitude: 139.7671 });
const INITIAL_CAMERA = createMapCameraPosition({ position: TOKYO, zoom: 14 });

export default function App() {
  const mapViewState = useOpenLayersMapViewState({
    mapDesignType: OpenLayersDesign.OpenStreetMap,
    cameraPosition: INITIAL_CAMERA,
  });

  const [selected, setSelected] = useState(false);

  const marker = useMemo(
    () => createMarkerState({
      id: 'hello',
      position: TOKYO,
      onClick: () => setSelected(true),
    }),
    [],
  );

  return (
    <div style={{ width: '100vw', height: '100vh' }}>
      <OpenLayersMapView state={mapViewState} onMapClick={() => setSelected(false)}>
        <Marker state={marker} />
        {selected && (
          <InfoBubble marker={marker}>
            <div style={{ padding: '8px 12px', fontWeight: 600 }}>
              Hello, MapConductor
            </div>
          </InfoBubble>
        )}
      </OpenLayersMapView>
    </div>
  );
}

Puntos clave

  • Las coordenadas, cámaras y marcadores se crean con funciones de js-sdk-core (independiente del proveedor).
  • El componente del mapa y los hooks vienen de react-for-openlayers (específico del proveedor).
  • Escribe las superposiciones como elementos hijos del componente del mapa.
  • Controla mostrar / ocultar con useState de React.

Paquetes relacionados