mahal_map 1.6.16 → 1.6.18

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 CHANGED
@@ -12,16 +12,24 @@ npm install mahal_map maplibre-gl
12
12
 
13
13
  `maplibre-gl` является peer dependency. Его нужно установить в приложении или подключить отдельным browser script перед SDK.
14
14
 
15
- Для нового 3D-движка (`engine: "3d"`) дополнительно нужен `@osm/maps3d-web`. Пакет **не публикуется в npm** — скачайте его со страницы платформы (кнопка «Web SDK — стартер»; в Vue-стартере это папка `libs/maps3d-web` с уже собранным `dist/`), положите в проект и поставьте как локальную зависимость:
15
+ Для нового 3D-движка (`engine: "3d"`) дополнительно нужен `@grammaps/maps3d-web`:
16
+
17
+ ```sh
18
+ npm i @grammaps/maps3d-web maplibre-gl
19
+ ```
20
+
21
+ `three` идёт зависимостью SDK, `maplibre-gl` — peer (экземпляр карты создаёте вы через `mahal_map`).
22
+
23
+ Оффлайн-вариант: в стартере со страницы платформы лежит папка `libs/maps3d-web` со собранным `dist/` — ставится как локальная зависимость:
16
24
 
17
25
  ```sh
18
26
  npm i ./libs/maps3d-web maplibre-gl
19
27
  ```
20
28
 
21
- `package.json` запишет ссылку на локальную папку:
29
+ `package.json` в этом случае запишет ссылку на локальную папку:
22
30
 
23
31
  ```json
24
- "@osm/maps3d-web": "file:./libs/maps3d-web"
32
+ "@grammaps/maps3d-web": "file:./libs/maps3d-web"
25
33
  ```
26
34
 
27
35
  Без сборщика возьмите `lib/maps3d.global.js` из скачанного стартера (IIFE-глобал `Maps3D`, three бандлится внутрь) и подключите скриптом после `maplibre-gl`:
@@ -141,11 +149,11 @@ interface IMahalMapOptions {
141
149
  | `lang` | `"tj" \| "ru"` | Язык стандартного стиля. `tj` оставляет URL только с `token`, `ru` добавляет `lang=ru`. |
142
150
  | `center` | `[number, number]` | Центр карты в формате `[lng, lat]`. |
143
151
  | `zoom` | `number` | Начальный zoom. |
144
- | `pitch` | `number` | Начальный наклон камеры (нужен для 3D-вида). |
152
+ | `pitch` | `number` | Начальный наклон камеры (нужен для 3D-вида). Если не задан и `enable3D` включен — авто `58` (при `pitch: 0` экструзия зданий не видна, камера смотрит строго сверху). |
145
153
  | `bearing` | `number` | Начальный поворот камеры. |
146
154
  | `autoAddVectorSource` | `boolean` | Использует встроенный vector style и блокирует смену стандартного стиля через `setStyle`. |
147
155
  | `engine` | `"legacy" \| "3d"` | Переключатель движка карты. `"legacy"` (по умолчанию) — старые стили mtile.gram.tj. `"3d"` — новая платформа GramMaps (navi.gram.tj) с пресетами стиля и Maps3D. |
148
- | `enable3D` | `boolean` | Подключает детальные 3D-здания (Maps3D). Работает только при `engine: "3d"`. |
156
+ | `enable3D` | `boolean` | Подключает детальные 3D-здания (Maps3D). Работает только при `engine: "3d"`. По умолчанию `true` для `engine: "3d"` — передайте `false`, чтобы отключить. |
149
157
  | `base` | `string` | Домен платформы GramMaps для `engine: "3d"`. По умолчанию `https://navi.gram.tj`. |
150
158
  | `preset` | `string` | Имя пресета стиля GramMaps (напр. `"standard-night"`) для `engine: "3d"`. По умолчанию `road-urban-lab-v2`/`standard-night` в зависимости от `theme`. |
151
159
  | `maps3d` | `object` | Доп. опции Maps3D слоя: `traffic`, `minZoom`, `lodBias`, `memoryBudget`, `maskReplaced`, `typeReplacements`. |
@@ -157,7 +165,7 @@ interface IMahalMapOptions {
157
165
  ```ts
158
166
  import maplibregl from "maplibre-gl";
159
167
  import "maplibre-gl/dist/maplibre-gl.css";
160
- import { Maps3D } from "@osm/maps3d-web";
168
+ import { Maps3D } from "@grammaps/maps3d-web";
161
169
  import { MahalMap, keyUtils } from "mahal_map";
162
170
 
163
171
  keyUtils.saveKey("YOUR_MAP_API_KEY");
@@ -177,7 +185,7 @@ const map = MahalMap.create(
177
185
  );
178
186
  ```
179
187
 
180
- `Maps3D` (третий аргумент `create()`) — опционален: если не передан, SDK попробует взять его из `window.Maps3D`. `@osm/maps3d-web` — необязательный peer dependency, ставится только если используется `engine: "3d"`.
188
+ `Maps3D` (третий аргумент `create()`) — опционален: если не передан, SDK попробует взять его из `window.Maps3D`. `@grammaps/maps3d-web` — необязательный peer dependency, ставится только если используется `engine: "3d"`.
181
189
 
182
190
  Получить слой Maps3D после создания карты:
183
191
 
@@ -187,7 +195,7 @@ const layer = map.getMaps3DLayer();
187
195
  MahalMap.getMaps3DLayer(map);
188
196
  ```
189
197
 
190
- `getMaps3DLayer()` возвращает реальный инстанс `Maps3D` (не обёртку) — типы `mahal_map` описывают всю его публичную поверхность, так что подключающему сервису не нужно ставить или типизировать `@osm/maps3d-web` отдельно.
198
+ `getMaps3DLayer()` возвращает реальный инстанс `Maps3D` (не обёртку) — типы `mahal_map` описывают всю его публичную поверхность, так что подключающему сервису не нужно ставить или типизировать `@grammaps/maps3d-web` отдельно.
191
199
 
192
200
  ### Опции `maps3d` (расширенные)
193
201
 
@@ -206,19 +214,25 @@ MahalMap.getMaps3DLayer(map);
206
214
 
207
215
  ### 3D-здания
208
216
 
217
+ `Maps3D` рисует процедурные 3D-здания (three.js) вместо плоской `fill-extrusion` стиля: фаска кромок, вертикальный градиент и базовый цвет берутся из стиля, окна — из `metadata` пресета. При `engine: "3d"` слой создаётся и `attach`-ится к карте автоматически (`enable3D` по умолчанию `true`) — вручную поднимать `new Maps3D(...)` не нужно, только если требуется отдельный кастомный инстанс:
218
+
219
+ ```ts
220
+ const layer = new Maps3D({ apiKey, base, buildings: true });
221
+ await layer.attach(map); // attach асинхронный, дожидается load карты сам
222
+ ```
223
+
209
224
  Тема (окна/свет) приходит из `metadata` пресета стиля и применяется автоматически при `map.setStyle()` — пересоздавать слой не нужно. Ручные сеттеры перебивают её:
210
225
 
211
226
  ```ts
212
227
  const layer = map.getMaps3DLayer();
213
228
 
214
- layer?.setBuildingsEnabled(false); // 3D-здания ⇄ штатные здания стиля
215
-
216
229
  const b = layer?.buildings;
217
230
  b?.setWindowStyle(7); // тип окна 0..9 (сетка, лента, curtain wall, ...)
218
- b?.setWindowDepth(0.85);
231
+ b?.setWindowDepth(0.85); // глубина ниши окна 0..1 (реальная геометрия вблизи)
219
232
  b?.setWindowColor("#6b9ed1");
220
233
  b?.setWindowFrameColor("#f2f2f4");
221
- b?.setEdgeRadius(1.2);
234
+ b?.setEdgeRadius(1.2); // скругление кромок, м
235
+ // Свет обычно НЕ задают руками — его несёт metadata стиля, сеттеры её перебивают
222
236
  b?.setSunIntensity(3.2);
223
237
  b?.setAmbient(0.76);
224
238
  b?.setSky(0.91);
@@ -230,6 +244,26 @@ layer?.onBuildingClick((info) => {
230
244
  });
231
245
  ```
232
246
 
247
+ #### Вкл/выкл 3D-здания на лету
248
+
249
+ Переключение 3D-здания ⇄ штатные здания стиля, без пересоздания карты:
250
+
251
+ ```ts
252
+ layer?.setBuildingsEnabled(false); // напрямую через слой
253
+ ```
254
+
255
+ Либо через обёртку `MahalMap` — она же умеет пересоздать слой, если его не было (`enable3D: false` при создании):
256
+
257
+ ```ts
258
+ const map = MahalMap.getInstance("map");
259
+
260
+ map.toggle3DBuildings(false); // выкл
261
+ map.toggle3DBuildings(true); // вкл обратно
262
+
263
+ // статик-версия и SDK-фасад (mahal_map/sdk) работают так же
264
+ MahalMap.toggle3DBuildings(map, false);
265
+ ```
266
+
233
267
  ### Пробки
234
268
 
235
269
  ```ts
@@ -461,6 +495,8 @@ MahalMap.setLanguage(map, "ru");
461
495
  MahalMap.setCenter(map, [69.624024, 40.279687]);
462
496
  MahalMap.setZoom(map, 14);
463
497
  MahalMap.addMarker(map, marker);
498
+ MahalMap.getMaps3DLayer(map);
499
+ MahalMap.toggle3DBuildings(map, false);
464
500
  MahalMap.destroy(map);
465
501
  ```
466
502
 
@@ -498,6 +534,8 @@ MahalMap.setZoom(map, 14);
498
534
  | `setCenter(instance, center)` | Меняет центр карты. |
499
535
  | `setZoom(instance, zoom)` | Меняет zoom карты. |
500
536
  | `addMarker(instance, marker)` | Добавляет маркер. |
537
+ | `getMaps3DLayer(instance)` | Возвращает инстанс слоя Maps3D (только `engine: "3d"`). |
538
+ | `toggle3DBuildings(instance, enabled)` | Вкл/выкл детальные 3D-здания на лету (только `engine: "3d"`). |
501
539
  | `destroy(instance)` | Полностью удаляет карту. |
502
540
  | `loadKeyFromScriptUrl()` | Читает `apikey` из URL SDK скрипта. |
503
541
  | `loadLanguageFromScriptUrl()` | Читает `lang` из URL SDK скрипта. |
package/dist/index.d.mts CHANGED
@@ -248,6 +248,7 @@ declare class MahalMap {
248
248
  static getMap(instance: MahalMap): Map;
249
249
  static setStyle(instance: MahalMap, theme: Theme): void;
250
250
  static getMaps3DLayer(instance: MahalMap): IMaps3DLayer | undefined;
251
+ static toggle3DBuildings(instance: MahalMap, enabled: boolean): void;
251
252
  static setLanguage(instance: MahalMap, lang: MapLanguage): void;
252
253
  static setCenter(instance: MahalMap, center: [number, number]): void;
253
254
  static setZoom(instance: MahalMap, zoom: number): void;
@@ -259,6 +260,14 @@ declare class MahalMap {
259
260
  setStyle(theme: Theme): void;
260
261
  setLanguage(lang: MapLanguage): void;
261
262
  getMaps3DLayer(): IMaps3DLayer | undefined;
263
+ /** Вкл/выкл детальные 3D-здания (Maps3D). Работает только для engine: "3d". */
264
+ toggle3DBuildings(enabled: boolean): void;
265
+ /**
266
+ * Прячет/показывает нативные здания стиля GramMaps ("building-3d" и любые fill-extrusion /
267
+ * fill+source-layer=building), не задевая слои самого Maps3D. Нужно, иначе плоский слой стиля
268
+ * рисуется поверх процедурных 3D-зданий и визуально их перекрывает.
269
+ */
270
+ private setNativeBuildingsVisible;
262
271
  setCenter(center: [number, number]): void;
263
272
  setZoom(zoom: number): void;
264
273
  destroy(): void;
package/dist/index.d.ts CHANGED
@@ -248,6 +248,7 @@ declare class MahalMap {
248
248
  static getMap(instance: MahalMap): Map;
249
249
  static setStyle(instance: MahalMap, theme: Theme): void;
250
250
  static getMaps3DLayer(instance: MahalMap): IMaps3DLayer | undefined;
251
+ static toggle3DBuildings(instance: MahalMap, enabled: boolean): void;
251
252
  static setLanguage(instance: MahalMap, lang: MapLanguage): void;
252
253
  static setCenter(instance: MahalMap, center: [number, number]): void;
253
254
  static setZoom(instance: MahalMap, zoom: number): void;
@@ -259,6 +260,14 @@ declare class MahalMap {
259
260
  setStyle(theme: Theme): void;
260
261
  setLanguage(lang: MapLanguage): void;
261
262
  getMaps3DLayer(): IMaps3DLayer | undefined;
263
+ /** Вкл/выкл детальные 3D-здания (Maps3D). Работает только для engine: "3d". */
264
+ toggle3DBuildings(enabled: boolean): void;
265
+ /**
266
+ * Прячет/показывает нативные здания стиля GramMaps ("building-3d" и любые fill-extrusion /
267
+ * fill+source-layer=building), не задевая слои самого Maps3D. Нужно, иначе плоский слой стиля
268
+ * рисуется поверх процедурных 3D-зданий и визуально их перекрывает.
269
+ */
270
+ private setNativeBuildingsVisible;
262
271
  setCenter(center: [number, number]): void;
263
272
  setZoom(zoom: number): void;
264
273
  destroy(): void;