L.Routing.control на реактивной листовке v3 с хуками

Я только вижу, что L.Routing.control работает с версией 3, есть ли эквивалентная версия для v3? Я пытаюсь настроить маршрутизацию и направления между двумя точками.


person Ebizl    schedule 18.05.2021    source источник


Ответы (1)


Вы можете создать свой собственный компонент для настройки маршрутизации между двумя точками, используя leaflet-routing-machine:

Установите библиотеку:

npm i leaflet-routing-machine

Импортировать файл css библиотеки:

import "leaflet-routing-machine/dist/leaflet-routing-machine.css";

Импортируйте js-файл библиотеки:

import "leaflet-routing-machine";

Создайте пользовательскую композицию:

function Routing() {
  const map = useMap();

  useEffect(() => {
    if (!map) return;

    const routingControl = L.Routing.control({
      waypoints: [L.latLng(57.74, 11.94), L.latLng(57.6792, 11.949)],
      routeWhileDragging: true
    }).addTo(map);

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

  return null;
}

затем используйте его как обычный компонент реагирующей листовки:

<MapContainer ...>
  ...
  <Routing/>
</MapContainer>

Демо

person kboul    schedule 18.05.2021
comment
Привет! У меня нет доступа к L.Routing.control, я использую реактивную листовку 3.1, мне нужно понизить версию? - person Ebizl; 18.05.2021
comment
Вам необходимо установить библиотеку (leaflet-routing-machine) и импортировать ее, чтобы иметь доступ к L.Routing.control. Это не имеет отношения к реагирующей листовке. Это отдельная библиотека. Вы уже упомянули об этом в своем вопросе, поэтому я думал, что вы знаете об этом. - person kboul; 18.05.2021
comment
мне потребовалось некоторое время, но похоже, что lrm не подключается к L, чтобы я мог получить доступ к Routing.control, какие-нибудь мысли о том, как это исправить? - person Ebizl; 19.05.2021
comment
Взгляните на демо. В нем есть весь необходимый код для запуска примера. L.Routing.control доступен, если вы установили и импортировали упомянутую ранее библиотеку. Это понятно? - person kboul; 19.05.2021
comment
Я решил проблему, с которой столкнулся в связи с этим сообщением leaflet-core-esm-pat" title="как исправить ошибку, не удалось скомпилировать модули узлов, реагировать на leaflet core esm pat">stackoverflow.com/questions/67552020/ Теперь я могу запустить тот же пример кода в моей локальной среде. Спасибо @kboul - person Ebizl; 22.05.2021
comment
Пожалуйста, примите ответ, если он помог вам решить вашу проблему - person kboul; 22.05.2021