如何使用具有球面几何的MySQL地理空间扩展

如何使用具有球面几何的MySQL地理空间扩展,第1张

概述我想在MySQL数据库中存储数千个纬度/经度点.我成功地设置了表并使用地理空间扩展添加数据,其中“coord”列是Point(lat,lng).问题:我想快速找到纬度'X'度和经度'Y'度的'N'个最近的条目.由于还没有实现Distance()函数,我使用GLength()函数来计算(X,Y)和每个条目之间的距离,按升序距离排序,并限制为'N'个结果.问题是

我想在MySQL数据库中存储数千个纬度/经度点.我成功地设置了表并使用地理空间扩展添加数据,其中“coord”列是Point(lat,lng).

问题:

我想快速找到纬度’X’度和经度’Y’度的’N’个最近的条目.由于还没有实现distance()函数,我使用GLength()函数来计算(X,Y)和每个条目之间的距离,按升序距离排序,并限制为’N’个结果.问题是这不是用球面几何计算最短距离.这意味着如果Y = 179.9度,最近的条目列表将仅包括从179.9开始的经度并且即使存在更近的条目且经度从-179.9增加而减少.

在数据库中使用球形几何时,通常如何处理经度上的不连续性?必须有一个简单的解决方案,但我必须只是寻找错误的东西,因为我没有找到任何有用的东西.

我应该忘记GLength()函数并创建自己的函数来计算角度分离吗?如果我这样做,它仍然会很快并利用地理空间扩展吗?

谢谢!

玩笑

更新:

This正是我上面所描述的.但是,它仅适用于sql Server.显然,sql Server具有Geometry和Geography数据类型.地理位置完全符合我的需要. MysqL中有类似的东西吗?最佳答案

How does one typically handle the discontinuity in longitude when working with spherical geometrIEs in databases?

没有多少人使用MysqL,因为它的地理空间扩展并不真正适用于鼻烟.

来自文档:
“All calculations are done assuming Euclidean (planar) geometry.”

解决方案通常是roll your own.

或者,您可以伪造它 – 如果您的距离小于500英里左右,那么您可以将您的纬度和经度视为直角坐标,并使用欧几里德距离公式(sqrt(a ^ 2 b ^ 2)).

总结

以上是内存溢出为你收集整理的如何使用具有球面几何的MySQL地理空间扩展全部内容,希望文章能够帮你解决如何使用具有球面几何的MySQL地理空间扩展所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1168657.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存