SpatiaLite: Porovnání verzí

Z GeoWikiCZ
mBez shrnutí editace
 
(Není zobrazeno 16 mezilehlých verzí od stejného uživatele.)
Řádek 1: Řádek 1:
[[Image:spatialite-logo.png|175px|right]]
{{freegiswiki|SpatiaLite}}
Prostorové rozšíření [http://www.gaia-gis.it/spatialite/ 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 < /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_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 the_geom
 
anebo přímo z interpretu SpatiaLite
 
spatialite> .loadshp ./obce obce UTF-8 2065 the_geom
 
Ukázka jednoduchého dotazu
 
<source lang="sql">
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
</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/spatialite/spatialite-tutorial-2.3.0.html Tutoriál] SpatiaLite (angličtina)
* [http://www.scribd.com/doc/15063620/Spatialite-CGS-2009 SpatiaLite CGS 2009] by Alex Mandel
* [http://www.gaia-gis.it/spatialite/spatialite-sql-2.3.1.html SpatiaLite: SQL functions reference list]
* [http://www.gaia-gis.it/spatialite/spatialite-C-API-2.3.1.html SpatiaLite: C APIs reference list]
* [http://www.gaia-gis.it/spatialite/spatialite-manual-2.3.1.html SpatiaLite - spatial extensions for SQLite]
* [http://www.gaia-gis.it/spatialite/spatialite-tutorial-2.3.1.html A quick tutorial to SpatiaLite - a Spatial extension for SQLite]
 
{{Databáze}}
{{GIS}}
{{GFOSS}}

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

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