【发布时间】:2021-03-28 06:49:17
【问题描述】:
我有以下功能性反应组件,它可以在“边界”框中正确显示两个静态标记,该框适合两个标记。
我希望能够传入一组纬度和经度值以供地图显示,但我不知道该怎么做。
这是有效的静态示例:
import React from 'react'
import { MapContainer, TileLayer, Marker } from 'react-leaflet'
import L from 'leaflet'
import 'leaflet/dist/leaflet.css'
const MapLeaflet = () => {
// STATIC MARKER POSITIONS
const position = [42.2974279, -85.628292];
const position2 = [-8.852507, -45.351563];
// BOUNDS CODE
const bounds = L.latLngBounds([position, position2]);
return (
<MapContainer
className=" map"
center={position}
bounds={bounds}
>
<Marker key={key} position={position}>
<Heart/>
</Marker>
<Marker key={key} position={position2}>
<Heart/>
</Marker>
<TileLayer
attribution='&copy <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
/>
</MapContainer>
)
}
如果我通过的是 {coords},我可以动态显示标记:
const MapLeaflet = ({coors}) => {
...
{ coords && coords.map(coord => (
<Marker key={key} latitude={coord[0]} longitude={coord[1]}>
<SomeMarker/>
</Marker>
))}
...
}
但显然,地图尚未将这些“坐标”考虑在内。传入的坐标数组的console.log输出如下:
0: (2) [51.52167056034225, -0.12894469488176763]
1: (2) [46.58635156377568, 2.1796793230151184]
2: (2) [40.819721, 14.341111]
不知何故,我需要以代码接受的格式将以下行替换为对传入坐标的引用,但我不知道该怎么做。
const bounds = L.latLngBounds([position, position2]);
类似
const bounds = L.latLngBounds({coords});
非常感谢任何帮助。
亲切的问候,马特
【问题讨论】:
-
您是否传递了一个由 3 个数组组成的数组(坐标值)?
latLngBounds接受一对纬度数组。还有为什么要在latLngBounds上使用 {}。 coords 值不是一个对象,而是一个数组数组 -
您好 kboul,控制台日志输出仅显示三个条目作为示例。尽管我认为,从它的外观来看,我正在使用一个数组数组。 {coords} 只是作为一个例子,我知道它表示一个对象。请问您知道这是否可行吗?
-
能否请您使用您当前的尝试和您传递的真实值创建一个小演示,因为我不清楚您目前正在尝试什么?
-
对不起,我不是很清楚。我会做一个 jsfiddle 并在完成后发表评论。同时,我只想将静态标记值 const position 和 const position2 替换为我将作为道具传递给组件的动态值。动态值是从 Firestore 中提取的,看起来像我在上面发布的 console.log。感谢您的帮助!
标签: javascript reactjs leaflet react-leaflet