How to get the 4 coordinates that represent the 4 ends visible on the map using react-leaflet.
I would like to use the contains() function to return true or false for a coordinate that is passed, if it is true it means that it is within the limits established in getBounds(), if it is false it is outside.
Just wiht leaflet in pure JavaScript I know how to use this function. But I'm developing a React Web Application, and I'm using react-leaflet library and need use this function.
Thank you in advance for any help.
Here's my code I put into codesandbox
import React from "react";
import { Map, TileLayer } from "react-leaflet";
import "./styles.css";
const App = () => {
const center = [51.505, -0.09];
const [map, setMap] = React.useState(null);
React.useEffect(() => {
if (map) {
const contains = map.getBounds().contains(center);
console.log("contains:: ", contains);
}
}, [center, map]);
return (
<Map
ref={setMap}
style={{ width: "100%", height: "100vh" }}
center={center}
zoom={13}
>
<TileLayer
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
attribution='© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
/>
</Map>
);
};
export default App;
You need to get a reference to the map. Then you can access the ref's .leafletElement property, which is the map instance:
const App = ({ center }) => {
const mapRef = useRef();
React.useEffect(() => {
if (mapRef) {
const contains = mapRef.leafletElement.getBounds().contains(center);
}
}, [center]);
return (
<Map
ref={mapRef}
{...otherProps}
>
<TileLayer {...props} />
</Map>
);
};
You need a reference to the map, so that you can call things like L.map.getBounds(). react-leaflet no longer uses the .leafletElement property since react-leaflet v3. Here's a v4 answer:
const App = ({ center }) => {
const [map, setMap] = useState(null)
React.useEffect(() => {
if (map) {
const contains = map.getBounds().contains(center);
}
}, [center]);
return (
<Map
ref={setMap}
{...otherProps}
>
<TileLayer {...props} />
</Map>
);
};
The docs have some examples of how to grab the underlying L.map instance as a ref and use it, here: https://react-leaflet.js.org/docs/example-external-state/.