# @vuemap/layer-3dtiles
[](https://www.npmjs.org/package/@vuemap/layer-3dtiles)
[](https://npmjs.org/package/@vuemap/layer-3dtiles)

[](https://github.com/AMap-Web/layer-3dtiles)
[](https://github.com/AMap-Web/layer-3dtiles)
### 简介
本项目为高德地图的3DTilesLayer图层插件,依赖`@amap/three-layer`插件,因此如果使用npm安装时需要安装`@amap/three-layer`
### 示例
[codepen示例](https://codepen.io/yangyanggu/pen/BaxGLVZ)
### 模型导出时注意事项
* 当使用shp文件生成3dtiles时,参考坐标系需要根据shp文件的坐标系来设定,正常shp文件使用EPSG:4326坐标系,也就是WGS84
* 使用倾斜摄影生成3dtiles时,需要在导出时将原点设置为0 0 0
### 开发注意事项
* 当加载3dtiles,需要关闭浏览器的开发者工具,不然在销毁3dtiles图层时会有部分显存无法释放
### 加载方式
当前项目支持CDN加载和npm加载两种方式。
#### CDN加载
CDN加载需要先加载高德地图JS、threejs的库和`@amap/three-layer`,代码如下
```js
```
#### npm加载
npm加载可以直接使用安装库
```shell
npm install @vuemap/layer-3dtiles @amap/three-layer
```
### 使用示例
#### CDN方式
```js
```
#### npm方式
```js
import {AmbientLight} from 'three'
import {ThreeLayer} from '@amap/three-layer'
import {Layer3DTiles} from '@vuemap/layer-3dtiles'
const map = new AMap.Map('app', {
center: [120,31],
zoom: 14,
viewMode: '3D',
pitch: 35
})
const layer = new ThreeLayer(map)
layer.on('complete', () => {
const light = new AmbientLight('#ffffff', 1);
layer.add(light);
const tiles = new Layer3DTiles(layer, {
url: './hutong/tileset.json',
position: [116.405242513021,39.909402940539]
})
tiles.setRotation({
x:0,
y:0,
z:0
})
tiles.setTranslate({x:15,y:15,z:0})
tiles.on('click',(e) => {
console.log('click: ', e)
})
console.log('layer: ', layer)
console.log('tiles: ', tiles)
})
```
### API文档说明
#### Layer3DTiles图层说明
3dtiles图层类,提供了3dtils加载和常用事件功能
`` new AMap.Layer3DTiles(layer: AMap.ThreeLayer, options: Layer3DTilesOptions) ``
###### 参数说明
layer: ThreeLayer实例对象
options: Layer3DTiles初始化参数,参数内容如下:
| 属性名 | 属性类型 | 属性描述 |
|------------------|------------------------------------------|-------------------------------------------------------------------------------------------------------|
| url | String | 模型加载地址 |
| position | [number,number] | 3dtiles加载的经纬度位置 |
| scale | Number,{x:Number, y: Number, z: Number} | 设置缩放比例 |
| rotation | {x:Number, y: Number, z: Number} | 旋转模型 |
| translate | {x:Number, y: Number, z: Number} | 模型偏移设置 |
| dracoDecoderPath | String | DRACOLoader 的decoder路径,默认使用CDN路径,默认:https://cdn.jsdelivr.net/npm/three@0.143/examples/js/libs/draco/ |
| fetchOptions | Object | 使用fetch下载文件的参数 |
| mouseEvent | Boolean | 是否开启事件,默认false |
| debug | Boolean | 是否开启debug,开启后将会在页面最顶部显示当前模型处理情况, 默认 false |
###### 成员函数
| 函数名 | 入参 | 返回值 | 描述 |
|------------------|-----------------------------------------------|--------------------|--------------------------------------------------------------------------------------------------|
| setScale | Number,{x:Number, y: Number, z: Number} | 无 | 设置缩放比例 |
| setPosition | [Number,Number] (经纬度) | 无 | 设置模型位置 |
| setRotation | {x:Number, y: Number, z: Number} | 无 | 旋转模型 |
| setTranslate | {x:Number, y: Number, z: Number} | 无 | 模型偏移设置 |
| getGroup | 无 | Group | 获取3dtiles的Group对象 |
| getTilesRenderer | 无 | TilesRenderer | 获取3dtile渲染的对象,该对象为`3d-tiles-renderer`的对象,[文档地址](https://github.com/NASA-AMMOS/3DTilesRendererJS) |
| refresh | 无 | 无 | 刷新图层 |
| show | 无 | 无 | 显示模型 |
| hide | 无 | 无 | 隐藏模型 |
| destroy | 无 | 无 | 销毁模型 |
###### 事件列表
| 事件名 | 参数 | 描述 |
|--------------|--------------------------------------------|---------------------------------------------------------------|
| loadTileSet | TileSet | tileSet加载成功后触发 |
| loadModel | {scene, tile} | 加载模型后触发 |
| disposeModel | {scene, tile} | 销毁模型后触发 |
| click | null, {object: Object3D,batchData: Object} | 点击事件,可能会出现null值,object为点击的模型,batchData为模型所在的扩展数据,通过读取父节点获取 |
| mousemove | null, {object: Object3D,batchData: Object} | 鼠标移动事件,可能会出现null值,object为滑动到的模型,batchData为模型所在的扩展数据,通过读取父节点获取 |
| rightClick | null, {object: Object3D,batchData: Object} | 右击事件,可能会出现null值,object为点击的模型,batchData为模型所在的扩展数据,通过读取父节点获取 |