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 |