---
title: 专业相关算法
source: https://vjmap.com/guide/special.html
---

# 专业相关算法

## 需求

  “能不能给定几组三维坐标（或者CAD绘制的三维多段线），给一个断面形状，直接生成三维管道？”

例如原始CAD图如下：

![image-20240822194655787](https://vjmap.com/blogimages/202408221946821.png)

要求用threejs获取线的三维坐标数据自动生成的三维管道效果图如下：

![image-20240822194923933](https://vjmap.com/blogimages/202408221949004.png)



## 花絮

如果直接对每条线用`threejs`中的 `THREE.TubeGeometry` 去绘制的话，会出现交岔口出现缝隙的情况，如下图所示：

![image-20240822195608479](https://vjmap.com/blogimages/202408221956541.png)

如何解决交岔口出现缝隙的问题成为了难题。

上网一搜索，发现与之类似的问题，在能源行业，“矿井巷道三维自动建模“这个很热门的话题，很多硕士博士都在研究。

于是果断的在淘宝花了几块大洋买了90天下载文献的账号，开始了下载论文，拜读论文，研究算法的苦逼过程 ...

![image-20240822200613545](https://vjmap.com/blogimages/202408222006587.png)

研究了很多天后，很少有论文能把整个算法流程说的很透彻，都是说个大概原理，细节自己去琢磨吧。。。

直到偶然间发现一本专业书 <<矿山巷道三维网络模型构建及空间网络分析技术>>

![image-20240822201446618](https://vjmap.com/blogimages/202408222014711.png)

![image-20240822201538076](https://vjmap.com/blogimages/202408222015186.png)

看了后很有启发，用”半巷道模型“进行处理交叉口，对一些细节进行优化后，终于达到了比较满意的结果。

![image-20240822201805360](https://vjmap.com/blogimages/202408222018422.png)

在线效果地址 [https://vjmap.com/map3d/demo/#/demo/map/builtin/objects/03builtinobjtubepathauto](https://vjmap.com/map3d/demo/#/demo/map/builtin/objects/03builtinobjtubepathauto)



## 三维人员定位系统(示例已开源)

解决了上面的难题后，基于三维巷道可以做很多应用开发，比如“三维人员定位系统”

实现的功能有：

- 解析CAD图中的三维多段线对象，获取三维线的坐标 （CAD图来源于 [https://vjmap.com/app/cloud/#/map/sys_tube?version=v1&mapopenway=GeomRender&vector=false](https://vjmap.com/app/cloud/#/map/sys_tube?version=v1&mapopenway=GeomRender&vector=false)
- 根据三维线坐标自动建立拓扑关系。（因为绘制的时候是一整条绘制的，需要处理成按节点进行关系分析来处理交叉口）
- 根据数据自动生成三维巷道和处理交叉口
- 模拟人员移动数据，在三维图上实时展示人员位置 
- 点击人员可查看详细
- 可查看人员历史轨迹

- 可根据一个坐标自动查找最近的出口

实现效果如下：

![image-20240822202414719](https://vjmap.com/blogimages/202408222024792.png)

![image-20240822202514515](https://vjmap.com/blogimages/202408222025583.png)

![image-20240822202548702](https://vjmap.com/blogimages/202408222025823.png)

此示例代码已开源，可访问 [https://vjmap.com/effect/person/](https://vjmap.com/effect/person/) 在线查看。

更多示例可查看 [https://vjmap.com/map3d/example.html](https://vjmap.com/map3d/example.html)



