Partager via


Données spatiales dans le fournisseur EF Core SQL Server

Cette page contient des informations supplémentaires sur l’utilisation des données spatiales avec le fournisseur de base de données Microsoft SQL Server. Pour obtenir plus d’informations sur l’utilisation de données spatiales dans EF Core, consultez la documentation principale sur les Données spatiales.

Géographie ou géométrie

Par défaut, les propriétés spatiales sont mappées aux colonnes geography dans SQL Server. Pour utiliser geometry, configurez le type de colonne dans votre modèle.

Boucles de polygone géographiques

Lorsque vous utilisez le type de colonne geography, SQL Server impose une configuration requise supplémentaire sur la boucle extérieure (ou interpréteur de commandes) et des boucles intérieures (ou espaces). La boucle extérieure doit être orientée dans le sens contraire des aiguilles d’une montre et les boucles intérieures dans le sens des aiguilles d’une montre. NetTopologySuite (NTS) valide cette opération avant d’envoyer des valeurs à la base de données.

FullGlobe

SQL Server a un type de géométrie non standard pour représenter le globe complet lors de l’utilisation du type de colonne geography. Il dispose également d’une façon pour représenter des polygones en fonction du globe complet (sans une boucle extérieure). Aucun des deux n’est pris en charge par NTS.

Avertissement

FullGlobe et les polygones basés sur celui-ci ne sont pas pris en charge par NTS.

Courbes

Comme indiqué dans la principale documentation sur les Données spatiales, NTS ne peut actuellement pas représenter des courbes. Cela signifie que vous devez transformer des valeurs CircularString, CompoundCurve et CurePolygon en utilisant la méthode STCurveToLine avant de les utiliser dans EF Core.

Avertissement

CircularString, CompoundCurve et CurePolygon ne sont pas pris en charge par NTS.

Mappages de fonctions spatiales

Ce tableau indique quels membres NTS sont traduits dans les fonctions SQL. Notez que les traductions peuvent dépendre du type géographie ou géométrie de la colonne.

.NET SQL (géographie) SQL (géométrie) Ajouté à
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 ... FIN CASE @geometry.STGeometryType() WHEN N'Point' THEN 1 ... FIN
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()

Fonctions d’agrégation

.NET SQL Ajouté à
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

Ressources supplémentaires