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


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.5.zip (13.0 kB view details)

Uploaded Source

django-pyodbc-gis-0.0.5.tar.bz2 (8.1 kB view details)

Uploaded Source

File details

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

File metadata

File hashes

Hashes for django-pyodbc-gis-0.0.5.zip
Algorithm Hash digest
SHA256 bc349d2d05deb61f5c05e7c19fced6587d3a997d860cd2c5118652e66259e9d6
MD5 5b14d4b855b31681f21d1552c1b595f7
BLAKE2b-256 4dfdfd3be566890482409fb662b11ce92a54100176bf1ccdded6c48a7549b3bc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for django-pyodbc-gis-0.0.5.tar.bz2
Algorithm Hash digest
SHA256 a0404611ee8b9615fc7ebdbbbc22351434805b4225f5dc1ce27e2e71a9258495
MD5 63ec7bcaebe252aebd151a54cb8d2208
BLAKE2b-256 757166efddccceb6263c13226cc81a918de4eec599f6b04efaf68cf4a39a2d52

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