npm / react библиотека для отображения изображения плана этажа с пользовательскими компонентами (растр/битмап)

Вопрос или проблема

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

Варианты, которые я рассматривал, обычно требуют векторное изображение или в основном предназначены для карт (например, Google Maps). Наша предыдущая версия была разработана последним разработчиком и имеет какие-то ужасные вычисления (позиция определялась процентными значениями и вычислялась путем умножения на 2, а затем деления на 2???).

Есть ли у вас предложения по библиотеке, которая может “создать карту” или создать сетку для изображений, чтобы я мог легче устанавливать позиции компонентов на них?

Не совсем ясно по вопросу, но есть много приложений для преобразования растрового изображения в векторное для Windows, Linux и онлайн в браузере. Поиск по запросу “преобразовать растровое изображение в векторное”. Если изображение преобразовано в вектор, то найденные вами приложения могут сделать то, что вы хотите.

Ответ или решение

Для разработки компонента, который позволит пользователю загружать изображение (растровое) плана этажа его объекта и размещать устройства на этом плане, рекомендуется рассмотреть несколько библиотек для React. Ваша задача состоит в том, чтобы обеспечить интуитивно понятный интерфейс для пользователей, не накладывая при этом сложных зависимостей и ненужной обработки данных.

1. Выбор библиотеки

В мире React существует несколько библиотек, которые могут помочь вам в реализации функциональности "картировки" растрового изображения. Одной из лучших опций является react-konva – библиотека для работы с Canvas, которая обеспечивает возможность добавления кастомных компонентов (например, устройств) на растровое изображение. Это будет гибким решением для вашей задачи.

Преимущества react-konva:

  • Поддержка работы с растровыми изображениями.
  • Возможность добавления и перемещения произвольных компонентов внутри холста (Canvas).
  • Высокая производительность и богатая функциональность.

2. Пример реализации

Вот пример того, как вы можете использовать react-konva для создания вашего компонента:

import React, { useState } from 'react';
import { Stage, Layer, Image, Text, Group } from 'react-konva';

const FloorPlanComponent = () => {
  const [image] = useState(new window.Image());
  const [devices, setDevices] = useState([]);

  // Загрузка изображения
  image.src = 'path/to/your/floorplan/image.jpg';

  const handleAddDevice = (x, y) => {
    const newDevice = {
      x,
      y,
      id: devices.length,
      label: `Device ${devices.length + 1}`,
    };
    setDevices([...devices, newDevice]);
  };

  return (
    <Stage width={window.innerWidth} height={window.innerHeight}>
      <Layer>
        <Image image={image} />
        {devices.map(device => (
          <Group key={device.id} x={device.x} y={device.y} draggable>
            <Text text={device.label} fontSize={15} fill={'black'} />
            <Circle radius={10} fill={'red'} onClick={() => alert(device.label)} />
          </Group>
        ))}
      </Layer>
    </Stage>
  );
};

export default FloorPlanComponent;

3. UI и UX

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

  • Интерактивность: Пользователь должен иметь возможность легко добавлять и перемещать устройства. Рассмотрите возможность использования Drag-and-Drop для этих операций.
  • Обратная связь: Когда пользователь размещает устройство, важно предоставлять визуальную обратную связь, чтобы был понятен процесс добавления.
  • Сохранение состояния: Реализация функции сохранения текущего состояния устройства, чтобы данные могли быть восстановлены позже.

4. Альтернативные решения

Если вы ищете другие библиотеки, вы можете рассмотреть:

  • react-image-mapper: Особенно хорошо подходит для создания интерактивных изображений, однако может потребовать дополнительной работы для реализации кастомных компонентов на растровых изображениях.
  • fabric.js: Еще одна мощная библиотека для работы с Canvas, позволяющая добавлять интерактивные элементы, однако имеет немного более сложный API по сравнению с react-konva.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...