MapConductor React SDK Samples

Mapa de tiendas | ArcGIS 2D | MapConductor React SDK

Ejemplo de Mapa de tiendas de MapConductor React SDK con ArcGIS 2D.

Este ejemplo interactivo muestra Mapa de tiendas mediante la abstracción de MapConductor sobre ArcGIS 2D.

Ejemplo de código

import { useMemo, useState } from 'react';
import {
  createGeoPoint,
  createMapCameraPosition,
  createMarkerState,
  type MarkerState,
} from '@mapconductor/js-sdk-core';
import { InfoBubble, Markers } from '@mapconductor/js-sdk-react';
import { ArcGISDesign, ArcGISMapView2D, useArcGISViewState } from '@mapconductor/react-for-arcgis';


// (1) Crear el mapa


const initialCamera = createMapCameraPosition({
  position: createGeoPoint({ latitude: 35.6812, longitude: 139.7671 }),
  zoom: 12,
});


const mapViewState = useArcGISViewState({
  apiKey: import.meta.env.VITE_ARCGIS_API_KEY,
  mapDesignType: ArcGISDesign.Streets,
  cameraPosition: initialCamera,
});


// (2) Preparar los datos y el estado de interacción
const [selectedMarker, setSelectedMarker] = useState<MarkerState | null>(null);
const storeMarkers = useMemo(() => stores.map(store => createMarkerState({
  id: store.id,
  position: createGeoPoint({ latitude: store.lat, longitude: store.lng }),
  extra: store,
  onClick: markerState => setSelectedMarker(markerState),
})), [stores]);
const clearSelection = () => setSelectedMarker(null);


// (3) Renderizar el mapa y sus capas


<ArcGISMapView2D state={mapViewState} onMapClick={clearSelection}>
  <Markers states={storeMarkers} />
  {selectedMarker && (
    <InfoBubble marker={selectedMarker}>
      <StoreInfoView store={selectedMarker.extra} />
    </InfoBubble>
  )}
</ArcGISMapView2D>

Cómo funciona el código

Dibuja una colección de marcadores de tiendas en una sola composición y muestra un globo de información para la tienda seleccionada.

El arreglo storeMarkers se crea una vez con useMemo: cada createMarkerState guarda su registro de tienda en el campo extra y un onClick que almacena el MarkerState tocado, mientras que onMapClick borra la selección.

El componente por lotes <Markers> dibuja todas las tiendas de una sola vez y el InfoBubble se ancla al marcador seleccionado, por lo que StoreInfoView aparece solo mientras hay una tienda elegida.