Bagikan melalui


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

Sumber Daya Tambahan: