Lat / Lng存储到mysql表中

时间:2012-08-10 14:46:00

标签: php mysql database google-maps indexing

我应该使用哪种类型的数据将Google地图中的LatLng存储到我的数据库中? 我不确定我应该在mysql中放多少小数位。

我应该使用DecimalFloat等吗? 我应该为Length投入多少钱? 同时,将LatLng的索引放在Mysql中是否很好?

3 个答案:

答案 0 :(得分:1)

这取决于您将要对信息做什么,以及您需要多么精确的值。

纬度或经度大约为69英里。 (纬度的实际距离略有不同,经度的距离越小,越远离赤道越远。

DECIMAL(9,6) allows for a resolution of about  4 inches
DECIMAL(8,5) allows for a resolution of about 3 1/2 feet
DECIMAL(7,4) allows for a resolution of about 36 feet

(对于纬度,你只需要在小数点前两个位置,而不是经度所需的三个位置。)

答案 1 :(得分:1)

我使用十进制(10,6)表示lat和lon,它的分辨率优于1米。 (记得考虑减号)。


编辑:

引用MySQL手册中关于十进制类型的减号:

  

标准SQL要求DECIMAL(5,2)能够存储任何值   五位数和两位小数,因此值可以存储在   工资栏范围从-999.99到999.99。 MySQL强制执行此限制   从MySQL 5.0.3开始。 在5.0.3之前,在范围的正端,   列实际上可以存储高达9999.99的数字。 (积极的   数字,MySQL 5.0.2和更早版本使用为符号保留的字节   延长范围的上限。)

来源:

  

http://dev.mysql.com/doc/refman/5.0/en/fixed-point-types.html

答案 2 :(得分:1)

如果您正在为Google地图执行此操作并绘制折线(可能有几千个点),则可以将这些点存储在数组中,序列化数组,并将其存储在BLOB或TEXT字段中。我没有对此进行任何时间试验,但我怀疑它比转换到DEC要快。或者,如果您将此传递给JavaScript,则可以使用JSON_ENCODE将其存储为JSON字符串,并在每次使用绘图时保存该转换。