|
|
(Není zobrazeno 12 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 < 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/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}}
| |