skip to navigation
skip to content

Not Logged In

django-pyodbc-gis 0.0.6

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

Latest Version: 0.0.7

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!  
File Type Py Version Uploaded on Size
django-pyodbc-gis-0.0.6.tar.bz2 (md5) Source 2014-01-16 8KB
django-pyodbc-gis-0.0.6.zip (md5) Source 2014-01-16 13KB
  • Downloads (All Versions):
  • 24 downloads in the last day
  • 150 downloads in the last week
  • 495 downloads in the last month