我有一个存储纬度和经度的数据库。我将纬度列设置为十进制 9,7,经度设置为十进制 10,7。当纬度为 9 个数字长时,它工作正常,问题是如果纬度是 8 个数字长,它会在坐标中添加一个尾随 0。phpmyadmin 中有没有办法防止这种情况发生?或者我应该在将它们添加到数据库之前用 php 将小数四舍五入?
问问题
279 次
1 回答
0
纬度和经度本质上是近似值,尤其是那些从 GPS 测量得出的值。这些是模拟量,并且是不精确的,以数字方式测量。
您不能比较其中两个值的相等性并期望事情正常工作;近似值不是这样工作的。它们本质上有点模糊。
例如,如果您想知道 zip.long / zip.lat 是否等于 long / lat,则需要使用类似这样的 SQL 表达式。
WHERE zip.long BETWEEN long - epsilon AND long + epsilon
AND zip.lat BETWEEN lat - epsilon AND lat + epsilon
如果您正在寻找 10 米的精度,epsilon 的值应该是 0.00001268 (1.268e-05)。我们知道这一点是因为一个纬度是六十海里,而且很容易将海里转换为米。
您关于尾随零的问题暗示您正在使用字符串比较来匹配纬度和经度。也就是说,相对而言,比使用数字相等来比较这样的数字更具欺骗性。
顺便说一句,FLOAT
数据类型(32 位 IEEE 754 浮点)对于纬度/经度来说是足够的精度,除非您是测量员并且知道兰伯特投影和 UTM 投影之间的区别。
于 2013-10-01T22:18:10.360 回答