2011-05-23 78 views

回答

1

據我所知,您將不得不使用外部應用程序將您的形狀渲染爲大量的點。有關呈現圓圈的技巧,請參閱this blog

要考慮的一種可能性是CLR proc渲染你需要的形狀和帶有索引的視圖。我不知道這樣做會有多好,但它可能會奏效。

+0

感謝您的聯繫!看起來幾何類型不是我正在尋找的,因爲我不想將其存儲爲近似數百個點。如果我要使用它,我可能會使用幾何來存儲中心點,並將半徑作爲單獨的字段。 – DanDan 2011-05-23 11:11:01

+0

接受,因爲博客文章顯示我的數據類型不適合我。 – DanDan 2011-05-23 13:23:57

1

快速瀏覽並在Spatial Samples上找到了此MSDN頁面。它涵蓋了在WKT中輸入數據的所有方法,WML & XML(GML)以及用於查看Human Readable格式的功能。它還涵蓋了MakeValid,STIsValid & STSrid。

有看起來是一個公平的幾個SQL的例子,你會發現這麼晚纔回復有用

+0

感謝您的鏈接。 – DanDan 2011-05-23 11:08:50

1

遺憾。你總是可以編寫自己的用戶定義型稱爲,具有兩個屬性,即重心半徑

新形成的UDT中,創建,是以屬性質心(三維點),和半徑的方法()。在此之後,創建一個方法,使用SqlGeometrySqlGeometryBuilder構建新形成的對象。

首先,創建一個的實例幾何。從類對象繼承該質心值,然後,創建另一個幾何多邊形這是一個從所述對象導出的,並且STBuffer半徑)它。

下面是我的例子:(寫在30分鐘)

public SqlGeometry ToSQLGeometry() 
    { 
     int srid = this.SRID; // i.e. 4326 

     SqlGeometry geom = new SqlGeometry(); 
     SqlGeometryBuilder gb = new SqlGeometryBuilder(); 
     OpenGisGeometryType pt = OpenGisGeometryType.Point; 

     gb.SetSrid(srid); 

     gb.BeginGeometry(pt); 
     gb.BeginFigure(this.Centroid.X, this.Centroid.Y, this.Centroid.Z, this.Centroid.M); 
     gb.EndFigure(); 
     gb.EndGeometry(); 

     geom = gb.ConstructedGeometry; 
     geom = geom.MakeValid(); // Optional for Point data 

     SqlGeometry geomCircle = new SqlGeometry(); 
     geomCircle = geom.STBuffer(this.Radius); 

     return geomCircle; 
    } 

當你使用CLR項目類型在VS2010做到了這一點,你可以將其部署到數據庫中。

在SQL中,你可以調用該對象本身:: 解析(X Y Z M,R)

declare @c Circle 
set @c = Circle::Parse('5 6 7 8,2') 
select 'Circle', @c.ToString(), @c.ToSQLGeometry() 
相關問題