2011-08-22 121 views
11

我已經在不同的字段中存儲緯度和經度。我得到谷歌的Lat & Lng座標,並用它們使用一些公式找到附近的地方。現在有時經緯度值可達15位小數點 - > 15.123456789000001。什麼是最好的數據類型來存儲這些值?現在我使用Double來存儲經度和緯度座標。合適的mysql數據類型在不同的字段中存儲緯度和經度

由於提前

+1

[在MySQL數據庫中存儲緯度/經度時使用什麼理想數據類型?](http://stackoverflow.com/questions/159255/what-is-the-ideal-data-type當存儲經緯度在一個MySQL) – Gajus

回答

24

99%的時間,你選擇的任何浮點數據類型應該足夠了。

是的,我知道他們不能總是精確和準確地表示出小數點後15位的數值,但這並不重要。緯度/長至15小數位指定具有(聲明的)精度的位置,其數量級爲氫原子的寬度。您只需要六位小數,即可在一米範圍內獲得準確度,這對大多數情況已足夠。很少有人需要超過釐米級別的精度(8個位置),10甚至100米的精度對於許多應用來說都足夠了。

而且,當然,這一切都假設原始數據源是準確的。我的手機的GPS很少聲稱在10米以內的精確度更好(即使在那時候,其地圖的一半時間也沒有顯示我在10米範圍內的實際位置),因此將位置保存到更高的精度將毫無意義,誤導。誠然,您可能使用的是比集成到手機中的廉價GPS接收器更精確的數據源,但即使如此,實際上也不可能一直精確到分子級別。

+0

偉大的信息。你能告訴我所有精確度的精確映射嗎?或者指出這些信息的來源。 –

+1

關於公制和有效數字的偉大之處在於它們都是10的因子。如果8位小數位數= 1cm精度,那麼7位數= 10cm,6 = 100cm等。還要注意,表面距離由1度隨緯度而變化。要獲得精確的映射,請使用http://www.csgnetwork.com/degreelenllavcalc.html確定目標緯度的度數(以米爲單位),然後根據需要移動小數位。 –

4

我使用十進制數據類型。

CREATE TABLE IF NOT EXISTS `example` (
    `lat` decimal(18,15) DEFAULT NULL, 
    `long` decimal(18,15) DEFAULT NULL 
); 
+0

這是否包括符號+/-? –

+0

您可以存儲小數類型的負數。但是,您的正面數字不會附加+號。 http://dev.mysql.com/doc/refman/5.5/en/fixed-point-types.html – cleanunicorn

相關問題