mahal_map 1.7.3 → 2.0.1
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 +1535 -1200
- package/dist/index.d.mts +359 -35
- package/dist/index.d.ts +359 -35
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +12 -7
- package/dist/index.mjs.map +1 -1
- package/dist/mahal_map.sdk.js +1 -1
- package/package.json +73 -73
package/dist/index.d.mts
CHANGED
|
@@ -19,21 +19,144 @@ interface IAdditionalParamType {
|
|
|
19
19
|
limit?: number;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Поверхность @grammaps/maps3d-web, описанная локально. Пакет в зависимости не ставится —
|
|
24
|
+
* он приходит снаружи, как и maplibre-gl, поэтому импортировать его типы нельзя. Здесь
|
|
25
|
+
* повторена публичная часть .d.ts версии 0.7.3; всё необязательное помечено `?`, чтобы
|
|
26
|
+
* более старая сборка на странице не ломала типы у потребителя.
|
|
27
|
+
*/
|
|
28
|
+
type Maps3DThemeName = "light" | "dark" | "navigator-light" | "navigator-dark" | "mobile-light" | "mobile-dark";
|
|
29
|
+
/** Уровень детализации зданий. */
|
|
30
|
+
type Maps3DBuildingDetail = "footprint" | "volume" | "roofs" | "facade";
|
|
31
|
+
/** Режим рельефа: `auto` показывает его на обзорных зумах, `on` — всегда (дороже по трафику и кадру). */
|
|
32
|
+
type Maps3DTerrainMode = "auto" | "on" | "off";
|
|
33
|
+
/**
|
|
34
|
+
* Параметры каждого слоя реестра. Служит и справочником, и источником типов:
|
|
35
|
+
* ключи дают список id, значения — допустимые `params` в setLayer().
|
|
36
|
+
*
|
|
37
|
+
* У самой Maps3D id слоя типизирован как `string`, поэтому опечатка там проходит
|
|
38
|
+
* компиляцию и проваливается в рантайме (setLayer вернёт false). Здесь список
|
|
39
|
+
* фиксирован по таблице слоёв 0.7.3 — промах ловится на сборке.
|
|
40
|
+
*/
|
|
41
|
+
interface IMaps3DLayerParams {
|
|
42
|
+
/** Объёмные здания. По умолчанию включён. */
|
|
43
|
+
buildings: {
|
|
44
|
+
detail?: Maps3DBuildingDetail;
|
|
45
|
+
};
|
|
46
|
+
/** Расставленные 3D-объекты. По умолчанию включён. */
|
|
47
|
+
objects: Record<string, never>;
|
|
48
|
+
/** Пробки векторным слоем. По умолчанию выключен. */
|
|
49
|
+
traffic: Record<string, never>;
|
|
50
|
+
/** Пробки картинкой с сервера, без клика по дороге. По умолчанию выключен. */
|
|
51
|
+
trafficRaster: Record<string, never>;
|
|
52
|
+
/**
|
|
53
|
+
* Парковки. По умолчанию включён. Подтип берётся из атрибута `fee`:
|
|
54
|
+
* `paid` — `fee=yes`, `free` — `fee=no`, `unknown` — атрибута нет.
|
|
55
|
+
*/
|
|
56
|
+
parking: {
|
|
57
|
+
highlight?: boolean;
|
|
58
|
+
paid?: boolean;
|
|
59
|
+
free?: boolean;
|
|
60
|
+
unknown?: boolean;
|
|
61
|
+
};
|
|
62
|
+
/** Заправки. По умолчанию включён. */
|
|
63
|
+
fuel: Record<string, never>;
|
|
64
|
+
/** Зарядки. По умолчанию включён. */
|
|
65
|
+
charging: Record<string, never>;
|
|
66
|
+
/** Перекрытия дорог. По умолчанию выключен, требует своего тайлсета. */
|
|
67
|
+
closures: Record<string, never>;
|
|
68
|
+
/** Планы этажей. По умолчанию выключен, требует данных по зданию. */
|
|
69
|
+
indoor: {
|
|
70
|
+
level?: number;
|
|
71
|
+
};
|
|
72
|
+
/** Рельеф. По умолчанию `auto`. */
|
|
73
|
+
terrain: {
|
|
74
|
+
mode?: Maps3DTerrainMode;
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/** Идентификатор слоя в реестре Maps3D. */
|
|
78
|
+
type Maps3DLayerId = keyof IMaps3DLayerParams;
|
|
79
|
+
/**
|
|
80
|
+
* Снимок состояния слоя. Три поля независимы: слой может быть включён клиентом (`wanted`),
|
|
81
|
+
* но не нарисован — рельеф в режиме auto ждёт обзорного зума, перекрытия ждут своего
|
|
82
|
+
* тайлсета, планы этажей — данных по зданию.
|
|
83
|
+
*/
|
|
84
|
+
interface IMaps3DLayerState {
|
|
85
|
+
/** Не сужен до Maps3DLayerId: сборка Maps3D может отдать слой, которого нет в нашем списке. */
|
|
86
|
+
id: string;
|
|
87
|
+
/** Чего хочет клиент: последний setLayer либо умолчание стиля. */
|
|
88
|
+
wanted: boolean;
|
|
89
|
+
/** Что позволяет стиль: объявлен ли слой и есть ли под него данные. */
|
|
90
|
+
available: boolean;
|
|
91
|
+
/** Что нарисовано прямо сейчас. Именно это поле показывает, включён слой на деле или нет. */
|
|
92
|
+
active: boolean;
|
|
93
|
+
/** Параметры слоя: у зданий — detail, у этажей — level, у рельефа — mode. */
|
|
94
|
+
params: Record<string, unknown>;
|
|
95
|
+
}
|
|
96
|
+
interface IMaps3DSelectionStyle {
|
|
97
|
+
color?: string | number;
|
|
98
|
+
opacity?: number;
|
|
99
|
+
glow?: number;
|
|
100
|
+
durationMs?: number;
|
|
101
|
+
easing?: "ease-out" | "linear";
|
|
102
|
+
}
|
|
103
|
+
interface IMaps3DRoadHit {
|
|
104
|
+
name: string;
|
|
105
|
+
nameRu?: string;
|
|
106
|
+
class?: string;
|
|
107
|
+
ref?: string;
|
|
108
|
+
props: Record<string, unknown>;
|
|
109
|
+
distancePx: number;
|
|
110
|
+
}
|
|
22
111
|
interface IMaps3DTrafficOptions {
|
|
23
112
|
raster?: boolean;
|
|
24
113
|
rasterMaxZoom?: number;
|
|
25
114
|
graph?: string;
|
|
115
|
+
tilesUrl?: string;
|
|
116
|
+
clicks?: boolean;
|
|
117
|
+
opacity?: number;
|
|
118
|
+
minZoom?: number;
|
|
119
|
+
refreshMs?: number;
|
|
120
|
+
arrows?: boolean;
|
|
121
|
+
maxTileZoom?: number;
|
|
122
|
+
}
|
|
123
|
+
interface IMaps3DIndoorOptions {
|
|
124
|
+
level?: number;
|
|
125
|
+
[key: string]: unknown;
|
|
126
|
+
}
|
|
127
|
+
interface IMaps3DClosuresOptions {
|
|
128
|
+
[key: string]: unknown;
|
|
129
|
+
}
|
|
130
|
+
interface IMaps3DPlacesOptions {
|
|
131
|
+
highlight?: boolean;
|
|
132
|
+
paid?: boolean;
|
|
133
|
+
free?: boolean;
|
|
134
|
+
unknown?: boolean;
|
|
135
|
+
[key: string]: unknown;
|
|
136
|
+
}
|
|
137
|
+
interface IMaps3DBuildingsOptions {
|
|
138
|
+
detail?: Maps3DBuildingDetail;
|
|
139
|
+
[key: string]: unknown;
|
|
26
140
|
}
|
|
27
141
|
interface IMaps3DLayerOptions {
|
|
28
142
|
apiKey?: string | null;
|
|
29
143
|
base?: string;
|
|
30
|
-
|
|
144
|
+
/** Явный модуль maplibre-gl, если на странице несколько сборок. */
|
|
145
|
+
maplibre?: unknown;
|
|
146
|
+
endpoint?: string;
|
|
147
|
+
buildings?: boolean | IMaps3DBuildingsOptions;
|
|
31
148
|
traffic?: boolean | IMaps3DTrafficOptions;
|
|
149
|
+
indoor?: boolean | IMaps3DIndoorOptions;
|
|
150
|
+
closures?: boolean | IMaps3DClosuresOptions;
|
|
151
|
+
places?: IMaps3DPlacesOptions;
|
|
32
152
|
minZoom?: number;
|
|
33
153
|
lodBias?: number;
|
|
34
154
|
memoryBudget?: number;
|
|
35
155
|
maskReplaced?: boolean;
|
|
36
156
|
typeReplacements?: boolean;
|
|
157
|
+
modelsSource?: string;
|
|
158
|
+
modelsSourceLayer?: string;
|
|
159
|
+
modelsTilesUrl?: string;
|
|
37
160
|
}
|
|
38
161
|
interface IMaps3DBuildingsController {
|
|
39
162
|
setWindows?(enabled: boolean): void;
|
|
@@ -51,6 +174,7 @@ interface IMaps3DBuildingsController {
|
|
|
51
174
|
}
|
|
52
175
|
interface IMaps3DBuildingClickInfo {
|
|
53
176
|
id: string | number;
|
|
177
|
+
index?: number;
|
|
54
178
|
height?: number;
|
|
55
179
|
props?: Record<string, unknown>;
|
|
56
180
|
[key: string]: unknown;
|
|
@@ -61,36 +185,94 @@ interface IMaps3DObjectsLightOptions {
|
|
|
61
185
|
sky?: number;
|
|
62
186
|
exposure?: number;
|
|
63
187
|
}
|
|
188
|
+
interface IMaps3DDiagnostics {
|
|
189
|
+
terrainActive: boolean;
|
|
190
|
+
drapeRefreshes: number;
|
|
191
|
+
contextLost: boolean;
|
|
192
|
+
buildings: unknown;
|
|
193
|
+
}
|
|
64
194
|
interface IMaps3DLayer {
|
|
65
195
|
attach(map: Map): void | Promise<void>;
|
|
196
|
+
/** Есть у экземпляров из enhance(); у созданных конструктором готовность даёт сам attach(). */
|
|
197
|
+
readonly ready?: Promise<void>;
|
|
66
198
|
destroy?(): void;
|
|
67
199
|
remove?(): void;
|
|
200
|
+
setLayer?(id: string, on: boolean, params?: Record<string, unknown>): boolean;
|
|
201
|
+
layer?(id: string): IMaps3DLayerState | null;
|
|
202
|
+
layers?(): IMaps3DLayerState[];
|
|
203
|
+
onLayers?(callback: (state: IMaps3DLayerState) => void): () => void;
|
|
204
|
+
refreshLayers?(): void;
|
|
68
205
|
buildings?: IMaps3DBuildingsController | null;
|
|
69
206
|
setBuildingsEnabled?(enabled: boolean): void;
|
|
70
207
|
onBuildingClick?(callback: (info: IMaps3DBuildingClickInfo | null) => void): void;
|
|
208
|
+
selectBuilding?(id: number | string | null, style?: IMaps3DSelectionStyle): boolean;
|
|
209
|
+
clearSelection?(): void;
|
|
210
|
+
selectedBuilding?(): number | string | null;
|
|
211
|
+
setSelectionStyle?(style: IMaps3DSelectionStyle): void;
|
|
212
|
+
onRoadClick?(callback: (hit: IMaps3DRoadHit | null) => void): void;
|
|
213
|
+
roadAt?(point: {
|
|
214
|
+
x: number;
|
|
215
|
+
y: number;
|
|
216
|
+
}, tolerancePx?: number): IMaps3DRoadHit | null;
|
|
217
|
+
readonly roadsNamed?: boolean;
|
|
71
218
|
traffic?: boolean;
|
|
72
219
|
trafficRaster?: boolean;
|
|
73
220
|
setTraffic?(enabled: boolean): void;
|
|
74
221
|
setTrafficOpacity?(opacity: number): void;
|
|
75
222
|
setTrafficClicks?(enabled: boolean): void;
|
|
76
223
|
setTrafficRaster?(enabled: boolean): void;
|
|
224
|
+
setTrafficGraph?(graph: string): void;
|
|
77
225
|
refreshTraffic?(): void;
|
|
226
|
+
setIndoor?(enabled: boolean): void;
|
|
227
|
+
setIndoorLevel?(level: number): void;
|
|
228
|
+
readonly indoorLevels?: number[];
|
|
229
|
+
refreshIndoor?(): void;
|
|
230
|
+
showPlace?(lon: number, lat: number, level?: number | null, zoom?: number): void;
|
|
78
231
|
setObjectsLight?(options: IMaps3DObjectsLightOptions): void;
|
|
79
232
|
setMinZoom?(zoom: number): void;
|
|
80
233
|
refresh?(): Promise<void>;
|
|
81
234
|
clearCache?(): Promise<void>;
|
|
235
|
+
diagnostics?(): IMaps3DDiagnostics;
|
|
82
236
|
}
|
|
83
237
|
interface IMaps3DTransformRequestOptions {
|
|
84
|
-
base
|
|
238
|
+
base?: string;
|
|
85
239
|
apiKey?: string | null;
|
|
86
240
|
}
|
|
87
|
-
|
|
241
|
+
interface IMaps3DMapOptionsInput extends IMaps3DTransformRequestOptions {
|
|
242
|
+
/** Имя темы платформы либо полный URL своего стиля. */
|
|
243
|
+
style?: string;
|
|
244
|
+
antialias?: boolean;
|
|
245
|
+
}
|
|
246
|
+
interface IMaps3DMapOptionsResult {
|
|
247
|
+
style: string;
|
|
248
|
+
transformRequest: (url: string) => {
|
|
249
|
+
url: string;
|
|
250
|
+
};
|
|
251
|
+
canvasContextAttributes?: {
|
|
252
|
+
antialias: boolean;
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
type Maps3DTransformRequest = (options: IMaps3DTransformRequestOptions) => (url: string) => {
|
|
256
|
+
url: string;
|
|
257
|
+
};
|
|
88
258
|
type Maps3DCtor = (new (options: IMaps3DLayerOptions) => IMaps3DLayer) & {
|
|
89
259
|
transformRequest: Maps3DTransformRequest;
|
|
260
|
+
/** Стиль + transformRequest + antialias одним объектом. Появился в 0.5.0. */
|
|
261
|
+
mapOptions?(options: IMaps3DMapOptionsInput): IMaps3DMapOptionsResult;
|
|
262
|
+
/** Адрес стиля по имени темы. Неизвестное имя — явная ошибка, а не тихий 404. */
|
|
263
|
+
styleUrl?(style?: string, base?: string): string;
|
|
264
|
+
/** Подключение к уже созданной карте; возвращает экземпляр с `ready`. */
|
|
265
|
+
enhance?(map: Map, options?: IMaps3DLayerOptions): IMaps3DLayer;
|
|
266
|
+
/** MapLibre с платформы вместе со своим воркером. */
|
|
267
|
+
maplibre?(options?: {
|
|
268
|
+
base?: string;
|
|
269
|
+
}): Promise<unknown>;
|
|
270
|
+
readonly maplibreVersion?: string;
|
|
90
271
|
};
|
|
91
272
|
|
|
92
273
|
interface IMahalMapOptions {
|
|
93
274
|
container?: string | HTMLElement;
|
|
275
|
+
/** Полный URL своего стиля. Задан — SDK его не меняет, setStyle() становится no-op. */
|
|
94
276
|
style?: string;
|
|
95
277
|
theme?: Theme;
|
|
96
278
|
lang?: MapLanguage;
|
|
@@ -98,20 +280,49 @@ interface IMahalMapOptions {
|
|
|
98
280
|
zoom?: number;
|
|
99
281
|
pitch?: number;
|
|
100
282
|
bearing?: number;
|
|
101
|
-
|
|
102
|
-
/** "legacy" (default) — старый движок (mtile.gram.tj). "3d" — новый GramMaps движок (route.gram.tj) с поддержкой Maps3D. */
|
|
103
|
-
engine?: MapEngine;
|
|
104
|
-
/** Включает Maps3D слой (детальные 3D-здания). Работает только при engine: "3d". */
|
|
283
|
+
/** Подключает Maps3D (объём, объекты, пробки, рельеф, планы этажей). По умолчанию `true`. */
|
|
105
284
|
enable3D?: boolean;
|
|
106
|
-
/** Домен платформы
|
|
285
|
+
/** Домен платформы MahalMaps. По умолчанию https://navi.gram.tj */
|
|
107
286
|
base?: string;
|
|
108
|
-
/**
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
287
|
+
/**
|
|
288
|
+
* Семейство стилей платформы. `theme` выбирает внутри него светлую/тёмную:
|
|
289
|
+
* "default" → light/dark, "navigator" → navigator-light/navigator-dark,
|
|
290
|
+
* "mobile" → mobile-light/mobile-dark.
|
|
291
|
+
*/
|
|
292
|
+
family?: MapStyleFamily;
|
|
293
|
+
/**
|
|
294
|
+
* Явное имя темы платформы вместо пары `family` + `theme` (или полный URL стиля).
|
|
295
|
+
* Задано — стиль считается зафиксированным и setStyle() его не меняет.
|
|
296
|
+
*/
|
|
297
|
+
preset?: Maps3DThemeName | string;
|
|
298
|
+
/**
|
|
299
|
+
* Сглаживание сцены. Без него тонкая геометрия 3D-объектов (перила, мачты, ряды сидений)
|
|
300
|
+
* на отдалении рассыпается в рябь. По умолчанию `true` при включённом 3D.
|
|
301
|
+
*/
|
|
302
|
+
antialias?: boolean;
|
|
303
|
+
/** Опции Maps3D: buildings, traffic, indoor, closures, terrain, minZoom, lodBias, memoryBudget, ... */
|
|
304
|
+
maps3d?: Omit<IMaps3DLayerOptions, "apiKey" | "base">;
|
|
305
|
+
/**
|
|
306
|
+
* Диагностика неработающего веб-воркера MapLibre: если через 8 с после создания карты
|
|
307
|
+
* не разобран ни один векторный тайл, в консоль уходит предупреждение с причиной и
|
|
308
|
+
* решением. `false` отключает проверку, число задаёт свою задержку в мс.
|
|
309
|
+
*/
|
|
310
|
+
workerCheck?: boolean | number;
|
|
311
|
+
/**
|
|
312
|
+
* @deprecated Игнорируется с 2.0.0. Движок один — платформа MahalMaps через
|
|
313
|
+
* @grammaps/maps3d-web. Без переданного Maps3D карта поднимается на запасном стиле.
|
|
314
|
+
*/
|
|
315
|
+
engine?: MapEngine;
|
|
316
|
+
/**
|
|
317
|
+
* @deprecated Игнорируется с 2.0.0. Запасной векторный стиль применяется сам,
|
|
318
|
+
* когда Maps3D не передан.
|
|
319
|
+
*/
|
|
320
|
+
autoAddVectorSource?: boolean;
|
|
112
321
|
}
|
|
113
322
|
type Theme = "dark" | "light";
|
|
323
|
+
type MapStyleFamily = "default" | "navigator" | "mobile";
|
|
114
324
|
type MapLanguage = "tj" | "ru";
|
|
325
|
+
/** @deprecated Оставлен, чтобы не ломать компиляцию у потребителей. Значение не используется. */
|
|
115
326
|
type MapEngine = "legacy" | "3d";
|
|
116
327
|
|
|
117
328
|
interface MahalMapDefaultMarkerProps {
|
|
@@ -224,6 +435,8 @@ declare class MahalMap {
|
|
|
224
435
|
private static instances;
|
|
225
436
|
private static defaultLanguage;
|
|
226
437
|
private static disposedMaps3DLayers;
|
|
438
|
+
/** Через сколько мс после создания карты проверяем, ожил ли веб-воркер MapLibre. */
|
|
439
|
+
private static readonly WORKER_CHECK_DELAY;
|
|
227
440
|
private isReady;
|
|
228
441
|
private readyCallbacks;
|
|
229
442
|
private map;
|
|
@@ -235,26 +448,29 @@ declare class MahalMap {
|
|
|
235
448
|
private options;
|
|
236
449
|
private language;
|
|
237
450
|
private instanceKey;
|
|
238
|
-
private engine;
|
|
239
451
|
private gramBase;
|
|
240
|
-
private
|
|
452
|
+
private styleFamily;
|
|
241
453
|
private presetIsExplicit;
|
|
242
454
|
private maps3dCtor?;
|
|
243
455
|
private maps3dLayer?;
|
|
244
456
|
private maps3dReady?;
|
|
245
457
|
private buildingsEnabled;
|
|
458
|
+
private workerCheckTimer?;
|
|
246
459
|
private constructor();
|
|
247
460
|
private static getInstanceKey;
|
|
248
461
|
private static normalizeLanguage;
|
|
249
462
|
static setDefaultLanguage(lang?: string | null): void;
|
|
250
|
-
|
|
251
|
-
|
|
463
|
+
/**
|
|
464
|
+
* Запасной стиль: Maps3D не передан — стилей платформы взять неоткуда, поднимаем карту
|
|
465
|
+
* на старом векторном стиле mtile.gram.tj с подписью ?token=. 3D при этом не работает.
|
|
466
|
+
*/
|
|
467
|
+
private static getFallbackStyle;
|
|
252
468
|
private static getMapToken;
|
|
253
469
|
private static getMaps3DCtor;
|
|
254
470
|
/**
|
|
255
|
-
* Проверяет подписку JSApi перед созданием карты. Нужна только
|
|
256
|
-
* (mtile.gram.tj): у
|
|
257
|
-
*
|
|
471
|
+
* Проверяет подписку JSApi перед созданием карты. Нужна только на запасном стиле
|
|
472
|
+
* (mtile.gram.tj, когда Maps3D не передан): у платформы MahalMaps доступ контролирует
|
|
473
|
+
* она сама по ?key=, отдельная проверка там не применяется и пропускается.
|
|
258
474
|
*
|
|
259
475
|
* Fail-open: блокирует создание карты только при явном ответе сервиса success:false.
|
|
260
476
|
* Сетевая ошибка (сервис недоступен, CORS, таймаут) карту не роняет — иначе падение
|
|
@@ -262,11 +478,25 @@ declare class MahalMap {
|
|
|
262
478
|
*/
|
|
263
479
|
private static ensureJSApiSubscription;
|
|
264
480
|
/**
|
|
265
|
-
* Асинхронный аналог create():
|
|
266
|
-
* JSApi и, если её нет, не создаёт карту вообще (MapLibre-инстанс не
|
|
267
|
-
*
|
|
481
|
+
* Асинхронный аналог create(): на запасном стиле (Maps3D не передан) сначала дожидается
|
|
482
|
+
* проверки подписки JSApi и, если её нет, не создаёт карту вообще (MapLibre-инстанс не
|
|
483
|
+
* строится). С Maps3D — тот же create() без проверки.
|
|
268
484
|
*/
|
|
269
485
|
static createAsync(options: IMahalMapOptions, maplibreObject?: MapLibreApi, maps3dCtor?: Maps3DCtor): Promise<MahalMap>;
|
|
486
|
+
/**
|
|
487
|
+
* Имя темы платформы или полный URL стиля. Явный `style`/`preset` побеждает пару
|
|
488
|
+
* `family` + `theme`: оба считаются фиксацией стиля, и setStyle() их не трогает.
|
|
489
|
+
*/
|
|
490
|
+
private static resolveStyleName;
|
|
491
|
+
/**
|
|
492
|
+
* Стиль + transformRequest + antialias от самого SDK. mapOptions() — документированная
|
|
493
|
+
* дверь (есть с 0.5.0); у сборок постарше собираем то же из styleUrl/transformRequest.
|
|
494
|
+
*
|
|
495
|
+
* Неизвестное имя темы SDK считает явной ошибкой (а не тихим 404) — переупаковываем её,
|
|
496
|
+
* чтобы в консоли было видно, что имя пришло из опций MahalMap.
|
|
497
|
+
*/
|
|
498
|
+
private static buildPlatformMapOptions;
|
|
499
|
+
private static requireAbsoluteStyle;
|
|
270
500
|
static create(options: IMahalMapOptions, maplibreObject?: MapLibreApi, maps3dCtor?: Maps3DCtor): MahalMap;
|
|
271
501
|
static onReady(container: string, callback: (map: Map) => void): void;
|
|
272
502
|
static getInstance(container: string): MahalMap;
|
|
@@ -279,6 +509,25 @@ declare class MahalMap {
|
|
|
279
509
|
static getMaps3DLayer(instance: MahalMap): IMaps3DLayer | undefined;
|
|
280
510
|
static whenMaps3DReady(instance: MahalMap): Promise<IMaps3DLayer | undefined>;
|
|
281
511
|
static toggle3DBuildings(instance: MahalMap, enabled: boolean): void;
|
|
512
|
+
static setLayer<Id extends Maps3DLayerId>(instance: MahalMap, id: Id, on: boolean, params?: IMaps3DLayerParams[Id]): boolean;
|
|
513
|
+
static getLayerState(instance: MahalMap, id: Maps3DLayerId): IMaps3DLayerState | null;
|
|
514
|
+
static getLayers(instance: MahalMap): IMaps3DLayerState[];
|
|
515
|
+
static onLayers(instance: MahalMap, callback: (state: IMaps3DLayerState) => void): () => void;
|
|
516
|
+
static refreshLayers(instance: MahalMap): void;
|
|
517
|
+
static getIndoorLevels(instance: MahalMap): number[];
|
|
518
|
+
static setIndoorLevel(instance: MahalMap, level: number): void;
|
|
519
|
+
static refreshIndoor(instance: MahalMap): void;
|
|
520
|
+
static showPlace(instance: MahalMap, lon: number, lat: number, level?: number | null, zoom?: number): void;
|
|
521
|
+
static onBuildingClick(instance: MahalMap, callback: (info: IMaps3DBuildingClickInfo | null) => void): void;
|
|
522
|
+
static selectBuilding(instance: MahalMap, id: number | string | null, style?: IMaps3DSelectionStyle): boolean;
|
|
523
|
+
static clearSelection(instance: MahalMap): void;
|
|
524
|
+
static selectedBuilding(instance: MahalMap): string | number | null;
|
|
525
|
+
static setSelectionStyle(instance: MahalMap, style: IMaps3DSelectionStyle): void;
|
|
526
|
+
static onRoadClick(instance: MahalMap, callback: (hit: IMaps3DRoadHit | null) => void): void;
|
|
527
|
+
static roadAt(instance: MahalMap, point: {
|
|
528
|
+
x: number;
|
|
529
|
+
y: number;
|
|
530
|
+
}, tolerancePx?: number): IMaps3DRoadHit | null;
|
|
282
531
|
static setLanguage(instance: MahalMap, lang: MapLanguage): void;
|
|
283
532
|
static setCenter(instance: MahalMap, center: [number, number]): void;
|
|
284
533
|
static setZoom(instance: MahalMap, zoom: number): void;
|
|
@@ -287,17 +536,80 @@ declare class MahalMap {
|
|
|
287
536
|
init(map: Map): void;
|
|
288
537
|
getCamera(): CameraController;
|
|
289
538
|
getMap(): Map;
|
|
539
|
+
/**
|
|
540
|
+
* Светлая/тёмная внутри выбранного семейства (`family`). Стиль, зафиксированный явным
|
|
541
|
+
* `style`/`preset`, не трогаем: его содержимое знает только тот, кто его задал.
|
|
542
|
+
* Без Maps3D менять нечего — карта на запасном стиле, у него варианта по теме нет.
|
|
543
|
+
*/
|
|
290
544
|
setStyle(theme: Theme): void;
|
|
545
|
+
private refreshLayersOnStyleLoad;
|
|
546
|
+
/**
|
|
547
|
+
* Язык подписей приходит из стиля платформы, отдельных URL по языкам больше нет —
|
|
548
|
+
* метод только запоминает выбор для остальных сервисов SDK (поиск, роутинг).
|
|
549
|
+
*/
|
|
291
550
|
setLanguage(lang: MapLanguage): void;
|
|
292
551
|
getMaps3DLayer(): IMaps3DLayer | undefined;
|
|
293
|
-
/**
|
|
552
|
+
/**
|
|
553
|
+
* Вкл/выкл объёмные здания. Штатные здания стиля прячет и возвращает сам Maps3D —
|
|
554
|
+
* руками их видимость мы больше не трогаем, иначе две стороны спорят за один слой.
|
|
555
|
+
*/
|
|
294
556
|
toggle3DBuildings(enabled: boolean): void;
|
|
295
557
|
/**
|
|
296
|
-
* Промис готовности слоя Maps3D
|
|
297
|
-
*
|
|
298
|
-
* Резолвится в undefined, если
|
|
558
|
+
* Промис готовности слоя Maps3D. У экземпляров из enhance() это его собственный `ready`,
|
|
559
|
+
* у созданных конструктором — завершение attach(). До него layer.buildings ещё нет.
|
|
560
|
+
* Резолвится в undefined, если слой выключен, Maps3D не передан или подключение упало.
|
|
299
561
|
*/
|
|
300
562
|
whenMaps3DReady(): Promise<IMaps3DLayer | undefined>;
|
|
563
|
+
/**
|
|
564
|
+
* Включить/выключить слой. `params` типизирован под конкретный слой: `terrain` ждёт
|
|
565
|
+
* `{ mode }`, `buildings` — `{ detail }`, `indoor` — `{ level }`, у остальных параметров нет.
|
|
566
|
+
*
|
|
567
|
+
* Возвращает `false`, если такого слоя в подключённой сборке Maps3D нет или Maps3D не передан.
|
|
568
|
+
* Слой, которого ещё нет в нашем списке id, доступен напрямую:
|
|
569
|
+
* `map.getMaps3DLayer()?.setLayer?.("новый", true)`.
|
|
570
|
+
*/
|
|
571
|
+
setLayer<Id extends Maps3DLayerId>(id: Id, on: boolean, params?: IMaps3DLayerParams[Id]): boolean;
|
|
572
|
+
/** Состояние слоя: wanted (воля клиента), available (позволяет стиль), active (нарисовано). */
|
|
573
|
+
getLayerState(id: Maps3DLayerId): IMaps3DLayerState | null;
|
|
574
|
+
/** Снимок всех слоёв — по нему приложение рисует свою панель. */
|
|
575
|
+
getLayers(): IMaps3DLayerState[];
|
|
576
|
+
/** Подписка на изменения слоёв. Возвращает отписку (no-op, если слоя нет). */
|
|
577
|
+
onLayers(callback: (state: IMaps3DLayerState) => void): () => void;
|
|
578
|
+
/** Пере-применить волю клиента ко всем слоям — после полной смены стиля. */
|
|
579
|
+
refreshLayers(): void;
|
|
580
|
+
/** Этажи, найденные в текущем виде карты. Пусто — данных по зданию нет. */
|
|
581
|
+
getIndoorLevels(): number[];
|
|
582
|
+
/** Переключить этаж. Нумерация OSM: 0 — первый наземный. */
|
|
583
|
+
setIndoorLevel(level: number): void;
|
|
584
|
+
/** Перечитать планы этажей — после правки картографом. */
|
|
585
|
+
refreshIndoor(): void;
|
|
586
|
+
/**
|
|
587
|
+
* Показать найденный объект и открыть его этаж. Ровно то, что нужно после поиска:
|
|
588
|
+
* у объектов внутри зданий приходит `level` — без него карта откроет первый этаж
|
|
589
|
+
* и метка окажется в чужом зале.
|
|
590
|
+
*/
|
|
591
|
+
showPlace(lon: number, lat: number, level?: number | null, zoom?: number): void;
|
|
592
|
+
/** Клик по зданию: { id, height, props } либо null. Повторный вызов заменяет обработчик. */
|
|
593
|
+
onBuildingClick(callback: (info: IMaps3DBuildingClickInfo | null) => void): void;
|
|
594
|
+
/** Выделить здание по osm_id. `false` — здания сейчас нет в загруженных данных. */
|
|
595
|
+
selectBuilding(id: number | string | null, style?: IMaps3DSelectionStyle): boolean;
|
|
596
|
+
clearSelection(): void;
|
|
597
|
+
selectedBuilding(): number | string | null;
|
|
598
|
+
setSelectionStyle(style: IMaps3DSelectionStyle): void;
|
|
599
|
+
/** Клик по дороге. Приходит независимо от клика по зданию — приоритет решает приложение. */
|
|
600
|
+
onRoadClick(callback: (hit: IMaps3DRoadHit | null) => void): void;
|
|
601
|
+
/** Дорога под точкой холста. Допуск по умолчанию — 12 px. */
|
|
602
|
+
roadAt(point: {
|
|
603
|
+
x: number;
|
|
604
|
+
y: number;
|
|
605
|
+
}, tolerancePx?: number): IMaps3DRoadHit | null;
|
|
606
|
+
/** Есть ли в текущем стиле названия дорог. Нет — roadAt() всегда вернёт null. */
|
|
607
|
+
get roadsNamed(): boolean;
|
|
608
|
+
/**
|
|
609
|
+
* Создаёт слой Maps3D. `buildings` не форсируем в `true`: с 0.7.x видимостью объёма
|
|
610
|
+
* заведует реестр слоёв, а опции облика зданий приходят из options.maps3d как есть.
|
|
611
|
+
*/
|
|
612
|
+
private createMaps3DLayer;
|
|
301
613
|
private attachMaps3DLayer;
|
|
302
614
|
/**
|
|
303
615
|
* Освобождает слой Maps3D одним доступным методом (destroy(), иначе remove()) и ровно один
|
|
@@ -306,17 +618,29 @@ declare class MahalMap {
|
|
|
306
618
|
* вызов teardown попал бы на уже освобождённый объект.
|
|
307
619
|
*/
|
|
308
620
|
private static teardownMaps3DLayer;
|
|
309
|
-
private applyMaps3DBuildingMode;
|
|
310
621
|
/**
|
|
311
|
-
*
|
|
312
|
-
*
|
|
313
|
-
*
|
|
622
|
+
* Диагностика неработающего веб-воркера MapLibre.
|
|
623
|
+
*
|
|
624
|
+
* Симптом злой: тайлы приходят, но разобрать их некому — карта показывает пустой фон,
|
|
625
|
+
* а в консоли лежит только `Uncaught SyntaxError: Unexpected token '<'`, где нет ни слова
|
|
626
|
+
* ни про MapLibre, ни про воркер. Причина почти всегда одна: сборщик не перенёс файл
|
|
627
|
+
* воркера рядом со сборкой, и вместо скрипта сервер отдаёт index.html.
|
|
314
628
|
*
|
|
315
|
-
*
|
|
316
|
-
*
|
|
317
|
-
*
|
|
629
|
+
* Проверку вешаем на таймер от создания карты, а НЕ на событие "load": при мёртвом
|
|
630
|
+
* воркере стиль не дозагружается и "load" не приходит вовсе.
|
|
631
|
+
*
|
|
632
|
+
* Смотрим на результат, а не на события: у Maps3D свой сторож (`gn`) слушает
|
|
633
|
+
* `data{sourceDataType:"content"}`, но это событие приходит при регистрации источника,
|
|
634
|
+
* за ~30 мс и без единого тайла — тревога снимается раньше, чем что-то могло сломаться.
|
|
635
|
+
*/
|
|
636
|
+
private watchWorkerHealth;
|
|
637
|
+
private reportBrokenWorker;
|
|
638
|
+
/**
|
|
639
|
+
* Приводит объём зданий к желаемому состоянию. Реестр слоёв (0.7.x) — основная дверь:
|
|
640
|
+
* он же прячет и возвращает штатные здания стиля. setBuildingsEnabled — путь для
|
|
641
|
+
* сборок Maps3D постарше, где реестра ещё нет.
|
|
318
642
|
*/
|
|
319
|
-
private
|
|
643
|
+
private applyMaps3DBuildingMode;
|
|
320
644
|
setCenter(center: [number, number]): void;
|
|
321
645
|
setZoom(zoom: number): void;
|
|
322
646
|
destroy(): void;
|
|
@@ -593,4 +917,4 @@ declare namespace index {
|
|
|
593
917
|
export { index_checkCoordinates as checkCoordinates, index_debounce as debounce, index_geojsonPolyline as geojsonPolyline, index_geometryPolyline as geometryPolyline, index_trimValue as trimValue };
|
|
594
918
|
}
|
|
595
919
|
|
|
596
|
-
export { CheckJSApi, type IAdditionalParamType, type ICheckJSApiParam, type ICheckJSApiResponse, type IMahalMapOptions, type IMapMarker, type IMaps3DBuildingClickInfo, type IMaps3DBuildingsController, type IMaps3DLayer, type IMaps3DLayerOptions, type IMaps3DObjectsLightOptions, type IMaps3DTrafficOptions, type IResponse, type IRoute, type ISearchByLocationParam, type ISearchParam, type ISearchResponse, MahalMap, MahalMapDefaultMarker, type MahalMapDefaultMarkerProps, type MapEngine, type MapLanguage, type Maps3DCtor, type Maps3DTransformRequest, type MeasureIcons, type MeasureLabels, type MeasureMode, type MeasurePoint, type MeasureShape, type MeasureState, type MeasureStyleOptions, MeasureTool, type MeasureToolOptions, Router, Search, SearchByLocation, SearchPoi, type Theme, index$2 as keyUtils, index$1 as measureUtils, index as utils };
|
|
920
|
+
export { CheckJSApi, type IAdditionalParamType, type ICheckJSApiParam, type ICheckJSApiResponse, type IMahalMapOptions, type IMapMarker, type IMaps3DBuildingClickInfo, type IMaps3DBuildingsController, type IMaps3DBuildingsOptions, type IMaps3DClosuresOptions, type IMaps3DDiagnostics, type IMaps3DIndoorOptions, type IMaps3DLayer, type IMaps3DLayerOptions, type IMaps3DLayerParams, type IMaps3DLayerState, type IMaps3DMapOptionsInput, type IMaps3DMapOptionsResult, type IMaps3DObjectsLightOptions, type IMaps3DPlacesOptions, type IMaps3DRoadHit, type IMaps3DSelectionStyle, type IMaps3DTrafficOptions, type IMaps3DTransformRequestOptions, type IResponse, type IRoute, type ISearchByLocationParam, type ISearchParam, type ISearchResponse, MahalMap, MahalMapDefaultMarker, type MahalMapDefaultMarkerProps, type MapEngine, type MapLanguage, type MapStyleFamily, type Maps3DBuildingDetail, type Maps3DCtor, type Maps3DLayerId, 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 Theme, index$2 as keyUtils, index$1 as measureUtils, index as utils };
|