Использование React-Leaflet немного отличается. Вы можете выполнить sh то, что вы пытаетесь сделать, в componentDidMount
, где вы можете сделать ссылку на вашу карту и затем вызвать fitBounds для этого.
Редактировать: Добавление прямоугольника
Однако следующая проблема - это решение. Листовка будет поддерживать соотношение сторон, поэтому вам действительно нужно динамически визуализировать ваш круг (или прямоугольник) в углу, если вы всегда хотите, чтобы он отображался в нижнем левом углу экрана независимо от соотношения сторон экрана и браузера. Таким образом, в componentDidMount
, сразу после того, как вы установили новые границы, вы можете получить эти границы и определить прямоугольник (или что-нибудь еще), чтобы всегда отображать в одном и том же месте относительно, скажем, границы getBounds()._southWest
. В этом коде я обернул этот код в setTimeout
, потому что анимация занимает мгновение, и этот момент должен пройти, чтобы получить новые значения границ из getBounds()
. Я уверен, что есть способ уменьшить или убрать это время анимации.
Чтобы держать прямоугольник в одном и том же месте, я написал функцию onMove
, чтобы карта всегда пересчитывала положение независимо от перемещения карты или изменения размера окна.
Обратите внимание, что размер прямоугольника в этом примере немного маловат sh, но я думаю, что вам будет проще получить постоянный размер с помощью CRS, поскольку CRS намного более однороден, чем лат и lngs.
class Map extends React.Component {
state = {
rectCoords: null
};
componentDidMount() {
const map = this.mapReference.leafletElement;
window.map = map;
console.log("Initiates with bounds:", map.getBounds());
map.fitBounds([[32.852169, -90.5322], [33.852169, -85.5322]]);
setTimeout(() => {
console.log("Bounds immediately reset to", map.getBounds());
const rectCoords = [
[
map.getBounds()._southWest.lat + 0.1,
map.getBounds()._southWest.lng + 0.1
],
[
map.getBounds()._southWest.lat + 1,
map.getBounds()._southWest.lng + 1
]
];
this.setState({ rectCoords });
}, 500);
}
onMapmove = () => {
const map = this.mapReference.leafletElement;
const rectCoords = [
[
map.getBounds()._southWest.lat + 0.1,
map.getBounds()._southWest.lng + 0.1
],
[map.getBounds()._southWest.lat + 1, map.getBounds()._southWest.lng + 1]
];
this.setState({ rectCoords });
}
render() {
return (
<LeafletMap
ref={mapReference => this.mapReference = mapReference}
zoom={4}
center={[33.852169, -100.5322]}
onMove={() => this.onMapmove() } >
<TileLayer ... />
{this.state.rectCoords && (
<Rectangle
bounds={this.state.rectCoords}
color={"#ff7800"}
weight={1}
/>
)}
</LeafletMap>
);
}
}
Таким образом, даже если карта начинается с определенных границ, она немедленно подгоняет ее к желаемым границам и отображает прямоугольник всегда в нижнем левом углу в одном и том же месте.
Здесь это рабочий код andbox. Я уверен, что это можно адаптировать и для использования CRS Simple.