import { getShipIcon } from '@/services/slave/sgw/MapService'; import { Fill, Icon, Stroke, Style, Text } from 'ol/style'; import CircleStyle from 'ol/style/Circle'; import { GPSParseResult, PointData } from '../type'; export const getShipStyleFromData = ({ state_level, gpsData, scale, pointData, }: { state_level: number; gpsData: GPSParseResult; scale: number; pointData: PointData; }) => { if (pointData.type === 'main-point') { return new Style({ text: pointData.description ? new Text({ text: pointData.description, font: '14px Arial', fill: new Fill({ color: 'black' }), stroke: new Stroke({ color: 'white', width: 2, }), offsetY: -40, textAlign: 'center', textBaseline: 'bottom', }) : undefined, image: new Icon({ anchor: [0.5, 30], // Điểm neo: giữa theo X, 30px theo Y anchorOrigin: 'top-left', anchorXUnits: 'fraction', anchorYUnits: 'pixels', scale: scale, src: getShipIcon(state_level, gpsData.fishing || false), rotateWithView: false, rotation: ((gpsData.h || 0) * Math.PI) / 180, crossOrigin: 'anonymous', }), }); } else if (pointData.type === 'sos-point') { // Style cơ bản cho SOS point - hình tròn đỏ ở giữa return new Style({ image: new Icon({ anchor: [0.5, 30], // Điểm neo: giữa theo X, 30px theo Y anchorOrigin: 'top-left', anchorXUnits: 'fraction', anchorYUnits: 'pixels', scale: scale, src: getShipIcon(state_level, gpsData.fishing || false), rotateWithView: false, rotation: ((gpsData.h || 0) * Math.PI) / 180, crossOrigin: 'anonymous', }), }); } else { return new Style({ image: new CircleStyle({ radius: 5, fill: new Fill({ color: 'red' }), stroke: new Stroke({ color: 'white', width: 2 }), }), }); } };