请记住,我将在lat / long对上执行计算,什么数据类型最适合与MySQL数据库一起使用?
当前回答
使用DECIMAL(8,6)表示纬度(90到-90度),使用DECIMAL(9,6)表示经度(180到-180度)。小数点后6位对于大多数应用程序都是可以的。两者都应该“有符号”以允许为负值。
其他回答
虽然它并不是所有操作的最佳选择,但如果你正在制作地图瓷砖或使用只有一个投影的大量标记(点)(例如Mercator,像谷歌Maps和许多其他滑头地图框架),我发现我所谓的“巨大坐标系”真的非常非常方便。基本上,你将x和y像素坐标存储在一些放大的地方——我使用缩放级别23。这有几个好处:
You do the expensive lat/lng to mercator pixel transformation once instead of every time you handle the point Getting the tile coordinate from a record given a zoom level takes one right shift. Getting the pixel coordinate from a record takes one right shift and one bitwise AND. The shifts are so lightweight that it is practical to do them in SQL, which means you can do a DISTINCT to return only one record per pixel location, which will cut down on the number records returned by the backend, which means less processing on the front end.
我在最近的一篇博客文章中谈到了这些: http://blog.webfoot.com/2013/03/12/optimizing-map-tile-generation/
根据您的应用程序,我建议使用FLOAT(9,6)
空间键将为您提供更多的功能,但在生产基准测试中,浮点数比空间键快得多。(在AVG中0,01 VS 0,001)
不需要走太远,根据谷歌地图,最好是FLOAT(10,6)的纬度和液化天然气。
PostGIS中的空间函数比MySQL中的空间函数更具功能性(即不局限于BBOX操作)。看看:链接文本
纬度范围从-90到+90(度),因此DECIMAL(10,8)是可以的 经度范围从-180到+180(度),因此需要DECIMAL(11,8)。
注:第一个数字是存储的总位数,第二个数字是小数点后的数字。
简而言之:latdecimal (10,8) NOT NULL, lng DECIMAL(11,8) NOT NULL