Париж Google Photorealistic 3D Tiles 48.8584° N · 2.2945° E
React 19 · three.js ≥ 0.160 · ESM + CJS + types
Картография 3D
в реальном времени
для React
Real-time 3D cartography for React.
Императивный движок Three.js, который React монтирует и оставляет работать. MapEngine владеет камерой, тайлами и слоями, поэтому цикл отрисовки никогда не ждёт повторного рендера.
npm i @pasquelin/map3d three react react-dom
- Версия
- 0.6.0
- Peer-зависимости
- react 19 · three ≥ 0.160
- Сборка
- ESM + CJS + .d.ts
- Лицензия
- PolyForm Noncommercial
Живые демо
Попробуйте в браузере
Без установки и без ключей. Демо собираются из этого репозитория при каждом пуше и раздаются прямо с GitHub Pages.
Галерея
С орбиты до тротуара
Одна библиотека покрывает весь спуск: орбитальный глобус, региональная кластеризация, линия крыш, названия улиц под ногами.
-
12 700 km От глобуса к плоской карте запасной эллипсоид, умная кластеризация
-
9 km Маркеры и кластеры переиспользуемые DOM-узлы, разделённые по категориям
-
3 km Линия горизонта маркеры сохраняют экранный размер при любом наклоне
-
900 m Координатная сетка ложится на рельеф, толщина линии на экране постоянна
-
1,7 m Пешеходный режим высота глаз, гравитация, столкновения
Возможности
Что уже входит
Каждая поверхность — панель инструментов, элементы управления, поиск, координатная сетка, кластеризация — монтируется внутри <Map> и управляется конфигурацией. Вы добавляете только данные.
-
Фотореалистичное 3D, плоское 2D
cesiumIonTokenGoogle Photorealistic 3D Tiles через Cesium Ion, эллипсоидный глобус без токена и двумерная базовая карта от Google или с вашего сервера XYZ. -
DOM-маркеры и кластеры
markersLayer()Настоящие DOM-узлы с нативными hover, фокусом и CSS-анимацией. Переиспользуются и записываются одним проходомtranslate3d; движущийся объект скользит, а не пересоздаётся. -
Редактор рисования
drawРамочное и лассо-выделение, маркеры изменения размера и поворота, стили по инструменту, отмена и повтор, GeoJSON на входе и на выходе. -
Живые данные по области просмотра
useLiveData()Подгрузка по ограничивающему прямоугольнику при движении камеры плюс обновления в реальном времени. -
Символика MIL-STD-2525D
динамический импортSDK символики на 9 МБ загружается по требованию — он никогда не попадает в сборку, где символы не отображаются. -
Типизированные тема и подписи
theme · labelsСветлая и тёмная,prefers-reduced-motionсоблюдается, всё переводимо. Ни одной строки и ни одного значения, зашитых в код.
В деле
Инструменты в работе
Каждый снимок сделан в демо, которое можно открыть выше, — никаких макетов.
-
Рисование и выделениемаркеры изменения размера и поворота, живая панель выделения, отмена и повтор
-
Палитра MIL-STD-2525Dсвой, противник, нейтральный, неизвестный — SDK загружается по требованию
-
Каталог и источникивключаете источник, приходят 252 точки, и кластеры перестраиваются
-
Светлая темаодна настройка — за ней следует весь интерфейс, включая карту
Быстрый старт
Карта с кластерами в десяток строк
import { Map, markersLayer, type MarkerData } from '@pasquelin/map3d'
type Alert = { title: string }
const alerts: MarkerData<Alert>[] = [
{ id: 1, type: 'critical', position: { lat: 48.8566, lng: 2.3522 }, title: 'Intrusion', data: { title: 'Intrusion' } },
{ id: 2, type: 'info', position: { lat: 48.8606, lng: 2.3376 }, title: 'Patrol', data: { title: 'Patrol' } },
]
export function App() {
return (
<div style={{ height: '100vh' }}>
<Map
center={{ lat: 48.8566, lng: 2.3522 }}
zoom={13}
layers={[markersLayer<Alert>({ points: alerts, cluster: { enabled: true } })]}
/>
</div>
)
}
Дополнительные плагины — IGN Géoplateforme, Windy, планы помещений — живут в отдельном репозитории, а свой можно написать через API плагинов.