首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将传单路由机控件添加到另一个div而不是map: react传单

如何将传单路由机控件添加到另一个div而不是map: react传单
EN

Stack Overflow用户
提问于 2022-03-04 20:10:16
回答 1查看 590关注 0票数 0

我想在仪表板上显示路由机控制div (像google地图那样的侧边栏),而不是map div,因为它正在覆盖移动版本的地图。有什么更简单的方法吗?我尝试过以下两种方法:将控制div附加到另一个div附加控制div与onAdd(地图)

我有3个组件MapComponent、RoutingMachine和仪表板。

RoutingMachine.jsx

代码语言:javascript
复制
import React from "react";
import L, { control, Map, map, routing } from "leaflet";
import { createControlComponent } from "@react-leaflet/core";
import "leaflet-routing-machine";
import 'lrm-graphhopper'
import "leaflet-routing-machine/dist/leaflet-routing-machine.css";
import { useEffect } from "react";
import { useMap } from "react-leaflet";


const createRoutineMachineLayer = ({ userLat, userLong, bikeLat, bikeLong }) => {
  
  const instance = L.Routing.control({
    waypoints: [
      L.latLng(userLat, userLong),
      L.latLng(bikeLat, bikeLong)
    ],
    lineOptions: {
      styles: [{ color: "#6FA1EC", weight: 4 }]
    },
    createMarker: function() {
      return null
    },
    router: new L.Routing.GraphHopper('deebe34a-a717-4450-aa2a-f6de3ec9b443', {
      urlParameters: {
          vehicle: 'foot'
      }}),
    show: true,
    addWaypoints: false,
    routeWhileDragging: true,
    draggableWaypoints: true,
    fitSelectedRoutes: true,
    showAlternatives: false
  })

  return instance;
};

const RoutingMachine = createControlComponent(createRoutineMachineLayer);

export default RoutingMachine;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-10 09:30:22

您可以使用两个参考文献来实现这种行为。一个是附加控件的div,另一个是路由机实例的引用。

代码语言:javascript
复制
const Map = () => {
  const [map, setMap] = useState(null);
  const routingMachineRef = useRef();
  const pluginRef = useRef();

  useEffect(() => {
    if (!map) return;
    const controlContainer = routingMachineRef.current.onAdd(map);
    pluginRef.current.appendChild(controlContainer);
  }, [map]);
  ...

  <div
  style={{
    display: "grid",
    gridTemplateColumns: "repeat(2, minmax(0, 1fr))"
  }}
>
  <MapContainer... 
     <RoutineMachine ref={routingMachineRef} />
  </MapContainer>
  <div style={{ border: "1px solid black" }} ref={pluginRef} />
</div>
);
};

在这个演示中,您可以找到垂直附加在div中的控件。您可以修改它,以便将它水平地放置在地图下面,如果您想要的话,或者其他适合您需要的地方。

演示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71356757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档