请记住,我将在lat / long对上执行计算,什么数据类型最适合与MySQL数据库一起使用?


当前回答

存储Lat Long值的理想数据类型是十进制(9,6)

这是在大约10cm的精度,而只使用5字节的存储。

例如:CAST(123.456789 as decimal(9,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

根据您的应用程序,我建议使用FLOAT(9,6)

空间键将为您提供更多的功能,但在生产基准测试中,浮点数比空间键快得多。(在AVG中0,01 VS 0,001)

从一个完全不同和简单的角度来看:

if you are relying on Google for showing your maps, markers, polygons, whatever, then let the calculations be done by Google! you save resources on your server and you simply store the latitude and longitude together as a single string (VARCHAR), E.g.: "-0000.0000001,-0000.000000000000001" (35 length and if a number has more than 7 decimal digits then it gets rounded); if Google returns more than 7 decimal digits per number, you can get that data stored in your string anyway, just in case you want to detect some flees or microbes in the future; you can use their distance matrix or their geometry library for calculating distances or detecting points in certain areas with calls as simple as this: google.maps.geometry.poly.containsLocation(latLng, bermudaTrianglePolygon)) there are plenty of "server-side" APIs you can use (in Python, Ruby on Rails, PHP, CodeIgniter, Laravel, Yii, Zend Framework, etc.) that use Google Maps API.

这样,您就不必担心索引号和与数据类型相关的所有其他问题,这些问题可能会破坏您的坐标。

存储Lat Long值的理想数据类型是十进制(9,6)

这是在大约10cm的精度,而只使用5字节的存储。

例如:CAST(123.456789 as decimal(9,6))