1 votos

Error GeoDjango 'NoneType' al utilizar la función 'distance'

Tengo un sitio que está funcionando en nuestro servidor de ensayo, pero después de copiarlo al servidor en vivo estoy recibiendo el siguiente error al intentar realizar una llamada a distance() (código reducido al mínimo)

>>> Buddy.objects.all().distance(pnt[0].geom, field_name='postalcode__geom')                                                                                                                                     
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/buddyup/sites/buddyup/lib/python2.6/site-packages/django/contrib/gis/db/models/query.py", line 100, in distance
    return self._distance_attribute('distance', geom, **kwargs)
  File "/home/buddyup/sites/buddyup/lib/python2.6/site-packages/django/contrib/gis/db/models/query.py", line 582, in _distance_attribute
    geodetic = geo_field.geodetic(connection)
  File "/home/buddyup/sites/buddyup/lib/python2.6/site-packages/django/contrib/gis/db/models/fields.py", line 131, in geodetic
    return self.units_name(connection) in self.geodetic_units
  File "/home/buddyup/sites/buddyup/lib/python2.6/site-packages/django/contrib/gis/db/models/fields.py", line 122, in units_name
    self._get_srid_info(connection)
  File "/home/buddyup/sites/buddyup/lib/python2.6/site-packages/django/contrib/gis/db/models/fields.py", line 108, in _get_srid_info
    self._units, self._units_name, self._spheroid = get_srid_info(self.srid, connection)
  File "/home/buddyup/sites/buddyup/lib/python2.6/site-packages/django/contrib/gis/db/models/fields.py", line 35, in get_srid_info
    units, units_name = sr.units
  File "/home/buddyup/sites/buddyup/lib/python2.6/site-packages/django/contrib/gis/db/backends/base.py", line 281, in units
    return (self.linear_units, self.linear_name)
  File "/home/buddyup/sites/buddyup/lib/python2.6/site-packages/django/contrib/gis/db/backends/base.py", line 253, in linear_units
    return m.group('unit')
AttributeError: 'NoneType' object has no attribute 'group'

>>> pnt[0].geom
<Point object at 0x1fb0370>

No he podido encontrar ninguna información en otro lugar sobre este error. Cualquier ayuda en cuanto a lo que podría estar causando esto sería muy bienvenida.

EDITAR

Sin tener ni idea de lo que estoy haciendo, me ha salido posiblemente el mejor parche del mundo /s

--- /home/buddyup/base.py       2012-01-18 22:17:04.000000000 -0500
+++ /home/buddyup/sites/buddyup/lib/python2.6/site-packages/django/contrib/gis/db/backends/base.py      2012-01-18 22:16:09.000000000 -0500
@@ -239,7 +239,8 @@
             return None
         else:
             m = self.units_regex.match(self.wkt)
-            return m.group('unit_name')
+            return 'meter'
+            #return m.group('unit_name')

     @property
     def linear_units(self):
@@ -250,7 +251,8 @@
             return None
         else:
             m = self.units_regex.match(self.wkt)
-            return m.group('unit')
+            return 'm'
+            #return m.group('unit')

     @property
     def angular_name(self):

No tengo ni idea de por qué no puede encontrar las unidades o el nombre de las unidades, pero por ahora me funciona. Me encantaría saber cuál podría ser el problema real y encontrar una solución válida.

EDITAR 2

yum install gdal

Después de hablar con pizzaparty en el canal de IRC #django señaló que gdal instalado debería detener a Django tratando de obtener las unidades de un objeto Point que no tiene. Esa parece ser una solución mucho mejor.

1voto

Eric Rath Puntos 218
yum install gdal

Después de hablar con pizzaparty en el canal de IRC #django señaló que gdal instalado debería detener a Django tratando de obtener las unidades de un objeto Point que no tiene ninguna. Esa parece ser una solución mucho mejor.

http://code.djangoproject.com/svn/django/tags/releases/1.3.1/django/contrib/gis/db/backends/base.py

Puede leer el TODO allí sobre cómo GDAL es muy recomendable para las consultas de distancia.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X