2017-04-12 71 views
0

我有2張桌子(面積&位置),我想檢查lat &在一個表格中的長座標是在另一個表格的區域中出現的。如何在SQL Server 2012 Spatial表中將列從「幾何」轉換爲「地理」?

表名:AREA 列: OBJECTID(INT),
AREA_NAME(VARCHAR(50)), GEOM(幾何

表名:LOCATION 列: ID(INT) , 緯度(VARCHAR(50)), 經度(VARCHAR(50))從區域表

樣本數據:

SELECT OBJECTID 
,AREA 
,GEOM 
,GEOM.STAsText() 
FROM AREA 

AREA TABLE

SELECT 
ID 
,LATITUDE 
,LONGITUDE 
FROM LOCATION 

LOCATION TABLE

我要檢查是否位置(即,緯度和經度座標)是在該地區與否。區域表有一列GEOMETRY列。 所以我想將這個幾何列轉換爲地理列。一旦我轉換爲地理位置,我可以使用STIntersects()檢查位置是否在區域內。

但是,當我嘗試轉換,我得到一個錯誤,因爲緯度值必須介於-90和90度之間。

SELECT GEOGRAPHY::STGeomFromText(CAST(GEOM AS VARCHAR(MAX)), 4326) FROM AREA 

完整的錯誤信息: 系統:

消息6522,級別16,狀態1,用戶定義的例程或聚合 「地理」 執行過程中出現線70 .NET框架的錯誤 .FormatException:24201:緯度值必須介於-90和 之間90度。 System.FormatException:在 Microsoft.SqlServer.Types.GeographyValidator.ValidatePoint(雙的x, 雙Y,可空1 z, Nullable 1米)在 Microsoft.SqlServer.Types.Validator.BeginFigure(雙X,雙Y, 可空1 z, Nullable 1米)在 Microsoft.SqlServer.Types.ForwardingGeoDataSink.BeginFigure(雙的x, 雙Y,可空1 z, Nullable 1米)在 Microsoft.SqlServer.Types.CoordinateReversingGeoDataSink.BeginFigure(雙 的x,雙Y,可空1 z, Nullable1米)at Microsoft.SqlServer.Types.WellKnownTextReader.ParseLineStringText()
at Microsoft.SqlServ er.Types.WellKnownTextReader.ParsePolygonText()
處 微軟 Microsoft.SqlServer.Types.WellKnownTextReader.ParseTaggedText(OpenGisType 型)在 Microsoft.SqlServer.Types.WellKnownTextReader.Read(OpenGisType型, 的Int32 SRID)。 SqlServer.Types.SqlGeography.ParseText(OpenGisType類型, SqlChars taggedText,Int32 srid)at Microsoft.SqlServer.Types.SqlGeography.GeographyFromText(OpenGisType type,SqlChars taggedText,Int32 srid)。

我是新來的這個sql服務器的空間數據。有人能指導我完成這項任務嗎?謝謝! :)上20170414

更新:Here是從AREA &位置表的採樣數據我已轉換的LAT &長座標到幾何後。

回答

0

看起來你的地區是在網站mercator座標,而不是經度和緯度。 在墨卡託座標是從(0,0)米計算,而不是度。

嘗試緯度經度轉換爲Web墨卡託,然後使用新座標創建的幾何點,

這裏是代碼exapmle(JS):

var degrees2meters = function(lon,lat) { 
     var x = lon * 20037508.34/180; 
     var y = Math.log(Math.tan((90 + lat) * Math.PI/360))/(Math.PI/180); 
     y = y * 20037508.34/180; 
     return [x, y] 
} 

x= -77.035974 
y = 38.898717 

console.log(degrees2meters(x,y)) 

// should result in: -8575605.398444, 4707174.018280 

https://gist.github.com/springmeyer/871897

+0

我已經轉換的緯度和長指向幾何體,然後嘗試檢查該區域是否包含經緯度點。但我沒有結果。 [這裏](https://ibb.co/hjBMi5)是來自Area和Location的示例數據。當我查看POINT&POLYGON數據時,多邊形區域不包含這些點。如何將經緯度點轉換爲幾何圖形有什麼問題嗎? – Rajanand

+0

你是否嘗試解決方案#2?在轉換爲georgaphy之前,與多邊形相交的區域列。 –

+0

我不知道如何去做#2。 – Rajanand

相關問題