![](/img/trans.png)
[英]SQL Server - Calculate Initial Bearing from Latitude & Longitude using GEOGRAPHY
[英]How to get Latitude Longitude from SQL Server 2008 geography line?
我是地圖世界的新手,我正在嘗試將 SQL Server 地理線列轉換回它的緯度\\經度點以在地圖上繪制。
這條線是這樣設置的
Set @GeoPoly = geography::STGeomFromText('LINESTRING('+@Polyline+')',4326)
有人知道怎么做嗎? 提前致謝
我很幸運:
DECLARE @g geography;
SET @g = geography::STLineFromText(
'LINESTRING(-122.360 47.656, -122.343 47.656 )'
, 4326
);
SELECT @g.STPointN(1).ToString(), @g.STPointN(2).ToString();
您的 LineString 是否僅由一條連接兩點的直線段組成? 如果是這樣,您可以將這些點的緯度和經度檢索為:
SELECT
@GeoPoly.STStartPoint.Lat AS Start_Lat,
@GeoPoly.STStartPoint.Long AS Start_Long,
@GeoPoly.STEndPoint.Lat AS End_Lat,
@GeoPoly.STEndPoint.Long AS End_Long;
如果您的 LineString 由連接一系列點的多個線段組成,那么您可以使用 ToString() 方法檢索 Well-Known Text 表示,然后通過逗號分割將結果字符串解析為坐標對:
SELECT @GeoPoly.ToString()
結果將采用以下格式:LINESTRING(Lon1 Lat1, Lon2, Lat2, .... , Lonn, Latn)
您可以通過組合 STasText()、STRING_SPLIT()、CROSS APPLY 和 STRING_AGG() 在查詢中實現這一點。 這是一個示例查詢:
WITH Links AS (
SELECT Id, REPLACE(REPLACE(PosList.STAsText(), 'LINESTRING (', ''), ')', '') as points_string
FROM LinkSequenceProjections
WHERE ImportFileId = 1
AND Id < 5
)
, Points AS (
SELECT Id, ltrim(value) as point_string, row_number() OVER (PARTITION BY Id ORDER By Id) as Nr
FROM Links
CROSS APPLY STRING_SPLIT(points_string, ',')
)
, Coords AS (
SELECT Id, Nr, CAST(value AS [varchar](max)) AS coord
FROM Points
CROSS APPLY STRING_SPLIT(point_string, ' ')
)
, GroupedByNr AS (
SELECT Id, Nr, MIN(coord) AS Lon, MAX(coord) AS Lat
FROM Coords
GROUP BY Id, Nr
)
, GroupedById AS (
SELECT Id, 'LINSESTRING (' + STRING_AGG(Lon + ' ' + Lat, ', ') WITHIN GROUP (ORDER BY Nr) + ')' as wkt2
FROM GroupedByNr
GROUP BY Id
)
SELECT Id, geography::STGeomFromText(wkt2, 4326) AS PosList2
FROM GroupedById
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.