Freigeben über


Räumliche Daten im SQL Server EF Core-Provider

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 den Spalten in SQL Server zugeordnet geography. Um geometry zu verwenden, konfigurieren Sie den Spaltentyp in Ihrem Modell.

Geografische Polygonringe

Bei Verwendung des geography Spaltentyps erzwingt SQL Server zusätzliche Anforderungen an den Außenring (oder die Schale) und 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 Geometrietyp, der den vollständigen Globus darstellt, wenn der geography Spaltentyp verwendet wird. Es hat auch eine Möglichkeit, Polygone basierend auf dem vollständigen Globus (ohne Außenring) darzustellen. Keines von beiden wird von NTS unterstützt.

Warnung

FullGlobe und Polygone werden von NTS nicht unterstützt.

Kurven

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
GeometrieFläche @geometry.STArea() @geometry.STArea()
Geometrie.AsBinary() @geometry.STAsBinary() @geometry.STAsBinary()
geometry.AsText() @geometry.AsTextZM() @geometry.AsTextZM()
Geometrie. Grenze @geometry.STBoundary()
Geometrie. Puffer(Abstand) @geometry.STBuffer(@distance) @geometry.STBuffer(@distance)
Geometrie. Schwerpunkt @geometry.STCentroid()
Geometrie. Contains(g) @geometry.STContains(@g) @geometry.STContains(@g)
Geometrie. ConvexHull() @geometry.STConvexHull() @geometry.STConvexHull()
Geometrie. Kreuze(g) @geometry.STCrosses(@g)
Geometrie. Unterschied(sonstige) @geometry.STDifference(@other) @geometry.STDifference(@other)
Geometrie. Dimension @geometry.STDimension() @geometry.STDimension()
Geometrie. Disjoint(g) @geometry.STDisjoint(@g) @geometry.STDisjoint(@g)
Geometrie. Abstand(g) @geometry.STDistance(@g) @geometry.STDistance(@g)
Geometrie.Hüllkurve @geometry.STEnvelope()
Geometrie. EqualsTopologically(g) @geometry.STEquals(@g) @geometry.STEquals(@g)
Geometrie. GeometryType @geometry.STGeometryType() @geometry.STGeometryType()
Geometrie.GetGeometryN(n) @geometry.STGeometryN(@n + 1) @geometry.STGeometryN(@n + 1)
Geometrie. InteriorPoint @geometry.STPointOnSurface()
Geometrie. Schnittmenge(andere) @geometry.STIntersection(@other) @geometry.STIntersection(@other)
Geometrie. Intersects(g) @geometry.STIntersects(@g) @geometry.STIntersects(@g)
Geometrie. Isempty @geometry.STIsEmpty() @geometry.STIsEmpty()
Geometrie.IsSimple @geometry.STIsSimple()
Geometrie.IstGültig @geometry.STIsValid() @geometry.STIsValid()
Geometrie. IsWithinDistance(geom, Distance) @geometry.STDistance(@geom) <= @distance @geometry.STDistance(@geom) <= @distance
Geometrie.Länge @geometry.STLength() @geometry.STLength()
Geometrie.NumGeometrien @geometry.STNumGeometries() @geometry.STNumGeometries()
Geometrie. NumPoints @geometry.STNumPoints() @geometry.STNumPoints()
Geometrie.OgcGeometryType CASE @geometry.STGeometryType() WHEN N'Point' THEN 1 ... ENDE CASE @geometry.STGeometryType() WHEN N'Point' THEN 1 ... ENDE
Geometrie. Überlappungen(g) @geometry.STOverlaps(@g) @geometry.STOverlaps(@g)
Geometrie. PointOnSurface @geometry.STPointOnSurface()
Geometrie.Relate(g, intersectionPattern) @geometry.STRelate(@g, @intersectionPattern)
Geometrie.SRID @geometry.STSrid @geometry.STSrid
Geometrie. SymmetricDifference(andere) @geometry.STSymDifference(@other) @geometry.STSymDifference(@other)
Geometrie. ToBinary() @geometry.STAsBinary() @geometry.STAsBinary()
geometry.ToText() @geometry.AsTextZM() @geometry.AsTextZM()
Geometrie. Touches(g) @geometry.STTouches(@g)
Geometrie. Union(sonstige) @geometry.STUnion(@other) @geometry.STUnion(@other)
Geometrie. Innerhalb(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()
Punkt M @point.M @point.M
Punkt X @point.Long @point.STX
Punkt Y @point.Lat @point.STY
Punkt Z @point.Z @point.Z
Polygon. Außenring @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(Eigenschaft) EF Core 7.0
ConvexHull.Create(group.Select(x => x.Property)) ConvexHullAggregate(Eigenschaft) EF Core 7.0
UnaryUnionOp.Union(group.Select(x => x.Property)) UnionAggregate(Eigenschaft) EF Core 7.0
EnvelopeCombiner.CombineAsGeometry(group.Select(x => x.Property)) EnvelopeAggregate(Eigenschaft) EF Core 7.0

Weitere Ressourcen