Partager via


Données spatiales dans le fournisseur EF Core SQLite

Cette page inclut des informations supplémentaires sur l’utilisation de données spatiales avec le fournisseur de base de données SQLite. Pour obtenir des informations générales sur l’utilisation de données spatiales dans EF Core, consultez la documentation principale données spatiales.

Installation de SpatiaLite

Sous Windows, la bibliothèque mod_spatialite native est distribuée en tant que dépendance d’un packack NuGet. D’autres plateformes doivent l’installer séparément. Cela est généralement effectué à l’aide d’un gestionnaire de package logiciel. Par exemple, vous pouvez utiliser APT sur Debian et Ubuntu ; et Homebrew sur MacOS.

# Debian/Ubuntu
apt-get install libsqlite3-mod-spatialite

# macOS
brew install libspatialite

Malheureusement, les versions plus récentes de PROJ (une dépendance de SpatiaLite) ne sont pas compatibles avec l’offre groupée SQLitePCLRaw par défaut d’EF. Vous pouvez contourner ce problème à l’aide de la bibliothèque SQLite système à la place.

<ItemGroup>
  <!-- Use bundle_sqlite3 instead with SpatiaLite on macOS and Linux -->
  <!--<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.0" />-->
  <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="3.1.0" />
  <PackageReference Include="SQLitePCLRaw.bundle_sqlite3" Version="2.0.4" />

  <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.NetTopologySuite" Version="3.1.0" />
</ItemGroup>

Sur macOS, vous devez également définir une variable d’environnement avant d’exécuter votre application afin qu’elle utilise la version de Homebrew de SQLite. Dans Visual Studio pour Mac, vous pouvez le définir sous Options de projet > Project > Exécuter des configurations >> par défaut

DYLD_LIBRARY_PATH=/usr/local/opt/sqlite/lib

Configuration du SRID

Dans SpatiaLite, les colonnes doivent spécifier un SRID par colonne. Le SRID par défaut est 0. Spécifiez un SRID différent à l’aide de la méthode HasSrid.

modelBuilder.Entity<City>().Property(c => c.Location)
    .HasSrid(4326);

Remarque

4326 fait référence à WGS 84, norme utilisée dans le GPS et d’autres systèmes géographiques.

Dimension

La dimension par défaut (ou ordinates) d’une colonne est X et Y. Pour activer des ordinates supplémentaires comme Z ou M, configurez le type de colonne.

modelBuilder.Entity<City>().Property(c => c.Location)
    .HasColumnType("POINTZ");

Mappages de fonctions spatiales

Ce tableau indique quels membres NetTopologySuite (NTS) sont traduits dans les fonctions SQL.

.NET SQL
geometry.Area Area(@geometry)
geometry.AsBinary() AsBinary(@geometry)
geometry.AsText() AsText(@geometry)
géométrie. Limite Limite(@geometry)
geometry.Buffer(distance) Buffer(@geometry, @distance)
geometry.Buffer(distance, quadrantSegments) Buffer(@geometry, @distance, @quadrantSegments)
géométrie. Centroïde Centroïde(@geometry)
geometry.Contains(g) Contains(@geometry, @g)
geometry.ConvexHull() ConvexHull(@geometry)
geometry.CoveredBy(g) CoveredBy(@geometry, @g)
geometry.Covers(g) Covers(@geometry, @g)
geometry.Crosses(g) Crosses(@geometry, @g)
geometry.Difference(other) Différence(@geometry, @other)
géométrie. Dimension Dimension(@geometry)
geometry.Disjoint(g) Disjoint(@geometry, @g)
géométrie.Distance(g) Distance(@geometry, @g)
geometry.Envelope Enveloppe(@geometry)
geometry.EqualsTopologically(g) Equals(@geometry, @g)
geometry.GeometryType GeometryType(@geometry)
geometry.GetGeometryN(n) GeometryN(@geometry, @n + 1)
geometry.InteriorPoint PointOnSurface(@geometry)
geometry.Intersection(other) Intersection(@geometry, @other)
geometry.Intersects(g) Intersects(@geometry, @g)
geometry.IsEmpty IsEmpty(@geometry)
geometry.IsSimple IsSimple(@geometry)
geometry.IsValid IsValid(@geometry)
geometry.IsWithinDistance(geom, distance) Distance(@geometry, @geom)<= @distance
géométrie.Longueur GLength(@geometry)
geometry.NumGeometries NumGeometries(@geometry)
geometry.NumPoints NumPoints(@geometry)
geometry.OgcGeometryType CASE GeometryType(@geometry) WHEN 'POINT' THEN 1 ... END
geometry.Overlaps(g) Overlaps(@geometry, @g)
geometry.PointOnSurface PointOnSurface(@geometry)
geometry.Relate(g, intersectionPattern) Relate(@geometry, @g, @intersectionPattern)
geometry.Reverse() ST_Reverse(@geometry)
geometry.SRID SRID(@geometry)
geometry.SymmetricDifference(other) SymDifference(@geometry, @other)
geometry.ToBinary() AsBinary(@geometry)
geometry.ToText() AsText(@geometry)
geometry.Touches(g) Touches(@geometry, @g)
geometry.Union() UnaryUnion(@geometry)
geometry.Union(other) GUnion(@geometry, @other)
geometry.Within(g) Within(@geometry, @g)
geometryCollection[i] GeometryN(@geometryCollection, @i + 1)
geometryCollection.Count NumGeometries(@geometryCollection)
lineString.Count NombreDePoints(@lineString)
lineString.EndPoint EndPoint(@lineString)
lineString.GetPointN(n) PointN(@lineString, @n + 1)
lineString.IsClosed IsClosed(@lineString)
lineString.IsRing IsRing(@lineString)
lineString.StartPoint StartPoint(@lineString)
multiLineString.IsClosed IsClosed(@multiLineString)
point.M M(@point)
point.X X(@point)
point.Y Y(@point)
point.Z Z(@point)
polygon.ExteriorRing ExteriorRing(@polygon)
polygon.GetInteriorRingN(n) InteriorRingN(@polygon, @n + 1)
polygon.NumInteriorRings NumInteriorRing(@polygon)

Fonctions d’agrégation

.NET SQL Ajouté dans
GeometryCombiner.Combine(group.Select(x => x.Property)) Collect(Property) EF Core 7.0
ConvexHull.Create(group.Select(x => x.Property)) ConvexHull(Collect(Property)) EF Core 7.0
UnaryUnionOp.Union(group.Select(x => x.Property)) GUnion(Property) EF Core 7.0
EnvelopeCombiner.CombineAsGeometry(group.Select(x => x.Property)) Étendue(Propriété) EF Core 7.0

Ressources additionnelles