私のテーブルには、ポリゴンを格納するジオメトリフィールドがあります。
互いに交差するポリゴンは、単一のポリゴンにアタッチして形成する必要があります(以下を参照)。
(出典:location-world.com)
結果を計算することはできませんが、飛行中に実行する必要があります。カーソルでやりましたが、時間がかかりすぎます。
カーソルを使用せずにタスクを実行する方法はありますか?SQL Server2008R2を使用しています。
カーソルを使ったソースコードを添付しました。
DECLARE @Results TABLE (ResultId INT, Shape GEOMETRY)
DECLARE @ExistingIds TABLE (Id VARCHAR(50))
DECLARE @Id VARCHAR(50), @Shape GEOMETRY
DECLARE ViasCursor CURSOR FOR
SELECT ID, shape
FROM [dbo].[layer.2502]
OPEN ViasCursor
FETCH ViasCursor INTO @Id, @Shape
DECLARE @ResultId INT = 0
WHILE ( @@FETCH_STATUS = 0 )
BEGIN
IF NOT EXISTS ( SELECT Id FROM @ExistingIds WHERE Id = @Id )
BEGIN
DECLARE @Geo GEOMETRY = NULL
SELECT @Geo = COALESCE(@Geo.STUnion(Shape), Shape)
WHERE [Shape].STIntersects(@Shape) = 1
INSERT INTO @ExistingIds ( Id )
SELECT [Id]
FROM [dbo].[layer.2502]
WHERE [Shape].STIntersects(@Shape) = 1
DECLARE @ExistingId INT = NULL
SELECT @ExistingId = [ResultId]
FROM @Results
WHERE Shape.STIntersects(@Geo) = 1
IF @ExistingId IS NOT NULL
UPDATE @Results SET [Shape] = [Shape].STUnion(@Geo)
WHERE ResultId = @ExistingId
ELSE
BEGIN
INSERT INTO @Results ( [ResultId], [Shape] )
VALUES ( @ResultId, @Geo )
SET @ResultId = @ResultId + 1
END
END
FETCH ViasCursor INTO @Id, @Shape
END
CLOSE ViasCursor
DEALLOCATE ViasCursor
SELECT * FROM @Results