SpatiaLite: Porovnání verzí

Z GeoWikiCZ
Skočit na navigaci Skočit na vyhledávání
m
 
(Není zobrazeno 7 mezilehlých verzí od stejného uživatele.)
Řádek 1: Řádek 1:
[[Image:spatialite-logo.png|175px|right]]
+
{{freegiswiki|SpatiaLite}}
Prostorové rozšíření [https://www.gaia-gis.it/fossil/libspatialite/index SpatiaLite] umožňuje ukládat v databázi [[SQLite]] geoprostorová data - podobně jako např. [[PostGIS]] pro databázový systém [[PostgreSQL]].
 
 
 
SpatiaLite také podporuje ukládání a analýzu rastrových dat - viz [[RasterLite]].
 
 
 
Více v [[153UZPD#Přednášky|přednáškách]] předmětu [[153UZPD|Úvod do zpracování prostorových dat]].
 
__TOC__
 
Pod operačním systémem Debian GNU/Linux nainstalujeme SpatiaLite příkazem
 
 
 
sudo apt-get install spatialite-gui libspatialite2 spatialite-bin
 
 
 
=== 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 'gisdb.sqltite' (metadatové tabulky <tt>geometry_columns</tt> a <tt>spatial_ref_sys</tt>).
 
 
 
spatialite gisdb.sqlite < 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_auth  views_geometry_columns
 
geometry_columns        spatial_ref_sys        virts_geometry_columns
 
spatialite> .exit
 
 
 
== Import dat ==
 
 
 
Pro tento účel můžeme vyexportovat data např. z [[Cvičná databáze PostGIS|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 geom
 
 
 
anebo přímo z interpretu SpatiaLite
 
 
 
spatialite> .loadshp ./obce obce UTF-8 2065 geom
 
 
 
Ukázka jednoduchého dotazu
 
 
 
<source lang="sql">
 
spatialite> SELECT nazev,Area(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
 
</source>
 
 
 
=== OGR ===
 
 
 
Pro import/export dat lze využít i knihovnu [[GDAL/OGR|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 [[PostGIS#Definice S-JTSK (ESRI:102067)|SRID 102067]] do tabulky 'spatial_ref_sys'.
 
 
 
<source lang="sql">
 
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');
 
</source>
 
 
 
=== Replikace [[Cvičná databáze PostGIS|cvičné databáze PostGIS]] ===
 
 
 
Příklad importu dat z [[Cvičná databáze PostGIS|cvičné databáze PostGIS]], schéma [[Cvičná databáze PostGIS#gis1|gis1]].
 
 
 
ogr2ogr -f SQLite -dsco "SPATIALITE=yes" gis1.sqlite PG:'dbname=pgis_student schemas=gis1'
 
 
 
==== Test časové náročnosti dotazu ====
 
 
 
;SpatiaLite
 
 
 
<source lang="bash">
 
time spatialite gis1.sqlite \
 
"SELECT COUNT(DISTINCT kodob) FROM obce JOIN zeleznice AS \
 
zelez ON intersects(zelez.geometry, obce.geometry);"
 
</source>
 
 
 
real    1m17.940s
 
user    1m17.853s
 
sys    0m0.036s
 
 
 
; PostGIS
 
 
 
<source lang="bash">
 
time psql pgis_student -c \
 
"SELECT COUNT(DISTINCT kodob) FROM gis1.obce AS obce JOIN gis1.zeleznice AS \
 
zelez ON ST_Intersects(zelez.geom, obce.geom);"
 
</source>
 
 
 
real    0m0.582s
 
user    0m0.016s
 
sys    0m0.008s
 
 
 
== Virtuální tabulky ==
 
 
 
Příklad přípojení dat ve formátu Shapefile jako virtuální tabulku.
 
 
 
<source lang="sql">
 
CREATE VIRTUAL TABLE obce USING VirtualShape(obce, UTF-8, 2065);
 
</source>
 
 
 
== Síťové analýzy ==
 
 
 
Pro síťové analýzy lze použít virtuální tabulku '''VirtualNetwork''', která implementuje [http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm 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                  geom_cols_ref_sys      spatial_ref_sys     
 
Roads_net              geometry_columns        views_geometry_columns
 
Roads_net_data          geometry_columns_auth  virts_geometry_columns
 
 
 
Tabulka 'Roads' obsahuje informace o hranách a uzlech sítě.
 
 
 
.header ON
 
.mode column
 
 
 
<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>
 
 
 
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>
 
 
 
Dále tabulka 'Roads_net' obsahuje binární data odpovídající grafu sestaveného z dat uložených v tabulce 'Roads'.
 
 
 
<source lang="sql">
 
SELECT * FROM Roads_net
 
WHERE NodeFrom = 1 AND NodeTo = 512;
 
</source>
 
 
 
<pre>
 
ArcRowid    NodeFrom    NodeTo      Cost          Geometry 
 
----------  ----------  ----------  ------------  ----------
 
            1          512        20626.221351           
 
1          1          4          3366.262555           
 
11          4          16          1418.458904           
 
13          16          18          231.478398             
 
42          18          47          2153.035087           
 
53          47          56          593.539445             
 
85          56          82          1609.677774           
 
109        82          104        1173.010472           
 
133        104        127        563.796034             
 
211        127        195        1352.700731           
 
238        195        217        355.297045             
 
259        217        233        154.855523             
 
294        233        265        250.381625             
 
325        265        293        519.554469             
 
376        293        330        1618.368949           
 
375        330        313        553.572367             
 
365        313        321        162.804166             
 
364        321        320        899.380942             
 
608        320        512        3650.046865           
 
</pre>
 
 
 
== Vizualizace dat v [[QGIS|QGISu]] ==
 
 
 
[[QGIS]] nabízí od verze 1.1.0 zásuvný modul pro SpatialLite.
 
 
 
[[Image:qgis-spatialite.png|center|frame|Přidání SpatiaLite vrstvy v QGISu (1)]]
 
 
 
[[Image:qgis-spatialite-2.png|center|frame|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 ==
 
 
 
* [[SQLite]]
 
* [[RasterLite]]
 
* [[PostGIS]]
 
* [[PgRouting]]
 
 
 
== Externí odkazy ==
 
 
 
* [http://www.gaia-gis.it/gaia-sins/spatialite-cookbook/index.html Tutoriál] SpatiaLite (angličtina)
 
* [http://www.scribd.com/doc/15063620/Spatialite-CGS-2009 SpatiaLite CGS 2009] by Alex Mandel
 
* [http://www.sourcepole.ch/assets/2010/9/10/foss4g2010_spatialite.pdf SpatiaLite, the Shapefile of the future?]
 
* [http://www.gaia-gis.it/spatialite-2.4.0-4/spatialite-cookbook/ SpatiaLite Cookbook]
 
 
 
{{Databáze}}
 
{{GIS}}
 
{{GFOSS}}
 

Aktuální verze z 8. 1. 2013, 15:22

Stránky přesunuty na Free GIS Portál: http://geo.fsv.cvut.cz/freegis/SpatiaLite