SQL2008 Spatial関数を使用して、集計の結果を含むポリゴンを生成する方法

StackOverflow https://stackoverflow.com/questions/1212297

質問

ポイントのテーブルがあり、それぞれに名前、緯度、経度、エリアコードがあります。私がやりたいのは、集約(つまり、「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 で結果を表示できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top