2016-09-14 6 views
0

何のためにあるのです。私は、変換することができますどのよう等しいSQL関数またはにStoredProcedure私はポイントが多角形の内部にあるか</p> <p>C#のメソッドこのであることを決定し、このC#メソッド持っている私のC#のメソッド

/// <summary> 
/// Determine that a point in inside a polygon or not 
/// </summary> 
/// <param name="points">Points of Polygon</param> 
/// <param name="point">Test Point</param> 
/// <returns></returns>  
Public bool IsInside(List<PointF> points,PointF point) 
    { 
     int i, j,n=points.Count; 
     bool c = false; 
     for (i = 0, j = n - 1; i < n; j = i++) 
     { 
      if (((points[i].Y > point.Y) != (points[j].Y > point.Y)) && 
       (point.X < 
       (points[j].X - points[i].X)*(point.Y - points[i].Y)/(points[j].Y - points[i].Y) + points[i].X)) 
       c = !c; 
     } 
     return c; 
    } 

をこれをSQL関数またはStoredProcedureに変換しますか?

+0

@ a_horse_with_no_name Microsoft SQL Server 2016 – Ali7091

+1

2つのジオメトリインスタンスを作成し、['STContains'](https://msdn.microsoft.com/en-gb/library/bb933904.aspx)を使用 –

+0

アイデア:リストを渡すことができますポイントをxmlデータとして指定し、xまたはyパラメータとして関数またはストアドプロシージャを指定します。ストアドプロシージャまたは関数の内部では、xmlデータをopenxmlを使用してテーブルにロードします(関数では、テーブル変数が必要です)。次に、selectクエリを実行し、if節のif条件をwhere節に入れます。 –

答えて

2

あなたは、空間geometryデータ型としてSQL Serverデータベースに格納されているすべてのあなたのポリゴンをお持ちの場合は、(Googleがここにあなたの友人である)、多くがあるそれらのSQL Serverの2008R2 +で利用可能な空間関数を使用することができます

declare @g geometry 
set @g = geometry::STGeomFromText('POLYGON((-33.229869 -70.891988 
              ,-33.251124 -70.476616 
              ,-33.703094 -70.508045 
              ,-33.693931 -70.891052 
              ,-33.229869 -70.891988 
              ))' 
           ,0) 

DECLARE @h geometry; 

SET @h = geometry::STGeomFromText('POINT(-33.3906300 -70.5725020)', 0); 
SELECT @g.STContains(@h);