値でグループ化し、T-SQLの各グループのポイント(緯度と経度)から地理ポリラインを作成します

user3799279

同様の質問がここで尋ねられました:

T-SQLのポイントから地理ポリラインを作成する

その質問をさらに進めると、次のようなテーブルスキーマがあります。

CREATE TABLE [dbo].[LongAndLats](
[Longitude] [float] NULL,
[Latitude] [float] NULL,
[SortOrder] [bigint] NULL,
[SensorID] [bigint] NULL,
)

サンプルデータは次のようになります。

ここに画像の説明を入力してください

TSQLを使用してこれらのポイントを各SensorIDの地理ポリラインに変換するにはどうすればよいですか各SensorIDのSensorID /ポリラインレコードを持つように)?

db_cursorを使用してみましたが、グループごとに個別の結果セットが得られます(地域は同じである可能性があります)。このコード:

DECLARE @SensorID VARCHAR(2000)
DECLARE @LineFromPoints geography
DECLARE @BuildString NVARCHAR(MAX)

DECLARE db_cursor CURSOR FOR  
SELECT Distinct([SensorId]) 
FROM [dbo].[LongAndLats]

OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO LongAndLats 

WHILE @@FETCH_STATUS = 0   
BEGIN   
       SELECT @BuildString = COALESCE(@BuildString + ',', '') + CAST([Longitude] AS NVARCHAR(50)) + ' ' + CAST([Latitude] AS NVARCHAR(50))
       FROM [LongAndLats]
       WHERE SensorID = @SensorID
       ORDER BY SortOrder            

       SET @BuildString = 'LINESTRING(' + @BuildString + ')';   
       SET @LineFromPoints = geography::STLineFromText(@BuildString, 4326);
       SELECT @LineFromPoints As 'Geomerty', @name As 'SensorID' 

       FETCH NEXT FROM db_cursor INTO @name   
END   

CLOSE db_cursor   
DEALLOCATE db_cursor

この結果:

ここに画像の説明を入力してください

最終的には、SensorID / Polylineのすべてのペアを返すビューが必要です。私の現在のアプローチがうまくいくかどうかはわかりません。提案や例をいただければ幸いです。

Lukasz Szozda

SQL Server 2017+あなたが使用できるから

SELECT geography::STLineFromText('LINESTRING(' + 
         STRING_AGG(CONCAT(Longitude, ' ' ,Latitude), ',') 
         WITHIN GROUP(ORDER BY SortOrder) + ')' , 4326) AS geometry
      ,SensorId
FROM dbo.LongAndLats
GROUP BY SensorId
HAVING COUNT(*) > 1;

DBFiddleデモ


db_cursorを使用してみましたが、グループごとに個別の結果セットが表示されます

カーソルを避け、各行をセミコロンで終了し、使用を停止してください。

SELECT @BuildString = COALESCE(@BuildString + ',', '') 
       + CAST([Longitude] AS NVARCHAR(50)) + ' ' + CAST([Latitude] 
        AS NVARCHAR(50))
FROM [LongAndLats]
WHERE SensorID = @SensorID
ORDER BY SortOrder;  

上記の構成は問題ないように見えるかもしれませんが、未定義の動作につながる可能性があります。詳細:nvarchar連結/インデックス/ nvarchar(max)の説明できない動作

編集:

SQL Server 2012バージョン:

SELECT geography::STLineFromText('LINESTRING(' 
      + STUFF(
             (SELECT ',' + CONCAT(Longitude, ' ' ,Latitude) 
              FROM dbo.LongAndLats t2
              WHERE t1.SensorId = t2.SensorId 
              ORDER BY SortOrder
              FOR XML PATH (''))
             , 1, 1, '')
       + ')' 
       , 4326) AS geometry, SensorId
FROM dbo.LongAndLats t1
GROUP BY SensorId
HAVING COUNT(*) > 1;

DBFiddle Demo2

EDIT2:

避けるために:

ユーザー定義ルーチンまたは集約「地理」の実行中に.NETFrameworkエラーが発生しました。

System.FormatException:24117:十分なポイントがないため、LineString入力は無効です。LineStringには少なくとも2つのポイントが必要です。

追加できHAVING COUNT(*) > 1ます;

最終編集:

「ガベージデータ」がある場合は、それをフィルターで除外します(またはCHECKその列に制約を追加します)。

「緯度の値は-90〜90度でなければなりません」

SELECT geography::STLineFromText('LINESTRING(' 
      + STUFF(
             (SELECT ',' + CONCAT(Longitude, ' ' ,Latitude) 
              FROM dbo.LongAndLats t2
              WHERE t1.SensorId = t2.SensorId 
                AND Latitude BETWEEN -90 and 90
                AND Longitude BETWEEN -180 AND 180
              ORDER BY SortOrder
              FOR XML PATH (''))
             , 1, 1, '')
       + ')' 
       , 4326) AS geometry, SensorId
FROM dbo.LongAndLats t1
WHERE Latitude BETWEEN -90 and 90
  AND Longitude BETWEEN -180 AND 180
GROUP BY SensorId
HAVING COUNT(*) > 1;

DBFiddle Demo3

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

緯度/経度ポイントをRのシェープファイルにマップします

分類Dev

PostGISポイントから緯度/経度を取得します

分類Dev

指定されたポイントから10km以内の緯度/経度のリストを生成します

分類Dev

緯度と経度の配列からMapboxを使用してポリラインを描画する-Swift3 iOS

分類Dev

2つのグーグルマップポイント(緯度と経度)を使用してmongodbクエリから正方形の領域データを検索するには

分類Dev

djangoデータをJavaScriptにレンダリングして、緯度と経度を含む地図のポリラインを作成する

分類Dev

緯度/経度フィールドを地理空間ポイントに変換します

分類Dev

地理ポイント(緯度と経度)を取得できますが、マップ上の位置を特定できませんでした

分類Dev

緯度と経度を使用してルートのポリゴンを作成する

分類Dev

ポイント(緯度と経度)をggmapにプロットします

分類Dev

Googleマップは複数の緯度経度の間にポリラインを描画します

分類Dev

2つの経度-緯度ポイントの間にさらにポイントを生成します

分類Dev

ポリラインの経度と緯度 : リーフレット

分類Dev

MySQLの「POINT」とPHPを使用して、フォームから緯度と経度のポイントを挿入します

分類Dev

Solrのlocation(LatLonPointSpatialFieldクラス)フィールドに緯度と経度をインポートする

分類Dev

シェープファイルのポリゴンをチェックする方法には、緯度と経度のポイントの多数のメッシュグリッドが含まれています

分類Dev

ReactNativeのGoogleプレイスオートコンプリートから緯度と経度を取得する

分類Dev

Pythonで緯度と経度のデータを使用して地図をプロットし、地図内のいくつかの緯度と経度のポイントを強調表示するにはどうすればよいですか?

分類Dev

Angularでオートコンプリートされたグーグルプレイスから緯度と経度を保存する方法

分類Dev

反応ネイティブで緯度と経度を使用してグーグルマップ内にポリゴンを描画したい

分類Dev

SQLはバウンディングボックス内の緯度と経度のポイントを選択します

分類Dev

Androidの2つの異なるポイントの緯度と経度を使用してメートル単位で距離を見つけます

分類Dev

Androidの2つの異なるポイントの緯度と経度を使用してメートル単位で距離を見つけます

分類Dev

マップビューの特定のポイントから経度と緯度をすばやく取得するにはどうすればよいですか?

分類Dev

Rを使用して、接続されたポイントのセット(経度、緯度)をクラスタリングします

分類Dev

Cakephpは緯度と経度のグーグルマップから住所を取得します

分類Dev

2つのポイントの緯度と経度が与えられた場合、その間のポイントの座標を計算します

分類Dev

緯度/経度をRのポリゴン/シェープファイルの最も近いポイントにマッピングするにはどうすればよいですか?

分類Dev

Python:Webスクレイピング-Airbnbはリストの緯度と経度の値を取得します

Related 関連記事

  1. 1

    緯度/経度ポイントをRのシェープファイルにマップします

  2. 2

    PostGISポイントから緯度/経度を取得します

  3. 3

    指定されたポイントから10km以内の緯度/経度のリストを生成します

  4. 4

    緯度と経度の配列からMapboxを使用してポリラインを描画する-Swift3 iOS

  5. 5

    2つのグーグルマップポイント(緯度と経度)を使用してmongodbクエリから正方形の領域データを検索するには

  6. 6

    djangoデータをJavaScriptにレンダリングして、緯度と経度を含む地図のポリラインを作成する

  7. 7

    緯度/経度フィールドを地理空間ポイントに変換します

  8. 8

    地理ポイント(緯度と経度)を取得できますが、マップ上の位置を特定できませんでした

  9. 9

    緯度と経度を使用してルートのポリゴンを作成する

  10. 10

    ポイント(緯度と経度)をggmapにプロットします

  11. 11

    Googleマップは複数の緯度経度の間にポリラインを描画します

  12. 12

    2つの経度-緯度ポイントの間にさらにポイントを生成します

  13. 13

    ポリラインの経度と緯度 : リーフレット

  14. 14

    MySQLの「POINT」とPHPを使用して、フォームから緯度と経度のポイントを挿入します

  15. 15

    Solrのlocation(LatLonPointSpatialFieldクラス)フィールドに緯度と経度をインポートする

  16. 16

    シェープファイルのポリゴンをチェックする方法には、緯度と経度のポイントの多数のメッシュグリッドが含まれています

  17. 17

    ReactNativeのGoogleプレイスオートコンプリートから緯度と経度を取得する

  18. 18

    Pythonで緯度と経度のデータを使用して地図をプロットし、地図内のいくつかの緯度と経度のポイントを強調表示するにはどうすればよいですか?

  19. 19

    Angularでオートコンプリートされたグーグルプレイスから緯度と経度を保存する方法

  20. 20

    反応ネイティブで緯度と経度を使用してグーグルマップ内にポリゴンを描画したい

  21. 21

    SQLはバウンディングボックス内の緯度と経度のポイントを選択します

  22. 22

    Androidの2つの異なるポイントの緯度と経度を使用してメートル単位で距離を見つけます

  23. 23

    Androidの2つの異なるポイントの緯度と経度を使用してメートル単位で距離を見つけます

  24. 24

    マップビューの特定のポイントから経度と緯度をすばやく取得するにはどうすればよいですか?

  25. 25

    Rを使用して、接続されたポイントのセット(経度、緯度)をクラスタリングします

  26. 26

    Cakephpは緯度と経度のグーグルマップから住所を取得します

  27. 27

    2つのポイントの緯度と経度が与えられた場合、その間のポイントの座標を計算します

  28. 28

    緯度/経度をRのポリゴン/シェープファイルの最も近いポイントにマッピングするにはどうすればよいですか?

  29. 29

    Python:Webスクレイピング-Airbnbはリストの緯度と経度の値を取得します

ホットタグ

アーカイブ