---
title: 查询示例(自动识别CAD图纸提取信息)
source: https://vjmap.com/guide/queryCase3.html
---

# 查询示例(自动识别CAD图纸提取信息)

前端自动识别CAD图纸提取信息方法总结
# 前言

CAD图纸自动识别和提取信息具有许多意义，包括以下几个方面：

1. 提高工作效率：传统上，对于大量的CAD图纸，人工识别和提取信息是一项耗时且繁琐的任务。通过自动化这一过程，可以大大提高工作效率，节省时间和人力资源。
2. 减少错误和精度提升：人工处理CAD图纸容易出现错误，例如错读数字或忽略细节。自动识别可以减少这些人为错误，并提高数据提取的准确性和精度。
3. 快速获取信息：对于需要从大量CAD图纸中获取特定信息的项目或任务来说，自动识别可以快速提取所需的数据，而无需人工逐个查找和处理。
4. 数据整合和分析：自动提取的CAD图纸信息可以与其他系统或软件集成，实现数据的整合和分析。这样，可以更好地理解和利用CAD数据，为决策和规划提供支持。

 通过CAD图纸自动识别和提取信息有助于提高效率、快速自动的获取数据信息及提高获取信息的质量，那么怎么样才能在前端自动识别和提取CAD图纸信息呢？

# 思路

以下图中的一个停车场的CAD图纸为例，怎么样自动识别CAD图所有停车位，获取每个停车位的位置及所有停车位个数呢？

![image-20230528175510120](https://vjmap.com/blogimages/image-20230528175510120.png)

一般识别的方法和流程为：

- 观察CAD图纸：仔细查看CAD图纸，查找可能代表停车位的图形或符号。这可能是表示一些特定图标、标识或标记。例如此图中停车位都是一个矩形

- 检查图例和标注：CAD图纸通常包含图例或标注，用于解释不同元素的含义。检查图例和标注，看是否提供了关于要识别的说明或标识。例如此图中矩形的里面都包含了停车线的一个符号。![image-20230528180048709](https://vjmap.com/blogimages/image-20230528180048709.png)

- 使用CAD的选择和查询功能：利用CAD选择和查询图形的功能，使您能够选择图纸上的特定对象并查看其属性。使用这些工具选择可能的工位对象，并查看其属性以获取更多信息。

- 检查图层和图纸结构：CAD图纸通常使用不同的图层来组织不同类型的元素。查看图层列表，并查找与工位相关的图层。如果有多个图层包含工位信息，您可以逐个查看这些图层以找到工位对象。

- 参考CAD标准和惯例：CAD绘图通常遵循一些标准和惯例，其中包括特定的符号和图形表示要识别的内容。

对于一些不能通过图形识别出来的CAD图，可以利用图像识别的方法。例如

- 图像处理和模式识别：使用图像处理技术，例如边缘检测、轮廓提取和形状识别，来分析CAD图像中的对象。您可以使用计算机视觉库，如OpenCV，来实现这些功能。

- 机器学习和深度学习：利用机器学习和深度学习算法，您可以训练模型来自动识别CAD图像中的对象。这种方法涉及将大量标记CAD图像用作训练数据，然后使用这些数据来训练分类器或卷积神经网络（CNN）。训练完成后，您可以将新的CAD图像输入已训练好的模型，并让其自动预测识别对象的位置。

  

  以上面的CAD停车场CAD图为例，我们可以通过以下步骤来识别来自动识别出CAD图中所有的停车位：

  （1）通过观察，我们发现所有的停车位都是”0"图层，并且实体为类型为多段线"AcDbPolyline"

     ![image-20230528181819726](https://vjmap.com/blogimages/image-20230528181819726.png)

  (2) 我们在前端通过CAD数据查询，查询出”0“图层的所有多段线。结果如下

  ![image-20230528182017976](https://vjmap.com/blogimages/image-20230528182017976.png)

  （3）通过查询到的数据我们发现，我们把所有停车位都找出来了。但是查到的数据中还包含我们不想要的数据（停车位中间的停车线也查询出来了）。所以我们需要对查询的数据做下过滤出线为矩形形状的线（五个点）

  ![image-20230528182353001](https://vjmap.com/blogimages/image-20230528182353001.png)

  （4） 这样，我们就把所有停车位都自动找出来了。我们可以获取停车位坐标的中心点，加个车符号，看下效果。效果如下:

  ![image-20230528182558689](https://vjmap.com/blogimages/image-20230528182558689.png)

  上面示例的体验地址和视频教程如下

  [https://vjmap.com/app/visual/#/edit?key=sys_be517afb&isLocal=false](https://vjmap.com/app/visual/#/edit?key=sys_be517afb&isLocal=false)

  [唯杰地图可视化之停车场路径规划](https://mp.weixin.qq.com/s?__biz=MzkyOTMyMzAxMw==&mid=2247483910&idx=1&sn=79a94bfe1401ab3f522148a88231d383&chksm=c20a036cf57d8a7a3cfa43272e4805dd8f4707a9bbdc2a07133d59429924c9b24125421000c3#rd) [https://www.bilibili.com/video/BV1oX4y1r7L3/](https://www.bilibili.com/video/BV1oX4y1r7L3/)

# 前端CAD图纸自动识别实现总结

## 方法一：自动通过要识别对象的CAD属性数据来识别

应用场景： 数据很有规律，直接通过观察CAD图中的对象的属性如`实体的图层`、`颜色`、`实体类型`、`面积属性`、`填充符号`、`是否是同一个块`等就可以自动识别出要识别的对象。

以上面的停车场CAD为例，我们再仔细观察，看下停车位的面积大小是一样的，如下图

![image-20230528184240059](https://vjmap.com/blogimages/image-20230528184240059.png)

我们可以在查询时，可以直接通过`“实体类型”为多段线`、`“实体图层”为“0`，`“实体面积“为12720000`来直接查询出所有的停车位数据

## 方法二： 通过CAD属性数据和相关业务规则来识别

应用场景： 对于不能直接通过属性数据来识别出的对象，如果在图上有相关联的可以识别的对象，可以先自动识别出好识别的对象，再利用业务规则识别出要真正需要识别的对象。

举例来说,以下图为例，我们想要识别出圆圈里面的所有标注的内容

![image-20230528184918601](https://vjmap.com/blogimages/image-20230528184918601.png)

如果我们直接识别图有所有的文字的时候，会有很多无关的文字，过滤不出真正想要的文字标识。

而在实际业务中，这个文字在圆里面的。所以，我们第一步，可以通过查询出图中所有同样大小的圆，确定圆的坐标和半径后，再查找圆内所有的文字就是我们所需要的文字标注了。效果如下：

![image-20230528185257507](https://vjmap.com/blogimages/image-20230528185257507.png)

在线体验和源码地址：  [https://vjmap.com/demo/#/demo/map/service/22findtextbyrules](https://vjmap.com/demo/#/demo/map/service/22findtextbyrules)

## 方法三： 通过业务逻辑来识别

应用场景：对于一些特别复杂的场景，需要通过写相关的业务逻辑代码来实现。

以一键在Web端把CAD图自动分割成多张图纸并导出子图或图片为例，这需要通过业务逻辑自动把图中所有的子图查找出来。

![image-20230528185606520](https://vjmap.com/blogimages/image-20230528185606520.png)

 自动分割图纸算法原理：

子图的特征为，外面有一个图框，如果能找出所有图中的图框，就能根据图框位置自动拆分出所有子图了。

而图框的最外面为矩形，同时这个图框矩形外面没有被其他矩形所包含了。

- (1）遍历图中所有的矩形，获取所有的矩形范围

- (2) 因为有时候矩形是由四条线所组成的，所以需要获取图中所有的水平线和垂直线，然后判断能否组成矩形

- (3）对所有获取的矩形进行判断，如果这个矩形没有被其他矩形所包含了，则以为是子图的图框。

  这个之前的博文进行了详细的介绍，可参考原文: 

  [一键在Web端把CAD图自动分割成多张图纸并导出子图或图片](https://www.cnblogs.com/vjmap/p/16807655.html)

  在线体验和源码地址：[https://vjmap.com/demo/#/demo/map/service/22findsubmapsplit](https://vjmap.com/demo/#/demo/map/service/22findsubmapsplit)

## 方法四：通过图像相似性来识别

应用场景：对于无法或不方便通过图形查询坐标及属性方法来进行识别的对象，可以利用图像的相似性来进行识别。

图像相似性算法是指用于比较和判断两个或多个图像之间相似度的算法。下面列举了一些常见的图像相似性算法：

1. 感知哈希算法（Perceptual Hashing）：该算法通过计算图像的哈希值，将图像转化为一个固定长度的二进制串，然后通过比较哈希值的差异来评估图像的相似度。

2. 结构相似性算法（Structural Similarity）：结构相似性算法基于人眼感知的原理，通过比较图像的结构、纹理和亮度等特征，给出一个相似度的评分。

3. 均值哈希算法（Average Hashing）：均值哈希算法通过将图像缩小为固定大小的低分辨率图像，并计算图像的平均像素值，然后将每个像素与平均值进行比较，生成一个二进制串作为图像的哈希值，通过比较哈希值的差异来评估图像的相似度。

4. 欧氏距离算法（Euclidean Distance）：欧氏距离算法通过计算两个图像像素之间的欧氏距离来评估它们的相似度。较小的距离表示两个图像更相似。

5. 余弦相似度算法（Cosine Similarity）：余弦相似度算法通过计算两个图像的向量之间的夹角余弦值来评估它们的相似度。较大的余弦值表示两个图像更相似。

6. 归一化交叉相关算法（Normalized Cross-Correlation）：归一化交叉相关算法通过计算两个图像之间的交叉相关性来评估它们的相似度。较大的相关性表示两个图像更相似。

   具体流程为：

   （1）通过提供的WMS服务把图形数据转化为图像数据

   （2) 对图像数据进行相似性判断

   （3）把判断结果的像素坐标数据转化为图形坐标数据进行显示

   以下图为例

   ![image-20230528190249751](https://vjmap.com/blogimages/image-20230528190249751.png)

   如果图中的这个符号是同一个块的话，我们可以采用图形中判断是否是同一个块来自动识别。但如果绘制不规范，整个对象不是一个块时，就不太方便通过属性数据来自动识别了。这时候我们可以采用图像识别的方法，效果如下：

   ![image-20230528190519847](https://vjmap.com/blogimages/image-20230528190519847.png)

   在线体验和源码地址：[https://vjmap.com/demo/#/demo/map/service/32mapmatchobject](https://vjmap.com/demo/#/demo/map/service/32mapmatchobject)

## 方法五： 通过AI机器深度学习来识别

应用场景： 对于一些复杂的对象，大小不太一样，旋转、缩放也不太一致的复杂的对象，这时候可以用深度学习自己去训练模型，用AI的方式来进行识别。

实现过程同方法四, 通过提供的WMS服务把图形数据转化为图像数据,再把图像在深度学习框架中进行目标检测，获取相应的坐标数据进行预测显示。

因为深度学习框架我们没有进行封装，需要客户自行实现，这里不再举例。



# 总结

CAD图纸自动识别和提取信息是一个复杂的任务，涉及CAD文件解析、规律总结、业务理解、图像处理、模式识别等领域的知识。您可能需要结合多种技术和方法，根据具体情况进行调整和改进。

