2

私はマッピングの世界に不慣れで、SQLServerの地理線の列を緯度\経度のポイントに変換して地図上に描画しようとしています。

ラインはこのように設定されています

Set @GeoPoly = geography::STGeomFromText('LINESTRING('+@Polyline+')',4326)

誰もがこれを行う方法を知っていますか?前もって感謝します

4

3 に答える 3

2

私はこれで運が良かった:

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();
于 2012-04-30T21:44:53.633 に答える
1

LineStringは、2つのポイントを結ぶ1つの直線セグメントのみで構成されていますか?その場合、これらのポイントの緯度と経度を次のように取得できます。

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)

于 2012-05-01T08:30:06.960 に答える
0

これは、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
于 2020-06-12T11:10:15.910 に答える