- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想在 MySQL 数据库中存储数千个纬度/经度点。我成功地设置了表格并使用地理空间扩展添加了数据,其中列“coord”是一个点(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 地理空间扩展与球形几何一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4635588/
我是一名优秀的程序员,十分优秀!