Compartir a través de


Datos espaciales en el proveedor de SQL Server EF Core

En esta página se incluye información adicional sobre el uso de datos espaciales con el proveedor de bases de datos de Microsoft SQL Server. Para obtener información general sobre el uso de datos espaciales en EF Core, consulte la documentación principal de datos espaciales .

Geografía o geometría

De forma predeterminada, las propiedades espaciales se asignan a geography columnas de SQL Server. Para usar geometry, configure el tipo de columna en el modelo.

Anillos poligonales geográficos

Al usar el geography tipo de columna, SQL Server impone requisitos adicionales en el anillo exterior (o shell) y los anillos interiores (o agujeros). El anillo exterior debe orientarse en sentido contrario a las agujas del reloj y los anillos interiores en sentido de las agujas del reloj. NetTopologySuite (NTS) valida esto antes de enviar valores a la base de datos.

FullGlobe

SQL Server tiene un tipo de geometría no estándar para representar todo el globo al usar el tipo de geography columna. También tiene una manera de representar polígonos basados en todo el globo (sin un anillo exterior). NtS no admite ninguno de estos elementos.

Advertencia

FullGlobe y polígonos basados en él no son compatibles con NTS.

Curvas

Como se mencionó en la documentación principal de datos espaciales , NTS actualmente no puede representar curvas. Esto significa que deberá transformar los valores CircularString, CompoundCurve y CurePolygon mediante el método STCurveToLine antes de usarlos en EF Core.

Advertencia

NTS no admite CircularString, CompoundCurve y CurePolygon.

Asignaciones de funciones espaciales

En esta tabla se muestra en qué funciones SQL se traducen los miembros NTS. Tenga en cuenta que las traducciones varían dependiendo de si la columna es de tipo "geography" o "geometry".

.NET SQL (geografía) SQL (geometría) Agregado en
EF.Functions.CurveToLine(geometry) @geometry.STCurveToLine() @geometry.STCurveToLine() EF Core 7.0
geometry. Área @geometry.STArea() @geometry.STArea()
geometry.AsBinary() @geometry.STAsBinary() @geometry.STAsBinary()
geometry.AsText() @geometry.AsTextZM() @geometry.AsTextZM()
geometry. Límite @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.Diferencia(otro) @geometry.STDifference(@other) @geometry.STDifference(@other)
geometry. Dimensión @geometry.STDimension() @geometry.STDimension()
geometry. Disjoint(g) @geometry.STDisjoint(@g) @geometry.STDisjoint(@g)
geometry.Distance(g) @geometry.STDistance(@g) @geometry.STDistance(@g)
geometry.Envolvente @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. Intersección(otro) @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. Longitud @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 ... END CASE @geometry.STGeometryType() CUANDO N'Point' THEN 1 ... END
geometry. Superposiciones(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. Toques(g) @geometry.STTouches(@g)
geometry. Union(other) @geometry.STUnion(@other) @geometry.STUnion(@other)
geometry.Within(g) @geometry.STWithin(@g) @geometry.STWithin(@g)
colecciónDeGeometría[i] @geometryCollection.STGeometryN(@i + 1) @geometryCollection.STGeometryN(@i + 1)
geometryCollection.Contar @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 (verifica si la línea está cerrada) @lineString.STIsClosed() @lineString.STIsClosed()
lineString.IsRing @lineString.IsRing()
lineString.PuntoDeInicio @lineString.STStartPoint() @lineString.STStartPoint()
multiLineString.EstáCerrado @multiLineString.STIsClosed() @multiLineString.STIsClosed()
punto M @point.M @point.M
punto.X @point.Long @point.STX
point.Y @point.Lat @point.STY
punto Z @point.Z @point.Z
polígono.AnilloExterior @polygon.RingN(1) @polygon.STExteriorRing()
polígono.GetInteriorRingN(n) @polygon.RingN(@n + 2) @polygon.STInteriorRingN(@n + 1)
polígono. NumInteriorRings @polygon.NumRings() - 1 @polygon.STNumInteriorRing()

Funciones agregadas

.NET SQL Agregado en
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)) AggregateUnión(Propiedad) EF Core 7.0
EnvelopeCombiner.CombineAsGeometry(group.Select(x => x.Property)) EnvelopeAggregate(Property) EF Core 7.0

Recursos adicionales