import { M as MapOptions, a as MDSMap, G as GeoJsonObject, S as SearchHit, b as SearchPanelOptions } from './map-B04kt8ZG.js'; export { A as AssetBuildingRef, c as AssetEventMap, d as AssetHandle, e as AssetInfo, f as AssetLayerDescriptor, g as AssetListParams, h as AssetListResult, i as AssetProgress, j as AssetStatus, k as AssetsApi, l as AuthOptions, B as BUILDING_ATTRIBUTE_FIELDS, m as BasemapId, n as BuildingAttributeKey, o as BuildingAttributeValue, C as CATALOG_TERMINAL_JOB_STATUSES, p as CameraApi, q as CameraFlyOptions, r as CameraPosition, s as CameraTarget, t as CatalogApi, u as CatalogBoundingBox, v as CatalogCreateLayerOptions, w as CatalogCreateLayerResult, x as CatalogCustomField, y as CatalogDeleteOptions, z as CatalogDeleteResult, D as CatalogFeature, E as CatalogFeatureListParams, F as CatalogFeatureListResult, H as CatalogFeaturePanelOptions, I as CatalogFieldConstraints, J as CatalogFieldDataType, K as CatalogFieldPrimitive, L as CatalogFieldValue, N as CatalogFieldViewType, O as CatalogJobStatus, P as CatalogLayerDescriptor, Q as CatalogLayerInfo, R as CatalogListPanelOptions, T as CatalogPlacement, U as CatalogPlacementPatch, V as CatalogUpdateFieldsOptions, W as CatalogUploadOptions, X as CatalogUploadPanelOptions, Y as CatalogUploadResult, Z as DefaultLayersOption, _ as FeatureClickEvent, $ as FeaturePanelOptions, a0 as GLB_FILE_EXTENSION, a1 as GeoJsonFeature, a2 as GeoJsonFeatureCollection, a3 as GeoJsonGeometry, a4 as GeoJsonLayerDescriptor, a5 as GeoJsonLineString, a6 as GeoJsonMultiLineString, a7 as GeoJsonMultiPoint, a8 as GeoJsonMultiPolygon, a9 as GeoJsonPoint, aa as GeoJsonPolygon, ab as GeoJsonPosition, ac as GeoJsonStyle, ad as LayerCommonOptions, ae as LayerDescriptor, af as LayerErrorEvent, ag as LayerEvent, ah as LayerHandle, ai as LayerStatus, aj as LayerType, ak as LayersApi, al as LngLat, am as LngLatBounds, an as MAX_UPLOAD_BYTES, ao as MDSErrorCode, ap as MDSMapError, aq as MDS_ERROR_CODES, ar as MapClickEvent, as as MapEventHandler, at as MapEventMap, au as MapEventType, av as MeasureApi, aw as MeasureHeightSource, ax as MeasureLockedFeature, ay as MeasureMode, az as MeasurePanelOptions, aA as MeasurePoint, aB as MeasureResult, aC as MeasureSession, aD as ModelLayerDescriptor, aE as ModelPlacement, aF as PickedFeature, aG as PlaceLabelsLayerDescriptor, aH as PlacementInput, aI as PlacementOffsetEnu, aJ as PublishResult, aK as RasterLayerDescriptor, aL as RoadsLayerDescriptor, aM as TilemapModelLayerDescriptor, aN as Tileset3dLayerDescriptor, aO as UiApi, aP as Unsubscribe, aQ as UploadOptions, aR as UploadPanelOptions, aS as WidgetHandle, aT as WidgetOptions, aU as WidgetPosition, aV as isMDSMapError } from './map-B04kt8ZG.js'; /** * Tạo một instance bản đồ 3D MDS trong `container`. * * - Engine 3D được nạp động bên trong lời gọi này (SSR-safe: import package * không đụng `window`/`document`). * - Mỗi lời gọi tạo một thế giới độc lập — nhiều map trên một trang là hợp lệ. * - Promise resolve SAU khi sự kiện `ready` đã bắn (hợp đồng `types/events.ts`); * handler `ready` đăng ký sau đó vẫn được gọi nhờ cơ chế sticky. * * @throws MDSMapError `MDS_INVALID_OPTIONS` khi container/options không hợp lệ. * @throws MDSMapError `MDS_ENGINE_INIT_FAILED` khi engine không khởi tạo được. */ declare function createMap(container: HTMLElement | string, options?: MapOptions): Promise; /** * Bộ icon BTS tối thiểu — SVG data-URI, không cần file rời trong engine-assets. * * App quên phục vụ static assets là bẫy SDK đã dính nhiều lần; data-URI đi * cùng bundle nên ghim luôn hiện. Khách thay bằng file riêng qua `iconUrl` / * `iconProperty` khi có bộ chính thức. */ declare const BTS_ICON_KEYS: readonly ["monopole", "guyed", "shelter", "cabinet", "power", "maintenance"]; type BtsIconKey = (typeof BTS_ICON_KEYS)[number]; /** Bộ icon BTS — gán vào `properties` rồi `style.iconProperty`. */ declare const BTS_ICONS: Record; /** Nhãn tiếng Việt — dùng cho legend / ví dụ. */ declare const BTS_ICON_LABELS: Record; /** Tra icon theo mã loại trạm; không khớp thì `undefined`. */ declare function btsIconUrl(kind: string): string | undefined; /** * Chuyển kết quả geocode lỏng (GoMaps / nguồn khác) sang `SearchHit`. * * Hai bẫy dữ liệu GoMaps đã kiểm chứng: * - tài liệu ghi `lon` nhưng JSON thực tế là `long`; * - `lat` / `long` là chuỗi, không phải số. * - detail Places trả `location: "lat,lon"` (một chuỗi). * - GoMaps trả `0,0` khi không có vị trí thật — loại, tránh bay Đại Tây Dương. */ /** * Một phần tử geocode → `SearchHit`, hoặc `null` khi không đủ dữ liệu. * * - Có toạ độ hợp lệ → điền `center`. * - Autocomplete (có nhãn, không có trường toạ độ) → hit không `center`. * - Có trường toạ độ nhưng không hợp lệ (`0,0`, rác, ngoài biên) → `null`. */ declare function toSearchHit(raw: unknown): SearchHit | null; /** Mảng geocode (hoặc giá trị lạ) → chỉ những hit hợp lệ. */ declare function toSearchHits(raw: unknown): SearchHit[]; /** * `getGeoboundariesByAdministrativeUnits` trả `result[0].geojson` là **chuỗi JSON**. * Nhận chuỗi, object GeoJSON, `{ geojson }`, hoặc mảng các object đó. */ declare function parseAdministrativeBoundary(raw: unknown): GeoJsonObject | null; /** * Adapter tìm địa danh GoMaps Places REST — không nạp `vnptmaps.min.js`. * * Luồng hai bước (giống app production): * 1. `search` → `GET /places/v1/autocomplete` — gợi ý không có toạ độ * 2. `resolve` → `GET /places/v1/detail/{id}` — lấy `location: "lat,lon"` * * Dùng chung `apiKey` với nền `streets` (`MapOptions.gomapsKey`). * SSR-safe: chỉ `fetch`, không đụng DOM / Cesium. */ interface GoMapsSearchOptions { /** API key GoMaps — cùng key với `MapOptions.gomapsKey`. */ apiKey: string; /** * Domain GoMaps. Bỏ trống → `https://gomaps.vnpt.vn` * (đồng bộ `MapOptions.gomapsUrl`). */ url?: string; } /** * Tạo cặp `search` + `resolve` gắn vào `map.ui.addSearchPanel`. * * Không tự debounce (panel lo). Lỗi mạng / HTTP → `[]` / `null`, không ném. * Tham số `signal` tuỳ chọn (thêm so với chữ ký panel) để caller huỷ request. */ declare function createGoMapsSearch(options: GoMapsSearchOptions): Pick; /** * MDS 3DMap SDK — public entry. * * ```ts * import { createMap } from '@dgtwin/map3d'; * * const map = await createMap(document.getElementById('map')!, { * basemap: 'satellite', * baseUrl: 'https://mds.vnpt.vn', * auth: { type: 'token', getAccessToken: () => session.accessToken }, * }); * * await map.layers.add({ type: 'tileset3d', url: 'https://.../tileset.json' }); * map.ui.addUploadPanel({ position: 'top-right' }); * map.ui.addCatalogUploadPanel({ position: 'top-left' }); * map.on('featureClick', (event) => console.log(event.feature.buildingId)); * ``` * * BỀ MẶT CÔNG KHAI — đúng ba thứ dưới đây, không hơn: * 1. `createMap` — điểm vào DUY NHẤT; mọi API khác lấy từ instance trả về * (`map.camera` / `map.layers` / `map.assets` / `map.catalog` / `map.ui`). * 2. Toàn bộ `./types` — interface công khai, `MDSMapError` / `isMDSMapError` / * `MDS_ERROR_CODES`, và các hằng dùng chung (`BUILDING_ATTRIBUTE_FIELDS`, * `MAX_UPLOAD_BYTES`, `GLB_FILE_EXTENSION`). * 3. `VERSION`. * * KHÔNG export: engine 3D, `AssetManager`, `Transport`, custom element của * widget, hay bất kỳ module nào trong `src/core|assets|ui`. Gate * `scripts/check-public-dts.mjs` chặn kiểu engine rò ra `.d.ts` công khai. * * Entry phụ: `@dgtwin/map3d/react` (binding React) và `@dgtwin/map3d/internal` * (KHÔNG cam kết ổn định, chỉ dành cho app nội bộ MDS). * * SSR: nạp module này trong Node là an toàn — engine 3D và widget UI đều chỉ * được nạp bên trong lời gọi `createMap()`. */ /** * Phiên bản SDK — phải TRÙNG `version` trong package.json. * * Cố ý là literal chứ không phải giá trị chèn lúc build: chèn lúc build chỉ sửa * được file `.js`, còn `.d.ts` do TypeScript sinh từ chính dòng này nên sẽ khai * một literal type khác giá trị chạy thật. Đồng bộ được canh bằng * `scripts/check-version-sync.mjs` (chạy trong `pnpm build`) — lệch là fail. */ declare const VERSION = "0.7.1"; export { BTS_ICONS, BTS_ICON_KEYS, BTS_ICON_LABELS, type BtsIconKey, GeoJsonObject, type GoMapsSearchOptions, MDSMap, MapOptions, SearchHit, SearchPanelOptions, VERSION, btsIconUrl, createGoMapsSearch, createMap, parseAdministrativeBoundary, toSearchHit, toSearchHits };