/**
* 本文介绍了实现知识图谱可视化的技术方案,主要分为两个图层实现:
* 1、线图层 不拖动
* 2、点图层 需要拖动
*/
-
线图层 - 负责绘制静态连接线,使用LineString创建线要素并添加到矢量图层;
// 线图层
export function addKnowledgeGraphLinePoint(id) {const layers = map.getLayers().getArray();let layer = layers.find((item) => item.values_.id === id);if (layer) {layer.getSource().clear();} else {layer = new LayerVector({source: new SourceVector({features: "",}),properties: {id: id,},zIndex: 15,});map.addLayer(layer);// 创建矢量对象var lineString = new LineString(data);var lineFeature = new Feature({ geometry: lineString });// 添加到之前的创建的layer中去layer.getSource().addFeature(lineFeature);}addKnowledgeGrapPoint("KnowledgeGrapPoint", lineString);
}
-
点图层 - 实现可拖拽的节点功能,通过Translate交互实现拖动,每个节点使用Point创建要素。两个图层通过坐标数据关联,线图层的坐标由点图层拖动时动态更新。代码展示了图层创建、要素添加和交互绑定的具体实现,使用OpenLayers库完成地图可视化功能。
// 点图层
function addKnowledgeGrapPoint(id, lineString) {const layers = map.getLayers().getArray();let layer = layers.find((item) => item.values_.id === id);let translate;if (layer) {layer.getSource().clear();} else {layer = new LayerVector({source: new SourceVector(),properties: {id: id,},});translate = new Translate({layers: [layer],});map.addLayer(layer);map.addInteraction(translate);}for (let index = 0; index < data.length; index++) {const element = data[index];// 创建矢量对象let feature = new Feature({geometry: new Point(element),properties: { id: "points" + index },});// 添加到之前的创建的layer中去layer.getSource().addFeature(feature);_bindMapEvents(layer, translate, lineString);}
}
可拖拽的节点