SpatiaLite

Prostorové rozšíření SpatiaLite umožňuje ukládat v databázi SQLite geoprostorová data - podobně jako např. PostGIS pro databázový systém PostgreSQL.
Založení databáze
Nejprve stáhneme inicializační soubor, např.
wget http://www.gaia-gis.it/spatialite/init_spatialite-2.3.sql.gz gzip -d init_spatialite-2.3.sql.gz
Vytvoříme a inicializujeme databázi (metadatové tabulky geometry_columns a spatial_ref_sys).
spatialite gisdb.sqlite < init_spatialite-2.3.sql
Na serveru josef
spatialite gisdb.sqlite < /usr/local/share/init_spatialite-2.3.sql
alternativně
spatialite -init /usr/local/share/init_spatialite-2.3.sql gisdb.sqlite
Nyní je databáze připravena pro práci s geoprostorovými daty.
spatialite gisdb.sqlite spatialite> .tables geom_cols_ref_sys geometry_columns spatial_ref_sys spatialite> .exit
Import dat
Pro tento účel můžeme vyexportovat data např. z cvičné databáze PostGIS do formátu ESRI ShapeFile.
pgsql2shp pgis_student gis1.obce
Data ve formátu ESRI Shapefile naimportujeme
spatialite_tool -i -shp obce -d gisdb.sqlite -t obce -c UTF-8 -s 2065 -g the_geom
anebo přímo z interpretu SpatiaLite
spatialite> .loadshp ./obce obce UTF-8 2065 the_geom
Ukázka jednoduchého dotazu
spatialite> SELECT nazev,Area(the_geom)/1e6 AS plocha FROM obce ORDER BY plocha DESC LIMIT 5;
Praha|496.077202708984
Hradiště|328.857295861328
Brdy|259.774799202647
Libavá|238.31301229512
Brno|230.03067746875
OGR
Pro import/export dat lze využít i knihovnu OGR, která volitelně SQLite podporuje.
Příklad konverze dat z PostGIS do SpatiaLite.
ogr2ogr -append -f SQLite gisdb.sqlite pg:dbname=pgis_student gis1.obce
Poznámka: Před importem dat je nutné vložit SRID 102067 do tabulky 'spatial_ref_sys'.
INSERT into spatial_ref_sys (srid, auth_name, auth_srid, ref_sys_name, proj4text) values
(9102067, 'esri', 102067, 'S-JTSK', '+proj=krovak +lat_0=49.5 +lon_0=24.83333333333333
+alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs');
Replikace cvičné databáze PostGIS
Příklad importu dat z cvičné databáze PostGIS, schéma gis1.
ogr2ogr -f SQLite -dsco "SPATIALITE=yes" gis1.sqlite PG:'dbname=pgis_student schemas=gis1'
Test časové náročnosti dotazu
time spatialite gis1.sqlite \
"SELECT COUNT(DISTINCT kodob) FROM obce JOIN zeleznice AS \
zelez ON intersects(zelez.geometry, obce.geometry);"
real 11m6.652s user 11m6.450s sys 0m0.192s
time psql pgis_student -c \
"SELECT COUNT(DISTINCT kodob) FROM gis1.obce AS obce JOIN gis1.zeleznice AS \
zelez ON ST_Intersects(zelez.the_geom, obce.the_geom);"
real 0m4.327s user 0m0.028s sys 0m0.012s
Virtuální tabulky
Příklad přípojení dat ve formátu Shapefile jako virtuální tabulku.
CREATE VIRTUAL TABLE obce USING VirtualShape(obce, UTF-8, 2065);
Síťové analýzy
Pro síťové analýzy lze použít virtuální tabulku VirtualNetwork, která implementuje Dijkstrův algoritmus pro vyhledání nejkratší cesty.
Prvním krokem je vytvoření sítě (tj. dat reprezentující graf). Podmínky jsou následující:
- Každá entita reprezentuje jednu hranu (LineString)
- Každé hraně je přiřazena dvojice uzlů - počáteční a koncový uzel
- Síť musí být topologicky konzistentní
- Každá hrana musí být ohodnocena
Příklad
Stáhneme testovací databázi.
wget http://www.gaia-gis.it/spatialite/test-network-2.3.zip unzip test-network-2.3.zip
spatialite test-network-2.3.sqlite spatialite> .tables Roads Roads_net_data geometry_columns Roads_net geom_cols_ref_sys spatial_ref_sys
Tabulka 'Roads' obsahuje informace o hranách a uzlech sítě.
SELECT * FROM Roads;
PK_UID F_NODE T_NODE Type Speed TravelTime Geometry ---------- ---------- ---------- ------------------------- ---------- ----------- ---------- 1 1 4 Track, trail, or footpath 25 3366.262555 2 3 5 Primary and secondary roa 60 731.781584 3 2 5 Dual lane (divided) highw 90 473.932218 4 5 8 Dual lane (divided) highw 90 172.213277 5 9 8 Primary and secondary roa 60 229.290357 ...
SELECT PK_UID, F_NODE, T_NODE,
X(StartPoint(Geometry)), Y(StartPoint(Geometry)), X(EndPoint(Geometry)), Y(EndPoint(Geometry))
FROM Roads
WHERE F_NODE = 500 OR T_NODE = 500;
PK_UID F_NODE T_NODE X(StartPoint(Geometry)) Y(StartPoint(Geometry)) X(EndPoint(Geometry)) Y(EndPoint(Geometry)) ---------- ---------- ---------- ----------------------- ----------------------- --------------------- --------------------- 590 500 493 451431.332913083 5035043.8070646 460761.5959512 5035818.19827513 591 406 500 450462.268978926 5051471.8728337 451431.332913083 5035043.8070646 686 569 500 431913.235465203 5026366.2154841 451431.332913083 5035043.8070646 719 500 591 451431.332913083 5035043.8070646 453777.698716646 5019713.60939104
Vizualizace dat v QGISu
QGIS nabízí od verze 1.1.0 zásuvný modul pro SpatialLite.


Poznámka: V současné době neumožňuje QGIS vizualizovat data připojené jako virtuální tabulky.