SpatiaLite: Porovnání verzí

Z GeoWikiCZ
Řádek 116: Řádek 116:
* Síť musí být topologicky konzistentní
* Síť musí být topologicky konzistentní
* Každá hrana musí být ohodnocena
* 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ě.
<source lang="sql">
SELECT * FROM Roads;
</source>
<pre>
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           
...
</pre>
<source lang="sql">
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;
</source>
<pre>
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   
</pre>


== Vizualizace dat v [[QGIS|QGISu]] ==
== Vizualizace dat v [[QGIS|QGISu]] ==

Verze z 31. 3. 2010, 17:44

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.

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