mahal_map 2.2.3 → 2.3.0
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 +49 -13
- package/dist/index.d.mts +92 -28
- package/dist/index.d.ts +92 -28
- package/dist/index.js +1 -1
- package/dist/index.mjs +5 -5
- package/dist/mahal_map.sdk.js +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ npm install mahal_map maplibre-gl @grammaps/maps3d-web
|
|
|
13
13
|
Обе зависимости — `peerDependencies`, в бандл `mahal_map` они не входят. Библиотека их не импортирует: MapLibre и `Maps3D` приходят снаружи, аргументами `create()` либо через `window`.
|
|
14
14
|
|
|
15
15
|
- `maplibre-gl` (`^6.10.0`) — обязателен всегда.
|
|
16
|
-
- `@grammaps/maps3d-web` (>=0.
|
|
16
|
+
- `@grammaps/maps3d-web` (>=0.11.0 — в ней отписки у подписок, `selectedBuildingKind()`, этажи в состоянии слоя и починенный клик по зданию сверху; на сборках постарше карта работает через запасные пути, но отписка и `selectedBuildingKind` не гарантированы) — даёт стили, тайлы, объём, пробки, рельеф, планы этажей, клик по объектам. Помечен `optional`: без него карта поднимется на запасном векторном стиле, но 3D и слоёв платформы на ней не будет.
|
|
17
17
|
|
|
18
18
|
MapLibre можно не класть в свою сборку вовсе — платформа отдаёт согласованную версию вместе с веб-воркером:
|
|
19
19
|
|
|
@@ -427,6 +427,15 @@ map.setIndoorLevel(1); // нумерация OSM: 0 — первый назем
|
|
|
427
427
|
map.refreshIndoor(); // перечитать после правки картографом
|
|
428
428
|
```
|
|
429
429
|
|
|
430
|
+
С Maps3D 0.11.0 список этажей приходит в состоянии слоя — опрашивать `getIndoorLevels()` на `idle`/`moveend` не нужно:
|
|
431
|
+
|
|
432
|
+
```ts
|
|
433
|
+
map.onLayers((state) => {
|
|
434
|
+
if (state.id !== "indoor") return;
|
|
435
|
+
renderLevelPicker(state.params.levels ?? [], state.params.level);
|
|
436
|
+
});
|
|
437
|
+
```
|
|
438
|
+
|
|
430
439
|
После поиска показать найденный объект вместе с его этажом:
|
|
431
440
|
|
|
432
441
|
```ts
|
|
@@ -492,13 +501,13 @@ await maps3d.ready; // enhance() ждёт нативную карту MapLibre,
|
|
|
492
501
|
```ts
|
|
493
502
|
map.setSelectionStyle({ color: "#e23b2f", opacity: 0.55, durationMs: 300 });
|
|
494
503
|
|
|
495
|
-
map.onBuildingClick((building) => {
|
|
504
|
+
const stopBuildingClick = map.onBuildingClick((building) => {
|
|
496
505
|
if (!building) return;
|
|
497
|
-
// SDK уже подсветил
|
|
498
|
-
console.log(building.props?.osm_id, building.height);
|
|
506
|
+
// SDK уже подсветил его. index >= 0 — объёмный дом сцены, -1 — дом из слоя стиля
|
|
507
|
+
console.log(building.props?.osm_id, building.height, building.index);
|
|
499
508
|
});
|
|
500
509
|
|
|
501
|
-
map.onRoadClick((road) => {
|
|
510
|
+
const stopRoadClick = map.onRoadClick((road) => {
|
|
502
511
|
if (!road) return;
|
|
503
512
|
console.log(road.nameRu ?? road.name, road.class);
|
|
504
513
|
});
|
|
@@ -506,8 +515,13 @@ map.onRoadClick((road) => {
|
|
|
506
515
|
// Выделить здание по osm_id — например, после поиска
|
|
507
516
|
map.selectBuilding(123456789); // false, если здания нет в загруженных данных
|
|
508
517
|
map.selectedBuilding(); // текущий id или null
|
|
518
|
+
map.selectedBuildingKind(); // 'scene' — объём, 'flat' — слой стиля, null — выделения нет
|
|
509
519
|
map.clearSelection();
|
|
510
520
|
|
|
521
|
+
// При размонтировании
|
|
522
|
+
stopBuildingClick();
|
|
523
|
+
stopRoadClick();
|
|
524
|
+
|
|
511
525
|
// Дорога под точкой холста, допуск по умолчанию 12 px
|
|
512
526
|
map.roadAt({ x: 320, y: 240 });
|
|
513
527
|
map.roadsNamed; // есть ли в текущем стиле названия дорог
|
|
@@ -524,6 +538,22 @@ map.setSelectionStyle({ color: "#e23b2f" });
|
|
|
524
538
|
map.toggle3DBuildings(true); // подписка и стиль выделения уже применены к новому слою
|
|
525
539
|
```
|
|
526
540
|
|
|
541
|
+
#### Отписка
|
|
542
|
+
|
|
543
|
+
`onBuildingClick`, `onBuildingHover`, `onRoadClick`, `onParkingHover` и `onParkingClick` возвращают функцию отписки и принимают `null`. Повторный вызов заменяет обработчик. Отписка снимает **только свою** подписку: если обработчик уже заменён следующим вызовом, она ничего не делает — отложенный вызов прежнего владельца (например, cleanup размонтированного компонента) не погасит обработчик нового. Работает и для подписки, сделанной до подъёма слоя: снятая до подъёма, она на слой не попадёт.
|
|
544
|
+
|
|
545
|
+
```ts
|
|
546
|
+
useEffect(() => map.onBuildingClick(openCard), [map]); // отписка уходит в cleanup
|
|
547
|
+
```
|
|
548
|
+
|
|
549
|
+
#### Порог зума объёма
|
|
550
|
+
|
|
551
|
+
`getBuildingsMinZoom()` — зум, с которого поднимается объём: `maps3d.minZoom`, который `mahal_map` передал в Maps3D, либо умолчание Maps3D (`16`). В отличие от `rendered` в состоянии слоя, ответ не зависит от текущего зума.
|
|
552
|
+
|
|
553
|
+
```ts
|
|
554
|
+
const willBe3D = targetZoom >= map.getBuildingsMinZoom();
|
|
555
|
+
```
|
|
556
|
+
|
|
527
557
|
### Наведение на здание
|
|
528
558
|
|
|
529
559
|
Требует `@grammaps/maps3d-web` **0.8.0** и старше. Подсветку и курсор рисует сам SDK — приложение задаёт облик и получает уведомления.
|
|
@@ -539,11 +569,11 @@ map.onBuildingHover((building) => {
|
|
|
539
569
|
|
|
540
570
|
Колбэк приходит **только в момент смены** дома под курсором, а не на каждое движение мыши.
|
|
541
571
|
|
|
542
|
-
Слежение включается самой подпиской: пока `onBuildingHover` не вызван, SDK курсор не трогает и сцену не разбирает. `onBuildingHover(null)`
|
|
572
|
+
Слежение включается самой подпиской: пока `onBuildingHover` не вызван, SDK курсор не трогает и сцену не разбирает. `onBuildingHover(null)` или возвращённая отписка снимает подписку и гасит подсветку.
|
|
543
573
|
|
|
544
574
|
| Метод | Описание |
|
|
545
575
|
| --- | --- |
|
|
546
|
-
| `onBuildingHover(cb \| null)` | Подписка на наведение; `null` отписывает и гасит подсветку. |
|
|
576
|
+
| `onBuildingHover(cb \| null)` | Подписка на наведение; возвращает отписку, `null` отписывает и гасит подсветку. |
|
|
547
577
|
| `setHoverStyle(s)` | Облик: `color`, `opacity`, `glow`, `durationMs`, `easing`, `cursor`. `cursor: null` — не трогать курсор. |
|
|
548
578
|
| `setHoverEnabled(on)` | Вкл/выкл наведение, не трогая подписку. |
|
|
549
579
|
| `hoverEnabled` | Включено ли наведение сейчас. |
|
|
@@ -571,11 +601,13 @@ row.addEventListener("mouseleave", () => map.hoverBuilding(null));
|
|
|
571
601
|
map.setHoverEnabled(false); // подписка сохраняется
|
|
572
602
|
```
|
|
573
603
|
|
|
574
|
-
Цену ограничивает сам SDK: разбор не чаще раза в кадр, пропускается во время движения
|
|
604
|
+
Цену ограничивает сам SDK: разбор не чаще раза в кадр, пропускается во время движения камеры — и от жестов, и от `jumpTo`/`easeTo` из приложения (с 0.11.0) — и не трогает сцену, пока курсор на том же доме. С 0.11.0 наведение читает пиксель из GPU асинхронно и главный поток не держит; гасить наведение на время движения карты снаружи больше не нужно.
|
|
575
605
|
|
|
576
606
|
### Парковки: наведение, клик, справка
|
|
577
607
|
|
|
578
608
|
> Нужен `@grammaps/maps3d-web` **0.10.0+**. На более старой сборке методы ничего не делают и возвращают пустые значения (`false`, `null`).
|
|
609
|
+
>
|
|
610
|
+
> Подписки `onParkingHover`/`onParkingClick` можно делать до подъёма слоя — они запоминаются и переигрываются, как у зданий. Обе возвращают отписку.
|
|
579
611
|
|
|
580
612
|
Устроено как у зданий: приложение задаёт облик и получает уведомления, подсветку и курсор рисует SDK.
|
|
581
613
|
|
|
@@ -604,13 +636,13 @@ map.getMap().on("contextmenu", (e) => console.log(map.parkingAt(e.point, 4)));
|
|
|
604
636
|
|
|
605
637
|
| Метод | Описание |
|
|
606
638
|
| ---------------------------------- | ------------------------------------------------------------------------------------------------- |
|
|
607
|
-
| `onParkingHover(callback \| null)` | Участок под курсором либо `null`. Зовётся **только при смене участка**. `null` — отписаться и погасить. |
|
|
639
|
+
| `onParkingHover(callback \| null)` | Участок под курсором либо `null`. Зовётся **только при смене участка**. Возвращает отписку; `null` — отписаться и погасить. |
|
|
608
640
|
| `setParkingHoverStyle(style)` | Облик подсветки: `color`, `opacity`, `outlineColor`, `outlineWidth`, `cursor`. |
|
|
609
641
|
| `setParkingHoverEnabled(enabled)` | Выключить/включить наведение, не теряя подписку. |
|
|
610
642
|
| `parkingHoverEnabled` | Геттер: включено ли наведение. |
|
|
611
643
|
| `hoverParking(id \| null)` | Подсветить участок программно по `osm_id`; `null` — погасить. `false` — участка нет в данных. |
|
|
612
644
|
| `hoveredParking()` | `osm_id` подсвеченного участка или `null`. |
|
|
613
|
-
| `onParkingClick(callback \| null)` | Клик по участку: справка либо `null`. `null` вместо колбэка — отписаться.
|
|
645
|
+
| `onParkingClick(callback \| null)` | Клик по участку: справка либо `null`. Возвращает отписку; `null` вместо колбэка — отписаться. |
|
|
614
646
|
| `parkingAt(point, tolPx?)` | Справка по точке холста. Допуск по умолчанию `0` — строго внутрь участка. |
|
|
615
647
|
|
|
616
648
|
Облик подсветки (`IMaps3DParkingHoverStyle`):
|
|
@@ -1258,6 +1290,8 @@ MahalMap.showPlace(map, 68.787, 38.573, 2, 18);
|
|
|
1258
1290
|
MahalMap.onBuildingClick(map, (building) => console.log(building?.id));
|
|
1259
1291
|
MahalMap.selectBuilding(map, 123456789);
|
|
1260
1292
|
MahalMap.selectedBuilding(map);
|
|
1293
|
+
MahalMap.selectedBuildingKind(map);
|
|
1294
|
+
MahalMap.getBuildingsMinZoom(map);
|
|
1261
1295
|
MahalMap.setSelectionStyle(map, { color: "#e23b2f" });
|
|
1262
1296
|
MahalMap.clearSelection(map);
|
|
1263
1297
|
MahalMap.onRoadClick(map, (road) => console.log(road?.name));
|
|
@@ -1325,16 +1359,18 @@ MahalMap.setZoom(map, 14);
|
|
|
1325
1359
|
| `getLayers(instance)` | Снимок всех слоёв. |
|
|
1326
1360
|
| `onLayers(instance, callback)` | Подписка на изменения слоёв; возвращает отписку. |
|
|
1327
1361
|
| `refreshLayers(instance)` | Пере-применить волю клиента ко всем слоям. |
|
|
1328
|
-
| `getIndoorLevels(instance)` |
|
|
1362
|
+
| `getIndoorLevels(instance)` | Этажи в текущем виде карты (с 0.11.0 — из `params.levels` слоя). |
|
|
1329
1363
|
| `setIndoorLevel(instance, level)` | Переключить этаж (0 — первый наземный). |
|
|
1330
1364
|
| `refreshIndoor(instance)` | Перечитать планы этажей. |
|
|
1331
1365
|
| `showPlace(instance, lon, lat, level?, zoom?)` | Показать объект и открыть его этаж. |
|
|
1332
|
-
| `onBuildingClick(instance, callback)`
|
|
1366
|
+
| `onBuildingClick(instance, callback \| null)` | Клик по зданию; возвращает отписку. |
|
|
1333
1367
|
| `selectBuilding(instance, id, style?)` | Выделить здание по `osm_id`. |
|
|
1334
1368
|
| `clearSelection(instance)` | Снять выделение. |
|
|
1335
1369
|
| `selectedBuilding(instance)` | Идентификатор выделенного здания или `null`. |
|
|
1370
|
+
| `selectedBuildingKind(instance)` | `'scene'` / `'flat'` / `null` — чем нарисовано выделение. |
|
|
1371
|
+
| `getBuildingsMinZoom(instance)` | Зум появления объёма, переданный в Maps3D (по умолчанию `16`). |
|
|
1336
1372
|
| `setSelectionStyle(instance, style)` | Облик выделения. |
|
|
1337
|
-
| `onRoadClick(instance, callback)`
|
|
1373
|
+
| `onRoadClick(instance, callback \| null)` | Клик по дороге; возвращает отписку. |
|
|
1338
1374
|
| `roadAt(instance, point, tolPx?)` | Дорога под точкой холста. |
|
|
1339
1375
|
| `onParkingHover(instance, callback \| null)` | Парковка под курсором (только при смене участка). |
|
|
1340
1376
|
| `setParkingHoverStyle(instance, style)` | Облик подсветки парковки. |
|
package/dist/index.d.mts
CHANGED
|
@@ -23,7 +23,7 @@ interface IAdditionalParamType {
|
|
|
23
23
|
/**
|
|
24
24
|
* Поверхность @grammaps/maps3d-web, описанная локально. Пакет в зависимости не ставится —
|
|
25
25
|
* он приходит снаружи, как и maplibre-gl, поэтому импортировать его типы нельзя. Здесь
|
|
26
|
-
* повторена публичная часть .d.ts версии 0.
|
|
26
|
+
* повторена публичная часть .d.ts версии 0.11.0; всё необязательное помечено `?`, чтобы
|
|
27
27
|
* более старая сборка на странице не ломала типы у потребителя.
|
|
28
28
|
*/
|
|
29
29
|
type Maps3DThemeName = "light" | "dark" | "navigator-light" | "navigator-dark" | "mobile-light" | "mobile-dark";
|
|
@@ -97,8 +97,26 @@ interface IMaps3DLayerState {
|
|
|
97
97
|
* У слоя, который не умеет ответить фактом, повторяет `active`; у сборок до 0.8.0 — undefined.
|
|
98
98
|
*/
|
|
99
99
|
rendered?: boolean;
|
|
100
|
-
/** Параметры слоя: у зданий — detail, у этажей — level, у рельефа — mode. */
|
|
101
|
-
params:
|
|
100
|
+
/** Параметры слоя: у зданий — detail, у этажей — level и levels, у рельефа — mode. */
|
|
101
|
+
params: IMaps3DLayerStateParams;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Параметры в снимке слоя. Каждое поле есть только у своего слоя; неизвестные ключи
|
|
105
|
+
* сборки Maps3D проходят через индексную сигнатуру.
|
|
106
|
+
*/
|
|
107
|
+
interface IMaps3DLayerStateParams {
|
|
108
|
+
/** `buildings`: уровень детализации. */
|
|
109
|
+
detail?: Maps3DBuildingDetail;
|
|
110
|
+
/** `indoor`: открытый этаж. */
|
|
111
|
+
level?: number;
|
|
112
|
+
/**
|
|
113
|
+
* `indoor`: этажи, найденные в текущем виде карты; `[]` — данных по зданию нет.
|
|
114
|
+
* Меняется при движении карты и приходит через onLayers(). С 0.11.0, раньше — undefined.
|
|
115
|
+
*/
|
|
116
|
+
levels?: number[];
|
|
117
|
+
/** `terrain`: режим рельефа. */
|
|
118
|
+
mode?: Maps3DTerrainMode;
|
|
119
|
+
[key: string]: unknown;
|
|
102
120
|
}
|
|
103
121
|
interface IMaps3DSelectionStyle {
|
|
104
122
|
color?: string | number;
|
|
@@ -232,12 +250,16 @@ interface IMaps3DBuildingClickInfo {
|
|
|
232
250
|
id: string | number;
|
|
233
251
|
/**
|
|
234
252
|
* Атрибуты объекта; `props.osm_id` — идентификатор, который не меняется.
|
|
235
|
-
* Необязательно:
|
|
253
|
+
* Необязательно: запасные пути держат сборки Maps3D от 0.5.0, где поля может не быть.
|
|
236
254
|
*/
|
|
237
255
|
props?: Record<string, unknown>;
|
|
238
256
|
/** Высота здания в метрах. Необязательно по той же причине, что и `props`. */
|
|
239
257
|
height?: number;
|
|
240
|
-
/**
|
|
258
|
+
/**
|
|
259
|
+
* Порядковый номер внутри сцены. Живёт до ближайшей пересборки геометрии.
|
|
260
|
+
* `>= 0` — объёмный дом сцены, `-1` — дом из слоя стиля (объёма под ним нет).
|
|
261
|
+
* Тот же признак, что selectedBuildingKind(): `'scene'` / `'flat'`.
|
|
262
|
+
*/
|
|
241
263
|
index?: number;
|
|
242
264
|
[key: string]: unknown;
|
|
243
265
|
}
|
|
@@ -247,6 +269,10 @@ interface IMaps3DObjectsLightOptions {
|
|
|
247
269
|
sky?: number;
|
|
248
270
|
exposure?: number;
|
|
249
271
|
}
|
|
272
|
+
/** Чем нарисовано выделение: объёмный дом сцены или слой стиля. С 0.11.0. */
|
|
273
|
+
type Maps3DSelectionKind = "scene" | "flat";
|
|
274
|
+
/** Колбэк подписки Maps3D: `null` вместо функции — отписаться. */
|
|
275
|
+
type Maps3DListener<T> = ((info: T | null) => void) | null;
|
|
250
276
|
interface IMaps3DDiagnostics {
|
|
251
277
|
terrainActive: boolean;
|
|
252
278
|
drapeRefreshes: number;
|
|
@@ -266,18 +292,20 @@ interface IMaps3DLayer {
|
|
|
266
292
|
refreshLayers?(): void;
|
|
267
293
|
buildings?: IMaps3DBuildingsController | null;
|
|
268
294
|
setBuildingsEnabled?(enabled: boolean): void;
|
|
269
|
-
onBuildingClick?(callback:
|
|
295
|
+
onBuildingClick?(callback: Maps3DListener<IMaps3DBuildingClickInfo>): (() => void) | void;
|
|
270
296
|
selectBuilding?(id: number | string | null, style?: IMaps3DSelectionStyle): boolean;
|
|
271
297
|
clearSelection?(): void;
|
|
272
298
|
selectedBuilding?(): number | string | null;
|
|
299
|
+
/** С 0.11.0. */
|
|
300
|
+
selectedBuildingKind?(): Maps3DSelectionKind | null;
|
|
273
301
|
setSelectionStyle?(style: IMaps3DSelectionStyle): void;
|
|
274
|
-
onBuildingHover?(callback: ((
|
|
302
|
+
onBuildingHover?(callback: Maps3DListener<IMaps3DBuildingClickInfo>): (() => void) | void;
|
|
275
303
|
setHoverEnabled?(enabled: boolean): void;
|
|
276
304
|
readonly hoverEnabled?: boolean;
|
|
277
305
|
setHoverStyle?(style: IMaps3DHoverStyle): void;
|
|
278
306
|
hoverBuilding?(id: number | string | null): boolean;
|
|
279
307
|
hoveredBuilding?(): number | string | null;
|
|
280
|
-
onRoadClick?(callback:
|
|
308
|
+
onRoadClick?(callback: Maps3DListener<IMaps3DRoadHit>): (() => void) | void;
|
|
281
309
|
roadAt?(point: {
|
|
282
310
|
x: number;
|
|
283
311
|
y: number;
|
|
@@ -287,13 +315,13 @@ interface IMaps3DLayer {
|
|
|
287
315
|
x: number;
|
|
288
316
|
y: number;
|
|
289
317
|
}, tolerancePx?: number): IMaps3DParkingInfo | null;
|
|
290
|
-
onParkingHover?(callback: ((
|
|
318
|
+
onParkingHover?(callback: Maps3DListener<IMaps3DParkingInfo>): (() => void) | void;
|
|
291
319
|
setParkingHoverStyle?(style: IMaps3DParkingHoverStyle): void;
|
|
292
320
|
setParkingHoverEnabled?(enabled: boolean): void;
|
|
293
321
|
readonly parkingHoverEnabled?: boolean;
|
|
294
322
|
hoverParking?(id: number | string | null): boolean;
|
|
295
323
|
hoveredParking?(): number | string | null;
|
|
296
|
-
onParkingClick?(callback: ((
|
|
324
|
+
onParkingClick?(callback: Maps3DListener<IMaps3DParkingInfo>): (() => void) | void;
|
|
297
325
|
traffic?: boolean;
|
|
298
326
|
trafficRaster?: boolean;
|
|
299
327
|
setTraffic?(enabled: boolean): void;
|
|
@@ -304,6 +332,7 @@ interface IMaps3DLayer {
|
|
|
304
332
|
refreshTraffic?(): void;
|
|
305
333
|
setIndoor?(enabled: boolean): void;
|
|
306
334
|
setIndoorLevel?(level: number): void;
|
|
335
|
+
/** Запасной путь для сборок до 0.11.0 — там этажей нет в `layer("indoor").params.levels`. */
|
|
307
336
|
readonly indoorLevels?: number[];
|
|
308
337
|
refreshIndoor?(): void;
|
|
309
338
|
showPlace?(lon: number, lat: number, level?: number | null, zoom?: number): void;
|
|
@@ -560,11 +589,9 @@ declare class MahalMap {
|
|
|
560
589
|
private buildingsEnabled;
|
|
561
590
|
private workerCheckTimer?;
|
|
562
591
|
private styleChangeHandler?;
|
|
563
|
-
private
|
|
564
|
-
private pendingRoadClick?;
|
|
592
|
+
private subscriptions;
|
|
565
593
|
private pendingSelectionStyle?;
|
|
566
594
|
private pendingLayerSubscribers;
|
|
567
|
-
private pendingBuildingHover?;
|
|
568
595
|
private pendingHoverStyle?;
|
|
569
596
|
private pendingHoverEnabled?;
|
|
570
597
|
private constructor();
|
|
@@ -629,27 +656,29 @@ declare class MahalMap {
|
|
|
629
656
|
static setIndoorLevel(instance: MahalMap, level: number): void;
|
|
630
657
|
static refreshIndoor(instance: MahalMap): void;
|
|
631
658
|
static showPlace(instance: MahalMap, lon: number, lat: number, level?: number | null, zoom?: number): void;
|
|
632
|
-
static onBuildingClick(instance: MahalMap, callback:
|
|
659
|
+
static onBuildingClick(instance: MahalMap, callback: Maps3DListener<IMaps3DBuildingClickInfo>): () => void;
|
|
633
660
|
static selectBuilding(instance: MahalMap, id: number | string | null, style?: IMaps3DSelectionStyle): boolean;
|
|
634
661
|
static clearSelection(instance: MahalMap): void;
|
|
635
662
|
static selectedBuilding(instance: MahalMap): string | number | null;
|
|
663
|
+
static selectedBuildingKind(instance: MahalMap): Maps3DSelectionKind | null;
|
|
664
|
+
static getBuildingsMinZoom(instance: MahalMap): number;
|
|
636
665
|
static setSelectionStyle(instance: MahalMap, style: IMaps3DSelectionStyle): void;
|
|
637
|
-
static onRoadClick(instance: MahalMap, callback:
|
|
666
|
+
static onRoadClick(instance: MahalMap, callback: Maps3DListener<IMaps3DRoadHit>): () => void;
|
|
638
667
|
static roadAt(instance: MahalMap, point: {
|
|
639
668
|
x: number;
|
|
640
669
|
y: number;
|
|
641
670
|
}, tolerancePx?: number): IMaps3DRoadHit | null;
|
|
642
|
-
static onParkingHover(instance: MahalMap, callback:
|
|
671
|
+
static onParkingHover(instance: MahalMap, callback: Maps3DListener<IMaps3DParkingInfo>): () => void;
|
|
643
672
|
static setParkingHoverStyle(instance: MahalMap, style: IMaps3DParkingHoverStyle): void;
|
|
644
673
|
static setParkingHoverEnabled(instance: MahalMap, enabled: boolean): void;
|
|
645
674
|
static hoverParking(instance: MahalMap, id: number | string | null): boolean;
|
|
646
675
|
static hoveredParking(instance: MahalMap): string | number | null;
|
|
647
|
-
static onParkingClick(instance: MahalMap, callback:
|
|
676
|
+
static onParkingClick(instance: MahalMap, callback: Maps3DListener<IMaps3DParkingInfo>): () => void;
|
|
648
677
|
static parkingAt(instance: MahalMap, point: {
|
|
649
678
|
x: number;
|
|
650
679
|
y: number;
|
|
651
680
|
}, tolerancePx?: number): IMaps3DParkingInfo | null;
|
|
652
|
-
static onBuildingHover(instance: MahalMap, callback:
|
|
681
|
+
static onBuildingHover(instance: MahalMap, callback: Maps3DListener<IMaps3DBuildingClickInfo>): () => void;
|
|
653
682
|
static setHoverEnabled(instance: MahalMap, enabled: boolean): void;
|
|
654
683
|
static setHoverStyle(instance: MahalMap, style: IMaps3DHoverStyle): void;
|
|
655
684
|
static hoverBuilding(instance: MahalMap, id: number | string | null): boolean;
|
|
@@ -720,7 +749,11 @@ declare class MahalMap {
|
|
|
720
749
|
onLayers(callback: (state: IMaps3DLayerState) => void): () => void;
|
|
721
750
|
/** Пере-применить волю клиента ко всем слоям — после полной смены стиля. */
|
|
722
751
|
refreshLayers(): void;
|
|
723
|
-
/**
|
|
752
|
+
/**
|
|
753
|
+
* Этажи, найденные в текущем виде карты. Пусто — данных по зданию нет.
|
|
754
|
+
* С 0.11.0 они же приходят в onLayers() у слоя `indoor` (`params.levels`) — опрашивать
|
|
755
|
+
* этот метод на движении карты больше не нужно.
|
|
756
|
+
*/
|
|
724
757
|
getIndoorLevels(): number[];
|
|
725
758
|
/** Переключить этаж. Нумерация OSM: 0 — первый наземный. */
|
|
726
759
|
setIndoorLevel(level: number): void;
|
|
@@ -733,21 +766,32 @@ declare class MahalMap {
|
|
|
733
766
|
*/
|
|
734
767
|
showPlace(lon: number, lat: number, level?: number | null, zoom?: number): void;
|
|
735
768
|
/**
|
|
736
|
-
* Клик по зданию: { id, height, props } либо null.
|
|
769
|
+
* Клик по зданию: { id, height, props, index } либо null. `index >= 0` — объёмный дом
|
|
770
|
+
* сцены, `-1` — дом из слоя стиля. Повторный вызов заменяет обработчик, `null` — отписка.
|
|
771
|
+
*
|
|
737
772
|
* Подписываться можно сразу после create(), даже когда слой ещё не поднят
|
|
738
773
|
* (`enable3D: false`) — подписка переиграется, как только слой появится.
|
|
774
|
+
*
|
|
775
|
+
* @returns Отписка. Снимает только эту подписку: если обработчик уже заменён
|
|
776
|
+
* следующим вызовом, ничего не делает.
|
|
739
777
|
*/
|
|
740
|
-
onBuildingClick(callback:
|
|
778
|
+
onBuildingClick(callback: Maps3DListener<IMaps3DBuildingClickInfo>): () => void;
|
|
741
779
|
/** Выделить здание по osm_id. `false` — здания сейчас нет в загруженных данных. */
|
|
742
780
|
selectBuilding(id: number | string | null, style?: IMaps3DSelectionStyle): boolean;
|
|
743
781
|
clearSelection(): void;
|
|
744
782
|
selectedBuilding(): number | string | null;
|
|
783
|
+
/**
|
|
784
|
+
* Чем нарисовано выделение: `'scene'` — объёмный дом сцены, `'flat'` — слой стиля,
|
|
785
|
+
* `null` — выделения нет. На сборке Maps3D до 0.11.0 всегда `null`.
|
|
786
|
+
*/
|
|
787
|
+
selectedBuildingKind(): Maps3DSelectionKind | null;
|
|
745
788
|
setSelectionStyle(style: IMaps3DSelectionStyle): void;
|
|
746
789
|
/**
|
|
747
790
|
* Клик по дороге. Приходит независимо от клика по зданию — приоритет решает приложение.
|
|
748
|
-
* Как и onBuildingClick, переживает отсутствие слоя на момент
|
|
791
|
+
* Как и onBuildingClick, переживает отсутствие слоя на момент подписки, принимает `null`
|
|
792
|
+
* и возвращает отписку.
|
|
749
793
|
*/
|
|
750
|
-
onRoadClick(callback:
|
|
794
|
+
onRoadClick(callback: Maps3DListener<IMaps3DRoadHit>): () => void;
|
|
751
795
|
/** Дорога под точкой холста. Допуск по умолчанию — 12 px. */
|
|
752
796
|
roadAt(point: {
|
|
753
797
|
x: number;
|
|
@@ -758,8 +802,9 @@ declare class MahalMap {
|
|
|
758
802
|
/**
|
|
759
803
|
* Участок под курсором либо null. Зовётся ТОЛЬКО при смене участка, не на каждое
|
|
760
804
|
* движение мыши. `null` вместо колбэка — отписаться и погасить подсветку.
|
|
805
|
+
* Переживает отсутствие слоя на момент подписки; возвращает отписку.
|
|
761
806
|
*/
|
|
762
|
-
onParkingHover(callback:
|
|
807
|
+
onParkingHover(callback: Maps3DListener<IMaps3DParkingInfo>): () => void;
|
|
763
808
|
/** Облик подсветки: color, opacity, outlineColor, outlineWidth, cursor. */
|
|
764
809
|
setParkingHoverStyle(style: IMaps3DParkingHoverStyle): void;
|
|
765
810
|
/** Вкл/выкл наведение, не теряя подписку. */
|
|
@@ -770,8 +815,11 @@ declare class MahalMap {
|
|
|
770
815
|
hoverParking(id: number | string | null): boolean;
|
|
771
816
|
/** `osm_id` подсвеченного участка или null. */
|
|
772
817
|
hoveredParking(): number | string | null;
|
|
773
|
-
/**
|
|
774
|
-
|
|
818
|
+
/**
|
|
819
|
+
* Клик по участку: справка либо null. `null` вместо колбэка — отписаться.
|
|
820
|
+
* Переживает отсутствие слоя на момент подписки; возвращает отписку.
|
|
821
|
+
*/
|
|
822
|
+
onParkingClick(callback: Maps3DListener<IMaps3DParkingInfo>): () => void;
|
|
775
823
|
/**
|
|
776
824
|
* Парковка под точкой холста (`e.point` события карты). Попадание — по границе полигона;
|
|
777
825
|
* допуск по умолчанию 0 — строго внутрь участка.
|
|
@@ -786,8 +834,10 @@ declare class MahalMap {
|
|
|
786
834
|
*
|
|
787
835
|
* Слежение за мышью включается самой подпиской: без неё SDK курсор не трогает и
|
|
788
836
|
* разбор сцены не делает.
|
|
837
|
+
*
|
|
838
|
+
* @returns Отписка; снимает только эту подписку.
|
|
789
839
|
*/
|
|
790
|
-
onBuildingHover(callback:
|
|
840
|
+
onBuildingHover(callback: Maps3DListener<IMaps3DBuildingClickInfo>): () => void;
|
|
791
841
|
/**
|
|
792
842
|
* Включить/выключить наведение, не трогая подписку. Нужно там, где подсветка мешает:
|
|
793
843
|
* режим рисования, открытая карточка объекта, тач-устройство без курсора.
|
|
@@ -808,6 +858,20 @@ declare class MahalMap {
|
|
|
808
858
|
hoverBuilding(id: number | string | null): boolean;
|
|
809
859
|
/** Идентификатор дома под наведением или `null`. */
|
|
810
860
|
hoveredBuilding(): number | string | null;
|
|
861
|
+
/**
|
|
862
|
+
* Зум, с которого поднимается объём: `maps3d.minZoom` из опций create() — ровно то, что
|
|
863
|
+
* уходит в Maps3D, — либо умолчание самой Maps3D (16). Ответ не зависит от текущего
|
|
864
|
+
* зума, в отличие от `rendered` в состоянии слоя.
|
|
865
|
+
*/
|
|
866
|
+
getBuildingsMinZoom(): number;
|
|
867
|
+
/**
|
|
868
|
+
* Занимает слот подписки. Запись живёт до подъёма слоя и переигрывается на нём;
|
|
869
|
+
* отписка снимает слот, только если он всё ещё её.
|
|
870
|
+
*/
|
|
871
|
+
private subscribe;
|
|
872
|
+
private bindSubscription;
|
|
873
|
+
/** Снимает подписку со слоя: её же отпиской, а у сборок до 0.11.0 — через null. */
|
|
874
|
+
private unbindSubscription;
|
|
811
875
|
/**
|
|
812
876
|
* Создаёт слой Maps3D. `buildings` не форсируем в `true`: с 0.7.x видимостью объёма
|
|
813
877
|
* заведует реестр слоёв, а опции облика зданий приходят из options.maps3d как есть.
|
|
@@ -1130,4 +1194,4 @@ declare namespace index {
|
|
|
1130
1194
|
export { index_checkCoordinates as checkCoordinates, index_debounce as debounce, index_geojsonPolyline as geojsonPolyline, index_geometryPolyline as geometryPolyline, index_trimValue as trimValue };
|
|
1131
1195
|
}
|
|
1132
1196
|
|
|
1133
|
-
export { CheckJSApi, type IAdditionalParamType, type ICheckJSApiParam, type ICheckJSApiResponse, type IMahalMapOptions, type IMapMarker, type IMaps3DBuildingClickInfo, type IMaps3DBuildingsController, type IMaps3DBuildingsOptions, type IMaps3DClosuresOptions, type IMaps3DDiagnostics, type IMaps3DHoverStyle, type IMaps3DIndoorOptions, type IMaps3DLayer, type IMaps3DLayerOptions, type IMaps3DLayerParams, type IMaps3DLayerState, type IMaps3DMapOptionsInput, type IMaps3DMapOptionsResult, type IMaps3DObjectsLightOptions, type IMaps3DParkingHoverStyle, type IMaps3DParkingInfo, type IMaps3DPlacesOptions, type IMaps3DRoadHit, type IMaps3DSelectionStyle, type IMaps3DTrafficOptions, type IMaps3DTransformRequestOptions, type IResponse, type IRoute, type ISearchByLocationParam, type ISearchDetailAddress, type ISearchDetailInfo, type ISearchParam, type ISearchResponse, MahalMap, MahalMapDefaultMarker, type MahalMapDefaultMarkerProps, type MapEngine, type MapLanguage, type MapStyleFamily, type Maps3DBuildingDetail, type Maps3DCtor, type Maps3DLayerId, type Maps3DParkingSubtype, type Maps3DTerrainMode, type Maps3DThemeName, type Maps3DTransformRequest, type MeasureIcons, type MeasureLabels, type MeasureMode, type MeasurePoint, type MeasureShape, type MeasureState, type MeasureStyleOptions, MeasureTool, type MeasureToolOptions, Router, Search, SearchByLocation, SearchPoi, type SearchResultType, type Theme, index$2 as keyUtils, index$1 as measureUtils, index as utils };
|
|
1197
|
+
export { CheckJSApi, type IAdditionalParamType, type ICheckJSApiParam, type ICheckJSApiResponse, type IMahalMapOptions, type IMapMarker, type IMaps3DBuildingClickInfo, type IMaps3DBuildingsController, type IMaps3DBuildingsOptions, type IMaps3DClosuresOptions, type IMaps3DDiagnostics, type IMaps3DHoverStyle, type IMaps3DIndoorOptions, type IMaps3DLayer, type IMaps3DLayerOptions, type IMaps3DLayerParams, type IMaps3DLayerState, type IMaps3DLayerStateParams, type IMaps3DMapOptionsInput, type IMaps3DMapOptionsResult, type IMaps3DObjectsLightOptions, type IMaps3DParkingHoverStyle, type IMaps3DParkingInfo, type IMaps3DPlacesOptions, type IMaps3DRoadHit, type IMaps3DSelectionStyle, type IMaps3DTrafficOptions, type IMaps3DTransformRequestOptions, type IResponse, type IRoute, type ISearchByLocationParam, type ISearchDetailAddress, type ISearchDetailInfo, type ISearchParam, type ISearchResponse, MahalMap, MahalMapDefaultMarker, type MahalMapDefaultMarkerProps, type MapEngine, type MapLanguage, type MapStyleFamily, type Maps3DBuildingDetail, type Maps3DCtor, type Maps3DLayerId, type Maps3DListener, type Maps3DParkingSubtype, type Maps3DSelectionKind, type Maps3DTerrainMode, type Maps3DThemeName, type Maps3DTransformRequest, type MeasureIcons, type MeasureLabels, type MeasureMode, type MeasurePoint, type MeasureShape, type MeasureState, type MeasureStyleOptions, MeasureTool, type MeasureToolOptions, Router, Search, SearchByLocation, SearchPoi, type SearchResultType, type Theme, index$2 as keyUtils, index$1 as measureUtils, index as utils };
|