【超图】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数据绑定

        

        

        

 

         

        

        

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL的insert-on-duplicate语句详解

一、insert-on-duplicate语句语法 注意&#xff1a;ON DUPLICATE KEY UPDATE只是 MySQL的特有语法&#xff0c;并不是SQL标准语法&#xff01; INSERT INTO … ON DUPLICATE KEY UPDATE 是 MySQL 中一种用于插入数据并处理重复键冲突的语法。 这个语法适用于在 insert的时候…

抖音直播招聘的主要优势有哪些?

触达广泛受众抖音拥有海量活跃用户,通过直播可以瞬间吸引大量观众关注。相比传统招聘渠道,抖音直播能够触达到更广泛、更多样化的人才群体。 提升品牌形象在直播中,企业可以展现自身独特的企业文化和价值观,增强与观众的互动交流,有助于提升品牌形象和美誉度。 精准招聘定位企业…

Java项目:53 springboot校园管理系统的设计与实现014

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 1、关于校园管理系统的基本要求&#xff1a; &#xff08;1&#xff09;功能要求&#xff1a;可以管理首页、个人中心、院校管理、用户管理、单位类别…

Spirngboot中文乱码解决方案

在使用springboot的时候,如果我们直接在控制器里面返回中文, 则默认可能会是乱码,因为默认的编码是ISO8859-1, 要解决这个问题, 就需要我们通过重写springboot里面的configureMessageConverters方法来将默认的编码设置为utf-8即可解决, 当然你的类文件编码也必须要是utf-8的, …

leetcode-打家劫舍专题系列(动态规划)

198.打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个…

724.寻找数组的中心下标

题目&#xff1a;给你一个整数数组 nums &#xff0c;请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标&#xff0c;其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端&#xff0c;那么左侧数之和视为 0 &#xff0c;因为在下标的左侧不…

SpringBoot(容器功能)

文章目录 1.Configuration 添加/注入bean1.注入bean1.编写一个JavaBean&#xff0c;Monster.java2.创建一个config文件夹&#xff08;名字任意&#xff09;&#xff0c;用于存放配置Bean的类&#xff08;相当于配置文件&#xff09;3.BeanConfig.java4.测试使用 MainApp.java2.…

Regex正则表达式 --java学习笔记

正则表达式 由一些特定字符组成&#xff0c;代表的是一个规则作用一&#xff1a;校验数据格式是否合法作用二&#xff1a;在一段文本中查找满足要求的内容 String提供了一个匹配正则表达式的方法 public boolean matches&#xff08;String regex&#xff08;正则表达式&…

Delft3D建模、水动力模拟方法及在地表水环境影响评价中的技术应用

​任博士&#xff0c;长期从事地表水数值模拟研究与实践工作&#xff0c;具有资深的技术底蕴和专业背景。 1、掌握Delft3D的建模流程&#xff0c;包括基础数据的准备、计算网格的制作、模型的调试与率定、计算结果的处理等&#xff0c;熟悉软件的基本操作。 2、熟悉Delft3D网…

18个惊艳的可视化大屏(第24辑):通讯行业的应用

实时监控&#xff1a; 可视化大屏可以实时监控通讯网络的运行状态和性能指标。通过可视化展示网络的拓扑结构、设备状态、带宽利用率、延迟等数据&#xff0c;运维人员可以及时发现和解决网络故障&#xff0c;保障通讯网络的稳定性和可靠性。 故障诊断与分析&#xff1a; 可视…

YOLOv8 | 有效涨点,添加GAM注意力机制,使用Wise-IoU有效提升目标检测效果(附报错解决技巧,全网独家)

目录 摘要 基本原理 通道注意力机制 空间注意力机制 GAM代码实现 Wise-IoU WIoU代码实现 yaml文件编写 完整代码分享&#xff08;含多种注意力机制&#xff09; 摘要 人们已经研究了各种注意力机制来提高各种计算机视觉任务的性能。然而&#xff0c;现有方法忽视了…

C语言例3-20:使用逻辑运算符的例子

代码如下&#xff1a; #include<stdio.h> int main(void) {int x3, y100;float f11.0f, f22.1f;char cd; //d(100)printf("!x 的值为&#xff1a; %d\n",!x); //0printf("x||y 的值为&#xff1a; %d\n",x||y); //1print…

ai怎么制作ppt?保姆级的ai一键生成ppt教程来了!

面对市面上多如牛毛的 ai 生成 ppt 软件&#xff0c;哪一款更适合日常使用呢&#xff1f;与此同时&#xff0c;在选定一款 ai 软件后&#xff0c;如何用 ai 制作 ppt&#xff0c;也是很多人第一次使用 pptai 工具会面临的具体问题。 就着这些问题&#xff0c;在接下来的文章中…

有哪些便宜的通配符(泛域名)证书?怎么申请?

通配符&#xff08;泛域名&#xff09;SSL证书就是用来保护一个主域名以及所有二级子域名的证书&#xff0c;相对于单域名证书更具有性价比。 主要优势在于&#xff1a; 一&#xff1a;一个整数覆盖所有子域名 仅仅用一张证书就可以保护一个主域名以及所有子域名&#xff0c;…

HPA数据库及HPAanalyze包使用

关于HPA数据库的介绍&#xff1a;Human Protein Atlas 数据库 – 王进的个人网站 (jingege.wang) The Human Protein Atlas 文献 HPAanalyze: an R package that facilitates the retrieval and analysis of the Human Protein Atlas data | BMC Bioinformatics | Full Text …

【PPO】近端策略优化【Clip版本,离散动作】

本博客代码参考了《动手学强化学习-PPO》 PPO算法是在Actor-Critic的基础上进行训练目标的调整。其改进的地方在于对每次参数更新进行了限制。 PPO 是 TRPO 的一种改进算法&#xff0c;它在实现上简化了 TRPO 中的复杂计算&#xff0c;并且它在实验中的性能大多数情况下会比 …

服务模块划分规范

一、PO :(persistant object )&#xff0c;持久对象 可以看成是与数据库中的表相映射的java对象。使用Hibernate来生成PO是不错的选择。 二、VO :(value object) &#xff0c;值对象 通常用于业务层之间的数据传递&#xff0c;和PO一样也是仅仅包含数据而已。但应是抽象出的…

功能问题:如何用Docker部署一个后端项目?

大家好&#xff0c;我是大澈&#xff01; 本文约1800字&#xff0c;整篇阅读大约需要3分钟。 关注微信公众号&#xff1a;“程序员大澈”&#xff0c;免费加入问答群&#xff0c;一起交流技术难题与未来&#xff01; 现在关注公众号&#xff0c;免费送你 ”前后端入行大礼包…

SwiftU的组件 - TabView

SwiftU的组件 - TabView 记录一下SwiftU的组件 - TabView的两种style分别的使用方式 import SwiftUIstruct TabViewBootCamp: View {State var selectedIndex 0var body: some View {NavigationView {TabView(selection: $selectedIndex) {HomeView(selectedIndex: $selected…

基于python的《彩图版飞机大战》程序使用说明(附源码下载)

在PyCharm中运行《彩图版飞机大战》即可进入如图1所示的游戏界面。 图1 游戏主界面 具体的操作步骤如下&#xff1a; &#xff08;1&#xff09;玩游戏。在游戏主界面中&#xff0c;从屏幕的顶部不断出现下落的敌机&#xff0c;玩家按下键盘上的↑、↓、←、→方向键移动飞机…