問題描述
我不知道如何在 Leaflet 地圖上調(diào)用 fitBounds().
如果我只是使用香草傳單,此解決方案將完美運(yùn)行:縮放以適應(yīng) Mapbox 或 Leaflet 中的所有標(biāo)記
不幸的是,我正在使用 react-leaflet.
如果我只是單獨(dú)使用傳單,這就是解決方案.
var leafletMap = new L.featureGroup([marker1, marker2, marker3]);map.fitBounds(leafletMap.getBounds());
我認(rèn)為這段代碼(我的代碼) this.mapRef.current.leafletElement
相當(dāng)于 var leafletMap = new L.featureGroup([marker1, marker2, marker3]);leafletMap.getBounds();
,但是 map.fitBounds();
相當(dāng)于 react-leaflet 中的什么?
基本上,我試圖在地圖上顯示多個(gè)標(biāo)記并相應(yīng)地調(diào)整視圖(放大、縮小、飛到等).
這是我的代碼.
import React, { createRef, Component } from 'react'從 'react-leaflet' 導(dǎo)入 { Map, TileLayer, Marker, Popup, FeatureGroup }導(dǎo)出默認(rèn)類 MasterLeafletMap 擴(kuò)展組件 {構(gòu)造函數(shù)(道具){超級(jí)(道具);this.markers = this.markers.bind(this);this.handleClick = this.handleClick.bind(this);this.mapRef = createRef()}手柄點(diǎn)擊(){常量 leafletMap = this.mapRef.current.leafletElement;this.mapRef.current.fitBounds(leafletMap.getBounds());//不起作用LeafletMap.fitBounds(leafletMap.getBounds());//不起作用(只是試圖獲取標(biāo)記的邊界并調(diào)整視圖)this.mapRef.current.leafletElement.flyToBounds(leafletMap.getBounds());//不起作用}標(biāo)記(){if (this.props.search.items instanceof Array) {返回 this.props.search.items.map(function(object, i) {常量位置 = [object._geoloc.lat, object._geoloc.lng];返回<標(biāo)記位置={位置}><彈出窗口><跨度><h4>{object.title}</h4>{object.address}, <br/>{object.city}、{object.state}、{object.zip} <br/>{object._geoloc.lat},{object._geoloc.lng}</span></彈出窗口></標(biāo)記>})}}使成為() {const hasLoaded = this.props.search.items instanceof Array;如果(!已加載){返回空值;}常量位置 = [this.props.search.items[0]._geoloc.lat, this.props.search.items[0]._geoloc.lng];返回 (<div className="leaflet-map-container"><div onClick={this.handleClick}>你好</div><地圖中心={位置} zoom={13} ref={this.mapRef}>
提前致謝.
這是一個(gè)如何通過 完成的示例react-leaflet
handleClick() {常量映射 = this.mapRef.current.leafletElement;//獲取本地地圖實(shí)例常量組 = this.groupRef.current.leafletElement;//獲取本機(jī)featureGroup實(shí)例map.fitBounds(group.getBounds());}
在哪里
<button onClick={this.handleClick}>縮放</button><地圖中心={this.props.center}縮放={this.props.zoom}參考={this.mapRef}>對(duì)應(yīng)于
var leafletMap = new L.featureGroup([marker1, marker2, marker3]);map.fitBounds(leafletMap.getBounds());
這是一個(gè)演示
I cannot figure out how to call fitBounds() on the Leaflet map.
If I was just using vanilla leaflet, this solution would work perfectly: Zoom to fit all markers in Mapbox or Leaflet
Unfortunately, I am using react-leaflet.
Here is the solution if I was just using leaflet by itself.
var leafletMap = new L.featureGroup([marker1, marker2, marker3]);
map.fitBounds(leafletMap.getBounds());
I think this code (my code) this.mapRef.current.leafletElement
is equivalent to var leafletMap = new L.featureGroup([marker1, marker2, marker3]); leafletMap.getBounds();
, but what is map.fitBounds();
equivalent to in react-leaflet?
Basically, I am trying to display multiple markers on the map and have the view adjust accordingly (zoom in, zoom out, fly to, etc.).
Here is my code.
import React, { createRef, Component } from 'react'
import { Map, TileLayer, Marker, Popup, FeatureGroup } from 'react-leaflet'
export default class MasterLeafletMap extends Component {
constructor(props) {
super(props);
this.markers = this.markers.bind(this);
this.handleClick = this.handleClick.bind(this);
this.mapRef = createRef()
}
handleClick() {
const leafletMap = this.mapRef.current.leafletElement;
this.mapRef.current.fitBounds(leafletMap.getBounds()); // Doesn't work
leafletMap.fitBounds(leafletMap.getBounds()); // Doesn't work (just trying to get the bounds of the markers that are there and adjust the view)
this.mapRef.current.leafletElement.flyToBounds(leafletMap.getBounds()); // Doesn't work
}
markers() {
if (this.props.search.items instanceof Array) {
return this.props.search.items.map(function(object, i) {
const position = [object._geoloc.lat, object._geoloc.lng];
return <Marker position={position}>
<Popup>
<span>
<h4>{object.title}</h4>
{object.address}, <br /> {object.city}, {object.state}, {object.zip} <br /> {object._geoloc.lat}, {object._geoloc.lng}
</span>
</Popup>
</Marker>
})
}
}
render() {
const hasLoaded = this.props.search.items instanceof Array;
if (!hasLoaded) {
return null;
}
const position = [this.props.search.items[0]._geoloc.lat, this.props.search.items[0]._geoloc.lng];
return (
<div className="leaflet-map-container">
<div onClick={this.handleClick}>Hello</div>
<Map center={position} zoom={13} ref={this.mapRef}>
<TileLayer
attribution="&copy <a href="http://osm.org/copyright">OpenStreetMap</a> contributors"
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
/>
<FeatureGroup>
{this.markers()}
</FeatureGroup>
</Map>
</div>
)
}
}
Thanks in advance.
解決方案 Here is an example how to accomplish it via react-leaflet
handleClick() {
const map = this.mapRef.current.leafletElement; //get native Map instance
const group = this.groupRef.current.leafletElement; //get native featureGroup instance
map.fitBounds(group.getBounds());
}
where
<div>
<button onClick={this.handleClick}>Zoom</button>
<Map
center={this.props.center}
zoom={this.props.zoom}
ref={this.mapRef}
>
<TileLayer
attribution='&copy <a >OpenStreetMap</a> contributors'
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
/>
<FeatureGroup ref={this.groupRef}>
{this.props.locations.map(location => (
<Marker
key={location.name}
position={{ lat: location.lat, lng: location.lng }}
>
<Popup>
<span>
<h4>{location.name}</h4>
</span>
</Popup>
</Marker>
))}
</FeatureGroup>
</Map>
</div>
which corresponds to
var leafletMap = new L.featureGroup([marker1, marker2, marker3]);
map.fitBounds(leafletMap.getBounds());
Here is a demo
這篇關(guān)于使用 Leaflet-react 時(shí)如何調(diào)用 fitBounds()?的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!
【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!