implemented a map zone selector based on squares

This commit is contained in:
Quentin Roussel
2024-06-06 11:04:55 +02:00
parent 9615d4fecd
commit 538b4b3bf6
5 changed files with 149 additions and 75 deletions

View File

@@ -0,0 +1,29 @@
import { useEffect, useState } from 'react';
import { useLeafletContext } from '@react-leaflet/core';
import { useMapGrid } from '@/hook/mapDrawing';
import { latLngToTileNumber } from '../util/map';
export function MapGridZoneSelector({ onSelectedTile, tileSize }) {
const [coloredTiles, setColoredTiles] = useState([]);
const { map } = useLeafletContext();
useEffect(() => {
map.on('click', (e) => {
const fractionalTileNumber = latLngToTileNumber(e.latlng, tileSize);
const tileNumber = new TileNumber(Math.floor(fractionalTileNumber.x), Math.floor(fractionalTileNumber.y));
if (coloredTiles.some(t => t.equals(tileNumber))) {
setColoredTiles(coloredTiles.filter(t => !t.equals(tileNumber)));
} else {
setColoredTiles([...coloredTiles, tileNumber]);
}
});
});
useEffect(() => {
onSelectedTile(coloredTiles);
}, [coloredTiles]);
useMapGrid(coloredTiles, tileSize);
return null;
}