Frage

Ich habe eine Polygonstruktur in einer sql2005 db wie unten beschrieben.

CREATE TABLE [dbo].[Polygons](
    [PolygonID] [int] IDENTITY(1,1) NOT NULL,
    [PolygonName] [varchar](255) NOT NULL,
    [PolygonColor] [varchar](7) NOT NULL,
    [PolygonRuleID] [int] NOT NULL)

CREATE TABLE [dbo].[Polylines](
    [LineID] [int] IDENTITY(1,1) NOT NULL,
    [LineX1] [float] NOT NULL,
    [LineY1] [float] NOT NULL,
    [LineX2] [float] NOT NULL,
    [LineY2] [float] NOT NULL,
    [PolygonID] [int] NOT NULL
)

Nun rufe ich ganze Zeilen zu Anwendung und setze alle Testfunktion zu treffen.

public static bool PointInPolygon(float pointX, float pointY, PolylineCollection polygon)
        {
            int nvert = polygon.Count();
            int i, j = 0;
            bool c = false;
            for (i = 0, j = nvert - 1; i < nvert; j = i++)
            {
                if (((polygon[i].LineY1 > pointY) != (polygon[j].LineY1 > pointY)) &&
                 (pointX < (polygon[j].LineX1 - polygon[i].LineX1) * (pointY - polygon[i].LineY1) / (polygon[j].LineY1 - polygon[i].LineY1) + polygon[i].LineX1))
                    c = !c;
            }
            return c;
        }

Aber ich brauche diese Funktion, um SQL Server zu verschieben. Aber SQL Server 2005 hat keine native räumliche Funktionen und ich möchte nicht alle zusätzliche räumliche Funktionalität Bibliotheken verwenden. Wie kann ich Port diese Funktion auf T-SQL? :) Oder jemand andere Lösung PointInPolygon haben überprüfen?

Danke

War es hilfreich?

Lösung

SQL Server 2005 ermöglicht es Ihnen, native Funktionen für die CLR zu schreiben, die Server-Seite ausführen können. Sie können die MSDN Intro Mit der CLR-Integration in SQL Server 2005 . Auf diese Weise können Sie Ihre Funktion als Ergänzung zu SQL Server und läuft in nativer Geschwindigkeit umgesetzt haben.

scroll top