【超图】SuperMap如何使知识图谱与BIM数据的绑定

作者:taco

        近两年知识图谱的概念突然大火了起来,随之而来的就是用户的各种需求,你们的知识图谱能干什么呢?知识图谱有哪些应用呢?在结合客户的一些需求,以及自身的一些想法,写下这篇文章。

一、SuperMap iDesktopX 如何使用知识图谱

        在SuperMap iDesktopX产品中,目前支持了两种数据库创建知识图谱(Yukon、Neo4j)。本篇文章以Neo4j图数据库进行讲解。

        1.1 安装Neo4j

        Neo4j是一款图数据库管理系统,采用图形结构存储数据,支持高效的图形查询和图形分析。它提供了直观易用的界面和高效的计算引擎,支持多种数据输入格式和结果输出格式,同时提供了可视化的结果展示界面。

        关于Neo4j图数据的下载可以在官网中下载(Neo4j Graph Database & Analytics | Graph Database Management System),当然也可以通过一些其他途径下载。后面我会把我这里的图库安装包放到资源中供大家下载使用。

在下载的版本选择中大家需要注意Neo4j与JDK有版本对应(Neo4j 4版本需要对应jdk11,3版本需要对应jdk1.8)

        将图库解压到本地文件后,需要在本地的环境变量中配置该数据库环境。

        新建NEO4J_HOME,并设置为解压路径,同时在path路径中添加%NEO4J_HOME%\bin

       

        1.2 启动Neo4j 

        在图数据库bin目录中直接启动命令行工具(cmd)。

并在命令行中输入下方命令

neo4j install-service

完成service的安装。安装成功后输入

 neo4j start

即可启动neo4j图数据库。我们通过浏览器访问http://localhost:7474可打开neo4j的图形化界面

        1.3 SuperMap iDesktopX链接数据库

        目前11.1.1版本iDesktopX已支持知识图谱可在官网中进行下载。(SuperMap技术资源中心|为您提供全面的在线技术服务)

        下载完成后,打开iDesktopX产品,在【开始】导航栏中,找到图谱进行链接。

        连接完成后,导航栏跳转至知识图谱界面。在该界面,我们可以【创建实体】、【构建关系】、查看【图谱结构】等操作。

        1.4 创建实体对象

        我们将BIM数据的数据源打开,由于目前不支持模型数据集直接创建实体对象。所以需要将模型数据集转成表数据集。

        右键模型数据集【浏览属性表】->【Ctrl+A】全选数据->右键【另存为数据集】,修改【结果数据集类型】为属性表,并选择需要字段。完成后我们得到需要的表数据集。

         将多(单)个模型数据集转为表数据集后,使用【知识图谱】-【创建实体】功能进行创建。

此时在标签字段中选择需要图谱中展示的字段,也就是圆圈中显示的字段。在包含字段中选择需要存储的字段。由于属性表为非空间对象,此处【包含空间对象】可以去掉勾选。

 

        创建完成后,我们即可在【图谱管理器】列表中查看到实体对象创建完成。右键实体可将其添加至新的图谱页面中展示。

        

        1.5 创建实体关系

        在构建实体关系前,我们需要知道有哪些构建的方式。其中空间关系包括了【包含、被包含、相交、邻接】非空间关系包括了【字段连接、关联匹配】

        由于我们使用的是属性表进行连接的。所以此处我们需要选择字段进行连接。但是跟谁去连接呢?如何关联属性呢。如果在实际的项目中,则需要根据真实的连接表的相同字段进行连接。

这里我们创建一个假的关联表来管理。用buildtype字段与每一个图层的类别去做关联。

         此处填写我们创建的字段对应好关系即可。

 

        完成创建后我们就得到了包含关系的图谱。此处我也将bim与components构建进行了关联,大家可以自行构建。构建结果如下图。

        1.6 保存知识图谱

        【Ctrl + S】保存知识图谱至图谱列表下。并自定义其命名。保存本地工作空间到所需目录下,我们至此创建图谱的过程就完成了。

        二、发布及关联图谱

        2.1 发布知识图谱服务

        打开SuperMap iServer 产品,进行服务的发布处理。选择【发布服务】,数据源选择【文件型工作空间】找到本地工作空间文件。

        服务列表中选择知识图谱服务进行发布即可。

 

         发布完成后我们可以通过for openlayers3的方式进行预览。

        2.2 获取节点信息

        在官方的示例代码中(https://iclient.supermap.io/examples/leaflet/editor.html#knowledgeGraphMap2),仅提供了加载的方式,并没有提供如何去获取每一个节点的信息。为了达到与三维的绑定。需要想办法实现节点的获取。此时我们唯一的办法就是看文档!看文档!看文档!

         官网示例中图层的数据加载后我们我们是可以直接拿到map的,但是map中的graph实例是没有办法获取的。主要原因还是由于代码执行顺序问题,此时需要一个loaded方法进行回调才可以获取到。

			const graphmap = new L.supermap.GraphMap(
				'http://localhost:8090/iserver/services/knowledgeGraph-BIMbuilding/restjsr/graph/graphmaps/bimtp');
			console.log("graphmap===============", graphmap)

			graphmap.on('loaded', function() {
				let graph = graphmap.graph;
				console.log("graph===============", graph)
			});

        获取到graph实例后,图谱与其他类型的二维图层是一样的都是可以直接绑定到click事件。

此时我们添加graph.on('click', getattHandler)事件去给图谱中的每一节点添加点击的任务。

当我们添加完成点击事件后,那么属性信息又都存储在哪里了呢?每个节点的属性信息可以在item中找到其feature.properties。点击获取节点信息事件完整代码如下

			var getattHandler = function(e) {
				console.log("e============", e)
				let item = e.item;
				console.log("item==========", item)
				let feature = item._cfg.model;
				console.log("feature==========", feature)
				let featureProperites = feature.properties;
				console.log("featureProperites==========", featureProperites)
			}

        上述代码即可实现二维属性的点击。

        2.3 与三维数据绑定

        本示例中使用超图自主客户端产品iClient3D for Webgl ,在绑定之前我们需要打开我们的场景。加载我们所需的三维数据。

var viewer = new SuperMap3D.Viewer('myearth');
			let scene = viewer.scene;
			var color = new SuperMap3D.Color.fromCssColorString("rgba(23,92,239,0.5)");
			var promise = scene.open("http://www.supermapol.com/realspace/services/3D-BIMbuilding-2/rest/realspace");
			SuperMap3D.when(promise, function(layers) {
				console.log("=====暂时没啥操作")
				bdlayer = scene.layers.find('BIMbuilding');
				bdlayer.setQueryParameter({
					url: "http://www.supermapol.com/realspace/services/data-BIMbuilding/rest/data",
					dataSourceName: "BIMBuilding",
					isMerge: true
				});
				bdlayer.datasetInfo().then(function(result) {
					list = result;
					console.log(list)
				});

        由于我们属性信息是由三维数据提取出来的。在不更改属性表的前提下,smid与原始三维数据是一致的。所以我们直接将smid传入图层中。即可实现与三维场景中模型的绑定。但是由于场景(图谱)中不仅是构建的属性,我们还需要通过一些特殊的属性来进行区分。做不同的功能。

        本示例给出一些简单的方法来创建根据不同属性,控制颜色及显隐信息,大家可作为参考。

				if (featureProperites["buildtype"] != undefined) {
					var ids = [];
					for (var i = 0; i < list.length; i++) {
						if (list[i].datasetName == featureProperites["buildtype"]) {
							ids = range(list[i].startID, list[i].endID);
							break;
						}
					}
					if (ids.length > 0) {
						bdlayer.removeAllObjsColor();
						bdlayer.setObjsVisible(ids, true);
					}else{
						bdlayer.visible = false;	
					}


				} else {
					var bimid = [];
					bimid.push(featureProperites["SmID_1"])
					bdlayer.setObjsColor(bimid, color)
					bdlayer.setObjsVisible(bimid, true)
				}

        2.4 效果展示

        

知识图谱与bim数据绑定

        

        

        

 

         

        

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/467272.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【涨薪技术】0到1学会性能测试 —— 参数化关联

前言 上一次推文我们分享了性能测试工作原理、事务、检查点&#xff01;今天给大家带来性能测试参数化&#xff0c;检查点知识&#xff01;后续文章都会系统分享干货&#xff0c;带大家从0到1学会性能测试&#xff0c;另外还有教程等同步资料&#xff0c;文末免费获取~ 01、性…

类和对象-1

文章目录 面向过程和面向对象的概念类的引入访问限定符类的大小this指针 面向过程和面向对象的概念 面向过程是一种按照步骤顺序执行的编程方式&#xff0c;而面向对象则是以对象为中心&#xff0c;将数据和操作封装在一起。在面向对象编程中&#xff0c;可以通过定义类和对象来…

stm32-模拟数字转化器ADC

接线图&#xff1a; #include "stm32f10x.h" // Device header//1: 开启RCC时钟&#xff0c;包括ADC和GPIO的时钟//2&#xff1a;配置GPIO将GPIO配置为模拟输入模式//3&#xff1a;配置多路开关将左边的通道接入到规则组中//4&#xff1a;配置ADC转…

zookeeper安装配置

zookeeper是什么 ZooKeeper是一个分布式的&#xff0c; 开放源码的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;是 ​​​​​​​Hadoop和Hbase的重要组件。它是一个为​​​​​​​分布式应用提供一致性服务的软件&#xff0c;提供的功能…

redis学习-Set集合类型相关命令及特殊情况分析

目录 1. sadd key value1 value2 ... 2. smembers key 3. sismember key value 4. scard key 5. srem key value1 value2 ... 6. srandmember key num 7. spop key num 8. smove key1 key2 value 9. sdiff key1 key2 key3 ... 10. sinter key1 key2 ... 11. sunion key1 key2 .…

mybatis缓存(学习笔记17)

1、什么是缓存&#xff1a;存在内存中的临时数据 将用户经常查询的数据放在缓存&#xff08;内存&#xff09;中&#xff0c;用户去查询数据就不用从磁盘&#xff08;关系数据库数据文件&#xff09;查询&#xff0c;从缓存中查询&#xff0c;从而提高查询效率&#xff0c;解决…

分析云星空数据用奥威-金蝶BI,快且直观

财务指标计算难&#xff0c;数量太大&#xff0c;报表需求太多&#xff0c;报表根本做不完&#xff1f;如果云星空用户遇到这种情况&#xff0c;建议用奥威-金蝶BI方案。预设分析模型和BI报表&#xff0c;注册、下载并执行方案&#xff0c;立得200多张BI数据可视化分析报表&…

MS16_016 漏洞利用与安全加固

文章目录 环境说明1 MS16_016 简介2 MS16_016 复现过程3 MS16_016 安全加固 环境说明 渗透机操作系统&#xff1a;kali-linux-2024.1-installer-amd64漏洞复现操作系&#xff1a;cn_windows_7_professional_with_sp1_x64_dvd_u_677031 1 MS16_016 简介 MS16_016 漏洞产生的原因…

【题目】【网络系统管理】2022年甘肃省职业院校技能大赛-网络构建-试卷

极安云科专注职业教育技能竞赛培训4年&#xff0c;包含信息安全管理与评估、网络系统管理、网络搭建等多个赛项及各大CTF模块培训学习服务。本团队基于赛项知识点&#xff0c;提供完整全面的系统性理论教学与技能培训&#xff0c;成立至今持续优化教学资源与讲师结构&#xff0…

代码随想录刷题day27|组合总和II组合总和II分割回文串

文章目录 day27学习内容一、组合总和-所选数字可重复1.1、代码-正确写法1.1.1、为什么递归取的是i而不是i1呢&#xff1f; 二、组合总和II-所选数字不可重复2.1、和39题有什么不同2.2、思路2.2.1、初始化2.2.2、主要步骤2.2.3、回溯函数 backTracking 2.3、正确写法12.3.1、为什…

NB-IoT模块

目录 一. NB-IoT模块实物图 二. BC20/NB-IoT模块产品规格 三. 指令顺序 1. AT判断BC20模组是否正常 2. ATE0返回OK&#xff0c;已经返回回显 3. ATCSQ 4. AT_CEREG? 5. ATCGATT? 6. ATCGATT? 四. OneNet 连接 1. AT 查看 NB(当前NB)&#xff0c;云平台根据这两个…

【全网最详细】ComfyUI下,Insightface安装指南-聚梦小课堂

&#x1f96e;背景 ComfyUI下使用IP-adapter下的faceID模型的时候&#xff0c;大家可能会遇到如下错误&#xff1a; Error occurred when executing InsightFaceLoader: No module named insightface File "F:\ComfyUI-aki\execution.py", line 151, in recursive_…

寻找可能认识的人

给一个命名为&#xff1a;friend.txt的文件 其中每一行中给出两个名字&#xff0c;中间用空格分开。&#xff08;下图为文件内容&#xff09; 题目&#xff1a;《查找出可能认识的人 》 代码如下&#xff1a; RelationMapper&#xff1a; package com.fesco.friend;import or…

【mysql】聚簇索引和非聚簇索引(B树和B+树)

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: mysql 目录 一、索引分类 二、索引的数据结构 2.1 B树&#xff1a;改造二叉树 2.2 B树&#xff1a;改造B树 三、Mysql索引实现—InnoDB引擎 3.1 主键索引&#xff08;聚簇索引&#xff09; 3.2 …

在Python中执行分位数回归

线性回归被定义为根据给定的变量集构建因变量和自变量之间关系的统计方法。在执行线性回归时&#xff0c;我们对计算响应变量的平均值感到好奇。相反&#xff0c;我们可以使用称为分位数回归的机制来计算或估计响应值的分位数&#xff08;百分位数&#xff09;值。例如&#xf…

每日OJ题_牛客HJ12 字符串反转(IO型OJ)

目录 牛客HJ12 字符串反转 解析代码 牛客HJ12 字符串反转 字符串反转_牛客题霸_牛客网 解析代码 #include <iostream> using namespace std; int main() {string str "";cin >> str;int left 0, right str.size() - 1;while (left < right){ch…

Python——字典

一、字典特性介绍 字典在 Python 中极为重要&#xff0c;是属于映射类型的数据结构。 字典有⼀对⼉⼤括号组成 {} , 字典内的元素都是成对⼉出现的 {"a":1} , 他们⽤英⽂的冒号( : )隔开, 左边叫做键(key),右边的叫值(value), 通常叫做键值对⼉。 每个元素⽤英⽂的逗…

Java项目:62 基于ssm的校园驿站管理系统+jsp

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 管理员管理快递仓库信息&#xff0c;管理待发货信息&#xff0c;管理已收快递&#xff0c;管理物流以及留言信息&#xff0c;管理员工和用户资…

PSCA复位控制集成之复位管理

电源模式转换 进入任何使域中的组件变为非功能性的电源模式的关键要求是确保静止状态。与其他电源域的所有未完成交互&#xff0c;如总线事务&#xff0c;必须已经完成&#xff0c;并且组件必须保持静止状态&#xff0c;而不管其边界的活动如何。 在支持的情况下&#xff0c;…

新克隆的项目对IDEA配置进行哪些配置(超详细)

大家有没有遇到和我一样的这种情况&#xff0c;每次克隆一个新新项目&#xff0c;代码都是飘红&#xff0c;依赖找不到&#xff0c;项目没法运行。然后就是对idea一通设置&#xff0c;我基本都是胡乱搞一通&#xff0c;也不知道哪些设置起作用了&#xff0c;反正是最后搞半天项…