mahal_map 1.6.5 → 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 +7 -3
- package/dist/index.d.ts +7 -3
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +5 -5
- 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
|
@@ -283,21 +283,22 @@ declare class MeasureTool {
|
|
|
283
283
|
private pointsSourceId;
|
|
284
284
|
private linesSourceId;
|
|
285
285
|
private fillsSourceId;
|
|
286
|
-
private labelsSourceId;
|
|
287
286
|
private hoverPointSourceId;
|
|
288
287
|
private pointsLayerId;
|
|
289
288
|
private linesCasingLayerId;
|
|
290
289
|
private linesLayerId;
|
|
291
290
|
private fillsLayerId;
|
|
292
|
-
private labelsLayerId;
|
|
293
291
|
private hoverPointLayerId;
|
|
294
292
|
private mode;
|
|
295
293
|
private isActive;
|
|
296
294
|
private draft;
|
|
297
295
|
private shapes;
|
|
298
296
|
private badge;
|
|
297
|
+
private shapeBadges;
|
|
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;
|
|
@@ -351,8 +353,10 @@ declare class MeasureTool {
|
|
|
351
353
|
private buildLineFeature;
|
|
352
354
|
private buildFillFeature;
|
|
353
355
|
private buildPointFeatures;
|
|
354
|
-
private
|
|
356
|
+
private getShapeAnchor;
|
|
355
357
|
private render;
|
|
358
|
+
private syncShapeBadges;
|
|
359
|
+
private updateShapeBadgePositions;
|
|
356
360
|
private updateBadge;
|
|
357
361
|
private updateBadgePosition;
|
|
358
362
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -283,21 +283,22 @@ declare class MeasureTool {
|
|
|
283
283
|
private pointsSourceId;
|
|
284
284
|
private linesSourceId;
|
|
285
285
|
private fillsSourceId;
|
|
286
|
-
private labelsSourceId;
|
|
287
286
|
private hoverPointSourceId;
|
|
288
287
|
private pointsLayerId;
|
|
289
288
|
private linesCasingLayerId;
|
|
290
289
|
private linesLayerId;
|
|
291
290
|
private fillsLayerId;
|
|
292
|
-
private labelsLayerId;
|
|
293
291
|
private hoverPointLayerId;
|
|
294
292
|
private mode;
|
|
295
293
|
private isActive;
|
|
296
294
|
private draft;
|
|
297
295
|
private shapes;
|
|
298
296
|
private badge;
|
|
297
|
+
private shapeBadges;
|
|
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;
|
|
@@ -351,8 +353,10 @@ declare class MeasureTool {
|
|
|
351
353
|
private buildLineFeature;
|
|
352
354
|
private buildFillFeature;
|
|
353
355
|
private buildPointFeatures;
|
|
354
|
-
private
|
|
356
|
+
private getShapeAnchor;
|
|
355
357
|
private render;
|
|
358
|
+
private syncShapeBadges;
|
|
359
|
+
private updateShapeBadgePositions;
|
|
356
360
|
private updateBadge;
|
|
357
361
|
private updateBadgePosition;
|
|
358
362
|
}
|