Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release...
-
Upload
dalton-stevers -
Category
Documents
-
view
215 -
download
0
Transcript of Spatialite Created by Alessandro Furieri (Italy) Created by Alessandro Furieri (Italy) First release...
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