请记住,我将在lat / long对上执行计算,什么数据类型最适合与MySQL数据库一起使用?
当前回答
谷歌提供了一个从开始到结束的PHP/MySQL解决方案的例子“商店定位器”应用程序与谷歌地图。在本例中,它们将lat/lng值存储为“Float”,长度为“10,6”
http://code.google.com/apis/maps/articles/phpsqlsearch.html
其他回答
使用DECIMAL(8,6)表示纬度(90到-90度),使用DECIMAL(9,6)表示经度(180到-180度)。小数点后6位对于大多数应用程序都是可以的。两者都应该“有符号”以允许为负值。
当我从ARINC424构建导航数据库时,我做了相当多的测试,并回顾了代码,我使用了DECIMAL(18,12)(实际上是NUMERIC(18,12),因为它是firebird)。
浮点数和双精度数没有那么精确,可能会导致舍入错误,这可能是一件非常糟糕的事情。我不记得我是否发现了任何有问题的真实数据——但我相当肯定无法准确地存储在浮点数或双精度数中可能会导致问题
关键是,当使用角度或弧度时,我们知道值的范围——小数部分需要最多的数字。
MySQL空间扩展是一个很好的选择,因为它们遵循OpenGIS几何模型。我没有使用它们,因为我需要保持数据库的可移植性。
在GIS中使用MySQL的空间扩展。
MySQL的空间扩展是最好的选择,因为你有空间操作符和索引的完整列表。空间索引允许您非常快速地执行基于距离的计算。请记住,作为6.0,空间扩展仍然是不完整的。我并不是在写MySQL Spatial,只是让你在深入了解它之前知道它的缺陷。
如果你严格地处理点,而只是DISTANCE函数,这是可以的。如果需要使用polygon、Lines或Buffered-Points进行任何计算,除非使用“related”操作符,否则空间操作符不会提供准确的结果。请参阅21.5.6顶部的警告。关系,如包含,内部,或交叉使用MBR,而不是确切的几何形状(即椭圆被视为矩形)。
此外,MySQL Spatial中的距离与第一个几何图形的单位相同。这意味着如果你使用的是十进制度数,那么你的距离测量就是十进制度数。当你离赤道越来越远时,这将使你很难得到准确的结果。
根据您的应用程序,我建议使用FLOAT(9,6)
空间键将为您提供更多的功能,但在生产基准测试中,浮点数比空间键快得多。(在AVG中0,01 VS 0,001)