YY.ThreeScene
三维场景,three.js 场景对象
TIP
threeScene生成的三维图形组件都是基于YY.BaseObject,BaseObject是顶级父类,下面的都是它的子类,都拥有BaseObject的属性和方法
BaseObject
│ ExtrudePolygon
│ ExtrudePolygons
│ Bar
│ Bars
│ Line
│ Lines
│ ExtrudeLine
│ ExtrudeLins
│ Model
│ ExtrudeLineTrail
│ TripControl
│ Truck
│ Point
│ Points
│ Terrain
│ HeatMap
│ FatLine
│ FatLines
│ Box
│ Boxs
│ Water
│ TripLine
│ Pipe
│ Pipe
│ TrialLine
│ ArcLine
│ TripArcLine
│ TrialArcLine
│ ......
DANGER
一个地图上一般只有一个 threeScene 实例
TIP
这些功能可以在 mapplat 平台直接配置出来,应该尽量去使用地图管理系统
creation
- constructor(id, options)
- {string}
id
- {Object}
options
- {boolean}
geometryEvents
是否开启事件监测,默认值 true,当 false,threeScene 不会触发任何事件 - {boolean}
light
是否开启增强光照,软白色的环境光,默认 false,开启后这个场景会亮很多 - {number}
identifyCountOnEvent
每次 pick baseobject 的个数,0 代表无数个,其他的数值代表其值,即每次有多个 baseobject 被 pick - {number}
loopRenderCount
每帧可以添加到场景生的 baseobject 个数,用来控制延迟加载,合适的值可以对整个延迟加载有好的用户体验
- {boolean}
- {string}
example
method
isRendering()
- 场景是否正在渲染过程中
- 返回值:
boolean
prepareToDraw(gl, scene, camera)
- 图层初始化完成回调函数, 一般我们把自己的业务逻辑放在这个回调函数中执行
js
//3D 图层
const threeScene = new YY.ThreeScene(YY.H.uuid(), {
// identify:false
light: true,
});
map.addLayer(threeScene);
threeScene.prepareToDraw = function (gl, scene, camera) {
addBuildings();
threeScene.startAnimation();
};
coordinateToXYZ(lnglat, height)
- 经纬度转三维坐标(XYZ), 即 THREE.Vector3
- 参数
- {YY.LngLat | Array}
lnglat
: 经纬度 - {number}
height
: 高度
- {YY.LngLat | Array}
- 返回值: THREE.Vector3
heightToZ(height)
- 高度转为 z , 即 THREE.Vector3 的 z
- 参数
- {number}
height
: 高度
- {number}
- 返回值:
number
addMesh(baseObjects)
- 添加场景物件 bar, wifi, billboard, terrain, t, beam 等
- 参数
- {YY.BaseObject || Array[YY.BaseObject]}
baseObjects
:场景物件,单个物件或者物件的数组
- {YY.BaseObject || Array[YY.BaseObject]}
- 返回值:
this
removeMesh(baseObjects)
- 移除场景物件 bar, wifi, billboard, terrain, t, beam 等
- 参数
- {YY.BaseObject || Array[YY.BaseObject]}
baseObjects
:场景物件,单个物件或者物件的数组
- {YY.BaseObject || Array[YY.BaseObject]}
- 返回值:
this
getCamera()
- 获取相机
- 返回值:
THREE.Camera
getScene()
- 获取场景
- 返回值:
THREE.Scene
renderScene()
- 渲染场景
- 返回值:
this
loop(render=true)
- 延迟加载循环函数
- 参数
- {boolean}
render
:是否每次循环都渲染
- {boolean}
- 返回值:
this
getThreeRenderer(render=true)
- 获取 webgl 渲染器
- 返回值:
THREE.WebGLRenderer
getPick()
- 获取 GPUPick 组件,一般自定义图形组件开发时用到
- 返回值:
GPUPick
delayAddMesh(baseObjects)
- 将图形组件添加到延迟队列里
- 参数
- {YY.BaseObject || Array[YY.BaseObject]}
baseObjects
:场景物件,单个物件或者物件的数组
- {YY.BaseObject || Array[YY.BaseObject]}
- 返回值:
this
identify(coordiante,options)
- 图形命中检测
- 参数
- {YY.LngLat}
coordiante
:坐标值 - {Object}
options
:配置项
- {YY.LngLat}
- 返回值:
Array[YY.BaseObject]
startAnimation()
- 开启动画,整个 ThreeLayer 开启动画
- 返回值:
this
stopAnimation()
- 关闭动画,整个 ThreeLayer 关闭动画
- 返回值:
this
isAnimation()
- 是否处于动画状态
- 返回值:
boolean
toExtrudePolygon(polygon,options,material)
- 构造拔高的多边形 demo
- 参数
- {YY.Polygon | YY.MultiPolygon | GeoJSON}
polygon
: 多边形 - {Object}
options
: 配置信息- {number}
options.height
: 垂直高度 default value:0, - {number}
options.bottomHeight
: 悬空高度 default value:0, - {number}
options.alitude
: 海拔高度 default value:0, - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30 - {String}
options.topColor
:顶部颜色 默认 null - {String}
options.bottomColor
: 底部颜色 默认 '#2d2f61',
- {number}
- {THREE.Material}
material
: 材质
- {YY.Polygon | YY.MultiPolygon | GeoJSON}
- 返回值:
ExtrudePolygon
toExtrudePolygons(polygons,options,material)
- 构造拔高的多边形 demo
- 参数
- {Array[YY.Polygon | YY.MultiPolygon | GeoJSON]}
polygons
: 多边形,注意每个多边形请配置自己的 height 和 bottomHeight 信息 - {Object}
options
: 配置信息- {number}
options.alitude
: 海拔高度 default value:0, - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30 - {String}
options.topColor
:顶部颜色 默认 null - {String}
options.bottomColor
: 底部颜色 默认 '#2d2f61',
- {number}
- {THREE.Material}
material
: 材质
- {Array[YY.Polygon | YY.MultiPolygon | GeoJSON]}
- 返回值:
ExtrudePolygons
toBar(lnglat,options,material)
- 构造拔高的柱子 demo
- 参数
- {YY.LngLat | Array}
lnglat
: 坐标 - {Object}
options
: 配置信息- {number}
options.alitude
: 海拔高度 default value:0, - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30 - {String}
options.topColor
:顶部颜色 默认 null - {String}
options.bottomColor
: 底部颜色 默认 '#2d2f61', - {number}
options.radius
: 半径 - {number}
options.height
:高度
- {number}
- {THREE.Material}
material
: 材质
- {YY.LngLat | Array}
- 返回值:
Bar
toBars(data,options,material)
- 构造拔高的柱子 demo
- 参数
- {Array[Object]}
data
: 数据 Array[{coordinate:xxx,height:xxx,radius:xxxx}] - {Object}
options
: 配置信息- {number}
options.alitude
: 海拔高度 default value:0, - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30 - {String}
options.topColor
:顶部颜色 默认 null - {String}
options.bottomColor
: 底部颜色 默认 '#2d2f61',
- {number}
- {THREE.Material}
material
: 材质
- {Array[Object]}
- 返回值:
Bars
toLine(lineString,options,material)
- 构造线条 demo
- 参数
- {YY.LineString | YY.MultiLineStirng | GeoJSON}
lineString
- {Object}
options
: 配置信息- {number}
options.alitude
: 海拔高度 default value:0, - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30 - {number}
options.bottomHeight
:悬空的高度
- {number}
- {THREE.Material}
material
: 材质
- {YY.LineString | YY.MultiLineStirng | GeoJSON}
- 返回值:
Line
toLines(lineStrings,options,material)
- 构造线条
- 参数
- {Array[YY.LineString | YY.MultiLineStirng | GeoJSON]}
lineStrings
每个 lineString 应该有自己的 bottomHeight 属性 - {Object}
options
: 配置信息- {number}
options.alitude
: 海拔高度 default value:0, - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- {THREE.Material}
material
: 材质
- {Array[YY.LineString | YY.MultiLineStirng | GeoJSON]}
- 返回值:
Lines
toExtrudeLine(lineString,options,material)
- 构造拔高扩宽的线条 demo
- 参数
- {YY.LineString | YY.MultiLineStirng | GeoJSON}
lineString
- {Object}
options
: 配置信息- {number}
options.width
: 宽度 米制 - {number}
options.height
: 高度 米制 - {number}
options.bottomHeight
:悬空的高度 - {number}
options.alitude
: 海拔高度 default value:0, - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30 - {String}
options.topColor
:顶部颜色 默认 null - {String}
options.bottomColor
: 底部颜色 默认 '#2d2f61',
- {number}
- {THREE.Material}
material
: 材质
- {YY.LineString | YY.MultiLineStirng | GeoJSON}
- 返回值:
ExtrudeLine
toExtrudeLines(lineStrings,options,material)
- 构造拔高扩宽的线条
- 参数
- {Array[YY.LineString | YY.MultiLineStirng | GeoJSON]}
lineStrings
每个线条应该设置自己的 width,height,bottomHeight 属性 - {Object}
options
: 配置信息- {number}
options.alitude
: 海拔高度 default value:0, - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30 - {String}
options.topColor
:顶部颜色 默认 null - {String}
options.bottomColor
: 底部颜色 默认 '#2d2f61',
- {number}
- {THREE.Material}
material
: 材质
- {Array[YY.LineString | YY.MultiLineStirng | GeoJSON]}
- 返回值:
ExtrudeLines
toModel(model,options)
- 构造模型 demo
- 参数
- {THREE.Object3d}
model
模型 - {Object}
options
: 配置信息- {YY.LngLat | Array}
options.coordinate
: 位置 - {number}
options.alitude
: 海拔高度 default value:0, - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {YY.LngLat | Array}
- {THREE.Object3d}
- 返回值:
Model
toExtrudeLineTrail(lineString,options,material)
- 构造拖尾动画的线条 demo
- 参数
- {YY.LineString | GeoJSON}
lineString
线条 - {Object}
options
: 配置信息- {number}
options.trail
: 尾巴的长度 默认 5 - {number}
options.chunkLength
: 线段切割的长度 - {number}
options.width
: 宽度 - {number}
options.height
: 高度 - {number}
options.speed
: 速度 - {number}
options.alitude
: 海拔高度 default value:0, - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- {THREE.Material}
material
: 材质
- {YY.LineString | GeoJSON}
- 返回值:
ExtrudeLineTrail
getTripLineParams(polyline, chunklength, height = 0)
- 获取轨迹播放的相关参数 demo
- 参数
- { YY.Polyline | YY.LineString}
polyline
:线段,注意 polyline 不支持 MultiLineString - { number}}
chunklength
:线段切割长度 - { number}
height
:高度
- { YY.Polyline | YY.LineString}
- 返回值:
Object
toTripControl(baseObject, tripParams, options)
- 轨迹播放控件 demo
- 参数
- {BaseObject || Array[BaseObject]}
object
:需要播放的物体 ,例如 YY.Truck,支持数组,多个 baseObject - {Object}
tripParams
:轨迹参数 一般为 threeScene.getTripLineParams()的结果 - {Object}
options
: 额外的配置信息- {number}
options.speed
:播放的速度 默认 1 - {boolean}
options.trip
: 是否跟随,即使实时的设置地图的中心点为轨迹当前的点 - {boolean}
options.animation
: 是否动画 - {function}
options.callback
:播放过程中的回调函数 - {boolean}
options.rotationZ
: 是否支持允许自动更新旋转角, 默认 true,object 会自动更新 angle - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- {BaseObject || Array[BaseObject]}
- 返回值:
TripControl
js
const OPTIONS = {
height: 0,
color: "red",
scale: 5,
};
const trucks = [];
polylines.forEach((polyline) => {
// 小货车模型
const truck = threeScene.toTruck(
polyline.getLngLats()[0],
YY.Util.extend({}, OPTIONS, {
color: YY.randomColor(),
})
);
trucks.push(truck);
// 获取轨迹播放的参数
const truckTripObejct = threeScene.getTripLineParams(polyline, 70, 0);
// 轨迹播放控制器,这里用来控制小车的播放
const _truckControl = threeScene.toTripControl(truck, truckTripObejct, {
speed: 0.5,
});
truckControls.push(_truckControl);
});
truckControl = truckControls[0];
threeScene.add(trucks);
threeScene.add(truckControls);
toTruck(lnglat, options)
- 小货车简易模型 一般用于轨迹播放 demo
- 参数
- {YY.LngLat | Array}
lnglat
:经纬度 - {Object}
options
: 额外的配置信息- {string }
options.color
: 颜色 默认 0xa52523 - {number}
options.scale
: 放大的倍数 默认 1 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {string }
- {YY.LngLat | Array}
- 返回值:
Truck
js
const OPTIONS = {
height: 0,
color: "red",
};
// 小货车,交通等场景下使用
const trucks = lnglats.map((lnglat) => {
const car = threeScene.toTruck(
lnglat,
YY.Util.extend({}, OPTIONS, {
color: YY.randomColor(),
})
);
car.bindTooltip("Truck");
return car;
});
toPoint(coordinate,options,material)
- 构造点
- 参数
- {YY.LngLat | Array}
coordinate
坐标 - {Object}
options
: 配置信息- {string}
options.color
: 颜色 一般用于自定义材质时使用 - {number}
options.size
: 大小 一般用于自定义材质时使用 - {number}
options.alitude
: 海拔高度 default value:0, - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {string}
- {THREE.Material}
material
: 材质
- {YY.LngLat | Array}
- 返回值:
Point
toPoints(data,options,material)
- 构造点
- 参数
- {Array[Object]}
data
数据集{coordinate:xxx,color:xxx,size:xxx}
- {Object}
options
: 配置信息- {number}
options.alitude
: 海拔高度 default value:0, - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- {THREE.Material}
material
: 材质
- {Array[Object]}
- 返回值:
Points
toTileTerrain(extent,options,material)
- 构造地形
- 参数
- {YY.Envelope | Array}
extent
范围 - {Object}
options
: 配置信息- {string}
options.image
: rgba image,海拔高度图片 - {number}
options.imageWidth
: 图片宽度 - {number}
options.imageHeight
: 图片高度 - {string}
options.texture
: 纹理图片 - {number}
options.alitude
: 海拔高度 default value:0, - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {string}
- {THREE.Material}
material
: 材质
- {YY.Envelope | Array}
- 返回值:
Terrain
toHeatMap(data,options,material)
- 构造 3d 热区
- 参数
- {Array[Object]}
data
数据集{coordinate:xxx,count:xxxx}
- {Object}
options
: 配置信息- {number}
options.min
: 权重的最小值 0 - {number}
options.max
: 权重值得最大值 100 - {number}
options.size
: 点的大小 13 - {string}
options.gradient
: 渐变色{ 0.25: 'rgb(0,0,255)', 0.55: 'rgb(0,255,0)', 0.85: 'yellow', 1.0: 'rgb(255,0,0)' }
- {string}
options.gridScale
: 网格缩放比列 0.5 - {number}
options.alitude
: 海拔高度 default value:0, - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- {THREE.Material}
material
: 材质
- {Array[Object]}
- 返回值:
HeatMap
toFatLine(lineString,options,material)
- 构造有粗度的线
- 参数
- {YY.LineString | YY.MultiLineString | GeoJSON}
lineString
线条 - {Object}
options
: 配置信息- {number}
options.bottomHeight
: 悬空高度 - {number}
options.alitude
: 海拔高度 default value:0, - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- {THREE.Material}
material
: 材质
- {YY.LineString | YY.MultiLineString | GeoJSON}
- 返回值:
FatLine
toFatLines(lineStrings,options,material)
- 构造有粗度的线
- 参数
- {Array[YY.LineString | YY.MultiLineString | GeoJSON]}
lineStrings
线条,每条数据应该有自己的 bottomHeight 属性值 - {Object}
options
: 配置信息- {number}
options.alitude
: 海拔高度 default value:0, - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- {THREE.Material}
material
: 材质
- {Array[YY.LineString | YY.MultiLineString | GeoJSON]}
- 返回值:
FatLines
toBox(coordinate,options,material)
- 构造四边形的柱子
- 参数
- {YY.LngLat | Array}
coordinate
坐标值 - {Object}
options
: 配置信息- {number}
options.radius
: 半径 - {number}
options.height
: 高度 - {number}
options.alitude
: 海拔高度 default value:0, - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30 - {String}
options.topColor
: 顶部颜色 默认 null - {String}
options.bottomColor
: 底部的颜色 默认 '#2d2f61',
- {number}
- {THREE.Material}
material
: 材质
- {YY.LngLat | Array}
- 返回值:
Box
toBoxs(data,options,material)
- 构造四边形的柱子
- 参数
- {Array[Object]}
data
数据集{coordinate:xxx,radius:xxx,height:xxx,topColor:xxx,bottomColor:xxxx}
- {Object}
options
: 配置信息- {number}
options.radius
: 半径 - {number}
options.height
: 高度 - {number}
options.alitude
: 海拔高度 default value:0, - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30 - {String}
options.topColor
: 顶部颜色 默认 null - {String}
options.bottomColor
: 底部的颜色 默认 '#2d2f61',
- {number}
- {THREE.Material}
material
: 材质
- {Array[Object]}
- 返回值:
Boxs
toWater(polygon, options)
- 构造水系, 模拟逼真的水
- 参数
- {YY.Polygon | YY.MultiPolygon]}
polygon
: 多边形 - {Object}
options
: 额外的配置信息- {string}
options.waterNormals
: 水的纹理图片地址 默认为 null,这个参数为必填选项 - {string}
options.waterColor
: 水的颜色 默认值 #15e8a9 - {number}
options.alitude
: 海拔高度 default value:0, - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {string}
- {YY.Polygon | YY.MultiPolygon]}
- 返回值:
Water
toTripLine(polyline, options,material)
- 构造旅行的线段,轨迹的线段
- 参数
- { YY.Polyline | YY.LineString}
polyline
:线段,注意 polyline 不支持 MultiLineString - {Object}
options
: 额外的配置信息- {number}
options.chunkLength
:线段切割的长度 默认 50 米 ,例如 1000 米的线段会被切割成 20 份 - {number}
options.speed
:播放的速度 默认 1 - {string}
options.color
: 颜色 默认 #fff - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- {THREE.Material}
material
: 材质
- { YY.Polyline | YY.LineString}
- 返回值:
TripLine
toPipe(data, options,material)
- 构造管道组件
- 参数
- { Array}
data
:数据的集合 - {Object}
options
: 额外的配置信息- {number}
options.radius
: 半径 default 10 - {number}
options.pointNumbers
: 管道上的点集的个数 default 200 - {number}
options.segment
: 管道的边数 default 10 - {number}
options.widthScale
: 管道的横向缩放比例 default 1 当且仅当 segment=4 时起作用 - {number}
options.heightScale
: 管道纵向缩放比例 default 1 当且仅当 segment=4 时起作用 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- { Array}
- 返回值:
Pipe
toTrialLine(polyline, options,material)
- 构造拖尾的线
- 参数
- { YY.Polyline | YY.LineString}
polyline
:线段,注意 polyline 不支持 MultiLineString - {Object}
options
: 额外的配置信息- {number}
options.chunkLength
:线段切割的长度 - {number}
options.trial
:尾巴的长度的个数,即 长度=trial*chunkLength - {number}
options.speed
:播放的速度 默认 1 - {string}
options.color
: 颜色 默认 #fff - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- { YY.Polyline | YY.LineString}
- 返回值:
TrialLine
js
const DEFAULTOPTIONS = {
pointNumbers: 100,
};
const lnglats = YY.GeometryHelper.strToLngLatArray(polyline);
const line = new YY.Polyline(YY.CoordTransUtil.transformAmapToWGS84(lnglats));
// 旅行的弧线
const triparcline = threeScene.toTripArcLine(
line,
YY.Util.extend({}, DEFAULTOPTIONS, {
color,
})
);
toArcLine(polyline, options,material)
- 构造弧线线段
- 参数
- {YY.Polyline | YY.LineString}
polyline
: 线段,注意不管改线段有多少个节点,内部只会去第一个节点和最后一个节点 - {Object}
options
: 额外的配置信息- {number}
options.lineWidth
:线的宽度 默认 1 单位像素 - {string}
options.color
: 颜色 默认 #fff - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- {YY.Polyline | YY.LineString}
- 返回值:
ArcLine
js
const lnglats = YY.GeometryHelper.strToLngLatArray(polyline);
const line = new YY.Polyline(YY.CoordTransUtil.transformAmapToWGS84(lnglats));
// 弧线构造
const arcline = threeScene.toArcLine(line, {
color,
});
toTripArcLine(polyline, options,material)
- 构造旅行的弧线
- 参数
- {YY.Polyline | YY.LineString}
polyline
: 线段 - {Object}
options
: 额外的配置信息- {number}
options.pointNumbers
:弧线上点的个数 默认 200,pointNumbers 越大 播放的速度越慢 - {number}
options.speed
:播放的速度 默认 1 - {string}
options.color
: 颜色 默认 #fff - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- {YY.Polyline | YY.LineString}
- 返回值:
TripArcLine
js
const DEFAULTOPTIONS = {
pointNumbers: 100,
};
const lnglats = YY.GeometryHelper.strToLngLatArray(polyline);
const line = new YY.Polyline(YY.CoordTransUtil.transformAmapToWGS84(lnglats));
// 旅行的弧线
const triparcline = threeScene.toTripArcLine(
line,
YY.Util.extend({}, DEFAULTOPTIONS, {
color,
})
);
toTrialArcLine(polyline, options,material)
- 构造拖尾的弧线
- 参数
- {YY.Polyline | YY.LineString}
polyline
: 线段 - {Object}
options
: 额外的配置信息- {number}
options.pointNumbers
:弧线上点的个数 默认 200,pointNumbers 越大 播放的速度越慢 - {number}
options.trial
:尾巴的长度个数 即尾巴 - {number}
options.speed
:播放的速度 默认 1 - {string}
options.color
: 颜色 默认 #fff - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- {YY.Polyline | YY.LineString}
- 返回值:
TrialArcLine
js
const DEFAULTOPTIONS = {
pointNumbers: 100, //弧线上点的个数
trial: 10, //尾巴的长度
height: 100,
color: "#33FFFF",
};
const lnglats = YY.GeometryHelper.strToLngLatArray(polyline);
const line = new YY.Polyline(YY.CoordTransUtil.transformAmapToWGS84(lnglats));
// 拖尾的弧线
const trialarcline = threeScene.toTrialArcLine(line, DEFAULTOPTIONS);
toTubeLine(polyline, options, material)
- 构造管道,等价于 toExtrudeLine
- 参数
- {YY.Polyline | YY.LineString}
polyline
: 线段 - {Object}
options
: 额外的配置信息- {number}
options.lineWidth
:管道的宽度 默认 2 单位米 - {number}
options.depth
:管道的高度 厚度 默认 1 单位米 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- {YY.Polyline | YY.LineString}
- 返回值:
TubeLine
js
function getMaterial(color = "#0953BC") {
return new THREE.MeshPhongMaterial({
color,
});
}
const lnglats = YY.GeometryHelper.strToLngLatArray(polyline);
const line = new YY.Polyline(YY.CoordTransUtil.transformAmapToWGS84(lnglats));
// 管道线
const basicLine = threeScene.toTubeLine(line, getMaterial(YY.randomColor()), {
lineWidth: 100,
depth: 3,
});
toTubeTripLine(polyline, options ,material)
- 构造旅行的管道
- 参数
- {YY.Polyline | YY.LineString}
polyline
: 线段 - {Object}
options
: 额外的配置信息- {number}
options.lineWidth
:管道的宽度 默认 2 单位米 - {number}
options.chunkLength
:线段切割的长度 默认 50 单位米 - {number}
options.speed
:播放的速度 - {number}
options.depth
:管道的高度 厚度 默认 1 单位米 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- {YY.Polyline | YY.LineString}
- 返回值:
TubeTripLine
js
const DEFAULTOPTIONS1 = {
chunkLength: 1000,
lineWidth: 100,
depth: 2,
height: 0,
speed: 1,
};
const tripline = threeScene.toTubeTripLine(line, material1, DEFAULTOPTIONS1);
triplines.push(tripline);
toTubeTrialLine(polyline, options, material)
- 构造拖尾的管道
- 参数
- {YY.Polyline | YY.LineString}
polyline
: 线段 - {Object}
options
: 额外的配置信息- {number}
options.lineWidth
:管道的宽度 默认 2 单位米 - {number}
options.chunkLength
:线段切割的长度 默认 50 单位米 - {number}
options.trial
:尾巴长度的个数 - {number}
options.speed
:播放的速度 - {number}
options.depth
:管道的高度 厚度 默认 1 单位米 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- {YY.Polyline | YY.LineString}
- 返回值:
TubeTrialLine
js
const DEFAULTOPTIONS1 = {
trial: 15,
chunkLength: 1000,
lineWidth: 100,
depth: 2,
height: 0,
speed: 1,
};
// 拖尾的管道线
const trialline = threeScene.toTubeTrialLine(line, material1, DEFAULTOPTIONS1);
triallines.push(trialline);
toTubeArcLine(polyline, options, material)
- 构造弧线的管道
- 参数
- {YY.Polyline | YY.LineString}
polyline
: 线段 - {Object}
options
: 额外的配置信息- {number}
options.radius
:管道的半径 单位米 默认 20 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- {YY.Polyline | YY.LineString}
- 返回值:
TubeArcLine
js
const lnglats = YY.GeometryHelper.strToLngLatArray(polyline);
const line = new YY.Polyline(YY.CoordTransUtil.transformAmapToWGS84(lnglats));
// 管道弧线
const basicLine = threeScene.toTubeArcLine(line, material1, {
radius: 100,
});
toTubeTripArcLine(polyline, options, material)
- 构造旅行的弧线的管道
- 参数
- {YY.Polyline | YY.LineString}
polyline
: 线段 - {Object}
options
: 额外的配置信息- {number}
options.radius
:管道的半径 单位米 默认 20 - {number}
options.pointNumbers
:管道上点的个数,点越多速度越慢 默认 200 - {number}
options.speed
:播放的速度 默认 1 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- {YY.Polyline | YY.LineString}
- 返回值:
TubeTripArcLine
js
const DEFAULTOPTIONS1 = {
radius: 105,
};
const trialline = threeScene.toTubeTripArcLine(
line,
material1,
DEFAULTOPTIONS1
);
triplines.push(trialline);
toTubeTrialArcLine(polyline, options, material)
- 构造拖尾的弧形的管道
- 参数
- {YY.Polyline | YY.LineString}
polyline
: 线段 - {Object}
options
: 额外的配置信息- {number}
options.radius
:管道的半径 单位米 默认 20 - {number}
options.pointNumbers
:管道上点的个数,点越多速度越慢 默认 200 - {number}
options.trial
:尾巴的个数 - {number}
options.speed
:播放的速度 默认 1 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- {YY.Polyline | YY.LineString}
- 返回值:
TubeTrialArcLine
js
const DEFAULTOPTIONS1 = {
radius: 105,
trial: 20,
};
const trialline = threeScene.toTubeTrialArcLine(
line,
material1,
DEFAULTOPTIONS1
);
triallines.push(trialline);
toPointAloneLine(polylines, options, material)
- 构造沿线运行的粒子系统,点集
- 参数
- {Array[YY.Polyline | YY.LineString]}
polylines
: 线段的集合 - {Object}
options
: 额外的配置信息- {number}
options.chunkLength
: 切割线段的长度 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- {Array[YY.Polyline | YY.LineString]}
- 返回值:
PointAloneLine
js
// 点的材质
const pointsMaterial = new THREE.PointsMaterial({
size: 15,
depthTest: true,
depthWrite: false,
sizeAttenuation: false,
blending: THREE.AdditiveBlending,
map: new THREE.TextureLoader().load(PATH + "images/spark.png"),
vertexColors: THREE.VertexColors, //顶点着色
transparent: true,
});
// 颜色的集合
const colors = [];
for (let i = 0, len = polylines.length; i < len; i++) {
const color = new THREE.Color();
color.setHSL(i / len, 1.0, 0.5);
colors.push(color);
}
const pointsAloneLine = threeScene.toPointAloneLine(polylines, pointsMaterial, {
chunkLength: 10,
colors: colors,
});
toPointAloneArcLine(polylines, options, material)
- 构造沿弧线运行的粒子系统,点集
- 参数
- {Array[YY.Polyline | YY.LineString]}
polylines
: 线段的集合 - {Object}
options
: 额外的配置信息- {number}
options.pointNumbers
: 线上点的个数,点的个数越多速度越慢 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- {Array[YY.Polyline | YY.LineString]}
- 返回值:
PointAloneArcLine
js
pointsAloneLine = threeScene.toPointAloneArcLine(
polylines,
getMaterial(params),
{
pointNumbers: 200,
}
);
toWifi(lnglat, options, material)
- 构造 WiFi 辐射标志
- 参数
- {YY.LngLat | Array}
lnglat
: 经纬度 - {Object}
options
: 额外的配置信息- {number}
options.radius
: 半径 单位米 默认 300 米 - {number}
options.height
: 垂直高度 单位米 默认 500 - {number}
options.circleHeight
: 圆环的高度 单位米 默认 10 - {number}
options.circleOffset
: 圆环之间的间距 单位米 默认 20 - {number}
options.speed
: 动画的速度 默认 0.3 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- {YY.LngLat | Array}
- 返回值:
Wifi
js
const DEFAULTOPTIONS = {
radius: 300,
h: 500,
circleHeight: 10,
circleOffset: 20,
speed: 0.3,
height: 200,
delay: 3000,
};
// WiFi形状的辐射标志,一般用于辐射表示
wifis = lnglats.map((lnglat) => {
return threeScene.toWifi(
lnglat,
getMaterial(),
YY.Util.extend({}, DEFAULTOPTIONS, {})
);
});
toT(lnglat, options, material)
- 构造 T 型辐射标志
- 参数
- {YY.LngLat | Array}
lnglat
: 经纬度 - {Object}
options
: 额外的配置信息- {number}
options.coneRadius
: 圆锥的半径 单位米 默认 50 - {number}
options.coneHeight
: 圆锥的高度 单位米 默认 30 - {number}
options.sphereRadius
: 球形的半径 单位米 默认 10 - {number}
options.cylinderRadius
: 圆柱的半径 单位米 默认 5 - {number}
options.cylinderHeight
: 圆柱的高度 默认 300 - {number}
options.speed
: 旋转的动画时间 默认 0.1 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- {YY.LngLat | Array}
- 返回值:
T
js
const DEFAULTOPTIONS = {
coneRadius: 50,
coneHeight: 300,
sphereRadius: 30,
cylinderRadius: 5,
cylinderHeight: 300,
speed: 0.05,
};
ts = lnglats.map((lnglat) => {
const t = threeScene.toT(
lnglat,
getMaterial(),
YY.Util.extend({}, DEFAULTOPTIONS, {})
);
t.bindTooltip(YY.H.uuid());
return t;
});
toGlowSphere(lnglat, options, material)
- 构造透明的罩子型标志
- 参数
- {YY.LngLat | Array}
lnglat
: 经纬度 - {Object}
options
: 额外的配置信息- {number}
options.radius
: 半径 单位米 默认 500 - {string}
options.color
: 颜色 默认 0x00ffff - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- {YY.LngLat | Array}
- 返回值:
GlowSphere
js
//构造透明的罩子,一般用于保护,重点脱出等场景下使用
glowSphere = threeScene.toGlowSphere([120.67634557660585, 31.318559038158213], {
radius: 1000,
color: "green",
delay: 3000,
});
glowSphere.bindTooltip("我是透明的罩子");
toFire(lnglat, options)
- 构造火球型标志
- 参数
- {YY.LngLat | Array}
lnglat
: 经纬度 - {Object}
options
: 额外的配置信息- {number}
options.scale
: 缩放的倍数 默认 100 放大 100 倍 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- {YY.LngLat | Array}
- 返回值:
Fire
js
const OPTIONS = {
scale: 30,
height: 100,
};
// 火球 ,消防等场景下可以使用
const fires = lnglats.map((lnglat) => {
const fire = threeScene.toFire(lnglat, OPTIONS);
fire.bindTooltip(YY.H.uuid());
return fire;
});
toBeam(lnglat, options)
- 构造流动的光柱
- 参数
- {YY.LngLat | Array}
lnglat
: 经纬度 - {Object}
options
: 额外的配置信息- {number}
options.height
: 垂直的高度 默认 1000 单位米 - {number}
options.radius
: 柱子的半径 默认 1 单位米 - {number}
options.speed
: 播放的速度 默认 300 - {string}
options.color
: 颜色 默认 white - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- {YY.LngLat | Array}
- 返回值:
Beam
js
// 构造光柱 beam
const mesh = threeScene.toBeam([lng, lat], {
h: 5000 + Math.random() * 5000,
radius: 10,
});
toEffectRing(lnglat, options, material)
- 闪烁的环
- 参数
- {YY.LngLat | Array}
lnglat
: 经纬度 - {Object}
options
: 额外的配置信息- {number}
options.radius
: 半径 默认 200 单位米 - {number}
options.ringWidth
: 环的宽度 默认 10 单位米 - {number}
options.offset
: 环之间的间距 默认 5 单位米 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- {YY.LngLat | Array}
- 返回值:
EffectRing
js
// 渐进的环
const circle = threeScene.toEffectRing([lng, lat], material, {
radius: 200,
ringWidth: 10,
offset: 5,
height: 200,
});
toEffectCircle(lnglat, options, material)
- 波纹的圆
- 参数
- {YY.LngLat | Array}
lnglat
: 经纬度 - {Object}
options
: 额外的配置信息- {number}
options.radius
: 半径 默认 200 单位米 - {number}
options.ringWidth
: 环的宽度 默认 10 单位米 - {number}
options.offset
: 环之间的间距 默认 5 单位米 - {number}
options.speed
: 播放的速度 默认 0.4 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- {YY.LngLat | Array}
- 返回值:
EffectCircle
js
// 构造EffectCircle
const circle = threeScene.toEffectCircle([lng, lat], material, {
radius: 300,
ringWidth: 5,
offset: 20,
height: 200,
speed: 0.2,
});
toRotateSector(lnglat, options, material)
- 旋转的圆锥
- 参数
- {YY.LngLat | Array}
lnglat
: 经纬度 - {Object}
options
: 额外的配置信息- {number}
options.radius
: 半径 默认 200 单位米 - {number}
options.height
: 垂直的高度 默认 100 单位米 - {number}
options.startAngle
: 开始的角度 默认 0 - {number}
options.endAngle
: 结束的角度 默认 120 - {number}
options.speed
: 旋转的速度 默认 0.1 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- {YY.LngLat | Array}
- 返回值:
RotateSector
js
const DEFAULTOPTIONS = {
radius: 200,
h: 100, //垂直高度
startAngle: 0,
endAngle: 200,
speed: 0.1,
height: 300,
delay: 3000,
};
const rotatesector = threeScene.toRotateSector(
lnglat,
getMaterial(),
YY.Util.extend({}, DEFAULTOPTIONS, {
endAngle: 360 * Math.random(),
})
);
toFlag(lnglat, options, material)
- 事件标志物
- 参数
- {YY.LngLat | Array}
lnglat
: 经纬度 - {Object}
options
: 额外的配置信息- {number}
options.radius
: 半径 默认 20 单位米 - {number}
options.height
: 垂直的高度 默认 100 单位米 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- {YY.LngLat | Array}
- 返回值:
Flag
js
const OPTIONS = {
radius: 20,
h: 100,
};
// 事件标志物,一般用于交通事故等标志
flags = lnglats.map((lnglat) => {
const flag = threeScene.toFlag(lnglat, getMaterial(), OPTIONS);
flag.bindTooltip(YY.H.uuid());
return flag;
});
toProgressiveCircle(lnglat, options, material)
- 渐进的圆,闪烁的圆
- 参数
- {YY.LngLat | Array}
lnglat
: 经纬度 - {Object}
options
: 额外的配置信息- {number}
options.radius
: 半径 默认 100 单位米 - {number}
options.speed
: 播放的速度 默认 10 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- {YY.LngLat | Array}
- 返回值:
ProgressiveCircle
js
const OPTIONS = {
radius: 200,
height: 0,
speed: 30,
height: 100,
};
// 渐进的圆
bars = lnglats.map((lnglat) => {
return threeScene.toProgressiveCircle(lnglat, getMaterial(), OPTIONS);
});
toProgressiveHex(lnglat, options, material)
- 渐进的蜂窝
- 参数
- {YY.LngLat | Array}
lnglat
: 经纬度 - {Object}
options
: 额外的配置信息- {number}
options.radius
: 半径 默认 100 单位米 - {number}
options.speed
: 播放的速度 默认 10 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- {YY.LngLat | Array}
- 返回值:
ProgressvieHex
js
const OPTIONS = {
radius: 100,
speed: 30,
height: 100,
};
const material = getMaterial();
// 渐进的蜂窝
bars = lnglats.map((lnglat) => {
return threeScene.toProgressiveHex(lnglat, material, OPTIONS);
});
toProgressiveSphere(lnglat, options, material)
- 渐进的球
- 参数
- {YY.LngLat | Array}
lnglat
: 经纬度 - {Object}
options
: 额外的配置信息- {number}
options.radius
: 半径 默认 100 单位米 - {number}
options.speed
: 播放的速度 默认 10 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- {YY.LngLat | Array}
- 返回值:
ProgressiveSphere
js
const OPTIONS = {
radius: 100,
height: 0,
speed: 30,
};
// 渐进的球
bars = lnglats.map((lnglat) => {
return threeScene.toProgressiveSphere(lnglat, getMaterial(), OPTIONS);
});
toProgressiveBar(lnglat, options, material)
- 渐进的柱子
- 参数
- {YY.LngLat | Array}
lnglat
: 经纬度 - {Object}
options
: 额外的配置信息- {number}
options.radius
: 半径 默认 10 单位米 - {number}
options.height
: 垂直的高度 默认 400 单位米 - {number}
options.speed
: 播放的速度 默认 100 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- {YY.LngLat | Array}
- 返回值:
ProgressiveBar
js
const OPTIONS = {
radius: 30,
h: 1000, //垂直高度
speed: 100,
};
//构造渐进的柱子
bars = lnglats.map((lnglat) => {
return threeScene.toProgressiveBar(lnglat, getMaterial(), OPTIONS);
});
toThumbtack(lnglat, options, material)
- 图钉标志
- 参数
- {YY.LngLat | Array}
lnglat
: 经纬度 - {Object}
options
: 额外的配置信息- {number}
options.sphereRadius
: 球的半径 默认 20 单位米 - {number}
options.cylinderRadius
: 圆柱的半径 默认 5 单位米 - {number}
options.cylinderHeight
: 圆柱的高度 默认 50 单位米 - {number}
options.speed
: 播放的速度 默认 100 - {Blooean}
options.animation
: 是否动画 默认 false - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- {YY.LngLat | Array}
- 返回值:
Thumbtack
js
const DEFAULTOPTIONS = {
sphereRadius: 20,
cylinderRadius: 5,
cylinderHeight: 500,
speed: 60,
animation: true,
height: 0,
};
// 图钉,主要用于标注
thumbtacks = lnglats.map((lnglat) => {
return threeScene.toThumbtack(
lnglat,
getMaterial(),
YY.Util.extend({}, DEFAULTOPTIONS, {
cylinderHeight: Math.random() * 500,
})
);
});
toCircle(lnglat, options, material)
- 圆
- 参数
- {YY.LngLat | Array}
lnglat
: 经纬度 - {Object}
options
: 额外的配置信息- {number}
options.radius
: 半径 默认 100 单位米 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- {YY.LngLat | Array}
- 返回值:
Circle
js
// 构造圆
const circle = threeScene.toCircle([lng, lat], material, {
radius: 100,
height: 200 * Math.random(),
});
toBillboard(lnglat, options, material)
- 广告牌
- 参数
- {YY.LngLat | Array}
lnglat
: 经纬度 - {Object}
options
: 额外的配置信息- {number}
options.height
: 垂直高度 默认 200 单位米 - {number}
options.offset
: 点和柱子之间的间隔 默认 0 单位米 - {boolean}
options.cylinder
: 是否显示柱子 默认 false - {boolean}
options.animation
: 是否动画 默认 false - {number}
options.speed
: 波动的速度 默认 10 - {number}
options.scale
: 点图标的放大倍数 默认 100,也支持 array ,如 [100,80] - {number}
options.cylinderRadius
: 柱子的半径 默认 2 - {string}
options.cylinderColor
: 柱子的颜色 默认 white - {boolean}
options.notScale
: 是否不要缩放,即地图任何缩放比例下大小一样, 默认 false - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- {YY.LngLat | Array}
- 返回值:
Billboard
js
// 构造广告牌
const billboard = threeScene.toBillboard([lng, lat], material, {
h: 500 + Math.random() * 500,
scale: 1500,
speed: 60,
offset: 10,
cylinder: true,
cylinderRadius: 5,
cylinderColor: "white",
animation: true, //动画
height: 0,
});
billboards.push(billboard);
toHexGrid(bbox, options, material)
- 网格线,网格的格子
- 参数
- {Array}
bbox
: 经纬度范围 例如 [120.66480645187107, 31.300467846011458, 120.71473297736304, 31.336792938894206]; - {Object}
options
: 额外的配置信息- {number}
options.cellSize
: 格子的大小 默认 200 单位米 - {number}
options.lineWidth
: 线的宽度 默认 1 单位像素 - {string }
options.color
: 线的颜色 默认 white - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- {Array}
- 返回值:
HexGrid
js
// 边界
const bbox = [
120.66480645187107, 31.300467846011458, 120.71473297736304, 31.336792938894206,
];
// 构造网格,一般用于网格化管理
hexGrid = threeScene.toHexGrid(bbox, {
cellSize: 300,
lineWidth: 3,
height: 200,
delay: 5000,
});
toCruisingDevice(lnglat, options)
- 飞行器底座,一般和无人机模型联合使用
- 参数
- {YY.LngLat | Array}
lnglat
:经纬度 - {Object}
options
: 额外的配置信息- {number}
options.speed
: 动画的速度 默认 6 - {string }
options.color
: 线的颜色 默认 white - {number}
options.height
: 垂直高度 默认 50 单位米 - {number}
options.radius
: 半径 默认 130 单位米 - {number}
options.pointNumbers
: 线的个数 默认 300 - {number}
options.scale
: 放大的倍数 默认 1 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { [THREE.Material](https://threejs.org/docs/i
- {YY.LngLat | Array}
- 返回值:
CruisingDevice
js
const OPTIONS = {
height: 250,
speed: 6,
color: "#55FF08",
h: 50, //垂直高度
radius: 130,
pointNumbers: 300,
scale: 1,
};
cruisingDevice = threeScene.toCruisingDevice(
map.getCenter(),
YY.Util.extend({}, OPTIONS)
);
// 将无人机加载到飞行器
cruisingDevice.add(drone);
const pointLight = getPointLight();
// 将点光源加载到飞行器
cruisingDevice.add(pointLight);
toEffectWave(lnglat, options)
- 闪烁的光环
- 参数
- {YY.LngLat | Array}
lnglat
:经纬度 - {Object}
options
: 额外的配置信息- {number}
options.radius
: 半径 默认 400 单位米 - {number}
options.speed
: 动画的速度 默认 80 - {string }
options.color
: 颜色 默认 white - {number}
options.intensity
: 灯光的强度 默认 10 - {number}
options.intensityRadius
: 灯光的辐射半径 默认 200 - {number}
options.pointNumbers
: 点光源的个数 默认 30 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- {YY.LngLat | Array}
- 返回值:
EffectWave
js
const location = [120.66218943510626, 31.3092163677492];
// 相关参数配置
const OPTIONS = {
radius: 3000,
speed: 100,
height: 100,
color: "white",
intensity: 15, //光的强度
intensityRadius: 500, //光的半径
};
//环形的光
effectWave = threeScene.toEffectWave(location, OPTIONS);
toLogoImage(lnglat, options)
- logo 图片标志物 例如 KFC, 各种银行,商业广场的 logo
- 参数
- {YY.LngLat | Array}
lnglat
:经纬度 - {Object}
options
: 额外的配置信息- {number}
options.width
: 图片的宽度 单位米 默认 30 - {number}
options.height
: 图片的高度 单位米 默认 30 - {string}
options.image
: 图片的地址 默认 null,这个为必须参数 - {number}
options.rotation
: 旋转的弧度 默认 0 范围为[-Math.PI,Math.PI] - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- {YY.LngLat | Array}
- 返回值:
LogoImage
js
const options = {
w: 50,
h: 50,
height: 10,
image: PATH + "images/星巴克logo.png",
rotation: 0,
delay: 5000,
};
const logoImages = data.map((element) => {
const { rotation, height, image, size } = element;
logoImage = threeScene.toLogoImage(
element.lnglat,
YY.Util.extend({}, options, {
rotation,
height,
image,
w: size,
h: size,
})
);
return logoImage;
});
toRingParticle(lnglat, options)
- 环形粒子
- 参数
- {YY.LngLat | Array}
lnglat
:经纬度 - {Object}
options
: 额外的配置信息- {number}
options.radius
: 半径 单位米 默认 1000 - {number}
options.rings
: 环的个数 默认 3 - {number}
options.offset
: 环和环之间的间隔 单位米 默认 100 - {number}
options.size
: 粒子点的大小 单位像素 默认 5 - {string}
options.color
: 粒子点颜色 默认 white - {boolean}
options.gradation
: 粒子是否渐变 默认 false - {number}
options.pointNumbers
: 每个环的粒子数目 默认 100 - {number}
options.speed
: 动画的速度 默认 1 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- {YY.LngLat | Array}
- 返回值:
RingParticle
js
const DEFAULTOPTIONS = {
height: 200,
radius: 3000,
rings: 10,
offset: 200,
size: 6,
color: "white",
gradation: true,
pointNumbers: 200,
speed: 1,
delay: 4000,
};
const lnglat = [120.69278108253127, 31.313930282720406];
//环形的粒子
ringparticle = threeScene.toRingParticle(lnglat, DEFAULTOPTIONS);
toRedar(lnglat, options)
- 雷达粒子
- 参数
- {YY.LngLat | Array}
lnglat
:经纬度 - {Object}
options
: 额外的配置信息- {number}
options.radius
: 半径 单位米 默认 1000 - {number}
options.rings
: 环的个数 默认 3 - {number}
options.offset
: 环和环之间的间隔 单位米 默认 100 - {number}
options.size
: 粒子点的大小 单位像素 默认 5 - {string}
options.color
: 粒子点颜色 默认 white - {string}
options.bgColor
: 背景粒子颜色 默认 white - {boolean}
options.gradation
: 粒子是否渐变 默认 false - {number}
options.pointNumbers
: 每个环的粒子数目 默认 100 - {number}
options.speed
: 动画的速度 默认 1 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- {YY.LngLat | Array}
- 返回值:
Redar
js
const DEFAULTOPTIONS = {
height: 300,
radius: 600, //半径
offset: 50, //间隔
size: 5, //点的大小
color: "red",
bgColor: "white",
gradation: true,
speed: 1,
pointNumbers: 100,
delay: 3000, //延迟动画时间
};
const lnglat = [120.6767716784359, 31.316849224423578];
// 雷达粒子
redar = threeScene.toRedar(lnglat, DEFAULTOPTIONS);
toCloudParticle(lnglat, options)
- 粒子云
- 参数
- {YY.LngLat | Array}
lnglat
:经纬度 - {Object}
options
: 额外的配置信息- {number}
options.scale
: 放大的倍数 默认 10 - {string}
options.color
: 粒子点颜色 默认 white - {number}
options.pointNumbers
: 粒子数目 默认 200 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- {YY.LngLat | Array}
- 返回值:
CloudParticle
js
// 构造粒子云
const cloudparticle = threeScene.toCloudParticle([lng, lat], {
height: 600 * Math.random(),
color: YY.randomColor(),
scale: 50, //放大的倍数
});
toEffectLight(lnglat, options)
- 闪烁的灯光
- 参数
- {YY.LngLat | Array}
lnglat
:经纬度 - {Object}
options
: 额外的配置信息- {number}
options.radius
: 半径 单位米 默认 200 - {string}
options.color
: 颜色 默认 white - {number}
options.intensity
: 光照的强度 默认 10 - {number}
options.speed
: 动画的速度 默认 30 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- {YY.LngLat | Array}
- 返回值:
EffectLight
js
const effectlights = [];
lnglats.forEach((d) => {
//EffectLight
const effectlight = threeScene.toEffectLight(d, {
color: YY.randomColor(), //颜色
radius: 200, //半径
intensity: 100, //灯光强度
speed: 50,
height: 100,
});
effectlights.push(effectlight);
});
toUpElevator(lnglat, options, material)
- 升降梯
- 参数
- {YY.LngLat | Array}
lnglat
:经纬度 - {Object}
options
: 额外的配置信息- {number}
options.height
: 垂直高度 单位米 默认 500 - {number}
options.speed
: 动画的速度 默认 10 - {number}
options.offset
: 环之间的间隔 单位米 默认 100 - {number}
options.lineWidth
: 环的宽度 单位米 默认 10 - {number}
options.rotation
: 旋转的弧度 默认 0 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- {THREE.Material}
material
:材质
- {YY.LngLat | Array}
- 返回值:
UpElevator
)
js
const OPTIONS = {
h: 500,
speed: 10,
offset: 40,
radius: 100,
lineWidth: 5,
};
ups = lnglats.map((lnglat) => {
const material = getMaterial(YY.randomColor());
// 升降梯,用于对某个物体进行保护等
return threeScene.toUpElevator(
lnglat,
material,
YY.Util.extend({}, OPTIONS, {})
);
});
toText(lnglat, options)
- 文字标注
- 参数
- {YY.LngLat | Array}
lnglat
:经纬度 - {Object}
options
: 额外的配置信息- {number}
options.size
:字体的大小 默认 50 - {number}
options.height
: 字体的高度 默认 1 - {Font}
options.font
: 字体库 默认 null,例如微软雅黑 - {string}
options.color
: 字体的颜色 默认 white - {string}
options.name
: 字体名字 默认 GEOV-GL - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- {YY.LngLat | Array}
- 返回值:
Text
js
const fontLoader = new THREE.FontLoader();
// 字体加载器
fontLoader.load(
PATH + "font/helvetiker_regular.typeface.json",
function (font) {
const OPTIONS = {
font: font,
name: "SuZhou",
size: 50,
h: 1,
height: 200,
};
lnglats.forEach((lnglat) => {
// 构造文字
const text = threeScene.toText(lnglat, OPTIONS);
text.bindTooltip("SuZhou");
texts.push(text);
});
threeScene.add(texts);
}
);
toRotateLight(lnglat, options, material)
- 旋转的吊塔灯
- 参数
- {YY.LngLat | Array}
lnglat
: - {Object}
options
: 额外的配置信息- {number}
options.coneRadius
: 圆锥的半径 单位米 默认 50 - {number}
options.coneHeight
: 圆锥的高度 单位米 默认 30 - {number}
options.sphereRadius
: 球形的半径 单位米 默认 10 - {number}
options.cylinderRadius
: 圆柱的半径 单位米 默认 5 - {number}
options.cylinderHeight
: 圆柱的高度 默认 300 - {number}
options.intensity
: 灯光强度 默认 10 - {number}
options.intensityRadius
: 灯光辐射半径 默认 200 - {number}
options.speed
: 旋转的动画时间 默认 0.1 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { THREE.Material}
material
:材质
- {YY.LngLat | Array}
- 返回值:
RotateLight
js
const DEFAULTOPTIONS = {
coneRadius: 20, //圆锥的半径
coneHeight: 200, //圆锥的高度
sphereRadius: 10, //球的半径
cylinderRadius: 5, //圆柱的半径
cylinderHeight: 200, //圆柱的高度
speed: 0.07,
color: "yellow",
intensityRadius: 500, //光照的半径
intensity: 50, //光照的强度
};
//旋转的灯光,吊灯
rotatelights = lnglats.map((lnglat) => {
return threeScene.toRotateLight(
lnglat,
getMaterial(),
YY.Util.extend({}, DEFAULTOPTIONS, {
color: YY.randomColor(),
})
);
});
toMergeMesh(geometry, material, options)
- 合并的 geoemtry,不推荐使用了
- 参数
- { BufferGeometry}
geometry
:合并后的 BufferGeometry,支持多个 BufferGeometry,内部会自动合并 - { THREE.Material}
material
:材质 - {Object}
options
: 额外的配置信息- {String}
toptions.opColor
:顶部颜色,默认 null - {String}
options.bottomColor
:底部颜色 默认 '#2d2f61', - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {String}
- { BufferGeometry}
- 返回值:
MergeMesh
toSimpleText(lnglat, options)
- 简单的文本组件
- 参数
- { YY.LngLat | Array}
lnglat
:经纬度 - {Object}
options
: 额外的配置信息- {String}
options.name
: 内容名字 - {String}
options.color
: 颜色 default '#fff' - {Number}
options.fontSize
: 字体大小 像素 default 12 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {String}
- { YY.LngLat | Array}
- 返回值:
SimpleText
toLabel(lnglat, options)
label 标签
参数
- { YY.LngLat | Array}
lnglat
:经纬度 - {Object}
options
: 额外的配置信息- {string}
options.className
: className 默认空 - {string}
options.cssText
: cssText css 文本 默认空 - {string}
options.content
: content 内容 默认 GEOV-GL - {number}
options.offsetX
:水平偏移量 默认 0 - {number}
options.w
:宽度 默认 80 - {number}
options.h
:高度 默认 30 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {string}
- { YY.LngLat | Array}
返回值:
Label
js
const lnglats = [
[120.67381792020717, 31.319279803106355, 400, "东方之门"],
[120.69803209093459, 31.323653893953548, 50, "文化艺术中心"],
[120.70219553855804, 31.32587826581326, 50, "博览中心"],
];
const labels = [];
lnglats.forEach((lnglat) => {
const height = lnglat.slice(2, 3);
const label = threeScene.toLabel(lnglat.slice(0, 2), {
height,
offsetX: -100,
w: 250,
h: 64,
className: "label",
cssText: `color:white`,
content: lnglat.slice(3, 4),
});
labels.push(label);
});
threeScene.add(labels);
toDom(lnglat, domElement, options)
- html 元素
- 参数
- { YY.LngLat | Array}
lnglat
:经纬度 - {HTMLElement}
domElement
:dom 节点 - {Object}
options
: 额外的配置信息- {number}
options.scale
:缩放因子,默认 0.1 - {number}
options.alitude
: 海拔 - {boolean}
options.interactive
: 是否可以交互 默认值 true - {number}
options.minZoom
: 最小 zoom 默认 0 - {number}
options.maxZoom
: 最大 zoom 默认 30
- {number}
- { YY.LngLat | Array}
- 返回值:
Dom
js
// dom元素插入到场景中
const lnglat = [120.67586423597459, 31.319049643052466];
const divDom = document.createElement("div");
divDom.style.width = "500px";
divDom.style.height = "500px";
divDom.style.border = "1px solid white";
divDom.style.backgroundColor = "rgba(0,0,0,0.5)";
// divDom.style.backgroundColor = 'white';
domObject = threeScene.toDom(lnglat, divDom, {
scale: 0.004,
height: 100,
});
threeScene.add(domObject);
domObject.rotation.x = Math.PI / 2;
domObject.rotation.y = -1.7242848078381912;