在JSP页面如何利用vis.js画出neo4j中的关系图

一、下载文件(js)

<script type="text/javascript" src="../vis.js"></script>
<script type="text/javascript" src="s../jquery.min.js"></script>

二、从数据库中获取查询结果(Servlet)

...
String cql1="MATCH p=(n:`知识点"+cid+"`)-[r:`先序知识"+cid+"`]->(m:`知识点"+cid+"`)                 return {start:id(n),end:id(m),id:id(r),type:type(r)} as p limit 20";

String cql2="MATCH (n:`知识点"+cid+"`) RETURN distinct {id:id(n),name:n.name} as p limit                 20";

分别从cql1和cql2中获取节点和节点之间的关系,在赋值给变量kg1、kg2

三、在前端页面利用js绘出所需图形(JSP)

<body>
....
<div style=" width:100%; height:600px;border: 1px solid lightgray;" id="network_id" class="network"></div><!-- 拓扑图容器-->

.....

<script type="text/javascript" src="../vis.js"></script>
 <script type="text/javascript" src="s../jquery.min.js"></script>
<script>
    
    var network;
    // 创建节点对象
    var nodes;
    var edges;
    var para1=${kg1};
    var para2=${kg2};
    $(function () {
        init();
        //修改初始缩放
        network.moveTo({scale: 1});
        var parama1=para1;
        var param2=para2;
        //createNetwork(p2);
        createNetwork(parama1,param2);
    });
    function init(){
        // 创建节点对象
        nodes = new vis.DataSet([]);
        // 创建连线对象
        edges = new vis.DataSet([]);
        // 创建一个网络拓扑图 
        var container = document.getElementById('network_id');
        var data = {nodes: nodes, edges: edges};
        //全局设置,每个节点和关系的属性会覆盖全局设置
        var options = {
            //节点形状
            nodes:{
                size: 15,
                font:{
                    face:'Microsoft YaHei'
                }
            },
            // 设置关系连线
            edges:{
                font:{
                    face:'Microsoft YaHei'
                }
            },
            //设置节点的相互作用
            interaction: {
                hover: true
            },
            physics: {
                enabled: true,
                barnesHut: {
                    gravitationalConstant: -4000,
                    centralGravity: 0.3,
                    springLength: 120,
                    springConstant: 0.04,
                    damping: 0.09,
                    avoidOverlap: 0
                }
            }
        };
        network = new vis.Network(container, data, options);
        //点击节点触发事件
        network.on("click", function (params) {
            document.getElementById("eventSpanContent").innerText = JSON.stringify(
                params.nodes,
            );

        });
    }
    //扩展
    function createNetwork(param1,param2) {
        //添加节点
        for(var i=0;i<param2.length;i++){
            var node = param2[i];
            nodes.add({
                id: node.id,
                label: node.name,
            });
        }
        //添加关系
        for(var i=0;i<param1.length;i++){
            var edge = param1[i];
            edges.add({
                id: edge.id,
                arrows:'to',
                from: edge.start,
                to: edge.end,
                label:edge.type,
                font:{align:"middle"},
                length:150
            });
        }
    }
</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值