Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release...

Preview:

Citation preview

Spatialite

• 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).

http://www.gaia-gis.it/gaia-sins/

SQLite

• 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

http://www.sqlite.org/

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 Shapefi

le

Using GDAL to load data into Spatialite

-Load shapefile into Spatialite databaseogr2ogr –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 databaseogr2ogr –update –append –f SQLite C:\GISData\NDIC\ndic.sqlite MTND_CadNSDI.gdb PLSSFirstDivision –nln Landgrid_PLSS_Sections

Using GDAL to load data into Spatialite

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

Empty

Spatial Metadata

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

USE databaseIF OBJECT_ID('tempdb..#NDIC_HORZ_LIST') IS NOT NULL

DROP TABLE #NDIC_HORZ_LISTSET 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 @midPoint geometryDECLARE @point1X numeric(25,20)DECLARE @point1Y numeric(25,20)DECLARE @point2X numeric(25,20)DECLARE @point2Y numeric(25,20)DECLARE @xDiff numeric(25,20)DECLARE @yDiff numeric(25,20)

DECLARE @workingLineLength1 numeric(25,20) = 0DECLARE @workingLineLength2 numeric(25,20) = 0DECLARE @lineLength numeric(25,20)

DECLARE @i intDECLARE @lineID intDECLARE @lineOID INT

DECLARE @line geometry

DECLARE @workLine geometryDECLARE @lastSegment geometryDECLARE @lineFromString NVARCHAR(MAX)

SET @lineID = 1

-- Outer loop to iterate over lines in table, using the counts from the temp tableWHILE @lineID <= (SELECT COUNT(*) FROM #NDIC_HORZ_LIST)BEGIN

-- Assign OBJECTID FROM Temp table to variableSET @lineOID = (SELECT OBJECTID FROM #NDIC_HORZ_LIST WHERE lineID = @lineID)

-- Assign SHAPE From table to geometry variableSET @line = (SELECT SHAPE FROM database.dbo.API12_PATHS WHERE OBJECTID = @lineOID)SET @lineLength = @line.STLength() / 2SET @lineFromString = 'LINESTRING('SET @i = 1

-- Loop through points in line until the working length is longer than half the line lengthWHILE @workingLineLength2 < @lineLengthBEGIN

-- For first point add start point from lineIF @i = 1BEGIN SET @lineFromString = @lineFromString + CAST(@line.STStartPoint().STX AS VARCHAR(10)) + ' ' + CAST(@line.STStartPoint().STY AS VARCHAR(10)) + ')'END

ELSEBEGIN -- 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 > @lineLengthBEGIN

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 t2END SET @workingLineLength1 = @workingLineLength2

END SET @i = @i + 1

END SET @lineID = @lineID + 1END

SQL Server Non-Spatial QueriesSQL Server MGMT Studio – Midpoint on Linestring

Multiple While Loop OperationsSLOWER

Spatialite GUI-query with spatial function

Spatialite GUI-attach to another sqlite database

SQL Quer

y

GUI

Spatialite GUI-Query using join to attached database

Spatialite Spatial FunctionsGeomFromExifGpsBlob PointFromWKB IsSimple NumPoints SingleSidedBuffer SridFromAuthCRSMakePoint LineFromWKB IsValid PointN SharedPaths ShiftCoordsMakePointZ LineStringFromWKB Boundary Centroid Line_Interpolate_Point ShiftCoordinates

MakePointM PolyFromWKB Envelope AreaLine_Interpolate_Equidistant_Points

ST_Translate

MakePointZM PolygonFromWKB Expand ExteriorRing Line_Locate_Point ST_Shift_LongitudeMakeLine MPointFromWKB NPoints NumInteriorRing Line_Substring NormalizeLonLatTriangularGrid MultiPointFromWKB NRings NumInteriorRings ClosestPoint ScaleCoordsHexagonalGrid MLineFromWKB Reverse InteriorRingN ShortestLine ScaleCoordinates

BuildMbrMultiLineStringFromWKB

ForceLHR NumGeometries Snap RotateCoords

BuildCircleMbr MPolyFromWKB SanitizeGeometry GeometryN Collect RotateCoordinatesExtent MultiPolygonFromWKB CompressGeometry MbrEqual Collect ReflectCoords

ToGARS GeomCollFromWKBUncompressGeometry

MbrDisjoint LineMerge ReflectCoordinates

GARSMbrGeometryCollectionFromWKB

CastToPoint MbrTouches BuildArea SwapCoords

MbrMinX BdPolyFromWKB CastToLinestring MbrWithin Polygonize SwapCoordinatesMbrMinY BdMPolyFromWKB CastToPolygon MbrOverlaps UnaryUnion InitSpatialMetaDataMbrMaxX AsText CastToMultiPoint MbrIntersects DissolveSegments InsertEpsgSrid

MbrMaxY AsWKTCastToMultiLinestring

EnvelopesIntersects DissolvePoints AddGeometryColumn

ST_MinZ AsBinary CastToMultiPolygon MbrContains LinesFromRings RecoverGeometryColumn

MaxZ AsSVGCastToGeometyCollection

Equals LinesCutAtNodes DiscardGeometryColumn

MinM AsKml CastToMulti Disjoint RingsCutAtNodes RegisterVirtualGeometryMaxM GeomFromKml CastToSingle Touches CollectionExtract DropVirtualGeometryGeomFromText AsGml CastToXY Within LocateAlongMeasure CreateSpatialIndexST_WKTToSQL GeomFromGML CastToXYZ Overlaps LocateBetweenMeasures CreateMbrCachePointFromText AsGeoJSON CastToXYM Crosses DelaunayTriangulation DisableSpatialIndexLineFromText GeomFromGeoJSON CastToXYZM Intersects VoronojDiagram CheckSpatialIndexLineStringFromText AsEWKB X Contains ConcaveHull RecoverSpatialIndexPolyFromText GeomFromEWKB Y Covers MakeValid UpdateLayerStatisticsPolygonFromText AsEWKT Z CoveredBy MakeValidDiscarded CreateTopologyTablesMPointFromText GeomFromEWKT M Relate Segmentize CheckSpatialMetaDataMultiPointFromText AsFGF StartPoint Distance Split AutoFDOStartMLineFromText GeomFromFGF EndPoint PtDistWithin SplitLeft AutoFDOStopMultiLineStringFromText

Dimension Length Intersection SplitRight InitFDOSpatialMetaData

MPolyFromText CoordDimension Perimeter Difference Azimuth AddFDOGeometryColumn

MultiPolygonFromText NDims Geodesic Length GUnion SnapToGridRecoverFDOGeometryColumn

GeomCollFromText Is3D Great Circle Length GUnion GeoHashDiscardFDOGeometryColumn

GeometryCollectionFromText

IsMeasured IsClosed SymDifference AsX3D FilterMbrWithin

BdPolyFromText GeometryType IsRing Buffer MaxDistance FilterMbrContainsBdMPolyFromText SRID PointOnSurface ConvexHull 3DDistance FilterMbrIntersectsGeomFromWKB SetSRID Simplify HausdorffDistance 3DMaxDistance BuildMbrFilter

ST_WKBToSQL IsEmptySimplifyPreserveTopology

OffestCurve Transform RTreeIntersects

RTreeDistWithin RTreeContains RTreeWithin

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 GUISingle Sided Buffer

Spatialite GUIBuffer

ArcMapSingle Sided Buffer

ArcMapSingle 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 LayerSingle Sided Buffer

QGISSingle Sided Buffer

THE END

QGIS Query Layer- DBManager spatial query and add to map

QGISLine 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 GUIDelaunay Triangulation

ArcMapDelaunay Triangulation

Recommended