我想在mysql数据库中存储数千个纬度/经度点。我成功地建立了表格并使用地理空间扩展添加了数据,其中“坐标”列是一个点(lat,lng)。
问题:
我想快速找到最接近纬度x度和经度y度的n个条目。由于distance()函数尚未实现,我使用glength()函数计算(x,y)和每个条目之间的距离,按升序距离排序,并限制为“n”个结果。问题是,这不是用球面几何计算最短距离。这意味着,如果y=179.9度,最接近的条目列表将只包括从179.9开始并逐渐减小的经度,即使存在从-179.9增加经度的更接近条目。
在处理数据库中的球形几何图形时,通常如何处理经度的不连续性?必须有一个简单的解决办法,但我必须寻找错误的东西,因为我没有找到任何有用的东西。
我应该忘记glength()函数并创建自己的计算角度分离的函数吗?如果我这样做,它还会很快并利用地理空间扩展吗?
谢谢!
乔希
更新:
This正是我上面描述的。但是,它仅适用于SQL Server。显然,sql server有一个几何和地理数据类型。地理正是我所需要的。mysql中有类似的东西吗?

最佳答案

在处理数据库中的球形几何图形时,通常如何处理经度的不连续性?
很少有人使用mysql来实现这一点,因为它的地理空间扩展并没有真正达到要求。
从文档中:
All calculations are done assuming Euclidean (planar) geometry.
解决办法通常是roll your own
或者,您可以伪造它——如果您的距离小于500英里左右,那么您可以将纬度和经度视为直角坐标,只需使用欧几里德距离公式(sqrt(a^2 + b^2))。

09-10 06:50
查看更多