Added an SRID_CACHE to GeoDjango db/models/fields/__init__.py so that we only hit the spatial_ref_sys table once per SRID per process

git-svn-id: http://code.djangoproject.com/svn/django/trunk@10488 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Adrian Holovaty 2009-04-10 17:04:35 +00:00
parent bb75efc050
commit fd443959df
1 changed files with 7 additions and 1 deletions

View File

@ -13,6 +13,10 @@ def deprecated_property(func):
warn('This attribute has been deprecated, please use "%s" instead.' % func.__name__[1:]) warn('This attribute has been deprecated, please use "%s" instead.' % func.__name__[1:])
return property(func) return property(func)
# Local cache of the spatial_ref_sys table, which holds static data.
# This exists so that we don't have to hit the database each time.
SRID_CACHE = {}
class GeometryField(SpatialBackend.Field): class GeometryField(SpatialBackend.Field):
"The base GIS field -- maps to the OpenGIS Specification Geometry type." "The base GIS field -- maps to the OpenGIS Specification Geometry type."
@ -60,7 +64,9 @@ class GeometryField(SpatialBackend.Field):
super(GeometryField, self).__init__(**kwargs) # Calling the parent initializtion function super(GeometryField, self).__init__(**kwargs) # Calling the parent initializtion function
def _populate_srid_info(self): def _populate_srid_info(self):
self._units_cache, self._units_name_cache, self._spheroid_cache = get_srid_info(self.srid) if self.srid not in SRID_CACHE:
SRID_CACHE[self.srid] = get_srid_info(self.srid)
self._units_cache, self._units_name_cache, self._spheroid_cache = SRID_CACHE[self.srid]
def _get_units(self): def _get_units(self):
if self._units_cache is None: if self._units_cache is None: