SQL2008 Spatial関数を使用して、集計の結果を含むポリゴンを生成する方法
-
06-07-2019 - |
質問
ポイントのテーブルがあり、それぞれに名前、緯度、経度、エリアコードがあります。私がやりたいのは、集約(つまり、「group by」句)を実行し、特定の市外局番のすべてのポイントを含むポリゴンを返すことです。
地理データ型の組み込み集計があるかどうかを見つけるのに少し苦労していますが、境界ポリゴンを与えることはおろか
議論のために、次のようなテーブルがあると仮定します。
+---------+------+---------+---------+ | Name | Area | Lat | Long | +---------+------+---------+---------+ | Ipswich | A | 52.053 | 1.156 | | Luton | A | 51.8717 | -0.4246 | | Melton | A | 52.1064 | 1.3322 | | Didcot | B | 51.6024 | -1.2321 | | Oxford | B | 51.7486 | -1.265 | +---------+------+---------+---------+
(実際には、最小エリアには57ポイント、最大エリアには626ポイント)
解決
これを行う組み込みの方法はありませんが、 Sql Spatial Toolsの一部として利用可能な集約があります CodePlexパッケージ。必要に応じて、バウンディングボックス集約またはユニオン集約のいずれかを使用してから、ConvexHullを呼び出して、ボックスの代わりに最小ポリゴンを取得することもできます。
他のヒント
ここに到着し、取得したコードを見たい人のために(素晴らしい) Sql空間ツール:
DECLARE @points TABLE
(
Name VARCHAR(50),
Area CHAR(1),
Point GEOGRAPHY
)
INSERT INTO @points VALUES ('Ipswich', 'A', geography::STGeomFromText('POINT( 1.156 52.053 )', 4326))
INSERT INTO @points VALUES ('Luton', 'A', geography::STGeomFromText('POINT( -0.4246 51.8717 )', 4326))
INSERT INTO @points VALUES ('Melton', 'A', geography::STGeomFromText('POINT( 1.3322 52.1064 )', 4326))
INSERT INTO @points VALUES ('Didcot', 'B', geography::STGeomFromText('POINT( -1.2321 51.6024 )', 4326))
INSERT INTO @points VALUES ('Oxford', 'B', geography::STGeomFromText('POINT( -1.265 51.7486 )', 4326))
SELECT dbo.ConvexHullGeography(dbo.GeographyUnionAggregate(point)), 'red' as color, 1 as thickness
FROM @points
GROUP BY Area
GeoQuery2008 で結果を表示できます。
所属していません StackOverflow