我正在設計一個SQL Server 2008中的表格,它將存儲用戶列表和Google地圖座標(經度爲&緯度)。在SQL Server中存儲座標(來自谷歌地圖的經度/緯度)的最佳方式是什麼?
我需要兩個字段,或可將其與1做什麼?
什麼是最好的(或最常見的)數據類型用來存儲這類數據?
我正在設計一個SQL Server 2008中的表格,它將存儲用戶列表和Google地圖座標(經度爲&緯度)。在SQL Server中存儲座標(來自谷歌地圖的經度/緯度)的最佳方式是什麼?
我需要兩個字段,或可將其與1做什麼?
什麼是最好的(或最常見的)數據類型用來存儲這類數據?
看看新的空間在SQL Server 2008中引入它們是專爲此類任務的數據類型並進行索引和查詢更容易,更高效。
的更多信息:
SQL Server支持空間相關信息。你可以在http://www.microsoft.com/sqlserver/2008/en/us/spatial-data.aspx看到更多。
Alternativly您可以將信息存儲爲兩個基本領域,通常是浮點數是大多數通信設備上報的標準數據類型和準確夠一兩英寸之內 - 綽綽有餘了谷歌地圖了。
如果你只是把它代入我想一個領域會做一個URL - 這樣你就可以形成像
http://maps.google.co.uk/maps?q=12.345678,12.345678&z=6
一個URL,但因爲它是兩個數據我將它們存儲在單獨的田
商店既作爲浮動,並用獨特的關鍵詞上them.i.em
create table coordinates(
coord_uid counter primary key,
latitude float,
longitude float,
constraint la_long unique(latitude, longitude)
);
我不知道SQL Server,但答案...
在MySQL的保存爲FLOAT(10, 6)
這是從Google developer documentation官方推薦。
CREATE TABLE `coords` (
`lat` FLOAT(10, 6) NOT NULL ,
`lng` FLOAT(10, 6) NOT NULL ,
) ENGINE = MYISAM ;
你想要做的是將緯度和經度存儲爲新的SQL2008空間類型 - >地理。
這裏有一個表的屏幕截圖,這是我有。
alt text http://img20.imageshack.us/img20/6839/zipcodetable.png
在這個表中,我們存儲數據的地理兩個領域。
您希望將它作爲GEOGRAPHY類型保存到數據庫的主要原因是您可以利用所有的SPATIAL方法 - >例如。點在保利,兩點之間的距離等
順便說一句,我們還可以使用谷歌的地圖API來獲取緯度/經度數據,並存儲在我們的SQL 2008數據庫 - 所以這種方法確實可行。
公平的警告!在服用建議使用地理類型,請確保您不使用LINQ或實體框架來訪問數據,因爲它不支持(如2010年11月)的規劃,你會難過!
更新2017年7月
對於那些現在正在閱讀這個答案,它是過時的,因爲它是指追溯技術堆棧。查看評論以獲取更多詳情
我討厭對那些說「這是一種新型,讓我們使用它」的人做出反向。新的SQL Server 2008空間類型有一些優點 - 即效率,但是你不能盲目說總是使用這種類型。這真的取決於一些更大的圖片問題。
作爲一個例子,集成。這種類型在.Net中具有equivilent類型 - 但interop是什麼?那麼支持或擴展舊版本的.Net怎麼樣?將服務層中的這種類型暴露給其他平臺呢?對數據規範化怎麼樣 - 也許你對獨立的信息感興趣。也許你已經寫了複雜的業務邏輯來處理長/經緯度。
我不是說你不應該使用的空間類型 - 在你應該很多情況下。我只是說,在走下這條道路之前,你應該問一些更重要的問題。對於我最準確地回答你的問題,我需要更多地瞭解你的具體情況。
存儲經度/緯度單獨地或以一個空間類型都可行的解決方案,並且一個可能優選的是在其它根據自己的情況。
我做的方式:我存儲緯度和經度,然後我有一個第三列這是第一兩列的自動導出的地理類型。該表是這樣的:
CREATE TABLE [dbo].[Geopoint]
(
[GeopointId] BIGINT NOT NULL PRIMARY KEY IDENTITY,
[Latitude] float NOT NULL,
[Longitude] float NOT NULL,
[ts] ROWVERSION NOT NULL,
[GeographyPoint] AS ([geography]::STGeomFromText(((('POINT('+CONVERT([varchar](20),[Longitude]))+' ')+CONVERT([varchar](20),[Latitude]))+')',(4326)))
)
這給了你空間查詢對GeoPoint的列中的靈活性,因爲你需要它們顯示或提取爲CSV目的,還可以檢索的緯度和經度值。
這是我的情況。我只需要將座標存儲在一個字段中,並用逗號分隔。我認爲可以使用TEXT作爲字段類型。 你覺得呢? – Amr 2017-03-10 10:06:12