spatialite created by alessandro furieri (italy) created by alessandro furieri (italy) first release...

60
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/

Upload: dalton-stevers

Post on 15-Dec-2015

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

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/

Page 2: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

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/

Page 3: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

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

Page 4: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

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

Page 5: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

Spatialite GUI Application

Page 6: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

SQLite database files

Page 7: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

DEMO

• Spatialite GUI• Shapefile loader

• GDAL Command line• Load shapefile, file geodatabase

Page 8: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

Loading Shapefile in Spatialite GUI

Load Shapefi

le

Page 9: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

Using GDAL to load data into Spatialite

Page 10: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

-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

Page 11: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

DEMO

• Firefox SQLite Manager

• Spatialite GUI

Page 12: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

Using Firefox SQLite Manager-Basic query

Page 13: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

Spatialite GUI-Basic query

Page 14: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

Spatialite GUI-query with spatial function

Page 15: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

Using Firefox SQLite Manager-Trying to use spatial functions in query

Page 16: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

SQLite vs Spatialite new database structure

Empty

Spatial Metadata

Page 17: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

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

Page 18: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

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

Page 19: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

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

Page 20: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

DEMO

• Spatialite GUI• Query examples

Page 21: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

Spatialite GUI-Basic query

Page 22: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

Spatialite GUI-query with spatial function

Page 23: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

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

Page 24: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

Spatialite GUI-query with spatial function

Page 25: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

Spatialite GUI-attach to another sqlite database

SQL Quer

y

GUI

Page 26: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

Spatialite GUI-Query using join to attached database

Page 27: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

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

Page 28: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

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

Page 29: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

DEMO

• Spatialite functions• SQL in Spatialite GUI• View layers in ArcMap

Page 30: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

Spatialite GUI- Interpolated point along line

- Use as midpoint

Page 31: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

ArcMap- Midpoints

Page 32: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

Spatialite GUI- Line offset

- Geometry transformation inline function

Page 33: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

ArcMap- Line offset

Page 34: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

Spatialite GUISingle Sided Buffer

Page 35: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

Spatialite GUIBuffer

Page 36: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

ArcMapSingle Sided Buffer

Page 37: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

ArcMapSingle Sided Buffer vs Buffer

Page 38: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

Spatialite GUI- Convex Hull vs Concave Hull

Page 39: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

ArcMap- Convex Hull vs Concave Hull

Convex Hull

Concave

Hull

Page 40: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

Using Spatialite in QGIS

• Read/Write Access• Direct Editing of features• DBManager – Execute queries on SQLite database

inside QGIS

Page 41: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

DEMO

• Spatialite editing in QGIS• SQL in QGIS DB Manager

Page 42: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

Spatialite Editing-Connecting to Spatialite database

Page 43: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

Spatialite Editing-Creating new table

SQL Query Editor

Page 44: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

Spatialite Editing-Add Geometry Column

Page 45: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

Spatialite Editing-Add new table to map

Page 46: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

Spatialite Editing-Editing new layer

Page 47: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

Spatialite Editing-Query new feature in Spatialite

Page 48: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

Spatialite Editing-View new feature in ArcMap

Page 49: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

QGIS Query LayerSingle Sided Buffer

Page 50: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

QGISSingle Sided Buffer

Page 51: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

THE END

Page 52: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

QGIS Query Layer- DBManager spatial query and add to map

Page 53: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

QGISLine offset

Page 54: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

QGIS – DBManager-Sql window, create new layer from sql query

Page 55: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

QGIS – DBManager-Sql window, create new layer from sql query-Subset of data based on ST_Intersects

Page 56: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

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

Page 57: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

Spatialite GUI- Interpolated points along line

- Geometry transformation inline function

Page 58: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

ArcMap- Interpolated points along line

Page 59: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

Spatialite GUIDelaunay Triangulation

Page 60: Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release published in 2008 First release published in 2008

ArcMapDelaunay Triangulation