SpatiaLite

Z GeoWikiCZ
Verze z 31. 3. 2010, 19:46, kterou vytvořil Landa (diskuse | příspěvky) (Příklad)
Přejít na: navigace, hledání
Spatialite-logo.png

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 passed <pre>

Vizualizace dat v QGISu

QGIS nabízí od verze 1.1.0 zásuvný modul pro SpatialLite.

Přidání SpatiaLite vrstvy v QGISu (1)
Přidání SpatiaLite vrstvy v QGISu (2)

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

Související články

Externí odkazy