Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Essa página inclui informações adicionais sobre como usar dados espaciais com o provedor de banco de dados do Microsoft SQL Server. Para obter informações gerais sobre como usar dados espaciais no EF Core, consulte a documentação principal de Dados Espaciais.
Geografia ou geometria
Por padrão, as propriedades espaciais são mapeadas para colunas geography no SQL Server. Para usar geometry, configure o tipo de coluna em seu modelo.
Anéis de Polígono de geografia
Ao usar o tipo de coluna, o geography SQL Server impõe requisitos adicionais ao anel exterior (ou shell) e anéis interiores (ou orifícios). O anel exterior deve ser orientado no sentido anti-horário e os anéis interiores no sentido horário. NetTopologySuite (NTS) valida isso antes de enviar valores para o banco de dados.
FullGlobe
O SQL Server tem um tipo de geometria não padrão para representar o globo completo ao usar o tipo de coluna geography. Ele também tem uma maneira de representar polígonos baseados no globo completo (sem um anel exterior). Nenhum deles tem suporte do NTS.
Aviso
FullGlobe e polígonos baseados nele não são compatíveis com o NTS.
Curvas
Conforme mencionado na documentação principal de Dados Espaciais, o NTS atualmente não pode representar curvas. Isso significa que você precisará transformar os valores CircularString, CompoundCurve e CurePolygon usando o método STCurveToLine antes de usá-los no EF Core.
Aviso
CircularString, CompoundCurve e CurePolygon não são compatíveis com o NTS.
Mapeamentos de função espacial
Esta tabela mostra quais membros do NTS são convertidos em quais funções SQL. Observe que as traduções variam dependendo se a coluna é do tipo geografia ou geometria.
| .NET | SQL (geografia) | SQL (geometria) | Adicionado |
|---|---|---|---|
| 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 ... END | CASE @geometry.STGeometryType() WHEN N'Point' THEN 1 ... END | |
| 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() |
Funções de agregação
| .NET | SQL | Adicionado |
|---|---|---|
| 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 |