我有一个包含一些多边形的PostGIS表(使用地理数据类型存储)。它们代表球形地球上的区域。
对于从所有多边形中选择的每对顶点,我要计算这两个顶点是否彼此“可见”。(有n *(n -1)/ 2个这样的对,其中n是表中所有多边形上唯一顶点的总数。)“彼此可见”是指两个点之间的大圆路径。两个顶点不与表中的任何多边形相交。
什么是最快的计算方式(最好在PostgreSQL / PostGIS中)?
我有一些有效的方法,但是很慢。我只是天真地遍历所有对,看看它们之间的LineString是否与任何多边形相交。(PostGIS的地理数据类型对我来说处理了所有困难的数学工作。)因此,我想知道是否存在一个聪明的数据结构或算法可以加快速度。
6
相关概念:可见度图,如果要在2D而非3D中进行此工作,请使用Gnomonic投影。
—
whuber
“在所有对上迭代”是否意味着您在过程中有FOR循环,用于测试一条线是否与所有多边形相交?如果是这样(可能)更快,则只需使用所有可能的组合创建线串表,然后执行一个查询以测试线是否与多边形表相交
—
simplexio 2015年
您能否分享这个问题的例证。
—
addcolor 2016年
您可以排除球面水平线以外的所有内容(边缘附近高个子物体要加上一点),这可以通过近似坐标边界框快速完成。否则,我认为从根本上讲NP很难。
—
AnserGIS