Dane przestrzenne w dostawcy programu SQL Server EF Core
Ta strona zawiera dodatkowe informacje o korzystaniu z danych przestrzennych z dostawcą bazy danych programu Microsoft SQL Server. Aby uzyskać ogólne informacje na temat używania danych przestrzennych w programie EF Core, zobacz główną dokumentację dotyczącą danych przestrzennych.
Geografia lub geometria
Domyślnie właściwości przestrzenne są mapowane na geography
kolumny w programie SQL Server. Aby użyć metody geometry
, skonfiguruj typ kolumny w modelu.
Pierścienie wielokątne geografii
W przypadku korzystania z geography
typu kolumny program SQL Server nakłada dodatkowe wymagania na pierścień zewnętrzny (lub powłokę) i pierścienie wewnętrzne (lub otwory). Pierścień zewnętrzny musi być skierowany w kierunku odwrotnym i pierścienie wewnętrzne zgodnie z ruchem wskazówek zegara. NetTopologySuite (NTS) weryfikuje to przed wysłaniem wartości do bazy danych.
FullGlobe
Program SQL Server ma niestandardowy typ geometrii reprezentujący pełny globus podczas korzystania z typu kolumny geography
. Ma również sposób reprezentowania wielokątów opartych na pełnym świecie (bez pierścienia zewnętrznego). Żadna z nich nie jest obsługiwana przez nts.
Ostrzeżenie
FullGlobe i wielokąty oparte na nim nie są obsługiwane przez NTS.
Krzywe
Jak wspomniano w głównej dokumentacji danych przestrzennych, NTS obecnie nie może reprezentować krzywych. Oznacza to, że należy przekształcić wartości CircularString, CompoundCurve i CurePolygon przy użyciu metody STCurveToLine przed użyciem ich w programie EF Core.
Ostrzeżenie
Cykliczne ciągi, CompoundCurve i CurePolygon nie są obsługiwane przez NTS.
Mapowania funkcji przestrzennych
W tej tabeli przedstawiono, które elementy członkowskie NTS są tłumaczone na funkcje SQL. Należy pamiętać, że tłumaczenia różnią się w zależności od tego, czy kolumna ma typ geografii, czy geometrii.
.NET | SQL (geografia) | SQL (geometria) | Dodano element w |
---|---|---|---|
EF. Functions.CurveToLine(geometry) | @geometry.STCurveToLine() | @geometry.STCurveToLine() | EF Core 7.0 |
Geometrii. Obszar | @geometry.STArea() | @geometry.STArea() | |
Geometrii. AsBinary() | @geometry.STAsBinary() | @geometry.STAsBinary() | |
Geometrii. AsText() | @geometry.AsTextZM() | @geometry.AsTextZM() | |
Geometrii. Granicy | @geometry.STBoundary() | ||
Geometrii. Bufor (odległość) | @geometry.STBuffer(@distance) | @geometry.STBuffer(@distance) | |
Geometrii. Strefy | @geometry.STCentroid() | ||
Geometrii. Contains(g) | @geometry.STContains(@g) | @geometry.STContains(@g) | |
Geometrii. ConvexHull() | @geometry.STConvexHull() | @geometry.STConvexHull() | |
Geometrii. Krzyże (g) | @geometry.STCrosses(@g) | ||
Geometrii. Różnice (inne) | @geometry.STDifference(@other) | @geometry.STDifference(@other) | |
Geometrii. Wymiar | @geometry.STDimension() | @geometry.STDimension() | |
Geometrii. Disjoint(g) | @geometry.STDisjoint(@g) | @geometry.STDisjoint(@g) | |
Geometrii. Odległość (g) | @geometry.STDistance(@g) | @geometry.STDistance(@g) | |
Geometrii. Koperta | @geometry.STEnvelope() | ||
Geometrii. EqualsTopologically(g) | @geometry.STEquals(@g) | @geometry.STEquals(@g) | |
Geometrii. GeometryType | @geometry.STGeometryType() | @geometry.STGeometryType() | |
Geometrii. GetGeometryN(n) | @geometry.STGeometryN(@n + 1) | @geometry.STGeometryN(@n + 1) | |
Geometrii. Punkt wewnętrzny | @geometry.STPointOnSurface() | ||
Geometrii. Skrzyżowanie (inne) | @geometry.STIntersection(@other) | @geometry.STIntersection(@other) | |
Geometrii. Intersects(g) | @geometry.STIntersects(@g) | @geometry.STIntersects(@g) | |
Geometrii. Isempty | @geometry.STIsEmpty() | @geometry.STIsEmpty() | |
Geometrii. IsSimple | @geometry.STIsSimple() | ||
Geometrii. Isvalid | @geometry.STIsValid() | @geometry.STIsValid() | |
Geometrii. IsWithinDistance (geom, odległość) | @geometry.STDistance(@geom)<= @distance | @geometry.STDistance(@geom)<= @distance | |
Geometrii. Długość | @geometry.STLength() | @geometry.STLength() | |
Geometrii. NumGeometries | @geometry.STNumGeometries() | @geometry.STNumGeometries() | |
Geometrii. Liczba punktów | @geometry.STNumPoints() | @geometry.STNumPoints() | |
Geometrii. OgcGeometryType | PRZYPADEK @geometry.STGeometryType() , GDY N'Point' TO 1 ... KOŃCU | PRZYPADEK @geometry.STGeometryType() , GDY N'Point' TO 1 ... KOŃCU | |
Geometrii. Nakładające się (g) | @geometry.STOverlaps(@g) | @geometry.STOverlaps(@g) | |
Geometrii. PointOnSurface | @geometry.STPointOnSurface() | ||
Geometrii. Relate(g, intersectionPattern) | @geometry.STRelate(@g, @intersectionPattern) | ||
Geometrii. SRID | @geometry.STSrid | @geometry.STSrid | |
Geometrii. SymmetricDifference(inne) | @geometry.STSymDifference(@other) | @geometry.STSymDifference(@other) | |
Geometrii. ToBinary() | @geometry.STAsBinary() | @geometry.STAsBinary() | |
Geometrii. ToText() | @geometry.AsTextZM() | @geometry.AsTextZM() | |
Geometrii. Dotyki (g) | @geometry.STTouches(@g) | ||
Geometrii. Union(inne) | @geometry.STUnion(@other) | @geometry.STUnion(@other) | |
Geometrii. 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() | |
Punkt. M | @point.M | @point.M | |
Punkt. X | @point.Long | @point.STX | |
Punkt. Y | @point.Lat | @point.STY | |
Punkt. Z | @point.Z | @point.Z | |
Wielokąt. Zewnętrzne | @polygon.RingN(1) | @polygon.STExteriorRing() | |
Wielokąt. GetInteriorRingN(n) | @polygon.RingN(@n + 2) | @polygon.STInteriorRingN(@n + 1) | |
Wielokąt. NumInteriorRings | @polygon.NumRings() - 1 | @polygon.STNumInteriorRing() |
Funkcje agregujące
.NET | SQL | Dodano element w |
---|---|---|
GeometryCombiner.Combine(group. Select(x => x.Property)) | CollectionAggregate(Właściwość) | EF Core 7.0 |
ConvexHull.Create(grupa. Select(x => x.Property)) | ConvexHullAggregate(Właściwość) | EF Core 7.0 |
UnaryUnionOp.Union(group. Select(x => x.Property)) | UnionAggregate(Właściwość) | EF Core 7.0 |
KopertaCombiner.CombineAsGeometry(grupa. Select(x => x.Property)) | EnvelopeAggregate(Właściwość) | EF Core 7.0 |