Spatialite – A brief overview of this light-weight, cross

advertisement
Spatialite
http://www.gaia-gis.it/gaia-sins/
• Created by Alessandro Furieri (Italy)
• First release published in 2008
• SpatiaLite is an open source library intended to extend the SQLite core to
support fully fledged Spatial SQL capabilities.
• SpatiaLite is smoothly integrated into SQLite to provide a complete and
powerful Spatial DBMS (mostly OGC-SFS compliant).
SQLite
http://www.sqlite.org/
• Created by Richard Hipp
• First release published in 2000
• SQLite is a software library that implements a self-contained, serverless,
zero-configuration, transactional SQL database engine. SQLite is the most
widely deployed SQL database engine in the world.
• A single lightweight library implementing the full SQL engine
• standard SQL implementation: almost complete SQL-92
• no complex client/server architecture
• no installation, no configuration
What do you need to get started?
• Spatialite
• Spatialite_GUI Program
• http://www.gaia-gis.it/gaia-sins/
• SQLite
• SQLite Manager (Firefox plugin)
• Install extension from Firefox browser
Resources
SQLite:
http://www.sqlite.org/
-File based relational database
Spatialite:
http://www.gaia-gis.it/gaia-sins/
-SQLite extension for gis functionality
GDAL:
http://www.gdal.org/
-Set of libraries for ETL operations with multiple GIS formats
QGIS:
http://www.qgis.org/
-Open Source GIS application
OSGeo4W:
http://trac.osgeo.org/osgeo4w/
-Installer for suite of open source GIS software and tools GIS
Spatialite GUI Application
SQLite database files
DEMO
• Spatialite GUI
• Shapefile loader
• GDAL Command line
• Load shapefile, file geodatabase
Loading Shapefile in Spatialite GUI
Load
Shapefil
e
Using GDAL to load data into Spatialite
Using GDAL to load data into Spatialite
-Load shapefile into Spatialite database
ogr2ogr –update –append –f SQLite C:\GISData\NDIC\ndic.sqlite
C:\GISData\NDIC\shapefiles\Horizontals_Lines.shp Horizontals_Lines –nln
Horizontals_Lines
Shapefile directory to Spatialite (windows):
for %f in (/GISData/NDIC/*.shp)
do
( ogr2ogr -update -append -t_srs ESPGS:4267 -f SQLite
C:\GISData\NDIC\ndic.sqlite GISData\NDIC\%f -nln layers)
-Load file geodatabase feature class into Spatialite database
ogr2ogr –update –append –f SQLite C:\GISData\NDIC\ndic.sqlite
MTND_CadNSDI.gdb PLSSFirstDivision –nln Landgrid_PLSS_Sections
DEMO
• Firefox SQLite Manager
• Spatialite GUI
Using Firefox SQLite Manager
-Basic query
Spatialite GUI
-Basic query
Spatialite GUI
-query with spatial function
Using Firefox SQLite Manager
-Trying to use spatial functions in query
SQLite vs Spatialite new database structure
Spatial
Metadata
Empty
Pros
•
•
•
•
•
•
•
Cross-platform
No custom installation to use
Single file for transport
Simple access to SQL queries
Large spatial function library
Transform geometries within sql query
Fast prototyping of geodatase modeling and analysis
Cons
• Only simple multi-editor environment, no conflict
management
• Less performant than server based RDBMS
Who is Spatialite for?
• Non-Enterprise user
• Users with reasonable size datasets
• User wanting to get started with SQL
• Users needing another GIS tool in their belt
• User familiar with SQL wanting access to spatial functions
• User who needs functionality of RDBMS but does not have
access to servers
Who is Spatialite NOT for?
• Enterprise user who needs maximum performance
• Users who need a robust multi-editor environment with
conflict management
• User who have very large datasets
DEMO
• Spatialite GUI
• Query examples
Spatialite GUI
-Basic query
Spatialite GUI
-query with spatial function
SQL Server Non-Spatial Queries
SQL Server MGMT Studio – Midpoint on Linestring
USE database
IF OBJECT_ID('tempdb..#NDIC_HORZ_LIST') IS NOT NULL
DROP TABLE #NDIC_HORZ_LIST
SET NOCOUNT OFF
-- Create temp table to hold the OBJECTID and apply filter on wells without enough points
SELECT lineID = identity (int,1,1), OBJECTID INTO #NDIC_HORZ_LIST FROM database.dbo.API12_PATHS
CREATE CLUSTERED INDEX idx_NDIC_HORZ_LIST_lineid ON #NDIC_HORZ_LIST(lineID)
CREATE INDEX idx_NDIC_HORZ_LIST_objectid ON #NDIC_HORZ_LIST(OBJECTID)
DECLARE
DECLARE
DECLARE
DECLARE
DECLARE
DECLARE
DECLARE
@midPoint geometry
@point1X numeric(25,20)
@point1Y numeric(25,20)
@point2X numeric(25,20)
@point2Y numeric(25,20)
@xDiff numeric(25,20)
@yDiff numeric(25,20)
DECLARE @workingLineLength1 numeric(25,20) = 0
DECLARE @workingLineLength2 numeric(25,20) = 0
DECLARE @lineLength numeric(25,20)
Multiple While Loop Operations
SLOWER
DECLARE @i int
DECLARE @lineID int
DECLARE @lineOID INT
DECLARE @line geometry
DECLARE @workLine geometry
DECLARE @lastSegment geometry
DECLARE @lineFromString NVARCHAR(MAX)
SET @lineID = 1
-- Outer loop to iterate over lines in table, using the counts from the temp table
WHILE @lineID <= (SELECT COUNT(*) FROM #NDIC_HORZ_LIST)
BEGIN
-- Assign OBJECTID FROM Temp table to variable
SET @lineOID = (SELECT OBJECTID FROM #NDIC_HORZ_LIST WHERE lineID = @lineID)
-- Assign SHAPE From table to geometry variable
SET @line = (SELECT SHAPE FROM database.dbo.API12_PATHS WHERE OBJECTID = @lineOID)
SET @lineLength = @line.STLength() / 2
SET @lineFromString = 'LINESTRING('
SET @i = 1
-- Loop through points in line until the working length is longer than half the line length
WHILE @workingLineLength2 < @lineLength
BEGIN
-- For first point add start point from line
IF @i = 1
BEGIN
SET @lineFromString = @lineFromString + CAST(@line.STStartPoint().STX AS VARCHAR(10)) + ' ' + CAST(@line.STStartPoint().STY AS VARCHAR(10)) + ')'
END
ELSE
BEGIN
-- Strip the trailing ) from the line string text
SET @lineFromString = LEFT(@lineFromString, LEN(@lineFromString) - 1)
SET @lineFromString = @lineFromString + ',' + CAST(@line.STPointN(@i).STX AS VARCHAR(10)) + ' ' + CAST(@line.STPointN(@i).STY AS VARCHAR(10)) + ')'
SET @workLine = geometry::STGeomFromText(@lineFromString, 4267)
SET @lastSegment = geometry::STGeomFromText('LINESTRING(' +
CAST(@line.STPointN(@i - 1).STX AS VARCHAR(10)) + ' ' + CAST(@line.STPointN(@i - 1).STY AS VARCHAR(10)) + ',' +
CAST(@line.STPointN(@i).STX AS VARCHAR(10)) + ' ' + CAST(@line.STPointN(@i).STY AS VARCHAR(10)) + ')', 4267)
SET @workingLineLength2 = @workLine.STLength()
IF @workingLineLength2 > @lineLength
BEGIN
SET @point1X = @line.STPointN(@i - 1).STX
SET @point1Y = @line.STPointN(@i - 1).STY
SET @point2X = @line.STPointN(@i).STX
SET @point2Y = @line.STPointN(@i).STY
SET @xDiff = (@point2X - @point1X) * ((@lineLength - @workingLineLength1) / @lastSegment.STLength())
SET @yDiff = (@point2Y - @point1Y) * ((@lineLength - @workingLineLength1) / @lastSegment.STLength())
SET @midPoint = geometry::STGeomFromText('POINT(' + CAST(@point1X + @xDiff AS VARCHAR(25)) + ' ' + CAST(@point1Y + @yDiff AS VARCHAR(25)) + ')',4267)
INSERT INTO database.dbo.API10_SHL(OBJECTID,SHAPE)
SELECT
ROW_NUMBER() OVER(ORDER BY t2.OBJECTID), @midPoint FROM database.dbo.API12_PATHS AS t2
END
SET @workingLineLength1 = @workingLineLength2
END
SET @i = @i + 1
END
SET @lineID = @lineID + 1
END
Spatialite GUI
-query with spatial function
Spatialite GUI
-attach to another sqlite database
SQL
Query
GUI
Spatialite GUI
-Query using join to attached database
Spatialite Spatial Functions
GeomFromExifGpsBlob
MakePoint
MakePointZ
MakePointM
MakePointZM
MakeLine
TriangularGrid
HexagonalGrid
BuildMbr
BuildCircleMbr
Extent
ToGARS
SingleSidedBuffer
SridFromAuthCRS
SharedPaths
ShiftCoords
Line_Interpolate_Point
ShiftCoordinates
Line_Interpolate_Equidistant_Points ST_Translate
Line_Locate_Point
ST_Shift_Longitude
Line_Substring
NormalizeLonLat
ClosestPoint
ScaleCoords
ShortestLine
ScaleCoordinates
Snap
RotateCoords
Collect
RotateCoordinates
Collect
ReflectCoords
LineMerge
ReflectCoordinates
MinM
MaxM
GeomFromText
ST_WKTToSQL
PointFromText
LineFromText
LineStringFromText
PolyFromText
PolygonFromText
MPointFromText
MultiPointFromText
MLineFromText
MultiLineStringFromText
MPolyFromText
PointFromWKB
IsSimple
NumPoints
LineFromWKB
IsValid
PointN
LineStringFromWKB
Boundary
Centroid
PolyFromWKB
Envelope
Area
PolygonFromWKB
Expand
ExteriorRing
MPointFromWKB
NPoints
NumInteriorRing
MultiPointFromWKB
NRings
NumInteriorRings
MLineFromWKB
Reverse
InteriorRingN
MultiLineStringFromWKB ForceLHR
NumGeometries
MPolyFromWKB
SanitizeGeometry
GeometryN
MultiPolygonFromWKB
CompressGeometry
MbrEqual
GeomCollFromWKB
UncompressGeometry MbrDisjoint
GeometryCollectionFromWK
CastToPoint
MbrTouches
B
BdPolyFromWKB
CastToLinestring
MbrWithin
BdMPolyFromWKB
CastToPolygon
MbrOverlaps
AsText
CastToMultiPoint
MbrIntersects
AsWKT
CastToMultiLinestring EnvelopesIntersects
AsBinary
CastToMultiPolygon MbrContains
CastToGeometyCollecti
AsSVG
Equals
on
AsKml
CastToMulti
Disjoint
GeomFromKml
CastToSingle
Touches
AsGml
CastToXY
Within
GeomFromGML
CastToXYZ
Overlaps
AsGeoJSON
CastToXYM
Crosses
GeomFromGeoJSON
CastToXYZM
Intersects
AsEWKB
X
Contains
GeomFromEWKB
Y
Covers
AsEWKT
Z
CoveredBy
GeomFromEWKT
M
Relate
AsFGF
StartPoint
Distance
GeomFromFGF
EndPoint
PtDistWithin
Dimension
Length
Intersection
CoordDimension
Perimeter
Difference
MultiPolygonFromText
NDims
Geodesic Length
GUnion
SnapToGrid
GeomCollFromText
Is3D
Great Circle Length
GUnion
GeoHash
IsClosed
SymDifference
AsX3D
FilterMbrWithin
IsRing
Buffer
MaxDistance
FilterMbrContains
GARSMbr
MbrMinX
MbrMinY
MbrMaxX
MbrMaxY
ST_MinZ
MaxZ
GeometryCollectionFromTe
IsMeasured
xt
BdPolyFromText
GeometryType
BuildArea
SwapCoords
Polygonize
UnaryUnion
DissolveSegments
DissolvePoints
LinesFromRings
SwapCoordinates
InitSpatialMetaData
InsertEpsgSrid
AddGeometryColumn
RecoverGeometryColumn
LinesCutAtNodes
DiscardGeometryColumn
RingsCutAtNodes
CollectionExtract
LocateAlongMeasure
LocateBetweenMeasures
DelaunayTriangulation
VoronojDiagram
ConcaveHull
MakeValid
MakeValidDiscarded
Segmentize
Split
SplitLeft
SplitRight
Azimuth
RegisterVirtualGeometry
DropVirtualGeometry
CreateSpatialIndex
CreateMbrCache
DisableSpatialIndex
CheckSpatialIndex
RecoverSpatialIndex
UpdateLayerStatistics
CreateTopologyTables
CheckSpatialMetaData
AutoFDOStart
AutoFDOStop
InitFDOSpatialMetaData
AddFDOGeometryColumn
RecoverFDOGeometryColum
n
DiscardFDOGeometryColum
n
Using Spatialite in ArcMap
• Read-only access was added at 10.2
• Can use geoprocessing tools with layers but with limitations
• Using layers for geoprocessing input and output to
different format seems to work pretty well.
• Can write results to sqlite database, but pretty buggy at
10.2.1
• Recommend using as read-only access at current version
• Cannot be published to ArcGIS Server
• Cannot be edited through ArcMap
DEMO
• Spatialite functions
• SQL in Spatialite GUI
• View layers in ArcMap
Spatialite GUI
- Interpolated point along line
- Use as midpoint
ArcMap
- Midpoints
Spatialite GUI
- Line offset
- Geometry transformation inline function
ArcMap
- Line offset
Spatialite GUI
Single Sided Buffer
Spatialite GUI
Buffer
ArcMap
Single Sided Buffer
ArcMap
Single Sided Buffer vs Buffer
Spatialite GUI
- Convex Hull vs Concave Hull
ArcMap
- Convex Hull vs Concave Hull
Convex
Hull
Concave
Hull
Using Spatialite in QGIS
• Read/Write Access
• Direct Editing of features
• DBManager – Execute queries on SQLite database inside
QGIS
DEMO
• Spatialite editing in QGIS
• SQL in QGIS DB Manager
Spatialite Editing
-Connecting to Spatialite database
Spatialite Editing
-Creating new table
SQL
Query
Editor
Spatialite Editing
-Add Geometry Column
Spatialite Editing
-Add new table to map
Spatialite Editing
-Editing new layer
Spatialite Editing
-Query new feature in Spatialite
Spatialite Editing
-View new feature in ArcMap
QGIS Query Layer
Single Sided Buffer
QGIS
Single Sided Buffer
THE END
QGIS Query Layer
- DBManager spatial query and add to map
QGIS
Line offset
QGIS – DBManager
-Sql window, create new layer from sql
query
QGIS – DBManager
-Sql window, create new layer from sql
query
-Subset of data based on ST_Intersects
Resources
SQLite:
http://www.sqlite.org/
-File based relational database
Spatialite:
http://www.gaia-gis.it/gaia-sins/
-SQLite extension for gis functionality
Geopackage:
http://www.geopackage.org
-OGC standard for exchange format
GDAL:
http://www.gdal.org/
-Set of libraries for ETL operations with multiple GIS formats
QGIS:
http://www.qgis.org/
-Open Source GIS application
OSGeo4W:
http://trac.osgeo.org/osgeo4w/
-Installer for suite of open source GIS software and tools GIS
Spatialite GUI
- Interpolated points along line
- Geometry transformation inline function
ArcMap
- Interpolated points along line
Spatialite GUI
Delaunay Triangulation
ArcMap
Delaunay Triangulation
Download