2008-12-17 45 views
21

我正在玩SQL Server 2008中的新地理列和STGeomFromText函數。這裏是我的代碼(與AdventureWorks2008一起工作)幾何列:STGeomFromText和SRID(什麼是SRID?)

DECLARE @region geography; 
set @region = geography::STGeomFromText('POLYGON((
     -80.0 50.0, -90.0 50.0, 
     -90.0 25.0, -80.0 25.0, 
     -80.0 50.0))', 4326); 

SELECT @region; 

我的問題是關於代碼中的4326。它應該是一個空間參考ID。當我去MSDN時,它沒有太多。如果我將該值更改爲56,則會收到一個錯誤,告訴我該值必須位於sys.spatial_reference_systems表中。

你可以看一下該表通過執行:

select * from sys.spatial_reference_systems 

有該表中的列well_known_text,但它並沒有告訴我很多。 4326的值是:

GEOGCS["WGS 84", DATUM["World Geodetic System 1984", ELLIPSOID["WGS 84", 6378137, 298.257223563]], PRIMEM["Greenwich", 0], UNIT["Degree", 0.0174532925199433]] 

任何人都可以向我解釋這個謎嗎?什麼是SRID?

回答

15

所以最後我和一位前軍事傢伙說話,他是一名雷達/測繪專家。基本上,他確切地知道這個數字(4326)是什麼,它來自哪裏以及它爲什麼在那裏。

它是計算地理學的行業標準。問題是地球不是一個完美的球體(它在中間膨脹),並且SRID 4326解釋了這一點。

正如我所說,表sys.spatial_reference_systems列出了所有的代碼和它們是什麼。但簡短的版本是,你真的只會使用4326,除非你有一個非常具體的理由來使用不同的東西。

+1

我不同意你的陳述「你真的只會用4326,除非你有一個非常具體的原因。」任何時候你在處理一個小區域的數據(想想州或縣而不是這個世界),你將使用本地投影座標系統。這些系統旨在更好地表示2D平面上的地球表面,而不是3D地球。通常情況下,您最終會在WGS84以外的投影中獲取數據,並且需要進行轉換。 如果您只處理GPS點,則假設數據在4326 99%的時間內是正確的。 – Roy 2014-01-15 01:55:04

16

有很多系統來映射地球。例如,你想映射一些在美國的州。您可以將最東南點設置爲0,0,並根據此點映射所有其他空間座標。另一方面,您可能想要映射跨越地圖的一些空間數據。無論如何,你必須選擇一些點作爲0,0。此外,您還必須選擇某種測量單位:英里/公里/度/其他一些更適合您的神奇單位。多年來發展起來的很多這樣的系統。每個人都有自己的零點,自己的座標,以及關於地球是否平坦的自己的規則。 SRID或SRS是此類系統的ID。使用這個ID你可以將在一個系統中表達的點映射到另一個系統,儘管有時它涉及一些相當複雜的數學。

還有約4326個SRID。它也被稱爲「WGS 84」 (http://en.wikipedia.org/wiki/World_Geodetic_System)系統。這是在球形(不平坦)地面上表示點的最常見系統。它使用度,分,秒符號,其x和y座標通常稱爲經度和緯度。

最常用的非球形地球投影稱爲UTM。你可以在這裏閱讀:http://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system

無論如何,只要你沒有進行從一個系統到另一個系統的任何空間轉換,你並不關心你的數據使用的系統。

+1

最後一行真的讓我感到困擾,促進了無知,因爲*它可能無關緊要*? – Stijn 2014-04-16 06:50:49

2

我發現這個網站:http://spatialreference.org/ref/epsg/4326/對於理解您打算使用的SRID很有幫助。它提供了一個方便的地圖,一些邊界框信息和其他鏈接。

對於其他SRID,只需將URL末尾的數字更改爲您所需的數字即可。

1

返回的距離取決於您爲地理類型定義的"Spatial Reference Identifier (SRID)"

在下面的示例中,使用了默認的​​的4336,請參閱STGeomFromText的第二個參數。這意味着返回的距離以米爲單位,您通過查詢目錄視圖spatial_reference_systemsselect srs.unit_of_measure from sys.spatial_reference_systems as srs where srs.spatial_reference_id = 4326

作爲替代STGeomFromText找到這個,你可以使用parse其假設的4326一​​和你沒有顯式地指定一個。

計算兩點之間的距離時,對於兩種地理類型,您都必須使用相同的​​。例如:

DECLARE @address1 GEOGRAPHY 
DECLARE @address2 GEOGRAPHY 
DECLARE @distance float 
SET @address1 = GEOGRAPHY::STGeomFromText ('point(53.046908 -2.991673)',4326) 
SET @address2 = GEOGRAPHY::STGeomFromText ('point(51.500152 -0.126236)',4326) 
SET @distance = @address1.STDistance(@address2) 
SELECT @distance --this is the distance in meters 
相關問題