mirror of
https://github.com/django/django.git
synced 2024-12-23 01:25:58 +00:00
Fixed the add_postgis_srs
routine to support SpatiaLite.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@10229 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
13ea4a9133
commit
a1e7723c79
@ -1,27 +1,49 @@
|
|||||||
def add_postgis_srs(srs):
|
def add_postgis_srs(srs, auth_name='EPSG', auth_srid=None, ref_sys_name=None):
|
||||||
"""
|
"""
|
||||||
This function takes a GDAL SpatialReference system and adds its
|
This function takes a GDAL SpatialReference system and adds its
|
||||||
information to the PostGIS `spatial_ref_sys` table -- enabling
|
information to the PostGIS `spatial_ref_sys` table -- enabling
|
||||||
spatial transformations with PostGIS. This is handy for adding
|
spatial transformations with PostGIS. This is handy for adding
|
||||||
spatial reference systems not included by default with PostGIS.
|
spatial reference systems not included by default with PostGIS.
|
||||||
For example, the following adds the so-called "Google Maps Mercator
|
For example, the following adds the so-called "Google Maps Mercator
|
||||||
Projection" (available in GDAL 1.5):
|
Projection" (available in GDAL 1.5):
|
||||||
|
|
||||||
>>> add_postgis_srs(SpatialReference(900913))
|
>>> add_postgis_srs(SpatialReference(900913))
|
||||||
|
|
||||||
Note: By default, the `auth_name` is set to 'EPSG' -- this should
|
Keyword Arguments:
|
||||||
probably be changed.
|
auth_name: This keyword may be customized with the value of the
|
||||||
|
`auth_name` field. Defaults to 'EPSG'.
|
||||||
|
|
||||||
|
auth_srid: This keyword may be customized with the value of the
|
||||||
|
`auth_srid` field. Defaults to the SRID determined
|
||||||
|
by GDAL.
|
||||||
|
|
||||||
|
ref_sys_name: For SpatiaLite users only, sets the value of the
|
||||||
|
the `ref_sys_name` field. Defaults to the name
|
||||||
|
determined by GDAL.
|
||||||
"""
|
"""
|
||||||
|
from django.contrib.gis.db.backend import SpatialBackend
|
||||||
from django.contrib.gis.models import SpatialRefSys
|
from django.contrib.gis.models import SpatialRefSys
|
||||||
from django.contrib.gis.gdal import SpatialReference
|
from django.contrib.gis.gdal import SpatialReference
|
||||||
|
|
||||||
|
if SpatialBackend.oracle or SpatialBackend.mysql:
|
||||||
|
raise Exception('This utility not supported on Oracle or MySQL spatial backends.')
|
||||||
|
|
||||||
if not isinstance(srs, SpatialReference):
|
if not isinstance(srs, SpatialReference):
|
||||||
srs = SpatialReference(srs)
|
srs = SpatialReference(srs)
|
||||||
|
|
||||||
if srs.srid is None:
|
if srs.srid is None:
|
||||||
raise Exception('Spatial reference requires an SRID to be compatible with PostGIS.')
|
raise Exception('Spatial reference requires an SRID to be compatible with PostGIS.')
|
||||||
|
|
||||||
|
# Initializing the keyword arguments dictionary for both PostGIS and SpatiaLite.
|
||||||
|
kwargs = {'srid' : srs.srid,
|
||||||
|
'auth_name' : auth_name,
|
||||||
|
'auth_srid' : auth_srid or srs.srid,
|
||||||
|
'proj4text' : srs.proj4,
|
||||||
|
}
|
||||||
|
|
||||||
|
# Backend-specific keyword settings.
|
||||||
|
if SpatialBackend.postgis: kwargs['srtext'] = srs.wkt
|
||||||
|
if SpatialBackend.spatialite: kwargs['ref_sys_name'] = ref_sys_name or srs.name
|
||||||
|
|
||||||
# Creating the spatial_ref_sys model.
|
# Creating the spatial_ref_sys model.
|
||||||
sr, created = SpatialRefSys.objects.get_or_create(
|
sr, created = SpatialRefSys.objects.get_or_create(**kwargs)
|
||||||
srid=srs.srid, auth_name='EPSG', auth_srid=srs.srid,
|
|
||||||
srtext=srs.wkt, proj4text=srs.proj4)
|
|
||||||
|
Loading…
Reference in New Issue
Block a user