Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
useOlMapOverlaysLayer.ts 1.31 KiB
import Geometry from 'ol/geom/Geometry';
import VectorLayer from 'ol/layer/Vector';
import VectorSource from 'ol/source/Vector';
import { Feature } from 'ol';
import { useMemo } from 'react';
import { useOverlayFeatures } from './useOverlayFeatures';

/**
 * Prerequisites: "view" button triggers opening overlays -> it triggers downloading overlayBioEntityData for given overlay for ALL available submaps(models)
 *
 * 1. For each active overlay
 * 2. get overlayBioEntity data (current map data passed by selector)
 * 3. based on nOverlays, calculate coordinates for given overlayBioEntity to render Polygon from extend
 * 4. Calculate coordinates in following steps:
 *   - polygonWidth = width/nOverlays
 *   - xMin = xMin + polygonWidth * overlayIndexBasedOnOrder
 *   - xMax = xMin + polygonWidth
 *   - yMin,yMax -> is const taken from store
 * 5. generate Feature(xMin,yMin,xMax,yMax)
 */

export const useOlMapOverlaysLayer = (): VectorLayer<VectorSource<Feature<Geometry>>> => {
  const overlaysFeatures = useOverlayFeatures();

  const vectorSource = useMemo(() => {
    return new VectorSource({
      features: overlaysFeatures,
    });
  }, [overlaysFeatures]);

  const overlaysLayer = useMemo(
    () =>
      new VectorLayer({
        source: vectorSource,
      }),
    [vectorSource],
  );

  return overlaysLayer;
};