- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不知道如何在 Leaflet map 上调用 fitBounds()。
基本上,我试图在 map 上显示多个标记,并相应地调整 View (放大、缩小、飞向等)。我还看到了一些示例How do you call fitBounds() when using leaflet-react?,我尝试实现但它不起作用。这是我尝试过的代码。
import React, { createRef, Component } from "react";
import {
Map,
TileLayer,
Marker,
Popup
} from "react-leaflet";
import L from "leaflet";
import Header from "../Layout/Header";
import Card from "@material-ui/core/Card";
import CardContent from "@material-ui/core/CardContent";
import Typography from "@material-ui/core/Typography";
import "leaflet/dist/leaflet.css";
export class Mapp extends Component {
constructor(props) {
super(props);
this.state = {
map: [],
open: false,
bounds: null,
center: [35.000074, 104.999927]
};
this.mapRef = createRef();
this.groupRef = createRef();
}
toggleHiddden1() {
this.setState({
open: false
});
async componentDidMount() {
try {
await fetch(`https://coronaviva.herokuapp.com/api/1/infected/data/`, {
method: "GET",
headers: {
Accept: "application/json",
"Content-Type": "application/json",
Authorization: "Bearer F9bQK456iUpJVZJLTZsMEKhhENqnGJ"
}
})
.then(map => map.json())
.then(map => {
this.setState({
map
});
});
} catch (err) {
console.log(err);
}
let mapInst = this.refs.map.leafletElement.fitBounds;
console.log(mapInst); // i tried this but this not working.
}
// centerUpdated(center) {
// this.center = center;
// }
// boundsUpdated(bounds) {
// this.bounds = bounds;
// }
render() {
const { map } = this.state;
const pointerIcon = new L.Icon({
iconUrl:
"https://icons.iconarchive.com/icons/paomedia/small-n-flat/512/map-marker-icon.png",
iconAnchor: [25, 40],
iconSize: [50, 50]
});
return (
<div>
<Header
state={this.state}
load={this.onChange}
submit={this.handleSubmit}
/>
<Map
center={[51.9194, 19.1451]}
style={{ height: "100vh", width: "auto" }}
zoom={6}
ref="map"
bounceAtZoomLimits={true}
maxBoundsViscosity={0.95}
maxBounds={[
[-180, -90],
[180, 90]
]}
className="map_map margin-zero map-padding"
>
{map.map(c => (
<Marker
position={[c.latitude, c.longitude]}
icon={pointerIcon}
onclick={this.toggleHiddden.bind(this)}
>
<Popup autoPan={false}>
<Card className="carrr">
{c.location === "Israel" ? (
<img
className="image"
src="https://thehill.com/sites/default/files/styles/article_full/public/telaviv_skyline_09202018.jpg?itok=pxhk1Rtl"
alt="Contemplative Reptile"
/>
) : (
<img
className="image"
src="https://www.dwf.law/-/media/DWF/Images/Locations-Assets/Warsaw/Warsaw-700-x-388.ashx"
alt="Contemplative Reptile"
/>
)}
<CardContent>
<Typography gutterBottom variant="h5" component="h2">
{c.location && <span> Place : {c.location} </span>}
</Typography>
<h6>Address : {c.address}</h6>
<p className="text-dark" style={{ marginTop: "-5px" }}>
{c.info && (
<span>
<strong> Info</strong>: {c.info}{" "}
</span>
)}
</p>
<p
color="textSecondary text-secondary"
component="p"
className="lodl"
>
PlaceType : {c.place_type}
<br></br>
{c.start_hour && (
<span>
Start Hour : {c.start_hour}{" "}
{c.start_hour > "12" ? "PM" : "AM"}
</span>
)}
<br></br>
{c.end_hour && (
<span>
End Hour : {c.end_hour}{" "}
{c.end_hour > "12" ? "PM" : "AM"}
</span>
)}
</p>
</CardContent>
</Card>
</Popup>
</Marker>
))}
<TileLayer
noWrap={true}
url="https://tiles.stadiamaps.com/tiles/alidade_smooth/{z}/{x}/{y}{r}.png"
subdomains="1234"
attribution='© <a href="http://osm.org/copyright">OpenStreepMap</a> '
/>
</Map>
</div>
);
}
}
export default Mapp;
最佳答案
您的代码中有几个错误:
您不能使用 }
关闭 toggleHiddden1
。此外,您在组件中将其称为 toggleHiddden
。您应该为该方法使用一个名称。
map 实例源自let mapInst = this.mapRef.current.leafletElement;
不是来自let mapInst = this.refs.map.leafletElement;
然后你可以调用fitBounds()
react-leaflet Map wrapper 中的 ref 应该是 ref={this.mapRef}
并且不是 ref="map"
在标记上循环时放置关键点。
刚刚使用了 openstreet map 图 block url 来演示演示。
编辑要同时对标记使用 fitBounds 和 getBounds,您需要使用 FeatureGroup
包装标记循环并给它一个引用,然后执行
let mapInst = this.mapRef.current.leafletElement;
const group = this.groupRef.current.leafletElement; //get native featureGroup instance
mapInst.fitBounds(group.getBounds());
在你的componentDidMount
内
然后你就会得到想要的结果。
关于javascript - 如何在react-leaflet中调用fitBounds和getBounds?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60734165/
我的 Leaflet map JavaScript 如下,在底部附近您将看到我的 fitBounds() 定义。 问题是我不明白如何准确使用它,或者将它放在代码中的何处以使其工作(即缩放以包含所有标记
我正在使用 Leaflet 和 Mapbox,我想设置 map 的 View : 所有标记均可见 中心设置为特定点 使用 setView 和 fitbounds 单独完成每个点很容易,但我不知道如何同
当我初始化 map 时,我向 map 添加 1 个标记。当我缩小 map 时,我可以在 map “副本”上多次看到添加的标记。 当我搜索某个位置时, map 会添加一个新标记。之后,我使用 fitBo
我正在使用 Selenium 编写验收测试来测试使用 Google Maps API 的应用程序。为了测试 map 标记的位置,我是 using un-optimized markers和独特的标题属
我有一个谷歌地图边界函数运行如下: function intializeCustom() { var map = new google.maps.Map(document.getElement
我正在尝试在传单 map 中设置 fitBounds 选项,如下所示: var bounds = new L.LatLngBounds([[Math.max(lat, borneLat), Math.
我知道如果边界发生变化,就会触发一个 bounds_changed 事件,但是我需要知道 fitBounds 何时完成(当边界发生变化或边界保持不变时)。 谷歌有某种容忍度,如果边界变化很小,它实际上
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我正在使用 fitbound 函数在 map 的折线上自动缩放。但第一次如果我更改图表数据并再次调用相同的函数,它就无法正常工作,它就可以正常工作。函数代码如下。 var mapOptions = {
下面的代码工作正常,只是它没有缩放到给定的点。 如果我直接使用 Latlng,它就可以工作,无需将地址转换为 Latlng。 我需要将地址转换为 latlng,因为我是从数据库中获取地址的。 有人知道
我目前只能使用 google map v3。我尝试以这种方式手动添加边界,但它不起作用!? map.fitBounds((53.399999, 9.73215099999993), (53.71714
我只是想澄清一下我的理解方式是否正确。在我的 Google map 应用中,我想向我的用户显示来自特定大陆的标记。 问题:Google Map API 中的边界是由不多于两个点(标记)构成的区域,我说
新编码器尝试在我的 View 中调整 GoogleMap。 我查了很多资料,得出了这个结论,但对我不起作用。 覆盖 func loadView() { var markerList = [GM
我有两种类型的搜索来在 map 上放置标记。一个搜索基于来自输入表单的搜索查询触发,另一个在 moveend 事件上触发(即“在 map 移动时重做搜索”)。结果数据不一样;前者使用半径,后者限制在范
我的代码: if(!bounds.isEmpty()) { map.fitBounds(bounds); if (map.getZoom() > 11) { map.s
我对 googlemaps fitBounds 函数有疑问。 for (var i = 0; i Google Maps LatLngBounds.extend() Demo
我在我们的应用程序中使用 mapbox。执行 this.map.fitBounds(bound value) 将缩小或放大 map 以绑定(bind)指定值。在调用 this.map.fitBound
在这里,我的 javascript 代码在 map 中呈现标记,然后是该 map 的 fitBounds。 map 边界根据geojson得到拟合,但问题是当有任何标记时 在 map 上,我尝试适应绑
如何避免 this.map.fitBounds() 缩小?执行 this.map.fitBounds 将放大或缩小 map 以适合边界值。我想避免 fitBounds 的缩小功能。我怎样才能做到这一点
如果我在 Google map 上添加带有标签的标记,然后调用 fitBounds 到另一个区域,我仍然会继续看到没有标记的标签,除非缩小。这是一个错误吗? 这是一个工作 fiddle ,尝试单击 M
我是一名优秀的程序员,十分优秀!