【问题标题】:how to pass array of point to the waypoints in leaflet-routing-machine?如何将点数组传递给传单路由机中的航点?
【发布时间】:2022-07-24 16:08:13
【问题描述】:

我想使用leafletleaflet-routing-machine 从多个点拖动路线。我不知道如何将所有位置传递到waypoints

import { useEffect, useState } from "react";
import L from "leaflet";
import "leaflet-routing-machine/dist/leaflet-routing-machine.css";
import "leaflet-routing-machine";
import { useMap } from "react-leaflet";

L.Marker.prototype.options.icon = L.icon({
    iconUrl: "https://unpkg.com/leaflet@1.7.1/dist/images/marker-icon.png"
});

export default function RoutingLayer({ route }) {
    const map = useMap();
    const waypoints = route ? route : null;
    const [routing, setRouting] = useState([]);

    useEffect(() => {
        var temp = get_route(waypoints)
        setRouting(temp);

        if (!map) return;
        const routingControl = L.Routing.control({
            waypoints: routing.length > 0 && routing,
            // waypoints: [L.latLng(37.2461188, 49.6219894), L.latLng(35.7074147, 51.3376843)],
            routeWhileDragging: true
        }).addTo(map);

        return () => map.removeControl(routingControl);
    }, [map, waypoints]);

    async function get_route(waypoints) {
        let temp = []
        for (let i = 0; i < waypoints.length; i++) {
            temp.push(L.latLng(waypoints[i][0], waypoints[i][1]))
        }
        return temp;
    }

    return null;
}

以上代码适用于waypoints: [L.latLng(37.2461188, 49.6219894), L.latLng(35.7074147, 51.3376843)], 但我想动态地说明这一点。此代码没有错误但不拖动路线。因为航路点是空的。

我猜想对get_route 使用异步等待但不起作用。

这是MapContainer

import React, { useEffect, useState } from 'react'
import { MapContainer, TileLayer, Marker, Popup } from 'react-leaflet'
import "./monitoring.css";
import RoutingLayer from "./RoutingLayer";

function Map() {
    const [allLocations, setAllLocations] = useState([])
    const [allDetails, setAllDetails] = useState([])
    const [route, setRoute] = useState([])

    useEffect(() => {
        GetAllBusLocation().then((res) => {
            const data = res.data.data;
            var points = []
            setAllDetails(data);
            for (let i = 0; i < data.length; i++) {
                points.push(data[i].spanData.coordinates)
            }
            data.map((bus) => {
                points.push(bus.spanData.coordinates)
            })
            setAllLocations(points)
            map_route(points);
        })
    }, [])

    const map_route = (waypoints) => {
        let route = []
        for (let i = 0; i < waypoints.length; i++) {
            let temp = []
            temp.push(waypoints[i][0], waypoints[i][1])
            route.push(temp)
        }
        setRoute(route);
        return route;
    }

    return (
        <div style={{ width: "100%", height: "100%" }}>
            <MapContainer center={[32.4279, 53.6880]} zoom={7} scrolWheelZoom={true}>
                <TileLayer
                    url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
                />
                <RoutingLayer route={route ? route : null} />
            </MapContainer>
        </div>
    )
}

export default Map

【问题讨论】:

    标签: routes leaflet react-leaflet leaflet-routing-machine


    【解决方案1】:

    最后,我解决了这个问题。这是一个异步问题。首先,加载点或位置,然后转换为路线,然后绘制路线。所以,我停止运行其余的程序,直到使用 await 完全执行 get_route(points)

    import L from "leaflet";
    
    function Map() {
    
        const [waypoints, setWaypoints] = useState([])
    
        useEffect(() => {
            GetAllBusLocation(user).then(async (res) => {
                ...
                // points is my coordinates
                var route = await get_route(points);
                setWaypoints(route);
            })
        }, [])
    
        async function get_route(waypoints) {
            let temp = []
            for (let i = 0; i < waypoints?.length; i++) {
                temp.push(L.latLng(waypoints[i][0], waypoints[i][1]))
            }
            return temp;
        }
    
    return (
            <MapContainer>
            ...
                 <RoutingBusLayer waypoints={waypoints ? waypoints : null} />
            </MapContainer>            
        )
    }
    
    export default Map
    

    【讨论】:

      猜你喜欢
      • 2021-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多