2008-11-16 69 views
5

我知道postgres有一個用於存儲地理座標的數據類型。但是我正在尋找一個RDBMS不可知論的解決方案。目前我在MySQL中使用Decimal(25,20)。我可能會使用這些數據來查找這些位置,這些位置是根據給定位置後面給定的距離來查找的。這將是存儲這種數據的最佳方法?用於在數據庫中存儲地理定位的最有效方式

回答

1

標準是here。雖然對於像您這樣的簡單用例來說太多了,但它可能會爲您提供一些想法,說明爲什麼實際上最好去使用許多數據庫現在的OGC兼容包,甚至是MySQL

如果失敗了,並且假設您將實現距離計算算法,那麼具有所需精度的任何浮點數都可以使用。

5

另一個好方法是將這些值乘以一個常量並將它們存儲爲整數值。僅使用整數也可以幫助加速計算。

除非您嚴格需要精度,否則應該只需要在小數點後面存儲5個以上的值。

這個Latitude Longitude Data Storage Specification給出了一個顯示精度與小數位數的圖表。

# decmal places, example, precision 
5 51.22135 ± 0.8 m 
6 50.895132 ± 0.08 m 

7將工作爲8mm或約0.314英寸。

0

正在關注@vfilby's回答,爲什麼不把數字的兩半存儲爲兩個單獨的int類型?

1

AFAIK,MS SQL Server 2008支持將GeoLocations作爲DataType。我知道你在使用MySQL,但是我想我會在這個問題上提到它。

+0

DataTypes是GEOGRAPHY和GEOMETRY。他會想使用GEOGRAPHY。 – 2009-07-08 13:38:21

0

我一直使用4字節的浮點列來保存經度和緯度,因爲精度誤差遠遠小於我們使用的設備的精度。這可能不是你的應用程序的情況,但如果是這樣的話,你不能獲得比浮動更多的RDBMS不可知論。

1

vfilby's answer可能是最好的一個,但許多RDBMS都有索引性格比索引密集整數(或浮點數)領域領域更好的支持。由於這個原因,我可能會首先推薦轉換數據:如果你想找到值「接近」另一個值,你還需要一個保存這個值的函數 - 也許通過轉換爲base36和_ -padding小數點,但如果你只需要一個精確的匹配,幾乎任何快速哈希函數都可以。

再說一次:如果你沒有很多數據,或者你沒有使用這樣的RDBMS,請執行什麼操作vfilby suggested

相關問題