簡體   English   中英

您是否設法在MULTIPOLYGONS上運行STBuffer? 使用SQL Server?

[英]Did you manage to run STBuffer on MULTIPOLYGONS ? With SQL Server?

在SQL Server地理空間中,我無法為MULTIPOLYGONS運行STBuffer

DECLARE @g geography = geography::STMPolyFromText('MULTIPOLYGON(((1 1, 1 -1, -1 -1, -1 1, 1 1)),((1 1, 3 1, 3 3, 1 1)))', 4326);  

SELECT @g   -- no problem to run
SELECT @g.ToString()  -- no problem to run
SELECT @g.STBuffer(1).ToString();  -- error

返回的錯誤是:

消息6522,第16層,狀態1,第64行
在執行用戶定義的例程或聚合“地理位置”期間發生.NET Framework錯誤:

System.ArgumentException:24144:由於實例無效,因此無法完成此操作。 使用MakeValid將實例轉換為有效實例。 請注意,MakeValid可能會導致幾何實例的點稍微移動。 System.ArgumentException:

我認為發生這種情況是因為您創建的多邊形不是有效的geography多邊形。 嘗試使用一組有效的緯度/經度值創建“多邊形”。

geometry數據類型執行相同的代碼似乎可行。

DECLARE @g geometry = geometry::STMPolyFromText('MULTIPOLYGON(((1 1, 1 -1, -1 -1, -1 1, 1 1)),((1 1, 3 1, 3 3, 1 1)))', 4326);  

select 
    geoMultiPolys = @g, 
    geoMultiPolysString = @g.ToString(),
    buffered = @g.STBuffer(1),
    bufferedString = @g.STBuffer(1).ToString(),
    IsValid = @g.STIsValid()

結果

緩沖空間多邊形

同樣,這是針對地理的作品

DECLARE @g geography = geography::STMPolyFromText('MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)), ((20 35, 10 30, 10 10, 30 5, 45 20, 20 35), (30 20, 20 15, 20 25, 30 20)))', 4326);  

select 
    geoMultiPolys = @g, 
    geoMultiPolysString = @g.ToString(),
    buffered = @g.STBuffer(1),
    bufferedString = @g.STBuffer(1).ToString(),
    IsValid = @g.STIsValid()

有效的SQL地理位置

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM