Data Spasial di Penyedia Inti EF SQL Server
Halaman ini mencakup informasi tambahan tentang menggunakan data spasial dengan penyedia database Microsoft SQL Server. Untuk informasi umum tentang menggunakan data spasial di EF Core, lihat dokumentasi Data Spasial utama.
Geografi atau geometri
Secara default, properti spasial dipetakan ke geography
kolom di SQL Server. Untuk menggunakan geometry
, konfigurasikan jenis kolom dalam model Anda.
Cincin poligon geografi
Saat menggunakan geography
jenis kolom, SQL Server memberlakukan persyaratan tambahan pada cincin eksterior (atau shell) dan cincin interior (atau lubang). Cincin eksterior harus berorientasi berlawanan arah jaring jam dan interior berdering searah jajar. NetTopologySuite (NTS) memvalidasi ini sebelum mengirim nilai ke database.
FullGlobe
SQL Server memiliki jenis geometri non-standar untuk mewakili seluruh dunia saat menggunakan geography
jenis kolom. Ini juga memiliki cara untuk mewakili poligon berdasarkan dunia penuh (tanpa cincin eksterior). Keduanya tidak didukung oleh NTS.
Peringatan
FullGlobe dan poligon berdasarkan itu tidak didukung oleh NTS.
Kurva
Seperti disebutkan dalam dokumentasi Data Spasial utama, NTS saat ini tidak dapat mewakili kurva. Ini berarti Anda harus mengubah nilai CircularString, CompoundCurve, dan CurePolygon menggunakan metode STCurveToLine sebelum menggunakannya di EF Core.
Peringatan
CircularString, CompoundCurve, dan CurePolygon tidak didukung oleh NTS.
Pemetaan fungsi spasial
Tabel ini menunjukkan anggota NTS mana yang diterjemahkan ke dalam fungsi SQL mana. Perhatikan bahwa terjemahan bervariasi tergantung pada apakah kolom berjenis geografi atau geometri.
.NET | SQL (geografi) | SQL (geometri) | Ditambahkan dalam |
---|---|---|---|
EF. Functions.CurveToLine(geometri) | @geometry.STCurveToLine() | @geometry.STCurveToLine() | EF Core 7.0 |
Geometri. Area | @geometry.STArea() | @geometry.STArea() | |
Geometri. AsBinary() | @geometry.STAsBinary() | @geometry.STAsBinary() | |
Geometri. AsText() | @geometry.AsTextZM() | @geometry.AsTextZM() | |
Geometri. Batas | @geometry.STBoundary() | ||
Geometri. Buffer(jarak) | @geometry.STBuffer(@distance) | @geometry.STBuffer(@distance) | |
Geometri. Sentroid | @geometry.STCentroid() | ||
Geometri. Contains(g) | @geometry.STContains(@g) | @geometry.STContains(@g) | |
Geometri. ConvexHull() | @geometry.STConvexHull() | @geometry.STConvexHull() | |
Geometri. Salib(g) | @geometry.STCrosses(@g) | ||
Geometri. Perbedaan(lainnya) | @geometry.STDifference(@other) | @geometry.STDifference(@other) | |
Geometri. Dimensi | @geometry.STDimension() | @geometry.STDimension() | |
Geometri. Disjoint(g) | @geometry.STDisjoint(@g) | @geometry.STDisjoint(@g) | |
Geometri. Jarak(g) | @geometry.STDistance(@g) | @geometry.STDistance(@g) | |
Geometri. Amplop | @geometry.STEnvelope() | ||
Geometri. EqualsTopologically(g) | @geometry.STEquals(@g) | @geometry.STEquals(@g) | |
Geometri. GeometryType | @geometry.STGeometryType() | @geometry.STGeometryType() | |
Geometri. GetGeometryN(n) | @geometry.STGeometryN(@n + 1) | @geometry.STGeometryN(@n + 1) | |
Geometri. InteriorPoint | @geometry.STPointOnSurface() | ||
Geometri. Persimpangan(lainnya) | @geometry.STIntersection(@other) | @geometry.STIntersection(@other) | |
Geometri. Intersects(g) | @geometry.STIntersects(@g) | @geometry.STIntersects(@g) | |
Geometri. IsEmpty | @geometry.STIsEmpty() | @geometry.STIsEmpty() | |
Geometri. IsSimple | @geometry.STIsSimple() | ||
Geometri. IsValid | @geometry.STIsValid() | @geometry.STIsValid() | |
Geometri. IsWithinDistance (geom, jarak) | @geometry.STDistance(@geom)<= @distance | @geometry.STDistance(@geom)<= @distance | |
Geometri. Panjang | @geometry.STLength() | @geometry.STLength() | |
Geometri. NumGeometries | @geometry.STNumGeometries() | @geometry.STNumGeometries() | |
Geometri. NumPoints | @geometry.STNumPoints() | @geometry.STNumPoints() | |
Geometri. OgcGeometryType | CASE @geometry.STGeometryType() WHEN N'Point' THEN 1 ... AKHIR | CASE @geometry.STGeometryType() WHEN N'Point' THEN 1 ... AKHIR | |
Geometri. Tumpang tindih(g) | @geometry.STOverlaps(@g) | @geometry.STOverlaps(@g) | |
Geometri. PointOnSurface | @geometry.STPointOnSurface() | ||
Geometri. Relate(g, intersectionPattern) | @geometry.STRelate(@g, @intersectionPattern) | ||
Geometri. SRID | @geometry.STSrid | @geometry.STSrid | |
Geometri. SymmetricDifference(lainnya) | @geometry.STSymDifference(@other) | @geometry.STSymDifference(@other) | |
Geometri. ToBinary() | @geometry.STAsBinary() | @geometry.STAsBinary() | |
Geometri. ToText() | @geometry.AsTextZM() | @geometry.AsTextZM() | |
Geometri. Sentuhan(g) | @geometry.STTouches(@g) | ||
Geometri. Union(lainnya) | @geometry.STUnion(@other) | @geometry.STUnion(@other) | |
Geometri. Dalam(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() | |
Titik. M | @point.M | @point.M | |
Titik. X | @point.Long | @point.STX | |
Titik. Y | @point.Lat | @point.STY | |
Titik. Z | @point.Z | @point.Z | |
Poligon. EksteriorRing | @polygon.RingN(1) | @polygon.STExteriorRing() | |
Poligon. GetInteriorRingN(n) | @polygon.RingN(@n + 2) | @polygon.STInteriorRingN(@n + 1) | |
Poligon. NumInteriorRings | @polygon.NumRings() - 1 | @polygon.STNumInteriorRing() |
Fungsi agregat
.NET | SQL | Ditambahkan dalam |
---|---|---|
GeometryCombiner.Combine(group. Pilih(x => x.Property)) | CollectionAggregate(Property) | EF Core 7.0 |
ConvexHull.Create(group. Pilih(x => x.Property)) | ConvexHullAggregate(Properti) | EF Core 7.0 |
UnaryUnionOp.Union(group. Pilih(x => x.Property)) | UnionAggregate(Properti) | EF Core 7.0 |
EnvelopeCombiner.CombineAsGeometry(group. Pilih(x => x.Property)) | AmplopAggregate(Properti) | EF Core 7.0 |