SpatiaLite: Porovnání verzí

Z GeoWikiCZ
Skočit na navigaci Skočit na vyhledávání
m
 
(Není zobrazeno 30 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]].
 
__TOC__
 
=== 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 <tt>geometry_columns</tt> a <tt>spatial_ref_sys</tt>).
 
 
 
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|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 ====
 
 
 
<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    11m6.652s
 
user    11m6.450s
 
sys    0m0.192s
 
 
 
<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.the_geom, obce.the_geom);"
 
</source>
 
 
 
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.
 
 
 
<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              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>
 
 
 
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]] ==
 
 
 
[[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]]
 
* [[PostGIS]]
 
 
 
== 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, 15:22

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