Skip to main content

GIS support for SQL Server, on top of django-pyodbc-azure

Project description

This driver implements basic GIS (geodjango) support for Microsoft SQL
Server, built on top of
[django-pyodbc-azure](https://github.com/michiya/django-pyodbc-azure).

It should be considered very alpha-quality at this stage! Feedback,
issues, and patches are all very welcome.

# Supported and unsupported operations

Most
[possible operations](https://docs.djangoproject.com/en/dev/ref/contrib/gis/geoquerysets/)
are supported. The primary exceptions are those that include the boundary
itself, and convenience operations such as `left`/`right`,
`overlaps_above`, etc.

The following spatial lookups are **not** supported:

* bounding-box related: `contains_properly`, `covered_by`, `covers`
* specialist positional: `left`, `right`, `overlaps_left`,
`overlaps_right`, `overlaps_above`, `overlaps_below`,
`strictly_above`, `strictly_below`
* miscellaneous: `dwithin`, `exact`, `relate`, `same_as`

The following spatial aggregate operations are **not** supported:

* `extent3d` and `make_line`

In addition, for performance reasons not all geometry operations have
a corresponding geography analogue. The following operations are
**not** available on geography types:

* `bbcontains`, `bboverlaps`, `contained`, `crosses`, `touches`

# Limitations of SQL Server

SQL Server is OGC compliant, but does fall short of the functionality
provided by [PostGIS](http://postgis.net/) and
[Oracle Spatial](http://www.oracle.com/technetwork/database/options/spatialandgraph/overview/index.html).
In particular, all of the boundary inclusion operations are missing:
for example,
[`contains`](https://docs.djangoproject.com/en/dev/ref/contrib/gis/geoquerysets/#contains)
is supported, but not
[`covers`](https://docs.djangoproject.com/en/dev/ref/contrib/gis/geoquerysets/#covers).

Type information is also slightly different in SQL Server. Instead of
keeping the geometry type (Point, Polygon, etc) in the column's
metadata, it is a property of the *instance* (and hence so is the
dimensionality), and similarly for the SRID. This means you can in
theory store geometries of different types and SRIDs in the same
column; this driver creates a constraint to check the type, but
nothing else. It also means that introspection is rather fragile.

Geometries cannot be transformed to a different SRID (such as with
[`ST_Transform`](http://postgis.org/docs/ST_Transform.html) in
PostGIS).

# Admin Interface

The admin interface works. This is worth noting here simply because
the interface has to be pretend to be MySQL in order to run! There
are some hard-coded checks for MySQL in the framework, and the
limitations (with respect to introspection) of SQL Server are actually
similar enough that this works for SQL Server too.

# Installation and Setup

The only direct dependency is
[django-pyodbc-azure](https://github.com/michiya/django-pyodbc-azure).
If you are on linux this will require installing
[freetds](http://www.freetds.org/) and
[odbcinst](http://www.unixodbc.org/). You will also need to
[configure](http://www.unixodbc.org/doc/FreeTDS.html) it (the most
important is `odbcinst.ini`).

To use the driver, your Django database configuration section should
look something like this:
```
DATABASES = {
'default': {
'NAME': 'dbname',
'ENGINE': 'django_pyodbc_gis',
'HOST': '127.0.0.1,1433',
'USER': 'django',
'PASSWORD': 'pwd123',
'OPTIONS': {
'host_is_server': True,
# 'dsn': 'mssql',
'extra_params': 'TDS_Version=8.0'
}
}
}
```

You have two options regarding specifying the host connection details;
if you have configured a DSN you may omit the `HOST` key and use the
`dsn` key in `OPTIONS` to specify it. If not, you will probably need
to specify the TDS version in `extra_params` (if you get error
messages about
[unicode](http://www.seanelavelle.com/2011/07/30/pyodbc-and-freetds-unicode-ntext-problem-solved/)
you may well have gotten this wrong)

# TODO

* extended operations (gml, geojson, etc. Further investigation: SQL
Server only supports GML, but treats it as an instance method
where-as geodjango assumes it is a function. This might remain on
the back-burner for now)
* Check inspectdb support
* Test suite!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

django-pyodbc-gis-0.0.6.zip (13.5 kB view details)

Uploaded Source

django-pyodbc-gis-0.0.6.tar.bz2 (8.4 kB view details)

Uploaded Source

File details

Details for the file django-pyodbc-gis-0.0.6.zip.

File metadata

File hashes

Hashes for django-pyodbc-gis-0.0.6.zip
Algorithm Hash digest
SHA256 cdbb12fe3d115976bf471b82c23554c964eaa6858c335f7932bdf47369cea32e
MD5 6b4095e48ef45c18e19da3296dd07353
BLAKE2b-256 04bb983297f6b94debe0dc9b6a2f181a709997b470552cad54c8efd40d487ab4

See more details on using hashes here.

File details

Details for the file django-pyodbc-gis-0.0.6.tar.bz2.

File metadata

File hashes

Hashes for django-pyodbc-gis-0.0.6.tar.bz2
Algorithm Hash digest
SHA256 6b6672aca41f0f371ce68689d44f33d33b761e1317e85a30643d04d17491d98d
MD5 bc83d3cad5993f6756743d659909cb93
BLAKE2b-256 c4a03cd244e8fa8e77930c24571498a828560b18511a9e783f99bcad92bacac0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page