需求分析
CAD图如下图所示

在后台数据库中只有测点编号及测点值的信息,如下列列表
测点编号 测点类型 测点值
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

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

规律为:每个测点旁边有一个填充的红色的圆形符号
根据规律查找对应的图形符号
查找方法有多种,如图像识别,图形分析等。因为图像识别干扰因素多,同时性能慢。而图形分析速度快,准确率高。这里我们采用图形分析来查找。
步骤为:
(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') `

本文介绍如何通过后台数据库中的测点信息,利用图形分析技术在CAD图纸上自动标注测点,避免手动标注的繁琐。通过识别不同类型的测点符号,如三角形和圆形,找到对应测点编号并显示其位置。
最低0.47元/天 解锁文章
1902

被折叠的 条评论
为什么被折叠?



