2015-04-14 13 views
2

我正在查看sql地理數據類型,它看起來不是非常直觀,我只是沒有找到很多好的(或者說「易於理解」)信息。例如(從一個網站,我發現稀疏談論它採取「部分」):SQL地理數據類型,如何使用它包含的亂碼?

INSERT INTO [dbo].[visitorLocationInfo](id, test) 
VALUES(3, 
    geography::STPointFromText('POINT(55.9523783996701 -3.2051030639559)', 4326) 
); 

我拿到第一個是緯度,第二長,但什麼是對(4326)是第三值,我怎麼與它放入的結果一起工作?

id latitude longitude zip  city state country test 
3 NULL  NULL  NULL NULL NULL NULL 0xE6100000010CF9FF3F130DA409C0FDFF0F89E7F94B40 

這一長串數字是不是很可讀......

也許我只是需要有人用5分鐘來給我鎳遊?

+0

從檢出[STPointFromText](https://msdn.microsoft.com/en-us/library/microsoft.sqlserver.types.sqlgeography.stpointfromtext.aspx)看起來'4326'是空間參考ID 。可悲的是我不知道如何回答你的問題的其他部分。 –

回答

2

地理數據類型實現爲CLR類型。這意味着它的行爲就像編程世界中的一個對象。因此,您可以撥打all sorts of methods。你所看到的是對象的十六進制表示。

並回應你有關距離等問題,你說得對。如果你有一個表與地理類型的列,你可以這樣做:

declare @g geography = 
    geography::STPointFromText(
     'POINT(55.9523783996701 -3.2051030639559)', 4326 
    ).STBuffer(5); 

select * 
from dbo.yourTable 
where gCol.STIntersects(@g) = 1 

它說「讓我所有的其中包含在這些地理對象的某些部分在dbo.yourTable行列gCol在55.9523783996701 -3.2051030639559的5米內「。

+0

謝謝。你真的很好*。我還有最後一個問題。在我的例子中,經度和緯度後,數字4326 ...這是什麼參數?我發現代碼的例子沒有解釋這一點。 – MetalPhoenix

+1

它是空間參考ID(SRID)。從本質上講,多年來許多組織都以不同的方式描述了我們生活的扁球體。您可以在sys.spatial_reference_systems中查看所有SQL Server知道的信息。我已經使用過4326,但是YMMV。最後,兩個地理實例需要有相同的SRID才能進行比較。認爲它就像整理文本數據一樣。 –

+0

感謝您的好解釋。可以肯定,儘管我明白了:簡而言之,只要我使用同一個,並且幾乎可以使用空間參考系統參考文獻中列出的任何一個,它就無關緊要。對? – MetalPhoenix

2

我不熟悉,但it seems you can call ToString在列,以獲得文本表示回:

select test.ToString() 
from tableName 
+0

這是我最初尋找的,所以我會將其標記爲「答案」,因爲我可以使用它。 (謝謝)我真的很想理解它,但是因爲地理數據類型可以使用基於球面「平面」的距離過濾,而不需要應用三角函數函數... – MetalPhoenix

相關問題