计算球体上的可见度图


9

我有一个包含一些多边形的PostGIS表(使用地理数据类型存储)。它们代表球形地球上的区域。

对于从所有多边形中选择的每对顶点,我要计算这两个顶点是否彼此“可见”。(有n *n -1)/ 2个这样的对,其中n是表中所有多边形上唯一顶点的总数。)“彼此可见”是指两个点之间的大圆路径。两个顶点不与表中的任何多边形相交。

什么是最快的计算方式(最好在PostgreSQL / PostGIS中)?

我有一些有效的方法,但是很慢。我只是天真地遍历所有对,看看它们之间的LineString是否与任何多边形相交。(PostGIS的地理数据类型对我来说处理了所有困难的数学工作。)因此,我想知道是否存在一个聪明的数据结构或算法可以加快速度。


6
相关概念:可见度图,如果要在2D而非3D中进行此工作,请使用Gnomonic投影
whuber

“在所有对上迭代”是否意味着您在过程中有FOR循环,用于测试一条线是否与所有多边形相交?如果是这样(可能)更快,则只需使用所有可能的组合创建线串表,然后执行一个查询以测试线是否与多边形表相交
simplexio 2015年

您能否分享这个问题的例证。
addcolor 2016年

您可以排除球面水平线以外的所有内容(边缘附近高个子物体要加上一点),这可以通过近似坐标边界框快速完成。否则,我认为从根本上讲NP很难。
AnserGIS

Answers:


1

推导出不可见的内容。假设您站在海滩上的一个顶点上,看着相邻多边形的两个远程顶点。然后,您可以假定在这些顶点后面的整个扇区中的任何顶点对于该顶点都是不可见的。

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.