mahal_map 2.0.1 → 2.0.3
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 +214 -163
- package/dist/index.d.mts +50 -8
- package/dist/index.d.ts +50 -8
- package/dist/index.js +1 -1
- package/dist/index.mjs +4 -5
- package/dist/mahal_map.sdk.js +1 -1
- package/package.json +3 -3
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
package/dist/index.d.mts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as maplibre_gl from 'maplibre-gl';
|
|
1
2
|
import { Map, FlyToOptions, Marker } from 'maplibre-gl';
|
|
2
3
|
|
|
3
4
|
declare class CameraController {
|
|
@@ -174,9 +175,12 @@ interface IMaps3DBuildingsController {
|
|
|
174
175
|
}
|
|
175
176
|
interface IMaps3DBuildingClickInfo {
|
|
176
177
|
id: string | number;
|
|
178
|
+
/** Атрибуты объекта; `props.osm_id` — идентификатор, который не меняется. */
|
|
179
|
+
props: Record<string, unknown>;
|
|
180
|
+
/** Высота здания в метрах. */
|
|
181
|
+
height: number;
|
|
182
|
+
/** Порядковый номер внутри сцены. Живёт до ближайшей пересборки геометрии. */
|
|
177
183
|
index?: number;
|
|
178
|
-
height?: number;
|
|
179
|
-
props?: Record<string, unknown>;
|
|
180
184
|
[key: string]: unknown;
|
|
181
185
|
}
|
|
182
186
|
interface IMaps3DObjectsLightOptions {
|
|
@@ -263,10 +267,13 @@ type Maps3DCtor = (new (options: IMaps3DLayerOptions) => IMaps3DLayer) & {
|
|
|
263
267
|
styleUrl?(style?: string, base?: string): string;
|
|
264
268
|
/** Подключение к уже созданной карте; возвращает экземпляр с `ready`. */
|
|
265
269
|
enhance?(map: Map, options?: IMaps3DLayerOptions): IMaps3DLayer;
|
|
266
|
-
/**
|
|
270
|
+
/**
|
|
271
|
+
* MapLibre с платформы вместе со своим воркером. Возвращает то же, что
|
|
272
|
+
* `import * as maplibregl from "maplibre-gl"` — декларации гарантирует peerDependency.
|
|
273
|
+
*/
|
|
267
274
|
maplibre?(options?: {
|
|
268
275
|
base?: string;
|
|
269
|
-
}): Promise<
|
|
276
|
+
}): Promise<typeof maplibre_gl>;
|
|
270
277
|
readonly maplibreVersion?: string;
|
|
271
278
|
};
|
|
272
279
|
|
|
@@ -456,6 +463,11 @@ declare class MahalMap {
|
|
|
456
463
|
private maps3dReady?;
|
|
457
464
|
private buildingsEnabled;
|
|
458
465
|
private workerCheckTimer?;
|
|
466
|
+
private styleChangeHandler?;
|
|
467
|
+
private pendingBuildingClick?;
|
|
468
|
+
private pendingRoadClick?;
|
|
469
|
+
private pendingSelectionStyle?;
|
|
470
|
+
private pendingLayerSubscribers;
|
|
459
471
|
private constructor();
|
|
460
472
|
private static getInstanceKey;
|
|
461
473
|
private static normalizeLanguage;
|
|
@@ -542,7 +554,21 @@ declare class MahalMap {
|
|
|
542
554
|
* Без Maps3D менять нечего — карта на запасном стиле, у него варианта по теме нет.
|
|
543
555
|
*/
|
|
544
556
|
setStyle(theme: Theme): void;
|
|
545
|
-
|
|
557
|
+
/**
|
|
558
|
+
* Адрес стиля по имени темы. mapOptions() — основной контракт (есть с 0.5.0);
|
|
559
|
+
* styleUrl остаётся запасным путём для сборок, где mapOptions ещё нет.
|
|
560
|
+
* Раньше здесь был только styleUrl, и сборка с одним mapOptions() тему не меняла.
|
|
561
|
+
*/
|
|
562
|
+
private resolvePlatformStyle;
|
|
563
|
+
/**
|
|
564
|
+
* Полная смена стиля уносит слои Maps3D вместе с ним — реестр умеет вернуть волю
|
|
565
|
+
* клиента, но только когда новый стиль уже загружен.
|
|
566
|
+
*
|
|
567
|
+
* Слушаем styledata, а не style.load: setStyle() идёт через дифф и style.load при
|
|
568
|
+
* этом не поднимает — с ним восстановление просто не случалось. styledata приходит
|
|
569
|
+
* многократно, поэтому ждём isStyleLoaded() и снимаем обработчик сами.
|
|
570
|
+
*/
|
|
571
|
+
private refreshLayersOnStyleChange;
|
|
546
572
|
/**
|
|
547
573
|
* Язык подписей приходит из стиля платформы, отдельных URL по языкам больше нет —
|
|
548
574
|
* метод только запоминает выбор для остальных сервисов SDK (поиск, роутинг).
|
|
@@ -573,7 +599,10 @@ declare class MahalMap {
|
|
|
573
599
|
getLayerState(id: Maps3DLayerId): IMaps3DLayerState | null;
|
|
574
600
|
/** Снимок всех слоёв — по нему приложение рисует свою панель. */
|
|
575
601
|
getLayers(): IMaps3DLayerState[];
|
|
576
|
-
/**
|
|
602
|
+
/**
|
|
603
|
+
* Подписка на изменения слоёв. Возвращает отписку. Работает и до появления слоя:
|
|
604
|
+
* подписка переиграется при его подключении, а отписка снимет её в любом случае.
|
|
605
|
+
*/
|
|
577
606
|
onLayers(callback: (state: IMaps3DLayerState) => void): () => void;
|
|
578
607
|
/** Пере-применить волю клиента ко всем слоям — после полной смены стиля. */
|
|
579
608
|
refreshLayers(): void;
|
|
@@ -589,14 +618,21 @@ declare class MahalMap {
|
|
|
589
618
|
* и метка окажется в чужом зале.
|
|
590
619
|
*/
|
|
591
620
|
showPlace(lon: number, lat: number, level?: number | null, zoom?: number): void;
|
|
592
|
-
/**
|
|
621
|
+
/**
|
|
622
|
+
* Клик по зданию: { id, height, props } либо null. Повторный вызов заменяет обработчик.
|
|
623
|
+
* Подписываться можно сразу после create(), даже когда слой ещё не поднят
|
|
624
|
+
* (`enable3D: false`) — подписка переиграется, как только слой появится.
|
|
625
|
+
*/
|
|
593
626
|
onBuildingClick(callback: (info: IMaps3DBuildingClickInfo | null) => void): void;
|
|
594
627
|
/** Выделить здание по osm_id. `false` — здания сейчас нет в загруженных данных. */
|
|
595
628
|
selectBuilding(id: number | string | null, style?: IMaps3DSelectionStyle): boolean;
|
|
596
629
|
clearSelection(): void;
|
|
597
630
|
selectedBuilding(): number | string | null;
|
|
598
631
|
setSelectionStyle(style: IMaps3DSelectionStyle): void;
|
|
599
|
-
/**
|
|
632
|
+
/**
|
|
633
|
+
* Клик по дороге. Приходит независимо от клика по зданию — приоритет решает приложение.
|
|
634
|
+
* Как и onBuildingClick, переживает отсутствие слоя на момент подписки.
|
|
635
|
+
*/
|
|
600
636
|
onRoadClick(callback: (hit: IMaps3DRoadHit | null) => void): void;
|
|
601
637
|
/** Дорога под точкой холста. Допуск по умолчанию — 12 px. */
|
|
602
638
|
roadAt(point: {
|
|
@@ -610,6 +646,12 @@ declare class MahalMap {
|
|
|
610
646
|
* заведует реестр слоёв, а опции облика зданий приходят из options.maps3d как есть.
|
|
611
647
|
*/
|
|
612
648
|
private createMaps3DLayer;
|
|
649
|
+
/**
|
|
650
|
+
* Переигрывает волю клиента на только что подключённом слое: подписки на клики,
|
|
651
|
+
* облик выделения и подписчиков реестра. Нужно, когда карта создана без слоя
|
|
652
|
+
* (`enable3D: false`) — тогда всё это было сказано до его появления.
|
|
653
|
+
*/
|
|
654
|
+
private applyPendingSubscriptions;
|
|
613
655
|
private attachMaps3DLayer;
|
|
614
656
|
/**
|
|
615
657
|
* Освобождает слой Maps3D одним доступным методом (destroy(), иначе remove()) и ровно один
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as maplibre_gl from 'maplibre-gl';
|
|
1
2
|
import { Map, FlyToOptions, Marker } from 'maplibre-gl';
|
|
2
3
|
|
|
3
4
|
declare class CameraController {
|
|
@@ -174,9 +175,12 @@ interface IMaps3DBuildingsController {
|
|
|
174
175
|
}
|
|
175
176
|
interface IMaps3DBuildingClickInfo {
|
|
176
177
|
id: string | number;
|
|
178
|
+
/** Атрибуты объекта; `props.osm_id` — идентификатор, который не меняется. */
|
|
179
|
+
props: Record<string, unknown>;
|
|
180
|
+
/** Высота здания в метрах. */
|
|
181
|
+
height: number;
|
|
182
|
+
/** Порядковый номер внутри сцены. Живёт до ближайшей пересборки геометрии. */
|
|
177
183
|
index?: number;
|
|
178
|
-
height?: number;
|
|
179
|
-
props?: Record<string, unknown>;
|
|
180
184
|
[key: string]: unknown;
|
|
181
185
|
}
|
|
182
186
|
interface IMaps3DObjectsLightOptions {
|
|
@@ -263,10 +267,13 @@ type Maps3DCtor = (new (options: IMaps3DLayerOptions) => IMaps3DLayer) & {
|
|
|
263
267
|
styleUrl?(style?: string, base?: string): string;
|
|
264
268
|
/** Подключение к уже созданной карте; возвращает экземпляр с `ready`. */
|
|
265
269
|
enhance?(map: Map, options?: IMaps3DLayerOptions): IMaps3DLayer;
|
|
266
|
-
/**
|
|
270
|
+
/**
|
|
271
|
+
* MapLibre с платформы вместе со своим воркером. Возвращает то же, что
|
|
272
|
+
* `import * as maplibregl from "maplibre-gl"` — декларации гарантирует peerDependency.
|
|
273
|
+
*/
|
|
267
274
|
maplibre?(options?: {
|
|
268
275
|
base?: string;
|
|
269
|
-
}): Promise<
|
|
276
|
+
}): Promise<typeof maplibre_gl>;
|
|
270
277
|
readonly maplibreVersion?: string;
|
|
271
278
|
};
|
|
272
279
|
|
|
@@ -456,6 +463,11 @@ declare class MahalMap {
|
|
|
456
463
|
private maps3dReady?;
|
|
457
464
|
private buildingsEnabled;
|
|
458
465
|
private workerCheckTimer?;
|
|
466
|
+
private styleChangeHandler?;
|
|
467
|
+
private pendingBuildingClick?;
|
|
468
|
+
private pendingRoadClick?;
|
|
469
|
+
private pendingSelectionStyle?;
|
|
470
|
+
private pendingLayerSubscribers;
|
|
459
471
|
private constructor();
|
|
460
472
|
private static getInstanceKey;
|
|
461
473
|
private static normalizeLanguage;
|
|
@@ -542,7 +554,21 @@ declare class MahalMap {
|
|
|
542
554
|
* Без Maps3D менять нечего — карта на запасном стиле, у него варианта по теме нет.
|
|
543
555
|
*/
|
|
544
556
|
setStyle(theme: Theme): void;
|
|
545
|
-
|
|
557
|
+
/**
|
|
558
|
+
* Адрес стиля по имени темы. mapOptions() — основной контракт (есть с 0.5.0);
|
|
559
|
+
* styleUrl остаётся запасным путём для сборок, где mapOptions ещё нет.
|
|
560
|
+
* Раньше здесь был только styleUrl, и сборка с одним mapOptions() тему не меняла.
|
|
561
|
+
*/
|
|
562
|
+
private resolvePlatformStyle;
|
|
563
|
+
/**
|
|
564
|
+
* Полная смена стиля уносит слои Maps3D вместе с ним — реестр умеет вернуть волю
|
|
565
|
+
* клиента, но только когда новый стиль уже загружен.
|
|
566
|
+
*
|
|
567
|
+
* Слушаем styledata, а не style.load: setStyle() идёт через дифф и style.load при
|
|
568
|
+
* этом не поднимает — с ним восстановление просто не случалось. styledata приходит
|
|
569
|
+
* многократно, поэтому ждём isStyleLoaded() и снимаем обработчик сами.
|
|
570
|
+
*/
|
|
571
|
+
private refreshLayersOnStyleChange;
|
|
546
572
|
/**
|
|
547
573
|
* Язык подписей приходит из стиля платформы, отдельных URL по языкам больше нет —
|
|
548
574
|
* метод только запоминает выбор для остальных сервисов SDK (поиск, роутинг).
|
|
@@ -573,7 +599,10 @@ declare class MahalMap {
|
|
|
573
599
|
getLayerState(id: Maps3DLayerId): IMaps3DLayerState | null;
|
|
574
600
|
/** Снимок всех слоёв — по нему приложение рисует свою панель. */
|
|
575
601
|
getLayers(): IMaps3DLayerState[];
|
|
576
|
-
/**
|
|
602
|
+
/**
|
|
603
|
+
* Подписка на изменения слоёв. Возвращает отписку. Работает и до появления слоя:
|
|
604
|
+
* подписка переиграется при его подключении, а отписка снимет её в любом случае.
|
|
605
|
+
*/
|
|
577
606
|
onLayers(callback: (state: IMaps3DLayerState) => void): () => void;
|
|
578
607
|
/** Пере-применить волю клиента ко всем слоям — после полной смены стиля. */
|
|
579
608
|
refreshLayers(): void;
|
|
@@ -589,14 +618,21 @@ declare class MahalMap {
|
|
|
589
618
|
* и метка окажется в чужом зале.
|
|
590
619
|
*/
|
|
591
620
|
showPlace(lon: number, lat: number, level?: number | null, zoom?: number): void;
|
|
592
|
-
/**
|
|
621
|
+
/**
|
|
622
|
+
* Клик по зданию: { id, height, props } либо null. Повторный вызов заменяет обработчик.
|
|
623
|
+
* Подписываться можно сразу после create(), даже когда слой ещё не поднят
|
|
624
|
+
* (`enable3D: false`) — подписка переиграется, как только слой появится.
|
|
625
|
+
*/
|
|
593
626
|
onBuildingClick(callback: (info: IMaps3DBuildingClickInfo | null) => void): void;
|
|
594
627
|
/** Выделить здание по osm_id. `false` — здания сейчас нет в загруженных данных. */
|
|
595
628
|
selectBuilding(id: number | string | null, style?: IMaps3DSelectionStyle): boolean;
|
|
596
629
|
clearSelection(): void;
|
|
597
630
|
selectedBuilding(): number | string | null;
|
|
598
631
|
setSelectionStyle(style: IMaps3DSelectionStyle): void;
|
|
599
|
-
/**
|
|
632
|
+
/**
|
|
633
|
+
* Клик по дороге. Приходит независимо от клика по зданию — приоритет решает приложение.
|
|
634
|
+
* Как и onBuildingClick, переживает отсутствие слоя на момент подписки.
|
|
635
|
+
*/
|
|
600
636
|
onRoadClick(callback: (hit: IMaps3DRoadHit | null) => void): void;
|
|
601
637
|
/** Дорога под точкой холста. Допуск по умолчанию — 12 px. */
|
|
602
638
|
roadAt(point: {
|
|
@@ -610,6 +646,12 @@ declare class MahalMap {
|
|
|
610
646
|
* заведует реестр слоёв, а опции облика зданий приходят из options.maps3d как есть.
|
|
611
647
|
*/
|
|
612
648
|
private createMaps3DLayer;
|
|
649
|
+
/**
|
|
650
|
+
* Переигрывает волю клиента на только что подключённом слое: подписки на клики,
|
|
651
|
+
* облик выделения и подписчиков реестра. Нужно, когда карта создана без слоя
|
|
652
|
+
* (`enable3D: false`) — тогда всё это было сказано до его появления.
|
|
653
|
+
*/
|
|
654
|
+
private applyPendingSubscriptions;
|
|
613
655
|
private attachMaps3DLayer;
|
|
614
656
|
/**
|
|
615
657
|
* Освобождает слой Maps3D одним доступным методом (destroy(), иначе remove()) и ровно один
|