實例方法
使用 mapThree.prototype.three 創建 3D 圖層。
3D圖層操作
| 實例方法 | 描述 |
|---|---|
| add3dLayer | 新增 3D 圖層。 |
| remove3dLayer | 移除 3D 圖層。 |
3D物件操作
| 實例方法 | 描述 |
|---|---|
| add3dModel | 新增 3D 模型。注意:模型新增為非同步操作。 |
| add3dLine | 新增 3D 線條。 |
| add3dDashLine | 新增 3D 虛線。 |
| add3dMeasureLine | 新增 3D 測量線。 |
| get3dObjectById | 使用 ID 獲取 3D 物件。 |
| remove3dObjectById | 使用 ID 移除 3D 物件。 |
| remove3dObject | 移除 3D 物件。 |
| detect3dObject | 偵測 3D 物件。 |
鏡頭操作
| 實例方法 | 描述 |
|---|---|
| fixedCameraToModel | 將鏡頭鎖定在模型上。 |
| releaseCamera | 釋放鏡頭。 |
3D圖層操作
add3dLayer
add3dLayer(options, beforeLayerId)
新增 3D 圖層。
參數
-
options
Object: 要設定的圖層參數。參數 描述 options.id string圖層 ID(必填)。 options.minzoom number最小縮放 (0-24)(選填),當縮放級別小於minzoom,圖層將隱藏,預設為12options.maxzoom number最大縮放 (0-24)(選填),當縮放級別大於maxzoom,圖層將隱藏,預設為24 -
beforeLayerId
string: 插入在指定圖層之前(選填),預設為undefined。
範例
map.three.add3dLayer({
id: '3d_layer',
minzoom: 0,
maxzoom: 24,
}, 'ohter_layer');
remove3dLayer
remove3dLayer(id)
移除 3D 圖層。
參數
- id
string: 欲移除的圖層 ID。
範例
map.three.remove3dLayer('3d_layer');
3D物件操作
add3dModel
add3dModel(options)
新增 3D 模型。注意:模型新增為非同步操作。
參數
-
options
Object:要設定的模型參數。名稱 描述 options.layerId string圖層 ID(選填),預設為 'kw_3d_layer'。如果找不到對應的圖層,將自動新增。若需自訂minzoom、maxzoom或beforeLayerId,請使用three.add3dLayer()手動建立圖層options.id string模型 ID(選填),預設使用 UUID options.obj string模型檔案(必填),可使用 URL 或是 Three.js Object3D options.type string模型檔案類型(選填),可設定為 'gltf'、'fbx'、'dae',若使用 Three.js Object3D 則免填,預設為'gltf'options.coordinates array三維座標(必填) options.anchor string錨點(選填),可設定為 'auto'、'top'、'bottom'、'left'、'right'、'center'、'top-left'、'top-right'、'bottom-left'、'bottom-right',預設為'auto'options.scale Object縮放比例(選填),可填數字或是物件,預設為 { x: 1, y: 1, z: 1 }options.rotation Object旋轉角度(選填),預設為 { x: 0, y: 0, z: 0 }options.adjustment Object位置調整(選填),預設為 { x: 0, y: 0, z: 0 }options.hideWhenOutOfBounds boolean超出視窗時隱藏(選填),預設為 false
回傳
Promise<Object> : 3D 模型,為非同步操作,詳情請看 3D 模型。
範例
const model = await map.three.add3dModel({
layerId: '3d_layer',
id: '3d_model',
obj: 'https://kw3dmap.autoking.com.tw/kwmap/assets/demo/gltf/tw01.glb',
type: 'gltf',
coordinates: [121.565067045142, 25.0334249633834, 0],
anchor: 'auto',
scale: { x: 1, y: 1, z: 1 },
rotation: { x: 0, y: 0, z: 180 },
adjustment: { x: 0, y: 0, z: 0 },
hideWhenOutOfBounds: true,
});
使用 URL 新增 3D 模型:
const model = await map.three.add3dModel({
// ......
obj: 'https://example.com/model.gltf',
type: 'gltf',
// ......
});
使用 Three.js Object3D 新增 3D 模型:
const geometry = new THREE.BoxGeometry(20, 20, 20);
const material = new THREE.MeshBasicMaterial({ color: '#DD0000' });
const mesh = new THREE.Mesh(geometry, material);
const model = await map.three.add3dModel({
// ......
obj: mesh,
// ......
});
add3dLine
add3dLine(options)
新增 3D 線條。
參數
-
options
Object:要設定的線條參數。名稱 描述 options.layerId string圖層 ID(選填),預設為 'kw_3d_layer'。如果找不到對應的圖層,將自動新增。若需自訂minzoom、maxzoom或beforeLayerId,請使用three.add3dLayer()手動建立圖層options.id string線條 ID(選填),預設使用 UUID options.coordinates array線條的三維座標(必填) options.color string顏色(選填),預設為 '#000000'options.opacity number透明度(選填),預設為 1options.width number寬度(選填),預設為 3options.zCoordinate numberZ 座標(選填),若填入則會將所有座標的 Z 座標設為此值,預設為 undefinedoptions.hideWhenOutOfBounds boolean超出視窗時隱藏(選填),預設為 false
回傳
Object : 3D 線條。
範例
const line = map.three.add3dLine({
layerId: '3d_layer',
id: '3d_line',
coordinates: [
[121.5594, 25.0400, 100],
[121.5694, 25.0400, 300],
[121.5644, 25.0370, 0],
],
color: '#DD0000',
opacity: 1,
width: 10,
hideWhenOutOfBounds: true,
});
個別設定 Z 座標:
const line = map.three.add3dLine({
// ......
coordinates: [
[121.5, 25.0, 50],
[121.6, 25.1, 100],
[121.7, 25.2, 50],
],
// ......
});
使用統一 Z 座標:
const line = map.three.add3dLine({
// ......
coordinates: [
[121.5, 25.0],
[121.6, 25.1],
[121.7, 25.2],
],
zCoordinate: 200,
// ......
});
add3dDashLine
add3dDashLine(options)
新增 3D 虛線。
參數
-
options
Object:要設定的虛線參數。名稱 描述 options.layerId string圖層 ID(選填),預設為 'kw_3d_layer'。如果找不到對應的圖層,將自動新增。若需自訂minzoom、maxzoom或beforeLayerId,請使用three.add3dLayer()手動建立圖層options.id string虛線 ID(選填),預設使用 UUID options.coordinates array虛線的三維座標(必填) options.color string顏色(選填),預設為 '#000000'options.opacity number透明度(選填),預設為 1options.width number寬度(選填),預設為 3options.zCoordinate numberZ 座標(選填),若填入則會將所有座標的 Z 座標設為此值,預設為 undefinedoptions.dashSize number虛線大小(選填),預設為 1options.gapSize number虛線間隔(選填),預設為 1options.hideWhenOutOfBounds boolean超出視窗時隱藏(選填),預設為 false
回傳
Object : 3D 虛線。
範例
const line = map.three.add3dDashLine({
layerId: '3d_layer',
id: '3d_line',
coordinates: [
[121.5594, 25.0400, 100],
[121.5694, 25.0400, 300],
[121.5644, 25.0370, 0],
],
color: '#DD0000',
opacity: 1,
width: 10,
dashSize: 1.0,
gapSize: 1.0,
hideWhenOutOfBounds: true,
});
個別設定 Z 座標:
const line = map.three.add3dDashLine({
// ......
coordinates: [
[121.5, 25.0, 50],
[121.6, 25.1, 100],
[121.7, 25.2, 50],
],
// ......
});
使用統一 Z 座標:
const line = map.three.add3dDashLine({
// ......
coordinates: [
[121.5, 25.0],
[121.6, 25.1],
[121.7, 25.2],
],
zCoordinate: 200,
// ......
});
add3dMeasureLine
add3dMeasureLine(options)
新增 3D 測量線。
參數
-
options
Object:要設定的虛線參數。名稱 描述 options.layerId string圖層 ID(選填),預設為 'kw_3d_layer'。如果找不到對應的圖層,將自動新增。若需自訂minzoom、maxzoom或beforeLayerId,請使用three.add3dLayer()手動建立圖層options.id string測量線 ID(選填),預設使用 UUID options.start Array起點三維座標(必填) options.end Array終點三維座標(必填) options.lineColor string線條顏色(選填),預設為 '#613BFB'options.lineOpacity number線條透明度(選填),預設為 1options.lineWidth number線條寬度(選填),預設為 5options.labelColor string標籤顏色(選填),預設為 '#FC2B5F'options.labelFontSize string標籤字型大小(選填),預設為 '16px'options.hideWhenOutOfBounds boolean超出視窗時隱藏(選填),預設為 false
回傳
Object : 3D 測量線。
範例
const line = map.three.add3dMeasureLine({
layerId: '3d_layer',
id: '3d_measure_line',
start: [121.5544, 25.0400, 50],
end: [121.5744, 25.0400, 400],
lineColor: '#613BFB',
lineOpacity: 1,
lineWidth: 5,
labelColor: '#FC2B5F',
labelFontSize: '16px',
hideWhenOutOfBounds: false,
});
get3dObjectById
get3dObjectById(id)
使用 ID 獲取 3D 物件。
參數
- id
string: 3D 物件 ID。
回傳
Object | null : 3D 物件或是空值。
範例
const object = map.three.get3dObjectById('3d_model');
remove3dObjectById
remove3dObjectById(id)
使用 ID 移除 3D 物件。
參數
- id
string: 3D 物件 ID。
範例
map.three.remove3dObjectById('3d_model');
remove3dObject
remove3dObject(object)
移除 3D 物件。
參數
- object
Object: 3D 物件。
範例
const model = await map.three.add3dModel({
// ......
});
map.three.remove3dObject(model);
detect3dObject
detect3dObject(point)
偵測 3D 物件。
參數
- point
Array:canvas 座標。
回傳
Object | null:3D 物件或是空值。
範例
function mapOnClick({ point }) {
const object = map.three.detect3dObject(point);
if (object) {
alert(`Click on 3D model`);
}
}
map.on('click', mapOnClick);
鏡頭操作
fixedCameraToModel
fixedCameraToModel(options)
將鏡頭鎖定在模型上。
參數
-
options
Object:設定的參數。名稱 描述 options.model Object模型(必填) options.rotateWithDirection boolean是否隨著運動方向旋轉(選填),預設為 falseoptions.releaseCameraOnClick boolean點選地圖後釋放鏡頭(選填),預設為 false
範例
map.three.fixedCameraToModel({
model: model,
rotateWithDirection: false,
releaseCameraOnClick: false,
});
releaseCamera
releaseCamera()
釋放鏡頭。
範例
map.three.releaseCamera();