mahal_map 1.6.6 → 1.6.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +106 -0
- package/dist/index.d.mts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +4 -4
- package/dist/index.mjs.map +1 -1
- package/dist/mahal_map.sdk.js +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -519,6 +519,112 @@ MahalMap.onReady("map", () => {
|
|
|
519
519
|
map.destroy();
|
|
520
520
|
```
|
|
521
521
|
|
|
522
|
+
## MeasureTool (линейка и планиметр)
|
|
523
|
+
|
|
524
|
+
`MeasureTool` — инструмент измерения расстояния и площади прямо на карте (линейка + планиметр, как в Яндекс.Картах). Полностью самодостаточен: сам рисует точки, линии, полигон и подписи поверх MapLibre, сам обрабатывает клики/drag/удаление точек. Приложение только передает стили (цвета, иконки, подписи единиц) и слушает `onChange`.
|
|
525
|
+
|
|
526
|
+
```ts
|
|
527
|
+
import { MeasureTool } from "mahal_map";
|
|
528
|
+
|
|
529
|
+
const map = MahalMap.getInstance("map").getMap();
|
|
530
|
+
|
|
531
|
+
const measureTool = new MeasureTool(map, {
|
|
532
|
+
mode: "distance",
|
|
533
|
+
style: {
|
|
534
|
+
lineColor: "#278960",
|
|
535
|
+
pointColor: "#FFFFFF",
|
|
536
|
+
pointStrokeColor: "#278960",
|
|
537
|
+
fillColor: "#278960",
|
|
538
|
+
fillOpacity: 0.15,
|
|
539
|
+
},
|
|
540
|
+
labels: {
|
|
541
|
+
meters: "м",
|
|
542
|
+
kilometers: "км",
|
|
543
|
+
squareMeters: "м²",
|
|
544
|
+
squareKilometers: "км²",
|
|
545
|
+
},
|
|
546
|
+
onChange: (state) => {
|
|
547
|
+
console.log(state.mode, state.draft, state.shapes);
|
|
548
|
+
},
|
|
549
|
+
onCloseRequest: () => {
|
|
550
|
+
measureTool.stop();
|
|
551
|
+
},
|
|
552
|
+
});
|
|
553
|
+
|
|
554
|
+
measureTool.start("distance");
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
### Важно: цвета — реальные, не CSS-переменные
|
|
558
|
+
|
|
559
|
+
MapLibre GL проверяет `paint`-свойства слоя и не понимает `var(--primary)` — только hex/rgb. Если в приложении цвета живут в CSS-переменных (тема light/dark), резолвьте их в реальное значение перед передачей в `style`:
|
|
560
|
+
|
|
561
|
+
```ts
|
|
562
|
+
const primary = getComputedStyle(document.documentElement)
|
|
563
|
+
.getPropertyValue("--primary")
|
|
564
|
+
.trim() || "#278960";
|
|
565
|
+
|
|
566
|
+
const measureTool = new MeasureTool(map, {
|
|
567
|
+
style: { lineColor: primary, pointStrokeColor: primary, fillColor: primary },
|
|
568
|
+
});
|
|
569
|
+
```
|
|
570
|
+
|
|
571
|
+
Значения `badgeBackground`, `badgeTextColor` и другие DOM-стили бейджа — обычный CSS, туда `var(--x)` передавать можно.
|
|
572
|
+
|
|
573
|
+
### Конструктор: `new MeasureTool(map, options?)`
|
|
574
|
+
|
|
575
|
+
| Опция | Тип | Описание |
|
|
576
|
+
| ------------------- | ---------------------------------------- | ------------------------------------------------------------------------ |
|
|
577
|
+
| `mode` | `"distance" \| "area"` | Режим по умолчанию. По умолчанию `"distance"`. |
|
|
578
|
+
| `sourceIdPrefix` | `string` | Префикс id source/layer на карте. По умолчанию `"mahal-measure"`. |
|
|
579
|
+
| `style` | `MeasureStyleOptions` | Цвета и размеры точек/линий/заливки/бейджа. |
|
|
580
|
+
| `icons` | `MeasureIcons` | SVG-иконки `trash` / `close` / `check` для бейджей. |
|
|
581
|
+
| `labels` | `MeasureLabels` | Подписи единиц: `meters`, `kilometers`, `squareMeters`, `squareKilometers`. |
|
|
582
|
+
| `onChange` | `(state: MeasureState) => void` | Вызывается при любом изменении: новая точка, drag, смена режима и т.д. |
|
|
583
|
+
| `onCloseRequest` | `() => void` | Вызывается по клику на ✕ в бейджике активной фигуры — решение "выключить инструмент" остается за приложением. |
|
|
584
|
+
|
|
585
|
+
### Методы
|
|
586
|
+
|
|
587
|
+
| Метод | Описание |
|
|
588
|
+
| ------------------------------------- | ---------------------------------------------------------------------------------------------- |
|
|
589
|
+
| `start(mode?)` | Включает инструмент и начинает/продолжает рисование в указанном режиме. |
|
|
590
|
+
| `stop()` | Выключает инструмент, прячет активный бейдж. Сохраненные фигуры остаются на карте. |
|
|
591
|
+
| `setMode(mode)` | Переключает режим. Если фигура уже рисуется — её точки сохраняются, меняется только тип (линия ⇄ полигон), как в Яндекс.Картах. |
|
|
592
|
+
| `finishDraft()` | Завершает текущую фигуру (если валидна — от 2 точек для линии, от 3 для полигона) и начинает новую. |
|
|
593
|
+
| `removeShape(shapeId)` | Удаляет фигуру (черновик или уже сохраненную) целиком. |
|
|
594
|
+
| `removePoint(shapeId, pointId)` | Удаляет одну точку фигуры. |
|
|
595
|
+
| `clearAll()` | Удаляет все фигуры и черновик. |
|
|
596
|
+
| `getState()` | Возвращает текущий `MeasureState` (снимок, без подписки). |
|
|
597
|
+
| `destroy()` | Полностью снимает слои, обработчики и DOM-бейджи. Вызывать при размонтировании. |
|
|
598
|
+
|
|
599
|
+
### Взаимодействие на карте
|
|
600
|
+
|
|
601
|
+
- клик по карте — добавляет точку в текущую фигуру;
|
|
602
|
+
- перетаскивание существующей точки — двигает её, расстояние/площадь пересчитываются на лету;
|
|
603
|
+
- правый клик по точке — удаляет её;
|
|
604
|
+
- наведение на линию/ребро полигона — показывает точку-призрак прямо под курсором; зажатие мыши вставляет в этом месте новую точку и сразу тянет её (как вставка узла в Яндекс.Картах);
|
|
605
|
+
- бейдж активной (незавершенной) фигуры — показывает значение и три кнопки: ✓ (завершить фигуру), 🗑 (удалить), ✕ (вызывает `onCloseRequest`);
|
|
606
|
+
- у уже сохраненных фигур — постоянный мини-бейдж: только значение и 🗑 (удалить), не пропадает при рисовании следующей фигуры.
|
|
607
|
+
|
|
608
|
+
### `MeasureState`
|
|
609
|
+
|
|
610
|
+
```ts
|
|
611
|
+
interface MeasureState {
|
|
612
|
+
active: boolean;
|
|
613
|
+
mode: "distance" | "area";
|
|
614
|
+
draft: MeasureShape | null;
|
|
615
|
+
shapes: MeasureShape[];
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
interface MeasureShape {
|
|
619
|
+
id: string;
|
|
620
|
+
mode: "distance" | "area";
|
|
621
|
+
points: { id: string; lngLat: [number, number] }[];
|
|
622
|
+
closed: boolean;
|
|
623
|
+
distance: number; // метры
|
|
624
|
+
area: number; // квадратные метры, 0 для линии
|
|
625
|
+
}
|
|
626
|
+
```
|
|
627
|
+
|
|
522
628
|
## License
|
|
523
629
|
|
|
524
630
|
ISC
|
package/dist/index.d.mts
CHANGED
|
@@ -298,6 +298,7 @@ declare class MeasureTool {
|
|
|
298
298
|
private icons;
|
|
299
299
|
private draggingPointId;
|
|
300
300
|
private draggingShapeId;
|
|
301
|
+
private dragPanWasEnabled;
|
|
301
302
|
private suppressNextClick;
|
|
302
303
|
private hoverInsert;
|
|
303
304
|
private onChange?;
|
|
@@ -330,6 +331,7 @@ declare class MeasureTool {
|
|
|
330
331
|
private recomputeShape;
|
|
331
332
|
private onMapClick;
|
|
332
333
|
private onPointMouseDown;
|
|
334
|
+
private beginPointDrag;
|
|
333
335
|
private onPointDragMove;
|
|
334
336
|
private onPointDragUp;
|
|
335
337
|
private stopDragListeners;
|
package/dist/index.d.ts
CHANGED
|
@@ -298,6 +298,7 @@ declare class MeasureTool {
|
|
|
298
298
|
private icons;
|
|
299
299
|
private draggingPointId;
|
|
300
300
|
private draggingShapeId;
|
|
301
|
+
private dragPanWasEnabled;
|
|
301
302
|
private suppressNextClick;
|
|
302
303
|
private hoverInsert;
|
|
303
304
|
private onChange?;
|
|
@@ -330,6 +331,7 @@ declare class MeasureTool {
|
|
|
330
331
|
private recomputeShape;
|
|
331
332
|
private onMapClick;
|
|
332
333
|
private onPointMouseDown;
|
|
334
|
+
private beginPointDrag;
|
|
333
335
|
private onPointDragMove;
|
|
334
336
|
private onPointDragUp;
|
|
335
337
|
private stopDragListeners;
|