2013-05-09 10 views
12

Was ist das C# -Aquivalent dieses Geospatial T-SQL-Codes?SQL-Geographie in C# konvertieren

DECLARE @g geography; 
DECLARE @h geography; 
SET @g = geography::STGeomFromText('POLYGON((-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))', 4326); 
SET @h = geography::Point(47.653, -122.358, 4326) 

SELECT @g.STIntersects(@h) 

Ich versuche, einen Punkt in einem Polygon mit dem SqlGeometry Datentyp zu finden - und kann mit der oben T-SQL; aber ich verstehe nicht, wie man äquivalenten C# -Code erreicht.

+0

mögliches Duplikat von [Geo-Funktionen von SQL Server 2008 zu C# (Breiten- und Längengrad innerhalb oder außerhalb des Polygons/Kartenbereichs)] (http://stackoverflow.com/questions/9448054/geo-functions-from-sql- server-2008-zu-c-sharp-latitude-and-longitude-points-ins) – Damith

Antwort

9

Versuchen Sie folgendes:

public bool OneOffSTIntersect() 
{ 
    var g = 
     Microsoft.SqlServer.Types.SqlGeography.STGeomFromText(
      new System.Data.SqlTypes.SqlChars(
       "POLYGON((-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))"), 4326); 
    // suffix "d" on literals below optional but explicit 
    var h = Microsoft.SqlServer.Types.SqlGeography.Point(47.653d, -122.358d, 4326); 

    // rough equivalent to SELECT 
    System.Console.WriteLine(g.STIntersects(h)); 

    // Alternatively return from a C# method or property (get). 
    return g.STIntersects(h); 
} 

SqlGeography Methods Seite Links MSDN zu Informationen zu jeder der C# Äquivalente zu den kritischen Anrufe in T-SQL - z.B. STIntersects.

+3

'// grobe Äquivalent zu SELECT' :-) – Tim

+0

@Tim: Lustig, letzte Nacht kam das gerade so heraus, wie ich es nicht dachte Kenntnis der allgemeinen C# -Kenntniskenntnisse oder des Kontexts des OP zur Verwendung des übersetzten Codes; Aber heute scheint mir das ziemlich lustig zu sein. :) Danke, dass du es aufgezeigt hast. – J0e3gan