现在有几百万个三维坐标点数据,希望判断其中数据点富集的若干区域,比如指定富集半径是 15 ,指定富集点数为 10000 ,那么就希望获取所有半径 15 球体范围内包含 10000 个以上点的区域,然后返回这些区域的中心点。
这个中心点也希望是由中心点发出符合半径长度的射线,所重合点数最多的情况,比如一个金字塔形的边框组成的区域被局部覆盖,那么中心点应当是塔尖,而非金字塔中心。
目前数据是以文本形式存储的。
该如何实现这样的计算?算法逻辑和需要用到的库和工具有哪些?
向量数据库有助于这种数据处理吗?我没接触过向量数据库。
![]() |
1
skydcnmana OP MongoDB 支持 3D 索引,是不是也比较适合?
// 创建 3D 索引 var collection = database.GetCollection<Point3D>("points"); var indexKeys = Builders<Point3D>.IndexKeys.Geo3D("Coordinates"); collection.Indexes.CreateOne(new CreateIndexModel<Point3D>(indexKeys)); |
![]() |
2
skydcnmana OP @skydcnmana 呃,不对,好像 MongoDB 没有 Geo3D 啊,DeepSeek 的幻觉么。。。
|
3
hurrytospring 8 天前 ![]() 向量数据库不是干这个的,不过为啥一定要存数据库里,是有长期持续分析或者写入的需求?如果没有,直接用代码或者计算工具计算就行了
|
![]() |
4
sillydaddy 8 天前 via Android ![]() 你的业务需求是啥?是做点云吗?查询频率怎么样?不同的数据特征,不同的业务需求,可以针对性的优化。
|
![]() |
5
sillydaddy 8 天前 via Android ![]() 比如 kdtree 可以快速精确查找半径内的点。聚类算法可以快速找到聚集的点。两者配合也许能,也许不能满足你的要求,单看需求是什么样的。
|
![]() |
6
skydcnmana OP @sillydaddy #4 频率很低,就是用倾斜摄影生成的 3D 数据,判断杆件,我是想先查找到富集的中心来确定杆件的连接处,再以各个连接处之间的线段作为依据判定杆件是否存在,以及杆件的直径。
|
7
Jax6 5 天前 ![]() 常规点云处理就好了,PCL 库,提速的话最好数据下采样一下。和工业视觉的应该类似
|