2012-02-01 21 views
5

我必須多面看起來像一個明星在中間的空洞: image如何填寫孔MULTIPOLYGON在SQL Server 2008中的空間CLR

如何轉變這種多面到一個多邊形或MULTIPOLYGON說還包括中間的洞,例如填補漏洞(使用SQL Server 2008 CLR)?

WKT空星: MULTIPOLYGON(((-75.850724788384952 39.781027647924496,-75.847514688412119 39.777165541462658,-75.835440819564724 39.781232982437771,-75.850724788384952 39.781027647924496)),((-75.861083592601616 39.772592386436379,-75.836642464570019 39.764081172000729,-75.847514688412119 39.777165541462658,-75.861083592601616 39.772592386436379 ,-75.861083592601616 39.772592386436379)),((-75.866832035574916 39.780809081927849,-75.850724788384952 39.781027647924496,-75.857585145413083 39.78927966926625,-75.866832035574916 39.780809081927849)),((-75.8843643235475 39.764740937261692,-75.861083592601616 39.772592386436379,-75.8717486771904 39.776304058191712,-75.8843643235475 39.764740937261692)),(( - 75.884021002483152 39.780573380153484,-75.8717486771904 39.776304058191712,-75.866832035574916 39.780809081927849, -75.884021002483152 39.780573380153484)))

謝謝。

回答

9

也許不是最快的方法,但一個辦法,你可以做到這一點:

  1. 計算包含您輸入幾何:使用STConvexHull,它返回一個包含整個輸入幾何一個多邊形,包括幾何體內的空白區域和幾何體外部的凹面(例如星星點之間的區域)。
  2. 查找空白區域:使用STDifference,從凸包中減去輸入,它將返回前面提到的空白區域的多邊形。
  3. 確定哪些空白區域在輸入範圍外:使用STBoundary獲取凸包的邊界。一個區域在輸入幾何體內部,當且僅當它不觸及凸包的邊界時。使用STTouches進行檢查。
  4. 計算幾何圖形和內部空白區域的聯合:使用STUnion。

下面是一個示例腳本:

DECLARE @g geometry; 
DECLARE @hull geometry; 
DECLARE @regions geometry; 
DECLARE @boundary geometry; 

SET @g = geometry::STGeomFromText(...); 
SET @hull = @g.STConvexHull(); 
SET @regions = @hull.STDifference(@g); 
SET @boundary = @hull.STBoundary(); 

WITH Geoms AS 
(
    SELECT 1 i 

    UNION ALL 

    SELECT i + 1 
    FROM Geoms 
    WHERE i < @regions.STNumGeometries() 
) 
SELECT @g = @g.STUnion(@regions.STGeometryN(i)) 
FROM Geoms 
WHERE @regions.STGeometryN(i).STTouches(@boundary) = 0 

SELECT @g 
+0

謝謝邁克爾的最佳解決方案! – Ross 2012-02-01 13:43:28

+0

@ user1181846絕對 - 如果您滿意,請考慮接受它作爲答案。 – 2012-02-01 13:50:36

+0

這是絕對的黃金。謝謝! – KOGI 2013-05-24 21:22:51