@uavs/3d-model-map 0.1.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 +392 -0
- package/dist/index.js +2116 -0
- package/dist/runtime/mars3dCesiumShim.js +34 -0
- package/dist/style.css +1 -0
- package/dist/types/api/index.d.ts +49 -0
- package/dist/types/api/index.d.ts.map +1 -0
- package/dist/types/api/mapApiContext.d.ts +5 -0
- package/dist/types/api/mapApiContext.d.ts.map +1 -0
- package/dist/types/components/RealModelClarityDialog.vue.d.ts +28 -0
- package/dist/types/components/RealModelClarityDialog.vue.d.ts.map +1 -0
- package/dist/types/components/ThreeDimensionalMap.vue.d.ts +33 -0
- package/dist/types/components/ThreeDimensionalMap.vue.d.ts.map +1 -0
- package/dist/types/config/map3dConfig.d.ts +33 -0
- package/dist/types/config/map3dConfig.d.ts.map +1 -0
- package/dist/types/index.d.ts +22 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/models/mapMapdataTileOrigin.d.ts +4 -0
- package/dist/types/models/mapMapdataTileOrigin.d.ts.map +1 -0
- package/dist/types/models/materialModels.d.ts +18 -0
- package/dist/types/models/materialModels.d.ts.map +1 -0
- package/dist/types/models/materialTilesetOptions.d.ts +26 -0
- package/dist/types/models/materialTilesetOptions.d.ts.map +1 -0
- package/dist/types/models/useAutoRealModel.d.ts +116 -0
- package/dist/types/models/useAutoRealModel.d.ts.map +1 -0
- package/dist/types/models/useMaterialModelLabels.d.ts +13 -0
- package/dist/types/models/useMaterialModelLabels.d.ts.map +1 -0
- package/dist/types/models/useMaterialModelLayers.d.ts +27 -0
- package/dist/types/models/useMaterialModelLayers.d.ts.map +1 -0
- package/dist/types/pages/ThreeDimensionalMapPage.vue.d.ts +3 -0
- package/dist/types/pages/ThreeDimensionalMapPage.vue.d.ts.map +1 -0
- package/dist/types/runtime/cesiumRuntime.d.ts +3 -0
- package/dist/types/runtime/cesiumRuntime.d.ts.map +1 -0
- package/dist/types/runtime/hunanJiangxiMapRuntime.d.ts +13 -0
- package/dist/types/runtime/hunanJiangxiMapRuntime.d.ts.map +1 -0
- package/dist/types/runtime/mapLifecycle.d.ts +12 -0
- package/dist/types/runtime/mapLifecycle.d.ts.map +1 -0
- package/dist/types/runtime/mars3dCesiumShim.d.ts +4 -0
- package/dist/types/runtime/mars3dCesiumShim.d.ts.map +1 -0
- package/dist/types/runtime/mars3dRuntime.d.ts +6 -0
- package/dist/types/runtime/mars3dRuntime.d.ts.map +1 -0
- package/dist/types/vite/cesium.d.ts +16 -0
- package/dist/types/vite/cesium.d.ts.map +1 -0
- package/dist/vite/cesium.js +159 -0
- package/package.json +74 -0
- package/public/img/basemaps/TerrainEllipsoid.png +0 -0
- package/public/img/basemaps/TerrainSTK.png +0 -0
- package/public/img/basemaps/arcgis.png +0 -0
- package/public/img/basemaps/bd-c-bluish.png +0 -0
- package/public/img/basemaps/bd-c-dark.png +0 -0
- package/public/img/basemaps/bd-c-darkgreen.png +0 -0
- package/public/img/basemaps/bd-c-googlelite.png +0 -0
- package/public/img/basemaps/bd-c-grassgreen.png +0 -0
- package/public/img/basemaps/bd-c-grayscale.png +0 -0
- package/public/img/basemaps/bd-c-hardedge.png +0 -0
- package/public/img/basemaps/bd-c-light.png +0 -0
- package/public/img/basemaps/bd-c-midnight.png +0 -0
- package/public/img/basemaps/bd-c-pink.png +0 -0
- package/public/img/basemaps/bd-c-redalert.png +0 -0
- package/public/img/basemaps/bd-img.png +0 -0
- package/public/img/basemaps/bd-vec.png +0 -0
- package/public/img/basemaps/bingAerial.png +0 -0
- package/public/img/basemaps/bingAerialLabels.png +0 -0
- package/public/img/basemaps/bingRoads.png +0 -0
- package/public/img/basemaps/bingimage.png +0 -0
- package/public/img/basemaps/bingmap.png +0 -0
- package/public/img/basemaps/blackMarble.png +0 -0
- package/public/img/basemaps/esriNationalGeographic.png +0 -0
- package/public/img/basemaps/esriWorldImagery.png +0 -0
- package/public/img/basemaps/esriWorldStreetMap.png +0 -0
- package/public/img/basemaps/gaode_img.png +0 -0
- package/public/img/basemaps/gaode_vec.png +0 -0
- package/public/img/basemaps/google_img.png +0 -0
- package/public/img/basemaps/google_ter.png +0 -0
- package/public/img/basemaps/google_vec.png +0 -0
- package/public/img/basemaps/mapQuestOpenStreetMap.png +0 -0
- package/public/img/basemaps/mapboxSatellite.png +0 -0
- package/public/img/basemaps/mapboxStreets.png +0 -0
- package/public/img/basemaps/mapboxTerrain.png +0 -0
- package/public/img/basemaps/naturalEarthII.png +0 -0
- package/public/img/basemaps/offline.png +0 -0
- package/public/img/basemaps/osm.png +0 -0
- package/public/img/basemaps/sea.png +0 -0
- package/public/img/basemaps/stamenToner.png +0 -0
- package/public/img/basemaps/stamenWatercolor.png +0 -0
- package/public/img/basemaps/tdt_img.png +0 -0
- package/public/img/basemaps/tdt_ter.png +0 -0
- package/public/img/basemaps/tdt_vec.png +0 -0
- package/public/img/basemaps/tencent_img.png +0 -0
- package/public/img/basemaps/tencent_vec.png +0 -0
package/README.md
ADDED
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
# @uavs/3d-model-map
|
|
2
|
+
|
|
3
|
+
`@uavs/3d-model-map` 是 UAVS 的 Vue 3 三维模型地图能力包,专门用于展示 3D Tiles 模型。组件内部负责 Mars3D/Cesium 地图初始化、三维模型加载、模型定位、模型总览、hover 边框高亮和清晰度调整;业务项目负责提供模型数据、模型文件地址和应用级 API 适配。
|
|
4
|
+
|
|
5
|
+
源码仓库:[https://gitee.com/jxzhsz/packages](https://gitee.com/jxzhsz/packages),包目录为 `packages/3d-model-map`。
|
|
6
|
+
|
|
7
|
+
## 功能
|
|
8
|
+
|
|
9
|
+
- 基于 Vue 3、Mars3D、Cesium 展示城市、园区、小区、工厂等区域的三维模型。
|
|
10
|
+
- 支持从外部传入模型分组数据或模型列表数据。
|
|
11
|
+
- 支持从外部传入 3D Tiles `tileset.json` 地址解析函数。
|
|
12
|
+
- 支持模型定位、当前模型状态面板、模型总览切换。
|
|
13
|
+
- 支持模型 hover 边框强化,不用透明色块覆盖模型。
|
|
14
|
+
- 支持配置返回按钮是否显示、按钮文字和返回行为。
|
|
15
|
+
- 不依赖业务项目里的 `@uavs/ui`、`BaseDialog` 或 Element Plus。
|
|
16
|
+
|
|
17
|
+
## 安装
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
pnpm add @uavs/3d-model-map
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
如果 `@uavs` scope 发布在私有 npm 源,先配置 scope registry:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
pnpm config set @uavs:registry <registry-url>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
然后再安装:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
pnpm add @uavs/3d-model-map
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
`@uavs/3d-model-map` 会把 `vue`、`mars3d`、`mars3d-cesium`、`@turf/turf` 作为 peer dependencies 使用。业务项目里已经有这些依赖时,不需要重复安装,只要版本兼容即可。
|
|
36
|
+
|
|
37
|
+
如果某个接入项目缺少这些依赖,再按需补装:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
pnpm add <缺失的包名>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 推荐补装依赖
|
|
44
|
+
|
|
45
|
+
如果接入项目缺少运行时 peer dependencies,推荐按下面的版本补装:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
pnpm add mars3d@3.11.2 mars3d-cesium@1.140.0 @turf/turf@^7.3.5
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Vue 项目通常已经安装了 `vue`;如果没有,再补装:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
pnpm add vue@^3.5.16
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Vite 项目使用包内 `createCesiumStaticPlugins` 时,不需要单独安装 `vite-plugin-static-copy`,它会随 `@uavs/3d-model-map` 一起安装;宿主项目本身仍需要有 `vite`。
|
|
58
|
+
|
|
59
|
+
## Cesium 依赖
|
|
60
|
+
|
|
61
|
+
组件会按下面的顺序使用 Cesium:
|
|
62
|
+
|
|
63
|
+
1. 如果业务项目已经初始化了 `window.Cesium`,直接复用。
|
|
64
|
+
2. 如果没有 `window.Cesium`,从 peer dependency `mars3d-cesium` 动态加载 Cesium 和 `Widgets/widgets.css`。
|
|
65
|
+
|
|
66
|
+
接入项目只要本身已经依赖 `mars3d-cesium`,并且构建工具可以正常处理 `mars3d-cesium/Build/Cesium/Widgets/widgets.css` 即可。
|
|
67
|
+
|
|
68
|
+
如果地图配置里用到了底图预览图片,也需要在业务项目里准备:
|
|
69
|
+
|
|
70
|
+
```text
|
|
71
|
+
public/img/basemaps
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
这些底图预览图片会随 npm 包发布,并由 `createCesiumStaticPlugins` 在构建时复制到应用产物。业务项目需要替换底图预览图片时,可以在自己的 `public/img/basemaps` 中放置同名文件覆盖。
|
|
75
|
+
|
|
76
|
+
## Vite 接入配置
|
|
77
|
+
|
|
78
|
+
使用 Vite 的项目建议在 `vite.config.ts` 中加入 Cesium 静态资源插件、Mars3D Cesium shim 和依赖预构建排除:
|
|
79
|
+
|
|
80
|
+
```ts
|
|
81
|
+
import { fileURLToPath, URL } from 'node:url'
|
|
82
|
+
import { defineConfig, loadEnv } from 'vite'
|
|
83
|
+
import vue from '@vitejs/plugin-vue'
|
|
84
|
+
import { createCesiumStaticPlugins, createMapdataProxy } from '@uavs/3d-model-map/vite/cesium'
|
|
85
|
+
|
|
86
|
+
const cesiumSource = fileURLToPath(new URL('./node_modules/mars3d-cesium/Build/Cesium', import.meta.url))
|
|
87
|
+
|
|
88
|
+
export default defineConfig(({ mode }) => {
|
|
89
|
+
const env = loadEnv(mode, import.meta.dirname)
|
|
90
|
+
|
|
91
|
+
return {
|
|
92
|
+
plugins: [
|
|
93
|
+
vue(),
|
|
94
|
+
...createCesiumStaticPlugins(cesiumSource)
|
|
95
|
+
],
|
|
96
|
+
resolve: {
|
|
97
|
+
alias: [
|
|
98
|
+
{
|
|
99
|
+
find: /^mars3d-cesium$/,
|
|
100
|
+
replacement: '@uavs/3d-model-map/runtime/mars3d-cesium-shim'
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
},
|
|
104
|
+
server: {
|
|
105
|
+
proxy: createMapdataProxy(env)
|
|
106
|
+
},
|
|
107
|
+
optimizeDeps: {
|
|
108
|
+
exclude: ['mars3d', 'mars3d-cesium']
|
|
109
|
+
},
|
|
110
|
+
build: {
|
|
111
|
+
assetsInlineLimit: 0,
|
|
112
|
+
target: 'es2020'
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
})
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
如果项目的 `mars3d-cesium` 不在当前项目根目录的 `node_modules` 下,可以把 `cesiumSource` 改成实际路径,但必须指向 `mars3d-cesium/Build/Cesium`。
|
|
119
|
+
|
|
120
|
+
## 基础用法
|
|
121
|
+
|
|
122
|
+
在页面或应用入口里导入组件和样式:
|
|
123
|
+
|
|
124
|
+
```vue
|
|
125
|
+
<script setup lang="ts">
|
|
126
|
+
import { ThreeDimensionalMap } from '@uavs/3d-model-map'
|
|
127
|
+
import '@uavs/3d-model-map/style.css'
|
|
128
|
+
import type { MaterialModelItem, ThreeDimensionalMapDataSource } from '@uavs/3d-model-map'
|
|
129
|
+
|
|
130
|
+
const dataSource: ThreeDimensionalMapDataSource = {
|
|
131
|
+
async getModelGroups() {
|
|
132
|
+
// 在业务项目里调用自己的接口,例如 /admin-api/material/threedList
|
|
133
|
+
return []
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function resolveTilesetUrl(item: MaterialModelItem) {
|
|
138
|
+
if (!item.file) return ''
|
|
139
|
+
return `/mapdata/${String(item.file).replace(/^\/+|\/+$/g, '')}/tileset.json`
|
|
140
|
+
}
|
|
141
|
+
</script>
|
|
142
|
+
|
|
143
|
+
<template>
|
|
144
|
+
<div class="map-page">
|
|
145
|
+
<ThreeDimensionalMap
|
|
146
|
+
map-key="project-3d-map"
|
|
147
|
+
:data-source="dataSource"
|
|
148
|
+
:resolve-tileset-url="resolveTilesetUrl"
|
|
149
|
+
:show-back-button="false"
|
|
150
|
+
/>
|
|
151
|
+
</div>
|
|
152
|
+
</template>
|
|
153
|
+
|
|
154
|
+
<style scoped>
|
|
155
|
+
.map-page {
|
|
156
|
+
width: 100%;
|
|
157
|
+
height: 100vh;
|
|
158
|
+
}
|
|
159
|
+
</style>
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
注意:地图容器必须有明确高度,否则 Cesium 容器可能无法正常显示。
|
|
163
|
+
|
|
164
|
+
## 数据接入
|
|
165
|
+
|
|
166
|
+
推荐在业务项目里通过 `dataSource` 注入数据,组件本身不绑定具体请求库,也不固定接口地址。
|
|
167
|
+
|
|
168
|
+
```ts
|
|
169
|
+
interface ThreeDimensionalMapDataSource {
|
|
170
|
+
getModelGroups?: () => Promise<MaterialModelGroup[]>
|
|
171
|
+
getModelItems?: () => Promise<MaterialModelItem[] | PageResult<MaterialModelItem>>
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### 分组数据
|
|
176
|
+
|
|
177
|
+
`getModelGroups` 适合接入类似 `/admin-api/material/threedList` 的树形数据:
|
|
178
|
+
|
|
179
|
+
```ts
|
|
180
|
+
const dataSource: ThreeDimensionalMapDataSource = {
|
|
181
|
+
async getModelGroups() {
|
|
182
|
+
const res = await geyThreedList()
|
|
183
|
+
return res.data ?? []
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
顶层 `modelType` 为 `2` 的分组会被当作三维模型分组。因为部分接口返回的子项 `modelType` 不可靠,组件会按顶层分组归一化子项类型,不再依赖子项自己的 `modelType` 判断是否为 3D 模型。
|
|
189
|
+
|
|
190
|
+
### 平铺数据
|
|
191
|
+
|
|
192
|
+
`getModelItems` 适合接入普通模型列表接口。返回值可以是数组,也可以是带 `list` 字段的分页对象:
|
|
193
|
+
|
|
194
|
+
```ts
|
|
195
|
+
const dataSource: ThreeDimensionalMapDataSource = {
|
|
196
|
+
async getModelItems() {
|
|
197
|
+
const res = await getMaterialApi({ pageSize: 999, pageNo: 1, type: 2 })
|
|
198
|
+
return res.data
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## 模型数据格式
|
|
204
|
+
|
|
205
|
+
模型项至少需要包含可唯一识别的 `id`。如果要让定位更准确,建议同时提供经纬度。
|
|
206
|
+
|
|
207
|
+
```ts
|
|
208
|
+
interface MaterialModelItem {
|
|
209
|
+
id: number | string
|
|
210
|
+
file?: string
|
|
211
|
+
fileName?: string
|
|
212
|
+
name?: string
|
|
213
|
+
longitude?: number
|
|
214
|
+
latitude?: number
|
|
215
|
+
height?: number
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
字段说明:
|
|
220
|
+
|
|
221
|
+
| 字段 | 说明 |
|
|
222
|
+
| --- | --- |
|
|
223
|
+
| `id` | 模型唯一标识,用于图层创建、定位和当前模型判断。 |
|
|
224
|
+
| `file` | 模型文件目录或 URL,默认会用于拼接 `tileset.json`。 |
|
|
225
|
+
| `fileName` / `name` | 模型展示名称。 |
|
|
226
|
+
| `longitude` / `latitude` | 模型中心点经纬度,用于定位和飞行。 |
|
|
227
|
+
| `height` | 模型高度或定位高度,按业务接口实际含义传入。 |
|
|
228
|
+
|
|
229
|
+
## 模型地址解析
|
|
230
|
+
|
|
231
|
+
不同项目的模型文件可能放在不同域名、不同前缀下,所以建议传入 `resolveTilesetUrl`:
|
|
232
|
+
|
|
233
|
+
```ts
|
|
234
|
+
function resolveTilesetUrl(item: MaterialModelItem) {
|
|
235
|
+
if (!item.file) return ''
|
|
236
|
+
|
|
237
|
+
if (/^https?:\/\//i.test(item.file)) {
|
|
238
|
+
return item.file.endsWith('tileset.json') ? item.file : `${item.file}/tileset.json`
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
return `/mapdata/${String(item.file).replace(/^\/+|\/+$/g, '')}/tileset.json`
|
|
242
|
+
}
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
如果不传 `resolveTilesetUrl`,包内默认逻辑会把 `file` 解析成:
|
|
246
|
+
|
|
247
|
+
```text
|
|
248
|
+
/mapdata/<file>/tileset.json
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
## Props
|
|
252
|
+
|
|
253
|
+
| Prop | 类型 | 默认值 | 说明 |
|
|
254
|
+
| --- | --- | --- | --- |
|
|
255
|
+
| `configUrl` | `string` | `${import.meta.env.BASE_URL}config/config.json` | Mars3D 地图配置地址,默认跟随宿主 Vite `base`。 |
|
|
256
|
+
| `mapKey` | `string` | `common-3d` | 地图实例 key,会用于生成容器 id;同页多个地图时必须不同。 |
|
|
257
|
+
| `options` | `Record<string, unknown>` | `{}` | 额外 Mars3D 地图配置,会合并到地图初始化配置里。 |
|
|
258
|
+
| `initialView` | `Map3dInitialView \| false` | 内置默认视角 | 初始总览视角;传 `false` 可禁用回到总览能力。 |
|
|
259
|
+
| `flyToInitialView` | `boolean` | `true` | 地图创建后是否飞到初始视角。 |
|
|
260
|
+
| `showRealModelLabels` | `boolean` | `true` | 是否展示模型标签。 |
|
|
261
|
+
| `preloadModels` | `boolean` | `true` | 是否预加载模型元数据。 |
|
|
262
|
+
| `modelGroups` | `MaterialModelGroup[]` | - | 直接传入的分组模型数据。 |
|
|
263
|
+
| `modelItems` | `MaterialModelItem[]` | - | 直接传入的平铺模型数据。 |
|
|
264
|
+
| `dataSource` | `ThreeDimensionalMapDataSource` | - | 外部异步数据源。 |
|
|
265
|
+
| `resolveTilesetUrl` | `MaterialTilesetUrlResolver` | 内置 `/mapdata` 解析 | 把模型项转换成 3D Tiles 地址。 |
|
|
266
|
+
| `showBackButton` | `boolean` | `true` | 是否显示左上角返回按钮。 |
|
|
267
|
+
| `backButtonText` | `string` | `返回` | 返回按钮文字。 |
|
|
268
|
+
| `backFallbackUrl` | `string` | `/` | 没有浏览器历史可退时跳转的兜底地址。 |
|
|
269
|
+
| `onBack` | `() => void` | - | 自定义返回行为。 |
|
|
270
|
+
|
|
271
|
+
## 常用导出
|
|
272
|
+
|
|
273
|
+
```ts
|
|
274
|
+
export {
|
|
275
|
+
ThreeDimensionalMap,
|
|
276
|
+
ThreeDimensionalMapPage,
|
|
277
|
+
createMapApi,
|
|
278
|
+
provideMapApi,
|
|
279
|
+
formatMaterialModelTree,
|
|
280
|
+
isThreeDimensionalModel,
|
|
281
|
+
resolveTilesetUrl,
|
|
282
|
+
resolveMap3dPublicUrl
|
|
283
|
+
}
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
常用类型:
|
|
287
|
+
|
|
288
|
+
```ts
|
|
289
|
+
export type {
|
|
290
|
+
MaterialModelGroup,
|
|
291
|
+
MaterialModelItem,
|
|
292
|
+
MaterialTilesetUrlResolver,
|
|
293
|
+
ThreeDimensionalMapDataSource,
|
|
294
|
+
Map3dInitialView
|
|
295
|
+
}
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
## 发布前检查
|
|
299
|
+
|
|
300
|
+
发布前先执行:
|
|
301
|
+
|
|
302
|
+
```bash
|
|
303
|
+
pnpm --filter @uavs/3d-model-map build
|
|
304
|
+
pnpm --filter @uavs/3d-model-map pack:check
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
`pack:check` 会执行构建并运行 `npm pack --dry-run`,用于确认最终 npm 包里只包含需要发布的文件。
|
|
308
|
+
|
|
309
|
+
## 发布
|
|
310
|
+
|
|
311
|
+
### 切换 npm 账号
|
|
312
|
+
|
|
313
|
+
发布前先确认当前登录账号:
|
|
314
|
+
|
|
315
|
+
```bash
|
|
316
|
+
npm whoami
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
如果当前不是要发布 `@uavs/3d-model-map` 的账号,先退出旧账号:
|
|
320
|
+
|
|
321
|
+
```bash
|
|
322
|
+
npm logout --registry=https://registry.npmjs.org/
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
然后登录新账号:
|
|
326
|
+
|
|
327
|
+
```bash
|
|
328
|
+
npm login --registry=https://registry.npmjs.org/
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
登录完成后再次确认账号:
|
|
332
|
+
|
|
333
|
+
```bash
|
|
334
|
+
npm whoami
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
确认新账号有 `@uavs` scope 或当前包的发布权限:
|
|
338
|
+
|
|
339
|
+
```bash
|
|
340
|
+
npm access list packages @uavs
|
|
341
|
+
npm owner ls @uavs/3d-model-map
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
如果 `@uavs` 还没有在 npm 上创建,需要先到 npm 官网创建 `uavs` organization;`@uavs/3d-model-map` 包不需要提前创建,第一次发布成功时会自动创建。
|
|
345
|
+
|
|
346
|
+
如果发布时报 `Two-factor authentication or granular access token with bypass 2FA enabled is required to publish packages`,说明 npm 要求当前账号启用 2FA,或者使用允许发布的 granular access token。
|
|
347
|
+
|
|
348
|
+
本地手动发布推荐在 npm 官网账号设置里启用 2FA,然后用一次性验证码发布:
|
|
349
|
+
|
|
350
|
+
```bash
|
|
351
|
+
pnpm --filter @uavs/3d-model-map publish --access public --otp <6位验证码>
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
CI 或自动化发布推荐在 npm 官网创建 granular access token,给 `@uavs` 或 `@uavs/3d-model-map` 配置 `Read and write` 权限,并启用 `Bypass two-factor authentication`,再把 token 配到发布环境的 npm auth token 中。
|
|
355
|
+
|
|
356
|
+
本机临时使用 access token 发布时,需要把新 token 写入当前 npm 配置:
|
|
357
|
+
|
|
358
|
+
```bash
|
|
359
|
+
npm config set //registry.npmjs.org/:_authToken=<npm_access_token>
|
|
360
|
+
npm whoami
|
|
361
|
+
pnpm --filter @uavs/3d-model-map publish --access public
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
如果仍然报 2FA/token 错误,通常是 token 没有勾选 `Bypass two-factor authentication`,或者 package/scope 权限不是 `Read and write`。
|
|
365
|
+
|
|
366
|
+
公开发布:
|
|
367
|
+
|
|
368
|
+
```bash
|
|
369
|
+
pnpm --filter @uavs/3d-model-map publish --access public
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
如果发布到私有源,需要先在发布环境里配置 registry 和登录信息:
|
|
373
|
+
|
|
374
|
+
```bash
|
|
375
|
+
pnpm config set @uavs:registry <registry-url>
|
|
376
|
+
npm login --registry <registry-url>
|
|
377
|
+
pnpm --filter @uavs/3d-model-map publish
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
## 接入项目检查清单
|
|
381
|
+
|
|
382
|
+
- 已安装 `@uavs/3d-model-map`。
|
|
383
|
+
- 业务项目已有并满足版本要求的 peer dependencies:`vue`、`mars3d@3.11.2`、`mars3d-cesium@1.140.0`、`@turf/turf@^7.3.5`。
|
|
384
|
+
- 已导入 `@uavs/3d-model-map/style.css`。
|
|
385
|
+
- Vite 项目已从 `@uavs/3d-model-map/vite/cesium` 接入 `createCesiumStaticPlugins`。
|
|
386
|
+
- Vite 项目已把 `mars3d-cesium` alias 到 `@uavs/3d-model-map/runtime/mars3d-cesium-shim`。
|
|
387
|
+
- Vite 项目已在 `optimizeDeps.exclude` 中排除 `mars3d` 和 `mars3d-cesium`。
|
|
388
|
+
- 已准备 Mars3D 配置文件,默认会从宿主应用的 `BASE_URL + config/config.json` 读取,例如 `base: '/uavs_frontend/'` 时请求 `/uavs_frontend/config/config.json`;非 Vite 项目或自定义路径可通过 `configUrl` 指定。
|
|
389
|
+
- 已在业务项目里实现模型接口请求,并通过 `dataSource` 传入。
|
|
390
|
+
- 已根据项目模型文件路径实现 `resolveTilesetUrl`。
|
|
391
|
+
- 地图容器有明确宽高。
|
|
392
|
+
- 如果不需要组件内返回按钮,传入 `:show-back-button="false"`。
|