无需人工标注位置,一键在Web端CAD图上根据测点编号自动标注位置

Web在线预览CAD(使用AUTODESK) 历经磨难终于找到了有什么办法在线打开cad又可以测量长度,计算的接口了!! 重点是不用钱!!!!废话不多说说下过程 1 我是在linux环境下测试开发的 2 要在linux中按curl yum install curl 3 基本上每个url都会带有token ,记得填写 1. 这个是autodesk官网 2. 登录账号,然后创建app,创建后获取Client ID 和Client Secret 3.获取token有24小时时效 把自己的Client ID 和Client Secret替换下面的 your 阅读详情

需求分析

CAD图如下图所示

image-20220913205333681

在后台数据库中只有测点编号及测点值的信息,如下列列表

测点编号 测点类型 测点值

DZ129-2 类型1 值1

DZ128-2 类型1 值2

DZ127-2 类型1 值3

J28 类型2 值5

J26 类型2 值6

J27 类型2 值7

J29 类型2 值8

…

那怎么把上面的测点值在CAD图相应位置展示出来呢?如下图

因为后台数据库中没有测点坐标信息,传统的方法一般是事先人工在地图上手工标注每个测点对应的位置,然后把位置信息保存至后台数据库。下次再从数据中获取位置信息和测点信息显示在地图上。这个方法的缺点也很明显,如果测点多时,人工标注每个测点对应的位置是一件费时费力的事情。

那么有没有好的方法根据图的信息一键计算出相应测点的位置呢?

实现

规律分析

要找出测点编号对应的地理位置就得知道每个类型的测点的规律或规则是什么。

如上例图的两种不同的测点:

测点类型1

image-20220913210838860

规律为:每个测点旁边有一个填充的三角形测点符号

测点类型2

image-20220913210939752

规律为:每个测点旁边有一个填充的红色的圆形符号

根据规律查找对应的图形符号

查找方法有多种,如图像识别,图形分析等。因为图像识别干扰因素多,同时性能慢。而图形分析速度快,准确率高。这里我们采用图形分析来查找。

步骤为:

(1) 遍历图中所有实体类型

(2)通过实体类型和实体范围大小来确定是否满足条件

根据图形符号搜索旁边对应的测点编号,并建立关联关系

步骤为:

(1) 搜索符号旁边一定范围(如可设置为符号范围的几倍),设置旁边最近的文字

(2) 根据文字的内容规则去排查非测点编号名称(如此图中测点编号是以 DZ或J开头的,长度也有限制)

(3) 在所有满足条件的测点编号名称中查找一个距离最近的做为最终的测点编号名称

(4) 把测点编号名称和图形符号的坐标建立关联关系。

关键代码实现

 const queryMapText = async () => {
            let query = await svc.conditionQueryFeature({
                // 查询所有文字(包括单行文本,多行文本、块注记文字,属性文字) 具体类型数字参考文档"服务端条件查询和表达式查询-支持的cad实体类型"
                condition: `(name='12' or name='13' or name='26' or name='27') and LENGTH(s4) >= 2 and LENGTH(s4) <=12 and ( s4 like 'J%'  or s4 like 'DZ%')`,
                fields: "",
                limit: 100000 // 全部查吧
            })
            if (query.error) {
                message.error(query.error)
            } else {
                query.result.forEach(rst => {
                    rst.position = vjmap.GeoPoint.fromString(rst.location); // 获取坐标
                })
                return  query.result;
            }
        }
        // 获取图中的文字信息
        let mapAllText = await queryMapText();
        console.log(mapAllText);

        // 查找所有hatch
        const queryHatch = async () => {
            let query = await svc.conditionQueryFeature({
                condition: `(name='11') `, // 类型为hatch
                fields: "",
                includegeom: true,
                limit: 100000 // 全部查吧
            })
            if (query.error) {
                message.error(query.error)
            } else {
                query.result.forEach(rst => {
                    rst.geoBounds = vjmap.GeoBounds.fromString(rst.bounds); // 获取范围
                    let w = rst.geoBounds.width();
                    let h = rst.geoBounds.height();
                    // 如果半径为2,则是圆,旁边是J_的
                    if (vjmap.isZero(w - 2, 0.1) && vjmap.isZero(h - 2, 0.1))
                    {
                        rst.type = "circle_20";
                    } else {
                        if (rst.geom.geometries[0].type == "Polygon" && rst.geom.geometries[0].coordinates[0].length == 5) {
                            // 如果是三角形填充
                            if (vjmap.isZero(w - 2.5, 1) && vjmap.isZero(h - 2.5, 1))
                            {
                                rst.type = "triangle";
                            }

                        }
                    }

                })

                return  query.result;
            }
        }
        // 获取图中的文字信息
        let mapAllCircleHatch = await queryHatch();
        console.log(mapAllCircleHatch);

        // 圆旁边是文字J开头的
        let dataCircleTextG = mapAllCircleHatch.filter(rst => rst.type == "circle_28")
        dataCircleTextG.forEach(circle => {
            // 查找距离最近的一个以J开头的文字
            let texts = mapAllText.filter(t => t.text.substr(0, 1) == "J")
            let findTexts = texts.filter(t => t.position.distanceTo(circle.geoBounds.center()) <= 2.8 * 3) // 查找符合条件的文字
            // 找一个距离最近的
            if (findTexts.length > 0) {
                findTexts = findTexts.sort((a, b) => a.position.distanceTo(circle.geoBounds.center()) - b.position.distanceTo(circle.geoBounds.center()) )
                drawDatas.push({
                    point: circle.geoBounds.center(),
                    name: findTexts[0].text,
                    color: "#0f0"
                })
            }

        })

        // 三角形旁边是文字DZ开头的
        let dataTriangleTextDz = mapAllCircleHatch.filter(rst => rst.type == "triangle")
        dataTriangleTextDz.forEach(tri => {
            // 查找距离最近的一个以DZ开头的文字
            let texts = mapAllText.filter(t => t.text.substr(0, 2) == "DZ")
            let findTexts = texts.filter(t => t.position.distanceTo(tri.geoBounds.center()) <= 2.8 * 3) // 查找符合条件的文字
            // 找一个距离最近的
            if (findTexts.length > 0) {
                findTexts = findTexts.sort((a, b) => a.position.distanceTo(tri.geoBounds.center()) - b.position.distanceTo(tri.geoBounds.center()) )
                drawDatas.push({
                    point: tri.geoBounds.center(),
                    name: findTexts[0].text,
                    color: "#f0f"
                })
            }
        })

        console.log(drawDatas)
        // 把数据显示到图上
        let symbols;
        const showDataInMap = (datas)=> {
            let geoDatas = []
            for(let i = 0; i < datas.length; i++) {
                const pt = datas[i].point;
                const data = {
                    point: map.toLngLat(pt),
                    properties: {
                        name:  datas[i].name,
                        textColor: datas[i].color
                    }
                }
                geoDatas.push(data);
            }
            if (symbols) {
                symbols.remove();// 如果有先删除了
            }
            symbols = new vjmap.Symbol({
                data: geoDatas,
                iconImage: "stretchTextBackImg",
                iconAnchor: "bottom",
                iconOpacity: 0.5,
                iconOffset: [-2, -10],
                textTranslate: [-2, -6],
                textAnchor: "bottom",
                textField: ['get', 'name'],
                textFont: ['Arial Unicode MS Regular'],
                textSize: 14,
                textColor: ['get', 'textColor'],
                iconTextFit: "both",
                iconAllowOverlap: true,
                textAllowOverlap: true
            });
            symbols.addTo(map);
        }
        showDataInMap(drawDatas);

最效效果

image-20220913212244279

上面的案例代码已开源,出于对用户数据保密的需要,案例代码用唯杰地图官网的示例图进行了替换,思路一致。访问 (https://vjmap.com/demo/#/demo/map/service/22findtextbyrules) ,查看效果和代码即可。

CAD图在线Web测量工具代码实现(测量距离、面积、角度等) CAD如今在各个领域均得到了普遍的应用并大大提高了工程技术人员的工作效率。在桌面端,AutoCAD测量工具已经非常强大;然后在Web端,如何准确、快速的对CAD图在Web进行测量呢?本文实现了: 能Web在线打开AutoCAD图形; 测量距离;测量面积;测量角度;坐标标注;测量时能捕捉Web端CAD图形上面的坐标,提高准确度; 测量时能对捕捉进行开关启用;测量时能启用正交模式;测量时能自定义右键菜单功能;能进行连续测量;测量结束后,能删除已测量的结果。... 阅读详情

相关推荐

【信息科学与工程学】计算机科学与自动化——第十篇 芯片设计30 芯片中的数学1

所有涉及货币流动的岗位都受到严格的法律法规和行业准则约束,包括中国人民银行的各项货币政策工具管理规定、银行间市场交易规则、支付清算系统管理办法以及企业司库管理的相关指导意见。:在货币流动链条中,距离资金源头(央行投放)或关键流转节点越近的岗位,对资金的控制力、经手规模和影响力越大。处于资金流转的“管道”中,虽不直接决定资金量,但负责海量资金交易的安全、准确、高效清算,是货币流通的“基础设施”维护者。《关于规范金融机构资产管理业务的指导意见》(资管新规),要求信托业务打破刚性兑付,向净值化、标准化转型。

weixin_49199313的博客 413

纯前端Web网页内嵌AutoCAD,支持在线编辑DWG、dxf等文档。

很多人都知道猿大师办公助手是一款专业的网页在线编辑 Office 插件,不仅支持微软 Office、金山 WPS 及永中 Office 完整嵌入到最新版 Chrome、Ddge、Firefox 等浏览器中使用,猿大师还可以把 Autodesk 的 AutoCAD、DWG TrueView、Design Review 等软件嵌入到浏览器网页中,实现 dwg、dxf 等工程图在线查看、编辑、审阅等。

猿大师办公助手官方博客 2496

webcad:开源的协作式 CAD 程序! (很快!)

网卡 开源的协作式 CAD 程序! (很快!)

推荐一款基于Web技术的CAD草图绘制工具

CAD(Computer-Aided Design)是一种常用于工程设计、制造等领域的计算机辅助设计软件。CAD_Sketcher是一款基于Web技术的CAD草图绘制工具,可以在网页上直接绘制二维和三维图形,支持多种绘图模式和工具,具有方便、易用、快捷的特点。该项目的源代码托管在GitCode平台上,链接为: ## 技术分析 CAD_Sketcher是基于Web技术实现的,主要使用了以下技...

gitblog_00097的博客 884

GD32主程序跑飞?可能是BOOT0引脚惹的祸(附J-LINK调试实录)

本文针对GD32微控制器程序下载后无法运行的典型问题,深入剖析了BOOT0引脚配置对启动模式的关键影响。通过结合J-LINK调试器与KEIL MDK环境,详细演示了如何从程序跑飞现象(如PC指向0x1FFF Fxxx)定位到硬件层面的BOOT0引脚与VDD短路故障,并提供了系统的硬件排查步骤与设计预防建议。

d6e7f8的博客 705

使用Gromacs进行蛋白和配体小分子的动力学模拟+结果分析全流程教程

先选protein,选择non-water,使用pymol打开delWater.pdb,输入util.ss('all')展示cartoon,点击file-Export Moive as-MPEG。这一步完成后,文件夹中会出现以下三个文件,其中gro 文件用于记录蛋白的初始坐标,top 文件记录蛋白的拓扑信息和力场信息,itp 与top文件类似。接下来使用Spdbv软件打开蛋白,如果蛋白中存在原子缺失情况,就会出现以下的提示,如果不存在就不会显示,同时保存为rep.pdb。

weixin_46587777的博客 2854

Nano-Banana数字孪生:工厂设备三维建模与仿真

本文介绍了如何在星图GPU平台上自动化部署🍌 Nano-Banana 产品拆解引擎镜像,实现工厂设备从照片到语义化三维模型的智能重建。该镜像可快速生成带结构层级、连接关系与工艺特征的高精度glTF模型,广泛应用于数字孪生场景下的设备运维监控、故障预测与AR维修指导。

weixin_34374684的博客 119

告别切换烦恼!用Parallels Desktop的Host-Only网卡,在macOS上直接访问虚拟机里的公司内网

本文详细介绍了如何在macOS上使用Parallels Desktop的Host-Only网卡直接访问虚拟机内的公司内网,告别频繁切换操作系统的烦恼。通过配置Host-Only网络模式,实现主机与虚拟机的安全高效通信,特别适合需要频繁访问内网资源的IT从业者。文章包含分步指南、自动化脚本和常见问题解决方案,帮助用户优化工作流程。

weixin_28739079的博客 364

【CAD-Web】CAD/DWG的Web化

一、背景 近期需要做个信息系统,能将一些2D的平面示意图(DWG格式文件)放到Web上,供放大、浏览,甚至可对元素进行交互,如点击、拖动、改变元素颜色线条等。于是,需要寻找开源的解析DWG格式的项目或者软件,一路下来,很是辛苦。这里记录下搜索到的有用信息。 二、DWG与DXF DWG格式文件是Auto CAD软件的专有格式,类似于doc,是封闭的不开放的,且是二进制的。而 DXF格式则...

huanqing2010的专栏 3万+

【无人机项目实战】第三章:fast_planner工程解读(附C++代码)

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、规划系统运行逻辑【业务部分】1.Fast_planner_node.cpp【程序入口】功能代码实现2.kino_replan_fsm.cpp【状态机转移】功能代码实现KinoReplanFSM::init()函数订阅目标点回调函数订阅里程计回调函数检查路径规划是否成功【重要】执行状态机FSM定时器回调函数【重要】判断目标点是否有障碍物或者是轨迹执行过程中是否有障碍物的回调函数3

qq_35635374的博客 1万+

基于Python实现学习进度跟踪系统

{{ task }}: {{ "%.1f"|format(hours) }}小时

寒寒豆豆软件公司的博客 196

HTML浏览CAD(WEB CAD)二次开发常用的CAD编辑功能的详细教程

网页CAD中常见的修改和编辑命令有很多,例如移动、复制、缩放、旋转、镜像、剪切、延伸、阵列、修改和编辑,这些命令可以帮助用户对绘图进行修改、调整和优化,提高工作效率和设计质量。我们可以通过调用实体的 [clone()]() 方法复制多个对象,也可对一个或多个对象进行多次复制。该方法是通过变换矩阵实现图形的编辑,具体矩阵变换原理可参考。该方法是通过变换矩阵实现图形的编辑,具体矩阵变换原理可参考。方法复制对象,该方法是通过变换矩阵实现图形的编辑,具体矩阵变换原理可参考。此外,我们还可以调用实体的。

u013725001的专栏 2051

姿态传感器/陀螺仪之IIS2DLPC 应用驱动程序设计

* 转换为°C单位 (参考温度为25°C,灵敏度为16 LSB/°C) */

corlin6688的博客 220

(WEB在线CAD)在线CAD如何实现图形识别功能

前言CAD图形识别功能可帮助用户快速识别和提取CAD图纸中的各种图形,从而加速设计过程。可应用在识别与分类阶段,自动识别图纸中的不同元素,通过特定特征进行区分,减少了手动分类的工作量;也可应用在数量统计阶段,统计图纸中各种构件的数量用于预算;还可运用在图纸定位和应用阶段,快速定位图纸上的特定元素,便于快速查找和修改。mxc...

cnzzs的博客 3788

31、Labview如何搭建程序框架?--状态机到数据采集等常用框架

本文废话不多,直接列举几种框架搭建方式,为了尽量向大家提供干货,本文直接从简介和手把手教搭建框架两方面来讲解,本文提到五种经典框架模式,学会这五种就很够了,分别是:状态机框架(State Machine)、生产者-消费者框架(Producer-Consumer)、主-从框架(Master-Slave)、事件驱动框架(Event-Driven)、分层架构(Layered Architecturep)。这个框架是基于状态机结构的。顾名思义“状态机”就是个“切换程序状态的机器”。本质是一个。

关注我,更多技术问题欢迎私聊~ 3103

AI 测试工程师 — 6 个月学习计划表

AI 转型测试工程师 —— 6 个月学习计划表

weixin_46453070的博客 1069

Web cad(私有云CAD SDK)中实现插入图块的方法

CAD制图的过程中会有很多重复的图元需要绘制,为了节约绘制时间,我们会把部分图元保存成图块,下次就可以快速和多次的插入到相应的图纸位置中,提高绘图效率。https://gitee.com/mxcadx/mxdraw-article/tree/master/插入图块功能/demo.zip。的操作, 实现dwg文件到mxweb文件的转换, 让它支持在页面中显示。实现插入图块功能,首先需要将这个图块dwg文件转换成mxweb文件。有了mxweb文件,就可以通过。这样我们就完成了图块的插入。

u013725001的专栏 376

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

CAD与GIS集成说明(在线CAD结合GIS,webCAD)

首先,示例源码是基于Vue3和mapbox-gl实现的一个交互式地图示例展现页面,比如上述与各其他由webgl封装的各种可以和mapbox-gl集成的前端库的使用示例,以及CAD图纸展现在mapbox-gl地图中的示例,我们可以理解为mxdraw是专注处理CAD图纸的渲染,而mapbox-gl 是地图的渲染, 其他展示的库也都是围绕mapbox-gl展开的。

u013725001的专栏 1690

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【亲测免费】 webcad:开源的协作式 CAD 程序!

webcad:开源的协作式 CAD 程序! 【下载地址】webcad开源的协作式CAD程序 webcad 是一款全新的开源协作式 CAD 程序,旨在为用户提供高效、灵活的设计体验。作为开源项目,webcad 允许用户自由使用和修改代码,满足个性化需求。其核心亮点在于支持多人实时在线协作,让团队设计更加流畅高效。无论是丰富...

gitblog_06706的博客 856

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Web端CAD图形找不同?一键在Web端找出CAD图不同并对比分析

在实际中,当多专业设计协助时,遇到图纸更新后,要对比图纸找出图纸的不同处,一直是一个比较耗时费力的事情,也是业内的一大痛点。一般CAD新旧图纸的内容对比,包括增加新的图形元素、减少原有的图形元素以及对原有的图形进行修改。传统的方式一般是在PC端CAD环境中实现对图纸比较的功能,然后随着互联网移动端技术的不断发展,如何摆脱CAD环境,在Web端轻松实现图纸对比功能呢?...

vjmap的博客 772

DWG控件Web CAD SDK v15发布,支持注释 2D 绘图

我们发布了Web CAD SDK 15 ,这是ASP.NET 控件的新版本,用于在浏览器和其他在线技术上打开 2D 和 3D 文件。此升级带来了一些显着变化,旨在增强您对 CAD 文件的使用。继续阅读以发现新内容

励志做最业余的专业博主,控件产品可以私我~ 994

三分钟零代码实现CAD网页Web快速看图和高科技效果展示

背景 由于CAD格式DWG文件为私有格式,在网页Web展示并且无差异化显示一直以来是一个技术门槛比较高的技术活,本文将介绍如何在零代码的情况下,三分钟实现Web快速看图和实现高科技效果展示。 之前我们介绍了一款开源的利用最新技术栈Vue3开发的 唯杰地图云端图纸管理平台。 他实现了对AutoCAD格式的DWG图纸的云端管理查看功能。 大致功能如下: CAD图纸的在线上传、打开、查看、版本管理 在线图层管理切换查看功能 属性数据查询功能 图中文字搜索功能

vjmap的博客 5752

基于Web的CAD一张图协同在线制图更新轻量级解决方案[示例已开源]

之前相关的博文中介绍了如果在Web网页端展示CAD图形(唯杰地图云端图纸管理平台 https://vjmap.com/app/cloud),有不少朋友问,能不能实现一个协同的功能,实现不同部门不同专业间“一张图协同”,解决目前Web端CAD查看图纸更新不及时不同步的痛点!

vjmap的博客 1934

基于B/S架构在Web上浏览CAD(dwg,dxf,dwf,dgn,bmp,jpg,wmf)等文件

简  介   MicroSee浏览控件可以浏览、批准、打印多种格式的图形文件,开发者可以将其嵌入到网页中,利用ASP或JSP调用控件的方法来编程,在互联网(B/S)或局域网(C/S)中使用。本文简要的说明了这种应用的实现步骤。    第一章   MicroSee CAB文件的制作1.         到网上下载CAB文件制作工具。(参考网址:http://www.micro

microdraw的专栏 1万+

网页版CAD(WEB CAD SDK)绘制的批注信息如何保存到图纸上

第一种方式是将这个数据保存在服务器的数据库中,再次打开这张图纸的时候,再去请求得到对应的批注数据,通过。根据上文所述,我们知道了保存批注到图纸中的整个实现,可用参考代码或者直接使用这个接口。提供的方法调用的, 你可以根据源码中使用方式,完善绘制更多自定义的图形到图纸中。返回的对应的这个图形需要的一些数据, 最终组成这样一个个的批注数据上传到服务器中。如上代码中,将各种不同的批注都绘制到图纸中, 最终将图纸保存在参数提供的。就是现在网页上打开的图纸的原图纸再服务器上的地址。可得到一个解压后的目录。

u013725001的专栏 1187
上一篇: Web端CAD图形找不同?一键在Web端找出CAD图不同并对比分析
下一篇: 高德地图与CAD图叠加显示方法汇总及优缺点分析
vjmap
博客等级 码龄5年 128粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值