网站首页 > 技术文章 正文
现状
在CAD看图过程中我们经常会需要用到查找文字的功能,在AutoCAD软件查找一个文字时,可以通过打开左下角输入命令find,输入查找的文字,然后设置查找范围,就可以搜索到需要查询的文字。但在Web网页端打开CAD图查找文字时,有没有同样的办法呢?另外,如果有没有办法实现在很多图纸中像百度那样做到全文检索的功能?
实现思路
CAD图Web打开展示
拿之前分享的一款开源的利用最新技术栈Vue3开发的 唯杰地图云端图纸管理平台 https://vjmap.com/app/cloud 为例. 他实现了对AutoCAD格式的DWG图纸的云端管理查看功能。能对CAD图纸在线上传、打开、查看、版本管理; 在线图层管理切换查看功能; 属性数据查询功能等功能。
图中文字查找
图纸中文字查找方案
方法一 直接后台读取CAD图纸内容,遍历所有的文字实体进行查找。
主要的文字实体包括 单行文本AcDbText,多行文本AcDbMText,属性注记AcDbAttributeDefinition,块属性AcDbAttribute
实现步骤:
(1) 在前端写代码通过内存方式在后台打开CAD图形
// 打开地图
let res = await svc.openMap({
mapid: 'mapid', // 地图ID,(请确保此ID已存在,可上传新图形新建ID)
mapopenway: vjmap.MapOpenWay.Memory, // 后台以内存方式打开已上传的图
})
(2) 查找文本实体,因为前端是javascript语言,不可能直接去遍历后台图形数据库,这时可以用表达式查询来后台进行查询
let query = await svc.exprQueryFeature({
expr: `gOutReturn := if((gInFeatureType == 'AcDbText' or gInFeatureType == 'AcDbMText' or gInFeatureType == 'AcDbAttributeDefinition' or gInFeatureType == 'AcDbAttribute' ), 1, 0);`,
fields: "",
limit: 100000
})
表达式语法可参考https://vjmap.com/guide/expr.html
这样查询有个缺点就是每次查询都要在后台打开CAD图形,然后再遍历图形数据库,根据表达式过滤出要查找的文字,效率低。
方法二 通过SQL语句查询数据库来查找文字
实现步骤:
(1) 在前端写代码通过几何渲染方式在后台打开CAD图形,几何渲染方式第一次请求数据时,会在后台打开图形,然后把图形数据和属性数据会保存至空间数据库,之后请求都会在空间数据库里查询数据。
// 打开地图
let res = await svc.openMap({
mapid: env.exampleMapId, // 地图ID,(请确保此ID已存在,可上传新图形新建ID)
mapopenway: vjmap.MapOpenWay.GeomRender // 以几何数据渲染方式打开
})
(2) sql语句查询文字,直接上代码
let query = await svc.conditionQueryFeature({
//只需要写sql语句where后面的条件内容,字段内容请参考文档"服务端条件查询和表达式查询"
// 查询所有文字(包括单行文本,多行文本、块注记文字,属性文字) 具体类型数字参考文档"服务端条件查询和表达式查询-支持的cad实体类型" https://vjmap.com/guide/svrStyleVar.html
condition: `name='12' or name='13' or name='26' or name='27'`,
fields: ""
})
SQL查询无需在后台再次打开CAD图形,直接使用SQL语句查询数据库,效率高。
全文检索功能
如果后台有成百上千纸图纸,怎么做到全文检索呢?
首先想到的肯定是遍历所有的图纸,然后根据要搜索的文字一个个的去查询,这样也能实现,就是图纸比较多时,性能太低了,耗时。
这里可以利用开源的全文检索库去实现。
开源的 Elasticsearch (以下简称 ES)是目前全文搜索引擎的首选。
它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。
可以在后台实时查找出所有图形的文字然后利用ES建立索引,然后利用ES去查询,根据查找的结果定位到某图某实体上。
但是ES太重量级了,也难部署,用到这种搜索功能上简直就是大材小用。
下面推荐一款轻量级的单文件部署的全文搜索开源引擎。
Bleve是一款基于Golang实现的全文搜索与索引组件库,具有简单的API、丰富的接口扩展能力、映射可自定义、全面的索引数据类型等特点。
- 组件官网:http://blevesearch.com/
- 组件仓库:https://github.com/blevesearch/bleve
- 有兴趣的朋友可以搭建研究下。
猜你喜欢
- 2024-10-11 Windows XP、ClearType 和微软雅黑字体的那点事
- 2024-10-11 前后端数据交互(四)——fetch 请求详解
- 2024-10-11 小白总结:前端HTML基础知识点(1)——元素总结
- 2024-10-11 领导给了你大块文字,晦涩难懂,还要有设计感,快来解救我吧!
- 2024-10-11 高薪前端必备,后端工程师带你学canvas,第一节:图片上绘制字体
- 2024-10-11 零基础教你学前端——66、CSS谷歌字体和Icon图标
- 2024-10-11 「前端添加水印」你真的了解全面吗?
- 2024-10-11 前端OCR图片文字提取功能 #ocr识别
- 2024-10-11 一起学 pixijs(4):如何绘制文字 pic字设怎么上色
- 2024-10-11 HTML网页制作常用标签及说明——前端开发入门
你 发表评论:
欢迎- 501℃几个Oracle空值处理函数 oracle处理null值的函数
- 499℃Oracle分析函数之Lag和Lead()使用
- 495℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 482℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 478℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 474℃【数据统计分析】详解Oracle分组函数之CUBE
- 455℃Oracle有哪些常见的函数? oracle中常用的函数
- 452℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 最近发表
-
- Directus 火了!无代码 SQL 数据的协作应用利器!
- PHP和NodeJS的代码执行效率比较(php和nodejs的区别)
- 工商银行获得发明专利授权:“基于数据库映射动态接口的前端页面应用开发方法及装置”
- FAISS和Chroma:两种流行的向量数据库的比较
- 什么是数据库的索引?(数据库索引的定义和作用)
- Vercel和Neon“首次”推出用于前端云的无服务器SQL数据库
- 记一次前端逻辑绕过登录到内网挖掘
- 学Access好还是MySQL好?(access与mysql的语句区别)
- 惬意!清晨慢品 HTML canvas 标签题,面试知识轻松 get
- 前端实现知识图谱-force(d3.js)(前端知识树)
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)