2013-10-01 33 views
0

我有一個db存儲經度和緯度。我將緯度列設置爲十進制9,7,將經度設置爲十進制10,7。當緯度爲9個數字時,它工作正常,問題是如果緯度是8個數字,它將在座標後面加上一個尾部0。有沒有在phpmyadmin的方式來防止這種情況?或者,我應該四捨五入小心之前將它們添加到數據庫中的PHP?mysql數據庫加尾0到十進制

+4

這是在php中使用數據庫時出現問題,還是在phpmyadmin中查看數據時只是一個美學問題? – TheWolf

+1

使用數據時出現問題,我想匹配緯度/經度,因爲這個佔位符0被添加,它有時不匹配。 – user1572796

+0

我從數據庫中檢索數據時將值轉換爲int(或使用'intval()')。不過,我認爲PHP應該自己做...你怎麼連接到MySQL? – TheWolf

回答

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投影之間的差異。