矢量数据 是用经度、纬度、高度坐标来表示地图图形或地理实体位置的数据,一般是通过记录坐标的方式来尽可能将地理实体的空间位置表现的准确无误,常见的矢量数据有:点、线、面、体等格式。
平台对Cesium矢量数据和平台自身扩展开发的矢量对象都做了梳理及统一对外接口的封装,这样使用更加简单易用、对开发人员更友好、开发效率高。
平台的所有矢量数据类都继承于BaseGraphic类 (opens new window),矢量数据类均在mars3d.graphic.*
命名空间下面。矢量数据清单请访问GraphicType类(opens new window)
下面我们演示创建一个矢量数据对象 ,并调用layer.addGraphic添加到图层上。
//创建矢量数据图层 let graphicLayer = new mars3d.layer.GraphicLayer() map.addLayer(graphicLayer) //加载数据到矢量图层 let graphic = new mars3d.graphic.LabelEntity({ position: new mars3d.LatLngPoint(116.1, 31.0, 1000), style: { text: 'Mars3D三维可视化平台', font_size: 25, color: '#003da6', }, }) graphicLayer.addGraphic(graphic)
矢量数据 由 坐标、样式、属性 3部分组成构成
构成 | mars3d属性名 | 说明 |
---|---|---|
坐标 | position 或 positions | 地理位置,如经度、纬度、高度(三维GIS中) 构成 |
样式 | style | 表现形式,如图标图片、线条样式、填充色、文字样式等 |
属性 | attr | 除经纬度信息之外的关联信息,如名称、地址、电话、面积、长度、备注等 |
可以通过图层的graphicLayer.addGraphic(graphic)
和 graphicLayer.removeGraphic(graphic)
方法来控制矢量数据的加载和删除。
在矢量数据本身也有graphic.addTo (graphicLayer)
和graphic.remove ()
2个方法支持添加或移除矢量数据。
目前平台内的矢量数据分为四大类:
Entity API 的主要目的是定义一组高级对象,它们把可视化和信息存储到统一的数据结果中,这个对象叫Entity。 它让我们更加关注我们的数据展示而不是底层的可视化机制。它提供了很方便的创建复杂的与静态数据相匹配的随时间变化的可视化效果。Entity内部也是使用了Primitive,它的实现细节,我们无需关心, Entity暴露一些一致性的、容易去学习和使用的接口。
Entity矢量对象特点:
目前Entity常用类型包括:
类型名 | 说明 | 对应的矢量数据类 | 坐标参数 | style样式参数 |
---|---|---|---|---|
label | 文本点 | mars3d.graphic.LabelEntity(opens new window) | position 单个坐标 | style参数清单(opens new window) |
point | 像素点 | mars3d.graphic.PointEntity(opens new window) | position 单个坐标 | style参数清单(opens new window) |
billboard | 图标点 | mars3d.graphic.BillboardEntity(opens new window) | position 单个坐标 | style参数清单(opens new window) |
model | gltf小模型 | mars3d.graphic.ModelEntity(opens new window) | position 单个坐标 | style参数清单(opens new window) |
plane | 平面 | mars3d.graphic.PlaneEntity(opens new window) | position 单个坐标 | style参数清单(opens new window) |
box | 盒子 | mars3d.graphic.BoxEntity(opens new window) | position 单个坐标 | style参数清单(opens new window) |
circle | 圆、圆柱 | mars3d.graphic.CircleEntity(opens new window) | position 单个坐标 | style参数清单(opens new window) |
ellipse | 椭圆、椭圆柱 | mars3d.graphic.EllipseEntity(opens new window) | position 单个坐标 | style参数清单(opens new window) |
cylinder | 圆锥、圆柱 | mars3d.graphic.CylinderEntity(opens new window) | position 单个坐标 | style参数清单(opens new window) |
coneTrack | 圆锥追踪体 | mars3d.graphic.ConeTrack(opens new window) | position 单个坐标 | style参数清单(opens new window) |
ellipsoid | 球体 | mars3d.graphic.EllipsoidEntity(opens new window) | position 单个坐标 | style参数清单(opens new window) |
polyline | 线 | mars3d.graphic.PolylineEntity(opens new window) | positions 多个坐标 | style参数清单(opens new window) |
polylineVolume | 管道 | mars3d.graphic.PolylineVolumeEntity(opens new window) | positions 多个坐标 | style参数清单(opens new window) |
path | 路径 | mars3d.graphic.PathEntity(opens new window) | positions 多个坐标 | style参数清单(opens new window) |
corridor | 走廊 | mars3d.graphic.CorridorEntity(opens new window) | positions 多个坐标 | style参数清单(opens new window) |
wall | 墙 | mars3d.graphic.WallEntity(opens new window) | positions 多个坐标 | style参数清单(opens new window) |
polygon | 面 | mars3d.graphic.PolygonEntity(opens new window) | positions 多个坐标 | style参数清单(opens new window) |
rectangle | 矩形 | mars3d.graphic.RectangleEntity(opens new window) | positions 多个坐标 | style参数清单(opens new window) |
更多请参考 矢量数据类型(opens new window)
Primitive API 的主要目的是为了完成(可视化)任务的最少的抽象需求。它很强大又很灵活,要求我们以一个图形开发者的方式去思考,并且使用了一些图形学术语。它是为了最高效最灵活的实现可视化效果,忽略了API的一致性。他们每种都有自己的独特的性能提升方式,也需要遵守不同的优化原则。
Primitive方式更接近渲染引擎底层,需要理解Primitive API参数时需要您已有WebGL知识储备,建议先学习下《WebGL编程指南》,Primitive由两个部分组成:
使用Primitive具有以下优势:
同时,具有以下劣势:
目前Primitive常用以下类型:
类型名 | 说明 | 对应的矢量数据类 | 坐标参数 | style样式参数 |
---|---|---|---|---|
labelP | 文本点 | mars3d.graphic.LabelPrimitive(opens new window) | position 单个坐标 | style参数清单(opens new window) |
pointP | 像素点 | mars3d.graphic.PointPrimitive(opens new window) | position 单个坐标 | style参数清单(opens new window) |
billboardP | 图标点 | mars3d.graphic.BillboardPrimitive(opens new window) | position 单个坐标 | style参数清单(opens new window) |
modelP | gltf小模型 | mars3d.graphic.ModelPrimitive(opens new window) | position 单个坐标 | style参数清单(opens new window) |
planeP | 平面 | mars3d.graphic.PlanePrimitive(opens new window) | position 单个坐标 | style参数清单(opens new window) |
boxP | 盒子 | mars3d.graphic.BoxPrimitive(opens new window) | position 单个坐标 | style参数清单(opens new window) |
circleP | 圆、圆柱 | mars3d.graphic.CirclePrimitive(opens new window) | position 单个坐标 | style参数清单(opens new window) |
cylinderP | 圆锥、圆柱 | mars3d.graphic.CylinderPrimitive(opens new window) | position 单个坐标 | style参数清单(opens new window) |
frustum | 四棱锥体 | mars3d.graphic.FrustumPrimitive(opens new window) | position 单个坐标 | style参数清单(opens new window) |
ellipsoidP | 球体 | mars3d.graphic.EllipsoidPrimitive(opens new window) | position 单个坐标 | style参数清单(opens new window) |
polylineP | 线 | mars3d.graphic.PolylinePrimitive(opens new window) | positions 多个坐标 | style参数清单(opens new window) |
polylineVolumeP | 管道 | mars3d.graphic.PolylineVolumePrimitive(opens new window) | positions 多个坐标 | style参数清单(opens new window) |
corridorP | 走廊 | mars3d.graphic.CorridorPrimitive(opens new window) | positions 多个坐标 | style参数清单(opens new window) |
wallP | 墙 | mars3d.graphic.WallPrimitive(opens new window) | positions 多个坐标 | style参数清单(opens new window) |
polygonP | 面 | mars3d.graphic.PolygonPrimitive(opens new window) | positions 多个坐标 | style参数清单(opens new window) |
rectangleP | 矩形 | mars3d.graphic.RectanglePrimitive(opens new window) | positions 多个坐标 | style参数清单(opens new window) |
modelCombine | gltf小模型(数据集) | mars3d.graphic.ModelCombine(opens new window) | instances数组 | style参数清单(opens new window) |
polygonCombine | 大数据面(数据集) | mars3d.graphic.PolygonCombine(opens new window) | instances数组 | style参数清单(opens new window) |
更多请参考 矢量数据类型(opens new window)
这类实际不是真正的矢量数据对象,由Div构成的DOM对象在页面中展示,在与地图位置进行联动。
类型名 | 说明 | 对应的矢量数据类 | 坐标参数 | style样式参数 |
---|---|---|---|---|
div | DIV点 | mars3d.graphic.DivGraphic(opens new window) | position 单个坐标 | style参数清单(opens new window) |
divLightPoint | 动画的扩散div点 | mars3d.graphic.DivLightPoint(opens new window) | position 单个坐标 | style参数清单(opens new window) |
divUpLabel | 竖立的文本DIV点 | mars3d.graphic.DivUpLabel(opens new window) | position 单个坐标 | style参数清单(opens new window) |
divBoderLabel | 动态边框文本DIV点 | mars3d.graphic.DivBoderLabel(opens new window) | position 单个坐标 | style参数清单(opens new window) |
除了上面介绍的3类,还有一些其他如如粒子、视频融合 等对象,具体可以参考功能示例 (opens new window)和 矢量数据类型清单 (opens new window)来了解和学习。
前面我们讲到了平台对所有矢量数据 (opens new window)做了统一风格的对外接口的封装,都继承于BaseGraphic类 (opens new window),这样使用更加简单易用、对开发人员更友好、开发效率高。并且参数属性和方法均一致。
矢量数据均支持事件的绑定、解绑、触发等统一的事件机制,例如:
graphic.on(mars3d.EventType.click, function (event) { console.log("您单击了矢量对象", event); });
graphic矢量数据 (opens new window)对象上可以操作的常用方法控件相关操作方法有:
//Popup相关 graphic.hasPopup() //是否存在Popup绑定 graphic.bindPopup(content, options) //绑定鼠标单击对象后的弹窗。 graphic.unbindPopup() //解除绑定的鼠标单击对象后的弹窗。 graphic.openPopup(position) //打开Popup弹窗 graphic.closePopup()//关闭弹窗 //Tooltip相关 graphic.hasTooltip() //是否存在Tooltip绑定 graphic.bindTooltip(content, options) //绑定鼠标移入对象后的弹窗。 graphic.unbindTooltip() //解除绑定的鼠标移入对象后的弹窗。 graphic.openTooltip(position) //打开Tooltip弹窗 graphic.closeTooltip()//关闭Tooltip弹窗 //SmallTooltip相关 graphic.openSmallTooltip(position, message) //显示小提示窗,一般用于鼠标操作的提示。 graphic.closeSmallTooltip()//关闭小提示窗 //右键菜单相关 graphic.hasContextMenu() //是否有绑定的右键菜单 graphic.getContextMenu() //获取绑定的右键菜单数组 graphic.bindContextMenu(content, options) //绑定地图的默认右键菜单 graphic.unbindContextMenu() //解除绑定的右键菜单 graphic.openContextMenu(position, options) //打开右键菜单 graphic.closeContextMenu() //关闭右键菜单
在大部分矢量数据的style属性中支持highlight
参数,该参数支持的值与本身的style是一致的,用于定义鼠标单击或移入后高亮显示的样式。
let graphic = new mars3d.graphic.PolygonEntity({ positions: [ [117., 31., 32.1], [117., 31., 28.6], [117., 31., 45.5], ], style: { color: "#00ff00", opacity: 0.5, //高亮时的样式 highlight: { type:mars3d.EventType.click, //默认为鼠标移入,也可以加该参数后单击高亮 opacity: 0.9, }, }, }); graphicLayer.addGraphic(graphic);
并且矢量数据中也有openHighlight方法 (opens new window)、closeHighlight方法 (opens new window)来外部调用按指定样式高亮对象和取消高亮对象。