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

# 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)

Project details


Release history Release notifications

History Node

0.0.7

History Node

0.0.6

This version
History Node

0.0.5

History Node

0.0.3

Download files

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

Filename, size & hash SHA256 hash help File type Python version Upload date
django-pyodbc-gis-0.0.5.tar.bz2 (8.1 kB) Copy SHA256 hash SHA256 Source None Jan 15, 2014
django-pyodbc-gis-0.0.5.zip (13.0 kB) Copy SHA256 hash SHA256 Source None Jan 15, 2014

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page