.. _sqlite:

.. index::
   single: SpatialLite

*****************************************************************************
SpatiaLite
*****************************************************************************

SpatiaLite spatially enables the file-based SQLite database.  For more
information see the SpatiaLite `description page`_.

.. _`description page`: https://www.gaia-gis.it/fossil/libspatialite/index

File listing
--------------

Similar to other database formats, the .sqlite file consists of
several tables.  The geometry is held in a BLOB table column.

Data Access / Connection Method
---------------------------------

Spatialite access is available through OGR. See the OGR `driver page`_
for specific driver information.  The driver is available in GDAL/OGR
version 1.7.0 or later.

.. _`driver page`: http://www.gdal.org/ogr/drv_sqlite.html

OGR uses the names of spatial tables within the SpatiaLite database
(tables with a geometry column that are registered in the
geometry_columns table) as layers.

The CONNECTION parameter must include the sqlite extension, and the
DATA parameter should be the name of the spatial table (or OGR layer).

::

  CONNECTIONTYPE OGR
  CONNECTION "spatialite_db.sqlite"
  DATA "layername"

OGRINFO Examples
----------------

First you should make sure that your GDAL/OGR build contains the
spatialite "SQLite" driver, by using the '--formats' command:

::

  >ogrinfo --formats
     Loaded OGR Format Drivers:
     ...
     -> "GMT" (read/write)
     -> "SQLite" (read/write)
     -> "ODBC" (read/write)
     ...

If you don't have the driver, you might want to try the `MS4W`_ or
`OSGeo4W`_ packages, which include the driver.

.. _`MS4W`: http://www.ms4w.com
.. _`OSGeo4W`: http://trac.osgeo.org/osgeo4w/

Once you have confirmed that you have the SQLite driver you are ready
to try an ogrinfo command on your database to get a list of spatial
tables:

::

  >ogrinfo counties.sqlite
     INFO: Open of `counties.sqlite'
     using driver `SQLite' successful.
     1: mn_counties (Polygon)

Now use ogrinfo to get information on the structure of the spatial
table:

::

  >ogrinfo counties.sqlite county -summary
     INFO: Open of `counties.sqlite'
     using driver `SQLite' successful.

     Layer name: mn_counties
     Geometry: Polygon
     Feature Count: 87
     Extent: (189783.560000, 4816309.330000) - (761653.524114, 5472346.500000)
     Layer SRS WKT:
     PROJCS["NAD83 / UTM zone 15N",
         GEOGCS["NAD83",
             DATUM["North_American_Datum_1983",
                 SPHEROID["GRS 1980",6378137,298.257222101,
                 AUTHORITY["EPSG","7019"]],
                 TOWGS84[0,0,0,0,0,0,0],
                 AUTHORITY["EPSG","6269"]],
             PRIMEM["Greenwich",0,
                AUTHORITY["EPSG","8901"]],
             UNIT["degree",0.0174532925199433,
                AUTHORITY["EPSG","9122"]],
             AUTHORITY["EPSG","4269"]],
        UNIT["metre",1,
            AUTHORITY["EPSG","9001"]],
        PROJECTION["Transverse_Mercator"],
        PARAMETER["latitude_of_origin",0],
        PARAMETER["central_meridian",-93],
        PARAMETER["scale_factor",0.9996],
        PARAMETER["false_easting",500000],
        PARAMETER["false_northing",0],
        AUTHORITY["EPSG","26915"],
        AXIS["Easting",EAST],
        AXIS["Northing",NORTH]]
    FID Column = PK_UID
    Geometry Column = Geometry
    AREA: Real (0.0)
    PERIMETER: Real (0.0)
    COUNTY_ID: Integer (0.0)
    FIPS: String (0.0)
     ...


Mapfile Example
---------------

Standard connection
*******************

::

     LAYER
        NAME my_counties_layer
        TYPE POLYGON
        CONNECTIONTYPE ogr
        CONNECTION "counties.sqlite"
        DATA "mn_counties"
        STATUS ON
        CLASS
          NAME "mncounties"
          STYLE
            COLOR 255 255 120
          END
        END
     END
     
Connection utilizing SQL syntax
*******************************

::

     LAYER
        NAME my_counties_layer
        TYPE POLYGON
        CONNECTIONTYPE OGR
        CONNECTION "counties.sqlite"
        DATA "select geometry from mn_counties"
        STATUS ON
        CLASS
          NAME "mncounties"
          STYLE
            COLOR 255 255 120
          END
        END
     END     
     
Connection utilizing joined table for additional attributes
***********************************************************

::

     LAYER
        NAME my_counties_layer
        TYPE POLYGON
        CONNECTIONTYPE OGR
        CONNECTION "counties.sqlite"
        DATA "SELECT mn.geometry, c.fips FROM mn_counties mn inner
              join county_data c on mn.county_id = c.county_id'
        STATUS ON
        CLASS
          NAME "mncounties"
          STYLE
            COLOR 255 255 120
          END
        END
     END
     
Standard Connection with a filter
*********************************

::

     LAYER
        NAME my_counties_layer
        TYPE POLYGON
        CONNECTIONTYPE OGR
        CONNECTION "counties.sqlite"
        DATA "mn_counties"
        FILTER ('[fips]' = '27031')
        STATUS ON
        CLASS
          NAME "mncounties"
          STYLE
            COLOR 255 255 120
          END
        END
     END
     
Filter utilizing SQL syntax
***************************

::

     LAYER
        NAME my_counties_layer
        TYPE POLYGON
        CONNECTIONTYPE OGR
        CONNECTION "counties.sqlite"
        DATA "select geometry from mn_counties where fips = '27031"
        STATUS ON
        CLASS
          NAME "mncounties"
          STYLE
            COLOR 255 255 120
          END
        END
     END
