feat: add rectangle drawing controls to the map

This commit is contained in:
2025-08-15 02:29:48 +00:00
parent 25e57edf39
commit 1a3c11b5bb

View File

@@ -1,7 +1,8 @@
import React, { useState, useEffect, useRef, useMemo } from 'react'; import React, { useState, useEffect, useRef, useMemo } from 'react';
import * as leaflet from 'leaflet'; import * as leaflet from 'leaflet';
import 'leaflet-polylinedecorator'; import 'leaflet-polylinedecorator';
import { MapContainer, TileLayer, useMap, useMapEvents } from 'react-leaflet'; import { MapContainer, TileLayer, useMap, useMapEvents, FeatureGroup } from 'react-leaflet';
import { EditControl } from 'react-leaflet-draw';
import Datetime from 'react-datetime'; import Datetime from 'react-datetime';
import 'react-datetime/css/react-datetime.css'; import 'react-datetime/css/react-datetime.css';
import axios from 'axios'; import axios from 'axios';
@@ -10,6 +11,7 @@ import RangeSlider from 'react-range-slider-input';
import './App.css'; import './App.css';
import 'leaflet/dist/leaflet.css'; import 'leaflet/dist/leaflet.css';
import 'react-range-slider-input/dist/style.css'; import 'react-range-slider-input/dist/style.css';
import 'leaflet-draw/dist/leaflet.draw.css';
// num: number of steps per duration // num: number of steps per duration
@@ -244,6 +246,16 @@ function Map({end, duration, slider, mapState, setMapState, setSubmenu, showDire
localStorage.setItem('api_key', api_key); localStorage.setItem('api_key', api_key);
} }
const onRectangleDrawn = (e) => {
const { layer } = e;
const bounds = layer.getBounds();
console.log('Rectangle drawn. Bounds:', {
northEast: bounds.getNorthEast(),
southWest: bounds.getSouthWest(),
});
// In the future, we can use these bounds to filter data or perform a search.
};
return ( return (
<div className='container'> <div className='container'>
{loading ? {loading ?
@@ -258,6 +270,20 @@ function Map({end, duration, slider, mapState, setMapState, setSubmenu, showDire
url='https://maptiles.p.rapidapi.com/en/map/v1/{z}/{x}/{y}.png?rapidapi-key=4375b0b1d8msh0c9e7fa3efb9adfp1769dfjsnd603a0387fea' url='https://maptiles.p.rapidapi.com/en/map/v1/{z}/{x}/{y}.png?rapidapi-key=4375b0b1d8msh0c9e7fa3efb9adfp1769dfjsnd603a0387fea'
/> />
<PolylineWithArrows coords={coords} showDirection={showDirection} /> <PolylineWithArrows coords={coords} showDirection={showDirection} />
<FeatureGroup>
<EditControl
position="topright"
onCreated={onRectangleDrawn}
draw={{
rectangle: true,
polyline: false,
polygon: false,
circle: false,
marker: false,
circlemarker: false,
}}
/>
</FeatureGroup>
</MapContainer> </MapContainer>
) )
: :