Pra*_*hat 11 mysql spatial mysql-5.6
我想在我的 MySQL(Innodb)“tblAddress”表中存储每个地址的地理位置,我想我有两个选项:
1) 2 columns for Each Address:
Latitude DECIMAL(10, 8),
Longitude DECIMAL(11, 8)
2) One Column for Each Address:
GeoLocation POINT
Run Code Online (Sandbox Code Playgroud)
我的程序需要从当前位置(移动客户端)找到所有落在 1 公里半径范围内的地址。
下面的命令也对我不起作用,不确定我需要什么。
CREATE SPATIAL INDEX GeoLocation ON tblAddress (GeoLocation);
Run Code Online (Sandbox Code Playgroud)
那么在这里存储数据以加快计算和检索的建议方法是什么。请指教。
oNa*_*are 10
您可以将 MySQL 的空间扩展与 GIS 结合使用。
创建 MySQL 表时,要特别注意 lat 和 lng 属性。使用 Google 地图当前的缩放功能,您应该只需要小数点后 6 位的精度。
为了将我们的表所需的存储空间保持在最低限度,您可以指定 lat 和 lng 属性是大小为 (10,6) 的浮点数。这将使字段存储小数点后 6 位数字,加上小数点前最多 4 位数字,例如 -123.456789 度我不会担心数字类型之间的性能差异。体面的指数将产生更大的影响。
您也可以DECIMAL
按照@gandaliter 的建议尝试。
DECIMAL
是用于精确算术的 MySQL 数据类型。与FLOAT
它的精度对于任何大小的数字都是固定的不同,因此通过使用它代替FLOAT
您可以在进行某些计算时避免精度错误。如果您只是在没有计算的情况下存储和检索数字,那么实际上FLOAT
是安全的,尽管使用DECIMAL
. 用计算FLOAT
还是可以的,但要绝对确定 8d.p。您应该使用的精度DECIMAL
。纬度范围从 -90 到 +90(度),因此
DECIMAL(10,8)
可以,但经度范围从 -180 到 +180(度),因此您需要DECIMAL(11,8)
. 第一个数字是存储的总位数,第二个数字是小数点后的数字。简而言之:lat DECIMAL(10,8) NOT NULL, lng DECIMAL(11,8) NOT NULL
这解释了 MySQL 如何处理浮点数据类型。
相关信息:
归档时间: |
|
查看次数: |
31074 次 |
最近记录: |