Freigeben über


Räumliche Daten im SQL Server EF Core-Anbieter

Diese Seite enthält zusätzliche Informationen zur Verwendung von räumlichen Daten mit dem Microsoft SQL Server-Datenbankanbieter. Allgemeine Informationen zur Verwendung von räumlichen Daten in EF Core finden Sie in der Hauptdokumentation zu räumlichen Daten.

Geografie oder Geometrie

Standardmäßig werden räumliche Eigenschaften geography-Spalten in SQL Server zugeordnet. Um geometry zu verwenden, konfigurieren Sie den Spaltentyp in Ihrem Modell.

Geografie der polygonalen Ringe

Bei Verwendung des geography-Spaltentyps erzwingt SQL Server zusätzliche Anforderungen an den Außenring (oder die Schale) und die Innenringe (oder Löcher). Der Außenring muss gegen den Uhrzeigersinn ausgerichtet sein und die Innenringe im Uhrzeigersinn. NetTopologySuite (NTS) überprüft dies, bevor Werte an die Datenbank gesendet werden.

FullGlobe

SQL Server verfügt über einen nicht standardmäßigen Geometrietypen, der die vollständige Kugel darstellt, wenn der geography-Spaltentyp verwendet wird. Es hat auch eine Möglichkeit, Polygone basierend auf der vollständigen Kugel (ohne Außenring) darzustellen. Beides wird von NTS nicht unterstützt.

Warnung

FullGlobe und darauf basierende Polygone werden von NTS nicht unterstützt.

Curves

Wie in der Hauptdokumentation zu räumlichen Daten erwähnt, kann NTS derzeit keine Kurven darstellen. Dies bedeutet, dass Sie die Werte „CircularString“, „CompoundCurve“ und „CurePolygon“ mithilfe der STCurveToLine-Methode transformieren müssen, bevor Sie sie in EF Core verwenden.

Warnung

CircularString, CompoundCurve und CurePolygon werden von NTS nicht unterstützt.

Zuordnungen räumlicher Funktionen

Diese Tabelle zeigt, welche NTS-Member in welche SQL-Funktionen übersetzt werden. Beachten Sie, dass die Übersetzungen abhängig davon variieren, ob die Spalte vom Typ „Geografie“ oder „Geometrie“ ist.

.NET SQL (Geografie) SQL (Geometrie) Hinzugefügt in
EF.Functions.CurveToLine(geometry) @geometry.STCurveToLine() @geometry.STCurveToLine() EF Core 7.0
geometry.Area @geometry.STArea() @geometry.STArea()
geometry.AsBinary() @geometry.STAsBinary() @geometry.STAsBinary()
geometry.AsText() @geometry.AsTextZM() @geometry.AsTextZM()
geometry.Boundary @geometry.STBoundary()
geometry.Buffer(distance) @geometry.STBuffer(@distance) @geometry.STBuffer(@distance)
geometry.Centroid @geometry.STCentroid()
geometry.Contains(g) @geometry.STContains(@g) @geometry.STContains(@g)
geometry.ConvexHull() @geometry.STConvexHull() @geometry.STConvexHull()
geometry.Crosses(g) @geometry.STCrosses(@g)
geometry.Difference(other) @geometry.STDifference(@other) @geometry.STDifference(@other)
geometry.Dimension @geometry.STDimension() @geometry.STDimension()
geometry.Disjoint(g) @geometry.STDisjoint(@g) @geometry.STDisjoint(@g)
geometry.Distance(g) @geometry.STDistance(@g) @geometry.STDistance(@g)
geometry.Envelope @geometry.STEnvelope()
geometry.EqualsTopologically(g) @geometry.STEquals(@g) @geometry.STEquals(@g)
geometry.GeometryType @geometry.STGeometryType() @geometry.STGeometryType()
geometry.GetGeometryN(n) @geometry.STGeometryN(@n + 1) @geometry.STGeometryN(@n + 1)
geometry.InteriorPoint @geometry.STPointOnSurface()
geometry.Intersection(other) @geometry.STIntersection(@other) @geometry.STIntersection(@other)
geometry.Intersects(g) @geometry.STIntersects(@g) @geometry.STIntersects(@g)
geometry.IsEmpty @geometry.STIsEmpty() @geometry.STIsEmpty()
geometry.IsSimple @geometry.STIsSimple()
geometry.IsValid @geometry.STIsValid() @geometry.STIsValid()
geometry.IsWithinDistance(geom, distance) @geometry.STDistance(@geom)<= @distance @geometry.STDistance(@geom)<= @distance
geometry.Length @geometry.STLength() @geometry.STLength()
geometry.NumGeometries @geometry.STNumGeometries() @geometry.STNumGeometries()
geometry.NumPoints @geometry.STNumPoints() @geometry.STNumPoints()
geometry.OgcGeometryType CASE @geometry.STGeometryType() WHEN N'Point' THEN 1 ... ENDE CASE @geometry.STGeometryType() WHEN N'Point' THEN 1 ... ENDE
geometry.Overlaps(g) @geometry.STOverlaps(@g) @geometry.STOverlaps(@g)
geometry.PointOnSurface @geometry.STPointOnSurface()
geometry.Relate(g, intersectionPattern) @geometry.STRelate(@g, @intersectionPattern)
geometry.SRID @geometry.STSrid @geometry.STSrid
geometry.SymmetricDifference(other) @geometry.STSymDifference(@other) @geometry.STSymDifference(@other)
geometry.ToBinary() @geometry.STAsBinary() @geometry.STAsBinary()
geometry.ToText() @geometry.AsTextZM() @geometry.AsTextZM()
geometry.Touches(g) @geometry.STTouches(@g)
geometry.Union(other) @geometry.STUnion(@other) @geometry.STUnion(@other)
geometry.Within(g) @geometry.STWithin(@g) @geometry.STWithin(@g)
geometryCollection[i] @geometryCollection.STGeometryN(@i + 1) @geometryCollection.STGeometryN(@i + 1)
geometryCollection.Count @geometryCollection.STNumGeometries() @geometryCollection.STNumGeometries()
lineString.Count @lineString.STNumPoints() @lineString.STNumPoints()
lineString.EndPoint @lineString.STEndPoint() @lineString.STEndPoint()
lineString.GetPointN(n) @lineString.STPointN(@n + 1) @lineString.STPointN(@n + 1)
lineString.IsClosed @lineString.STIsClosed() @lineString.STIsClosed()
lineString.IsRing @lineString.IsRing()
lineString.StartPoint @lineString.STStartPoint() @lineString.STStartPoint()
multiLineString.IsClosed @multiLineString.STIsClosed() @multiLineString.STIsClosed()
point.M @point.M @point.M
point.X @point.Long @point.STX
point.Y @point.Lat @point.STY
point.Z @point.Z @point.Z
polygon.ExteriorRing @polygon.RingN(1) @polygon.STExteriorRing()
polygon.GetInteriorRingN(n) @polygon.RingN(@n + 2) @polygon.STInteriorRingN(@n + 1)
polygon.NumInteriorRings @polygon.NumRings() - 1 @polygon.STNumInteriorRing()

Aggregatfunktionen

.NET SQL Hinzugefügt in
GeometryCombiner.Combine(group.Select(x => x.Property)) CollectionAggregate(Property) EF Core 7.0
ConvexHull.Create(group.Select(x => x.Property)) ConvexHullAggregate(Property) EF Core 7.0
UnaryUnionOp.Union(group.Select(x => x.Property)) UnionAggregate(Property) EF Core 7.0
EnvelopeCombiner.CombineAsGeometry(group.Select(x => x.Property)) EnvelopeAggregate(Property) EF Core 7.0

Zusätzliche Ressourcen