Указания о том, как использовать ломаную линию листовки в reactjs и react-leaflet

Я очень новичок в 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",
  }
]

из того, что я собрал до сих пор, я должен использовать реактивную листовку. но я не уверен, какие методы/функции дадут мне желаемые результаты.

Shriprada S 27.05.2019 15:43

Ok. Я видел в описании, что вы используете реактивную листовку. Что именно вы подразумеваете под сюжетом? Вы хотите визуализировать точки в виде маркеров или, например, полилиний, поскольку я вижу, что есть начало и конец?

kboul 27.05.2019 15:46

не маркеры, полилиния - это то, что мне нужно, да.

Shriprada S 27.05.2019 15:52
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
5 651
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете хранить данные в таком состоянии:

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='&copy; <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

  1. Существует массив позиций, в котором содержится массив lat lng.
  2. Возьмите MapContainer, если версия реактивной листовки> 2.8.0, в противном случае Map.
  3. Возьмите маркер и возьмите полилинию внутри FeatureGroup
  4. TileLayer нужен для отображения карты внутри div
  5. Вы можете сделать другой компонент для значка. В противном случае определите его в том же компоненте. Теперь тебе хорошо идти...
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]
});

Пожалуйста, никогда не публикуйте ответы, содержащие только ссылки. Если вы хотите удалить гиперссылку, оставьте комментарий под вопросом. Если эта ссылка умирает, то же самое происходит и с любым значением в этом ответе.

mickmackusa 09.12.2021 11:42

теперь разместил ответ под ссылкой.

manoj garu 09.12.2021 12:35

Теперь единственное, чего не хватает, — это той части, где вы объясняете фрагмент и пытаетесь рассказать ОП (и тысячам будущих исследователей) о том, как и почему ваш фрагмент решает вопрос. (Я не читал ваш ответ).

mickmackusa 09.12.2021 13:04

хорошо, я обязательно это сделаю, спасибо за ваше руководство и поддержку.

manoj garu 09.12.2021 13:09

Другие вопросы по теме