2009-12-08 23 views
12

我正在創建Google地圖混搭並使用SQL 2008.SQL 2008地理&幾何 - 使用哪個?

我將在地球上擁有大量的點,並希望在SQL中對它們執行各種計算 - 例如選擇包含在一個特定的多邊形,或選擇XY內10km以內的所有點。

我從來沒有使用和SQL空間功能之前。我應該使用geography還是geometry數據類型?

回答

15

地理是用於繪製地球上的點的類型。

如果您有存儲谷歌地圖點,像這樣的表:如果您想查詢

CREATE PROCEDURE proc_AddPoint 
    @latitude     decimal(9,6), 
    @longitude    decimal(9,6), 
    @altitude     smallInt 
AS 

DECLARE @point     geography = NULL; 

BEGIN 

    SET NOCOUNT ON; 

    SET @point = geography::STPointFromText('POINT(' + CONVERT(varchar(15), @longitude) + ' ' + 
                                                       CONVERT(varchar(15), @latitude) + ' ' + 
                                                       CONVERT(varchar(10), @altitude) + ')', 4326) 

    INSERT INTO geo_locations 
    (
        location_id, 
        position_point 
   ) 
    VALUES 
    (
        NEWID(), 
        @point 
   ); 

END 

然後:

CREATE TABLE geo_locations (
    location_id  uniqueidentifier NOT NULL, 
    position_point geography   NOT NULL 
); 

,那麼你可以填它點與此存儲過程經緯度和高度,只需使用以下查詢格式:

SELECT 
    geo_locations.position_point.Lat AS latitude, 
    geo_locations.position_point.Long AS longitude, 
    geo_locations.position_point.Z AS altitude 
FROM 
    geo_locations; 
6

您可以按照PostGIS常見問題給出

I'm all confused. Which data store should I use geometry or geography?

簡答題答案:地理是支持長距離 距離測量一個新的數據類型 。如果您使用 地理位置 - 您無需瞭解關於平面座標系的 。 如果您關心的所有 測量距離和 長度,並且您有來自全球所有 的數據,則地理通常是最好的。幾何數據類型是 較舊的數據類型,它具有許多支持它的 函數,並且享有來自第三方工具的強大支持 。 其最好的,如果你很舒服 與空間參照系或者在一個單一的空間 參照系(SRID) 所有的數據適合你 正在處理本地化數據,或者你需要 做大量的空間處理。 請參考第8.8節「PostGIS 功能支持列表」,瞭解目前支持哪些 ,什麼是 。

兩個數據庫PostGIS和SQL Server中的幾何和地理類型都遵循相同的概念,因此PostGIS FAQ中給出的答案適用於您的問題。

相關問題