如何确定地球表面的哪些图像与任意给定的图像重叠?

3
假设你有一张地球表面的图片,并且它存储在数据库中,以由其角落的纬度/经度对定义的多边形的形式存在。
现在假设还有数百万张覆盖地球表面的图像也以类似方式存储。如何找到与给定图像相交的那些图像是一个好的策略?
我有一个基于“边界半径”的工作基本算法。但它并不是最优的,会返回比应该返回的更多的图像。
我已经查看了MySQL的GIS空间函数,但其中所有计算似乎都是在欧几里得几何中完成的。
实质上,我只需要一个函数,根据两个多边形(在球体上并由纬度/经度点定义)是否相交返回“true”或“false”。看起来很简单,但我还没有找到实现方法。而自己想出这个问题让我感到疲惫。

这个问题可以在http://gis.stackexchange.com/上得到很好的回答。 - underdark
2个回答

2
使用PostGIS,您可以运行以下内容:
SELECT b.* 
FROM images AS a
 JOIN images AS b
 ON ST_Intersects(a.the_geom,b.the_geom)
WHERE a.name = "The image you are interested in"

这里假设所有图像的边界都包含在同一个PostGIS表格“images”中。

这似乎是我所要求的。这里的文档页面(http://postgis.refractions.net/docs/ST_Intersects.html)说它适用于地理对象的球体。我实际上对球体案例更感兴趣,而不是椭圆形案例,所以这是一个优点。我发现在*任何*语言中都很少有API处理这个看似简单的问题。我会等待一段时间,如果没有进一步的答案,你最终会得到一个绿色的勾选。 - SO Stinks

1

它们是否原生处理球面坐标?目前,由于我已经在使用MySQL,因此PostGIS不适用。geodjandro的poly.intersects(pnt)可能正在执行我所需的操作。我仍然不确定它是否进行真正的纬度/经度计算,或者它是否是线性的。我现在正在阅读文档。谢谢。 - SO Stinks
是的 - 它们支持WGS84和其他无数的投影和坐标系统。我的印象是mysql的空间扩展有限,但我没有多少使用过它们。GDAL肯定可以做到。 - Seth
1
如果你要进行空间操作,那么你真的应该放弃MySQL。他们的大多数空间函数都没有实现,只是占位符。PostGIS最近才添加了对大地高度计算的支持,而不是投影。 - TheSteve0
我已经阅读了大约两个小时的文档,但还没有找到任何关于非欧几里得坐标系统的提及。据我所知,GEOS只是JTS拓扑套件的C实现。还有其他几个项目将JTS拓扑套件移植过来。JTS拓扑套件的文档中没有提到任何关于投影、WGS84或坐标系统的内容。所有的拓扑似乎都发生在二维欧几里得空间中。也许我看不到树林却只看到了树木,但我在这些软件包中没有看到任何球面几何。 - SO Stinks
我现在正在调查PostGIS。它似乎可以处理WGS84格式的纬度/经度数据。 - SO Stinks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接