Uživatelské nástroje

Nástroje pro tento web


navody:spatialite

SpatiaLite

Spatialite je rozšíření SQLite pro uložení geografických vrstev.

Seznam funkcí

Spatialite pro Android

Spatialite existuje upravená pro Android.

Chyba - unable to open database file

Při volání následujících příkazů mi sqlite vracelo chybu unable to open database file.

db.exec("DROP TABLE 'idx_%q_%q';", null, argsGeom);
db.exec("VACUUM;", null, argsTable);

Zjistil jsem, že chyba je v tom, že sqlite při těchto příkazech vytváří dočasný soubor, který se nepodařilo vytvořit.

Pomohlo nastavit při otevření databáze pragmu temp_store na 2. To má za následek, že všechno co sqlite potřebuje, vytváří v paměti.

db.exec("PRAGMA temp_store = 2;", null, null);

Význam pragmy temp_store je vysvětlený zde.

SQL Příklady

vytvoření nové vrstvy a jejího indexu

CREATE TABLE test_geom (
  id INTEGER NOT NULL
    PRIMARY KEY AUTOINCREMENT,
  name TEXT NOT NULL,
  measured_value DOUBLE NOT NULL);
 
SELECT AddGeometryColumn('test_geom', 'geometry', 4326, 'POINT', 'XY');
SELECT CreateSpatialIndex('test_geom', 'geometry');

vrátí extent vrstvy podle indexu

SELECT MIN(xmin) AS xmin, MAX(xmax) AS xmax,
       MIN(ymin) AS ymin, MAX(ymax) AS ymax 
FROM "idx_tabulka_geometry"

vrátí objekty protínající zadaný obdélník (využívá index)

SELECT AsBinary(Transform(geometry, ?)) FROM "tabulka"
WHERE ROWID IN (SELECT pkid FROM "idx_tabulka_geometry"
                WHERE pkid MATCH RTreeIntersects(?, ?, ?, ?))

vrátí objekty protínající zadaný obdélník (bez využití indexu)

SELECT AsBinary(Transform(geometry, ?)) FROM "tabulka"
       WHERE MbrIntersects(BuildMBR(?, ?, ?, ?), Transform(geometry, ?)) = 1

inicializuje databázi

SELECT InitSpatialMetaData()

CLI příklady

převede bodovou vrstvu places se sloupcem geometrie GEOMETRY na shapefile obce.shp v kodování UTF-8

.dumpshp places GEOMETRY obce UTF-8 POINT
navody/spatialite.txt · Poslední úprava: 2013/05/21 10:51 autor: jules