SpatiaLite: Porovnání verzí
Řádek 161: | Řádek 161: | ||
719 500 591 451431.332913083 5035043.8070646 453777.698716646 5019713.60939104 | 719 500 591 451431.332913083 5035043.8070646 453777.698716646 5019713.60939104 | ||
</pre> | </pre> | ||
Topologická konzistence sítě se může zkontrolovat pomocí nástroje <tt>spatialite_network</tt>. | |||
<pre> | |||
spatialite_network -d test-network-2.3.sqlite -T Roads -f F_NODE -t T_NODE -c TravelTime -g Geometry | |||
SQLite version: 3.6.16 | |||
SpatiaLite version: 2.3.1 | |||
Step I - checking for table and columns existence | |||
spatialite-network-validator | |||
================================================================== | |||
SpatiaLite db: test-network-2.3.sqlite | |||
validating table: Roads | |||
columns layout | |||
================================================================== | |||
FromNode: F_NODE | |||
ToNode: T_NODE | |||
Cost: TravelTime | |||
Geometry: Geometry | |||
assuming arcs to to be BIDIRECTIONAL | |||
simple validation required | |||
[NETWORK-DATA table creation is disabled] | |||
================================================================== | |||
Step II - checking value types consistency | |||
Step III - checking topologic consistency | |||
Step IV - final evaluation | |||
Statistics | |||
================================================================== | |||
# Arcs : 8270 | |||
# Nodes: 3186 | |||
Node max incoming arcs: 7 | |||
Node max outcoming arcs: 7 | |||
# Nodes cardinality=1: 490 [terminal nodes] | |||
# Nodes cardinality=2: 828 [meaningless, pass-through] | |||
================================================================== | |||
OK: network passed validation | |||
you can apply this configuration to build a valid VirtualNetwork | |||
OK: validation passed | |||
<pre> | |||
== Vizualizace dat v [[QGIS|QGISu]] == | == Vizualizace dat v [[QGIS|QGISu]] == |
Verze z 31. 3. 2010, 17:46

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
Topologická konzistence sítě se může zkontrolovat pomocí nástroje spatialite_network.
spatialite_network -d test-network-2.3.sqlite -T Roads -f F_NODE -t T_NODE -c TravelTime -g Geometry SQLite version: 3.6.16 SpatiaLite version: 2.3.1 Step I - checking for table and columns existence spatialite-network-validator======================================================
SpatiaLite db: test-network-2.3.sqlite validating table: Roads columns layout======================================================
FromNode: F_NODE ToNode: T_NODE Cost: TravelTime Geometry: Geometry assuming arcs to to be BIDIRECTIONAL simple validation required [NETWORK-DATA table creation is disabled]======================================================
Step II - checking value types consistency Step III - checking topologic consistency Step IV - final evaluation Statistics======================================================
# Arcs : 8270 # Nodes: 3186 Node max incoming arcs: 7 Node max outcoming arcs: 7 # Nodes cardinality=1: 490 [terminal nodes] # Nodes cardinality=2: 828 [meaningless, pass-through]======================================================
OK: network passed validation you can apply this configuration to build a valid VirtualNetwork OK: validation passedVizualizace dat v QGISu
QGIS nabízí od verze 1.1.0 zásuvný modul pro SpatialLite.Přidání SpatiaLite vrstvy v QGISu (1) Poznámka: V současné době neumožňuje QGIS vizualizovat data připojené jako virtuální tabulky. Přidání SpatiaLite vrstvy v QGISu (2) Související články
* SQLite * PostGISExterní odkazy
* Tutoriál SpatiaLite (angličtina) * SpatiaLite CGS 2009 by Alex Mandel * SpatiaLite: SQL functions reference list * SpatiaLite: C APIs reference list * SpatiaLite - spatial extensions for SQLite * A quick tutorial to SpatiaLite - a Spatial extension for SQLite