Я очень новичок в React и листовке. Я пытаюсь построить набор широт и долгот, доступных в объекте на карте в React, используя листовку. Любые указатели на то, как это можно сделать, будут полезны.
Я ознакомился с учебными пособиями по реактивной листовке от https://react-leaflet.js.org. Но я не могу продолжить. Любая помощь приветствуется. Заранее спасибо.
Пример массива данных объекта, который у меня есть:
data=[
{
from_lat: "12.92415",
from_long: "77.67229",
id: "132512",
to_lat: "12.92732",
to_long: "77.63575",
},
{
from_lat: "12.96691",
from_long: "77.74935",
id: "132513",
to_lat: "12.92768",
to_long: "77.62664",
}
]
Ok. Я видел в описании, что вы используете реактивную листовку. Что именно вы подразумеваете под сюжетом? Вы хотите визуализировать точки в виде маркеров или, например, полилиний, поскольку я вижу, что есть начало и конец?
не маркеры, полилиния - это то, что мне нужно, да.
Вы можете хранить данные в таком состоянии:
state = {
...
data: [
{
from_lat: "12.92415",
from_long: "77.67229",
id: "132512",
to_lat: "12.92732",
to_long: "77.63575",
},
{
from_lat: "12.96691",
from_long: "77.74935",
id: "132513",
to_lat: "12.92768",
to_long: "77.62664",
}
]
};
а затем перебрать данные и вернуть экземпляр Polyline следующим образом:
<Map
style = {{ height: "100vh" }}
center = {position}
zoom = {this.state.zoom}
>
<TileLayer
url = "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
attribution='© <a href = "http://osm.org/copyright">OpenStreetMap</a> contributors'
/>
{this.state.data.map(({id, from_lat, from_long, to_lat, to_long}) => {
return <Polyline key = {id} positions = {[
[from_lat, from_long], [to_lat, to_long],
]} color = {'red'} />
})}
</Map>
https://codesandbox.io/s/react-leaflet-polyline-hedzz
import {
FeatureGroup,
MapContainer,
Marker,
Polyline,
TileLayer
} from "react-leaflet";
import "leaflet/dist/leaflet.css";
import L from "leaflet";
const CustomPoliLine = () => {
const mapRef = useRef();
const [center, setCenter] = useState({ lat: 36.460353, lng: 126.440674 });
const [map, setMap] = useState(null);
const pos = [
[36.460353, 126.440674],
[34.789594, 135.438084], //to jpn
[36.460353, 126.440674],
[55.410343, 37.902312], //to rus
[36.460353, 126.440674],
[40.085148, 116.552407] //to chi
];
return (
<div>
<MapContainer
style = {{ height: "480px", width: "100%" }}
zoom = {6}
center = {center}
ref = {mapRef}
whenReady = {setMap}
scrollWheelZoom = {true}
>
<FeatureGroup>
{pos?.map((mark, i) => (
<Marker key = {i} position = {mark} icon = {customMarkerUserPos} />
))}
<Polyline positions = {pos} color = "red" />
</FeatureGroup>
<TileLayer url = "http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png" />
</MapContainer>
</div>
);
};
export default CustomPoliLine;
export const customMarkerUserPos = new L.Icon({
iconUrl: "https://unpkg.com/[email protected]/dist/images/marker-icon.png",
iconSize: [15, 20],
iconAnchor: [5, 20],
popupAnchor: [2, -40]
});
Пожалуйста, никогда не публикуйте ответы, содержащие только ссылки. Если вы хотите удалить гиперссылку, оставьте комментарий под вопросом. Если эта ссылка умирает, то же самое происходит и с любым значением в этом ответе.
теперь разместил ответ под ссылкой.
Теперь единственное, чего не хватает, — это той части, где вы объясняете фрагмент и пытаетесь рассказать ОП (и тысячам будущих исследователей) о том, как и почему ваш фрагмент решает вопрос. (Я не читал ваш ответ).
хорошо, я обязательно это сделаю, спасибо за ваше руководство и поддержку.
из того, что я собрал до сих пор, я должен использовать реактивную листовку. но я не уверен, какие методы/функции дадут мне желаемые результаты.