我有一个存储纬度和经度的数据库。我将纬度列设置为十进制9,7,将经度设置为十进制10,7。当纬度为9个数字长时,它工作正常,问题是如果纬度是8个数字长,则在坐标上添加尾随0。有没有办法在phpmyadmin中防止这种情况?或者我应该在将它们添加到数据库之前用PHP舍入小数?
答案 0 :(得分: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浮点)对于纬度/经度而言是非常精确的,除非您是测量员并且知道Lambert和UTM投影之间的区别