PostGIS中的大点云激光数据-存储和处理


14

我想知道,考虑到处理时间的考虑,如何在PostGIS中存储大量激光扫描点云数据。我知道,PointPostGIS中存在一个几何对象。但据我所知,它会将每个点保存在一个新的tupel中,如果存储了数百万个或更多,则可以使搜索某个特定点非常缓慢。

我从HSR应用科学大学的Rapperswill网站找到了一篇论文,讨论了这一主题。它提出了三种存储此类数据的方法:Whole data in one tupelEach point in one tupelSplitting Data into Blocks由信息表引用的方法,用于保存每个块的扩展。由于第三种方法似乎对于定位存储的点最为有用,我想知道是否有人已经对此进行了一些体验?

该文件可以在这里找到:http : //wiki.hsr.ch/Datenbanken/files/pgsql_point_cloud.pdf

最后但并非最不重要的一点是,我在github上的一个项目中遇到了麻烦,该项目似乎处理了PostgeSQL中的点云方式。不幸的是,网上没有太多有关它的信息。同样的问题在这里:有人已经对此有所经验吗?可用于此类目的吗?

可以在这里找到项目:https//github.com/pramsey/pointcloud

如果有其他建议,想法或经验,我也很高兴听到。但是我必须承认,非商业解决方案是首选。


1
您能否粗略地理解“庞大”的含义,以及您需要点云中的哪些信息?即只有XYZ和强度(例如可以存储在阻止的MultipointZM中)还是其他可能会要求Point为每个单独的点测量获取唯一值的属性数据?
Torsti 2013年

1
我将激光雷达按分类存储在10x10米的多点中。我们仅使用地面Z值
simplexio 2013年

1
@AndreSilva目的是根据数据生成道路轮廓。现在,我们将点转换为DEM网格,并使用PostGIS将其存储为栅格块,然后使用SAGA从中最终创建轮廓。它用于测试目的,但也意味着通过在导入数据库之前对数据进行栅格化而导致准确性下降。同样,在给定的轮廓线切割的情况下,网格单元的导出在PostGIS中非常缓慢(这要归功于ST_Union)。如果您可以推荐用于类似任务的工具,那就太好了。
knutella

1
@til_b:恩,这正是我在说的...好发现:)
knutella

1
我问了自己同样的问题,然后拼凑了几张,得到了一个可行的原型。到目前为止,它运行良好,没有从数百万到数亿个点(每个点具有约20个属性)的可伸缩性问题。有了这么多的点,在一个区域内查找点需要几百毫秒。按时间戳进行过滤大约需要相同的时间(对我来说是精确的采集时间)。总体而言,性能与“ LiDAR数据管理管道;从空间数据库

Answers:


5

您的问题很多。简短的答案是肯定的,完全有可能在PostGIS中存储大量的点云数据并将其用于处理。我们已经建立了一个完整的系统来做到这一点。

这部影片的编号有些过时,但我们在postgis中拥有数以千计的移动/地面和空中数据,可通过python访问这些数据,以在后端进行处理,并在Web前端进行3D查看和下载数据。 https://vimeo.com/39053196

真正取决于您如何选择将数据存储在PostGIS中以及如何访问它们。航空数据的一个好的解决方案很可能是以某种方式对数据进行网格化并使用多点来提高效率。但是,如果您使用的移动数据或地面数据的点密度可以在每平方米500-30000 +点之间,则此方法无效。然后归结为查看您的硬件和期望的并发用户数。有关此问题的详细信息,请参见我们的一些论文 http://www.mendeley.com/profiles/conor-mc-elhinney/


嗨,谢谢您提供这么多的详细信息。您论文中提供的参考/测试似乎真的很有用!我将需要一些时间来了解全部内容,但是正如我初读时所看到的那样,它们已经提供了完整的解决方法。非常感谢您的添加!视频和基于浏览器的PC查看器也很有趣,并且看起来非常流畅。不幸的是,我的手在其他方面很短。我希望很快可以继续使用pc-data。
knutella 2013年

Glimpse项目在这里有一个非常酷的演示:ncg.nuim.ie/glimpse/auth/login.php
Kozuch,2016年

7

(答案是根据我和其他人在上面的评论得出的;尚未经过实际测试)

将点存储为MultiPointZM。最佳的网格大小可能取决于访问模式,您需要对此进行一些测试。具有空间索引的常规网格应使查询非常快。如果3d访问很重要,则MultiPointZM可以基于3D块(1)而不是2D平面网格,那么(如果PostGIS> = 2.0)则可以使用&&&进行快速3D查询。

您也可以将网格图案存储在单独的表中,这可能很有用,例如在更新数据并验证MultiPointZM块在编辑后保持在其边界之内时等。

一次只能存储一个块的时间戳或其他数据,但是如果没有太多的类别和/或属性,可以通过按属性分解每个块来存储一些二进制/类别数据。

如果最终不得不将数据存储为单独的PointZM,则网格表+ B-Tree索引上的外键将使仅特定点的加载(可能)比直接查询表要快得多,即使是空间查询也是如此。指数。

(1)如果Z值的范围很小(毕竟这是一条路),这可能没有意义。


我认为您的“摘要”命中率很高,可以作为先前讨论的提案的结论。正如您所说,必须在需求和建议的解决方案中找出“正确”的方式来加载此类数据。事实证明,由于这么多想法,这并非不可能。这为我在此问题上的进一步工作提供了很多启发。非常感谢!
knutella 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.