Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
En esta página se incluye información adicional sobre el uso de datos espaciales con el proveedor de base de datos SQLite. Para obtener información general sobre el uso de datos espaciales en EF Core, consulte la documentación principal de Spatial Data.
Instalación de SpatiaLite
En Windows, la biblioteca mod_spatialite nativa se distribuye como dependencia del paquete NuGet . Otras plataformas deben instalarla por separado. Esto suele hacerse mediante un administrador de paquetes de software. Por ejemplo, puede usar APT en Debian y Ubuntu; y Homebrew en MacOS.
# Debian/Ubuntu
apt-get install libsqlite3-mod-spatialite
# macOS
brew install libspatialite
Desafortunadamente, las versiones más recientes de PROJ (una dependencia de SpatiaLite) no son compatibles con el paquete de SQLitePCLRaw predeterminado de EF . Puede solucionar esto mediante la biblioteca SQLite del sistema en su lugar.
Importante
No use Microsoft.EntityFrameworkCore.Sqlite o Microsoft.Data.Sqlite con SpatiaLite en macOS y Linux. Ambos paquetes extraen SQLitePCLRaw.bundle_e_sqlite3 de forma predeterminada, una versión agrupada de SQLite que no es compatible con SQLite instalado por el sistema. Su uso puede provocar una falla sin previo aviso en tiempo de ejecución. Use Microsoft.EntityFrameworkCore.Sqlite.Core o Microsoft.Data.Sqlite.Core , en su lugar, junto con el proveedor SQLite del sistema, como se muestra a continuación.
Tenga en cuenta también que la biblioteca SQLite instalada por el sistema puede tener diferentes opciones en tiempo de compilación que la versión agrupada. Esto puede afectar a la disponibilidad de características como funciones matemáticas y búsqueda de texto completo. Para inspeccionar rápidamente las opciones de la compilación de SQLite, ejecute PRAGMA compile_options; y compruebe las características en las que se basa la aplicación.
Reemplace Microsoft.EntityFrameworkCore.Sqlite con Microsoft.EntityFrameworkCore.Sqlite.Core y haga referencia al paquete SQLitePCLRaw.provider.sqlite3 para usar la biblioteca de SQLite del sistema.
<ItemGroup>
<!-- Use Sqlite.Core with the system SQLite provider instead of Microsoft.EntityFrameworkCore.Sqlite -->
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="10.0.0" />
<PackageReference Include="SQLitePCLRaw.provider.sqlite3" Version="2.1.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.NetTopologySuite" Version="10.0.0" />
</ItemGroup>
Nota
A partir de EF Core 11 (SQLitePCLRaw 3.0), reemplace la SQLitePCLRaw.provider.sqlite3 versión por 3.x.x. Consulte los cambios importantes para obtener más información.
A continuación, agregue la inicialización explícita antes de usar SQLite:
SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_sqlite3());
En macOS, también deberá establecer una variable de entorno antes de ejecutar la aplicación para que use la versión de Homebrew de SQLite:
DYLD_LIBRARY_PATH="$(brew --prefix sqlite)/lib"
Configuración de SRID
En SpatiaLite, las columnas deben especificar un SRID por columna. El SRID predeterminado es 0. Especifique un SRID diferente mediante el método HasSrid.
modelBuilder.Entity<City>().Property(c => c.Location)
.HasSrid(4326);
Nota
4326 hace referencia a WGS 84, un estándar utilizado en GPS y otros sistemas geográficos.
Dimensión
La dimensión predeterminada (ordinates) de una columna es X e Y. Para habilitar ordinaciones adicionales como Z o M, configure el tipo de columna.
modelBuilder.Entity<City>().Property(c => c.Location)
.HasColumnType("POINTZ");
Asignaciones de funciones espaciales
En esta tabla se muestran los miembros de NetTopologySuite (NTS) traducidos a funciones SQL.
| .NET | SQL |
|---|---|
| geometry.Area | Area(@geometry) |
| geometry.AsBinary() | AsBinary(@geometry) |
| geometry.AsText() | AsText(@geometry) |
| geometría. Límite | Límite(@geometry) |
| geometry.Buffer(distance) | Buffer(@geometry, @distance)) |
| geometry. Buffer(distance, quadrantSegments) | Buffer(@geometry, @distance, @quadrantSegments) |
| geometry.Centroid | Centroid(@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) | Cruces(@geometry, @g) |
| geometry.Difference(other) | Diferencia(@geometry, @other) |
| geometry.Dimension | Dimensión(@geometry) |
| geometry.Disjoint(g) | Disjoint(@geometry, @g) |
| geometry.Distance(g) | Distancia(@geometry, @g) |
| geometry.Envelope | Envelope(@geometry) |
| geometry.EqualsTopologically(g) | Equals(@geometry, @g) |
| geometry.GeometryType | TipoDeGeometría(@geometry) |
| geometry.GetGeometryN(n) | GeometryN(@geometry, @n + 1) |
| geometry.InteriorPoint | PointOnSurface(@geometry) |
| geometry.Intersection(other) | Intersección(@geometry, @other) |
| geometry.Intersects(g) | Intersecciones(@geometry, @g) |
| geometry.IsEmpty | IsEmpty(@geometry) |
| geometry.IsSimple | IsSimple(@geometry) |
| geometry.IsValid | IsValid(@geometry) |
| geometry. IsWithinDistance(geom, distance) | Distancia(@geometry, @geom)<= @distance |
| geometry.Length | GLength(@geometry) |
| geometry.NumGeometries | NumGeometries(@geometry) |
| geometry.NumPoints | NumPoints(@geometry) |
| geometry.OgcGeometryType | CASE GeometryType(@geometry) WHEN 'POINT' THEN 1 ... END |
| geometry.Overlaps(g) | Superposiciones(@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) | Toques(@geometry, @g) |
| geometry.Union() | UnaryUnion(@geometry) |
| geometry.Union(other) | GUnion(@geometría, @other)) |
| geometry.Within(g) | Dentro de(@geometry, @g) |
| geometryCollection[i] | GeometryN(@geometryCollection, @i + 1) |
| geometryCollection.Count | NumGeometries(@geometryCollection) |
| lineString.Count | NumPoints(@lineString) |
| lineString.EndPoint | EndPoint(@lineString) |
| lineString.GetPointN(n) | PointN(@lineString, @n + 1) |
| lineString.IsClosed | IsClosed(@lineString) |
| lineString.IsRing | IsRing(@lineString) |
| lineString.StartPoint | PuntoDeInicio(@lineString) |
| multiLineString.IsClosed | IsClosed(@multiLineString) |
| point.M | M(@point) |
| point.X | X(@point) |
| point.Y | Y(@point) |
| punto Z | Z(@point) |
| polygon.ExteriorRing | ExteriorRing(@polygon) |
| polygon.GetInteriorRingN(n) | InteriorRingN(@polygon, @n + 1) |
| polygon.NumInteriorRings | NumInteriorRing(@polygon) |
Funciones agregadas
| .NET | SQL | Agregado en |
|---|---|---|
| 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(Propiedad) | EF Core 7.0 |
| EnvelopeCombiner.CombineAsGeometry(group.Select(x => x.Property)) | Extent(Property) | EF Core 7.0 |
Recursos adicionales
- página principal de SpatiaLite
- Documentación de la API de NetTopologySuite